卷积神经网络
每个卷积核提取不同的特征。每个卷积核对输入进行卷积,生成一个feature map,这个feature map即体现了该卷积核从输入中提取的特征,不同的feature map显示了图像中不同的特征。
- 浅层卷积核提取:边缘、颜色、斑块等底层像素特征;
- 中层卷积核提取:条纹、纹路、形状等中层纹理特征;
- 高层卷积核提取:眼睛、轮胎、文字等高层语义特征。
最后分类输出层输出最抽象的分类结果。
上图就是一个浅层卷积核提取出来的特征,我们可以看到,有的卷积核是提取形状的,有的是提取颜色的。它就是一种类似gabor滤波器的卷积特征。
上图是中层和深层卷积核提取出来的特征,在中层卷积核提取的是较大块的颜色,纹理;在深沉卷积核提取出来的特征可能就有人类或者一些具象化的东西。
CAM可解释性
上图中,输入的原始图像经过层层卷积,到最后一层的时候,会有512个卷积核得到512个通道,即提取了512个深层特征,经过GAP(全局平均池化)将每一个通道特征算出一个平均数,再通过FC(全连接层)层会得到每一个特征值的权重(系数)——\(W_1、W_2、W_3、...、W_n\),每一个类别都可以得到一个分数值(score),它是通过
\(score=W_1*蓝色特征值+W_2*红色特征值+...+W_n*绿色特征值\)
得到的,最后通过softmax来计算一个概率值,这是一个CNN分类的过程,对于CAM热力图而言,主要就体现在特征值权重\(W_1、W_2、W_3、...、W_n\)上,它表示最终的分类结果对不同特征的关注程度。
- CAM的缺点
- 必须得有GAP层,否则得修改模型结构后重新训练
- 只能分析最后一层卷积层输出,无法分析中间层
- 仅限图像分类任务
GradCAM
在GradCAM中可以不使用GAP层,完全可以使用FC层,通过全连接层来输出分数(score),用\(y^c\)表示。
- 对矩阵求导
一、标量函数对向量的导数:
这是一个二维的标量函数,我们知道该函数的最小值为
\({df(y)\over dy}=0\)
如果这个函数是由两个自变量构成的三维的标量函数,则图像如下
求该二元函数的最小值,联立
- \({∂f(y_1,y_2)\over ∂y_1}=0\)
- \({∂f(y_1,y_2)\over ∂y_2}=0\)
如果一个标量函数有n个自变量\(f(y_1,y_2,y_3,...,y_n)\),我们定义一个向量
Y=[]
则可以定义函数对向量Y的偏导数为
\({∂f(Y)\over ∂Y}=\)\([\)\(]\)
这是一个n*1的列向量,我们发现它的行数与分母Y相同,这样布局称为分母布局。
同样我们也可以定义函数对向量Y的偏导数为
\({∂f(Y)\over ∂Y}=[{∂f(Y)\over ∂y_1}{∂f(Y)\over ∂y_2}...{∂f(Y)\over ∂y_n}]\)
这是一个1*n的行向量,我们发现它的行数与分子f(Y)(1*1的标量)相同,这样的布局称为分子布局。
分母布局与分子布局互为转置。
示例一:\(f(y_1,y_2)=y_1^2+y_2^2\)
分母布局:
令Y=[]
则
\({∂f(Y)\over ∂Y}=\)[]=[]
分子布局:
令\(Y=[y_1 y_2]\)
则
\({∂f(Y)\over ∂Y}=[{∂f(Y)\over ∂y_1} {∂f(Y)\over ∂y_2}]=[2y_1 2y_2]\)
二、向量函数对向量的导数
如果我们的函数也是一个向量
F(Y)=[]
这里的每一个\(f_x(Y)\)(x=1,2,3,...,m)都相当于上面的一个标量函数f(Y)(自变量为向量Y),F(Y)是一个m*1的向量函数。
示例一:
- Y=[]
- F(Y)=[]=[]
向量函数对向量的偏导数,分母布局为
\({∂F(Y)\over ∂Y}=\)[]=[]
如示例一中,有
\({∂F(Y)\over ∂Y}=\)[]=[]=[]
这是一个3*2的矩阵。
90后程序员开发视频搬运软件、不到一年获利超 700 万,结局很刑! 谷歌证实裁员,涉及 Flutter、Dart 和 Python 团队 中国码农的“35岁魔咒” Xshell 8 开启 Beta 公测:支持 RDP 协议、可远程连接 Windows 10/11 MySQL 的第一个长期支持版 8.4 GA 开源日报 | 微软挤兑Chrome;阳痿中年的福报玩具;神秘AI能力太强被疑GPT-4.5;通义千问3个月开源8模型 Arc Browser for Windows 1.0 正式 GA Windows 10 市场份额达 70%,Windows 11 持续下滑 GitHub 发布 AI 原生开发工具 GitHub Copilot Workspace JAVA 下唯一一款搞定 OLTP+OLAP 的强类型查询这就是最好用的 ORM 相见恨晚