CAM和Grad-CAM

CAM:类激活图,class activation map

CAM算法就是探索卷积神经网络关注图像的哪一部分而得到最后的输出。

如上图的网络,最终把图片分成了“Australian terrier”,这是一个澳大利亚的犬种。我们的网络在图像中看到了什么所以分成了这一类呢?这里就可以用CAM算法进行可视化。

CAM会对网络最后的特征图进行加权求和,就可以得到一个注意力的机制(就是卷积神经网络更关注图片的什么地方)。具体操作为上图下半部分,把网络最后一层的每一个特征图乘上相应的权值,结果相加,就能得到右下角的最终的CAM(越红权重越大,越蓝就是越不关注的地方)可以看到卷积神经网络关注了小狗所在的位置,并且更关注狗的身体部分。整个算法的关键就是如何确定权值W:首先对特征图进行一个global average pooling(全局平均池化),一张图对应一个神经元,

将得到的神经元层直接接一个全连接层,就可以得到我们的网络输出

这就对网络进行了修改,在最后一层特征图后接的全局平均池化,可将特征图转换成向量的形式(以一列神经元代替整张图),最后经过全连接层输出的类与上一层神经元之间的权重就是特征图的权重。

缺点:网络最后必须要有一个global average pooling操作,才能得到权值。所以只能改动网络,重新训练,不太适用。

 

改进

grad-CAM:利用梯度作为特征图的权重。

CAM最重要的是两部分,一是特征图,一是特征图所对应的权重。grad-CAM就是利用梯度的方法找权重。

 

 

特征图经过全连接层,输出一个向量(如图,y向量应该是0000000010, tiger cat类的位置为1),需要利用这个向量backward求特征图的梯度。然后得到关于梯度的feature map,对这些梯度的feature map进行平均操作,得到权重(每一个梯度的feature map对应一个权重)

得到权重之后,与原始的feature map进行加权平均,类似上面的CAM。加权平均后再经过relu,最后得到grad-cam可视化的图。这样就更具有普适性,因为不需要更改网络模型,只要网络模型能输出分类,利用这个分类向量进行反向传播求梯度就可以了。有了类激活图,就知道了网络的分类依据。

【1】Learning Deep Features for Discriminative Localization

【2】Grad-CAM: Visual Explanations from Deep Network via Gradient-based Localization

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章