下面的内容大多是结合其它的博客的内容和自己的理解进行整理,加深自己的理解和方便查询,没有贴上原来博客的地址,如果有雷同,我不是故意的,希望见谅!
细粒度图像分类的难点包括两个方面:准确定位到具有分辨力的关键区域,以及从检测到的关键区域中提取有效特征进行分类。关于区域定位主要有两种方法:监督式和非监督式,监督式即对训练数据标注bounding box信息,而非监督式是通过网络去学习这些区域的信息,训练数据没有bounding box信息。这里需要注意人为标定的区域不一定是最适合模型分类的区域。
1、Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition(RA-CNN)。
2017年CVPR的文章,本文提出的RA-CNN的网络包含三个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,每个scale子网络又包含两种类型的网络:分类网络和APN网络。输入图像通过分类网络进行特征提取并分类,然后APN网络基于提取到的特征进行训练得到attention区域信息,再将attention区域裁剪出来并放大,作为第二个scale网络的输入,重复进行三次就得到了三个scale网络的输出结果,最后将三个scale网络的结果进行融合得到输出。
亮点1:多scale网络可以在训练的过程中逐渐聚焦到关键区域;
亮点2:针对分类网络和APN网络设计两个loss(softmax loss + ranking loss),通过固定一个网络的参数训练另一个网络的参数达到交替训练的目的;
亮点3:不需要bounding box的标注信息。
Task1:p(X) = f(Wc ∗ X)
Task2:[tx,ty,tl]=g(Wc ∗X)
其中Wc为(b1)或(b2)或(b3)的网络参数,即卷积层、池化层和激活层的集合,用来从输入图像中提取特征,Wc*X就是最后提取到的特征。然后f()函数(task1)是全连接层和softmax层,用来将学习到的特征映射成类别概率,也就是p(X)。g()函数也就是APN网络(task2)可以用两个全连接层实现,其中最后一个全连接层的输出channel是3,分别对应tx、ty、tl。这里因为假设检测出来的区域都是正方形,所以得到的tx和ty表示区域的中心点坐标,tl表示正方形区域边长的一半。
2、Residual Attention Network for Image Classification
具体理解可以参考下面这篇博文,写的特别详细。
https://blog.csdn.net/wspba/article/details/73727469
3、CBAM: Convolutional Block Attention Module
具体理解可以参考下面这篇博文,写的特别详细,其他的博客也写的都是大同小异。
https://blog.csdn.net/u013738531/article/details/82731257
网络可视化
1、Visualizing and Understanding Convolutional Networks
综述:这篇paper是CNN可视化的开山之作(由Lecun得意门生Matthew Zeiler发表于2013年),主要解决了两个问题:
1)why CNN perform so well?
2)how CNN might be improved?
背景介绍:CNN针对图像分类问题有着令人惊叹的效果,2012年的AlexNet(test error:15.3%)碾压第二名(test error:26.2%),由此CNN如雨后春笋般疯狂生长,CNN之所以成功主要归功于三个方面:①数以百万计的带标签数据,②强大的GPU计算能力,③更好的正则化处理 。
提出问题:训练出来的CNN模型为什么能够奏效?怎么奏效?这些问题并没有得到解决。论文介绍了CNN各层到底学到了原始图像的什么特征以及这些特征对最终预测结果的影响力度。
实现:论文以2013年的ZFNet=5层conv+3层FC 为基础,在此基础上进行了略微调整,并提升了效果。
1)我们都知道ZFNet以conv+ReLU+Maxpooling为主要的实现方式,“看懂并理解”网络就是这个过程的逆过程,即Unpooling+ReLU+反卷积,下面我们分别进行介绍:
2)Unpooling:毫无疑问,maxpooling是一个不可逆过程,例如在一个3*3的pool中,我们选择9个元素的最大值进而实现降采样,我们必然会损失其他8个元素的真实数据。实现过程中,我们需要记录pool中最大值的位置信息,我们称之为“Switches”表格,在unpooling过程中,我们将最大值直接放回该位置,将其他位置直接置0;
3)ReLU:在CNN中,我们使用ReLU作为激活函数是为了修正feature map,使其恒不为负,为了重构每一层的输出,这种约束依然成立,我们继续使用ReLU;
4)反卷积:CNN中,上层的输出与学习到的filters进行卷积,得到本层的特征,逆过程的实现就是通过使用相同卷积核的转置,与矫正之后的特征进行卷积,从而实现反卷积。
2、Learning Deep Features for Discriminative Localization
综述:论文重新审视了global average pooling(GAP),并详细阐述了这种pooling方式如何使得CNN具有优异的目标定位能力
介绍:
1)作者受到NIN、GoogLeNet的启发,摒弃FC,转而使用GAP,在减少参数的同时对原本的分类效果影响不大;
2)GAP实际上起到一定正则化的作用,paper在几种经典的网络结构中使用其卷积结构,而后+GAP+FC,采用softmax直接预测输出;
3)论文中指出,FC会导致feature map损失空间位置信息,而GAP则不会(我的理解是如果在图像的某一位置有高响应,则经过FC之后,根据整个feature并不能分辨出刺激源于左上角还是右下角还是什么其他的地方,而通过GAP就可以,因为其保留了空间位置信息)
实现:
1)论文使用的NIN和GoogLeNet类似的结构,保留卷积结构,接上GAP,接上一层FC,直接作为分类预测结果,论文通过将输出层的权重投影到feature map上来识别图像区域的重要性,由此将这种技术称为class activation mapping(CAM)
2)具体CAM如何实现?详见如下图:
3、Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization
综述:
1)paper中提出了一种新的可视化CNN的方法 Gradient-weighted Class Activation Mapping (Grad-CAM),是CAM的升级版;
2)Grad-CAM可适用于任何网络结构,省去了修改网络结构并训练的烦恼,一定程度上是对CAM的泛化
3)使用此种结构,可以应用到以下几个问题中:
3.1)之前的CAM必须对包含多层的FC进行修改(使用GAP进行替换),而Grad-CAM则不必修改网络
3.2)可用于结构化输出
3.3)可用于视觉问题解答或者增强学习中
对于网络可视化,我们可以采用两种方式:
1)deconvnet(反卷积)
2)guided-backpropagation(导向反向传播)
反向传播(backpropagation)/反卷积(deconvnet)/导向反向传播(guided-backpropagation)这三者究竟有什么区别?反卷积和导向反向传播的基础是反向传播,就是对梯度进行求导,然后更新我们的参数,就是学习的过程,下图十分清楚的对比了正向传播/反向传播/反卷积/导向反向传播,4者不同之处主要体现在经过ReLU时对梯度的选择性:
1)在CAM中,我们根据最后一层的FC学到的权重作为对应feature map的权重,而后upsampling到原像素空间,看起来理所应当,但当我们在最后一次使用conv之后,得到对应的feature map,之后多次使用FC,我们如何计算feature map对应的权重呢? 这里有一个小问题,我们为什么使用conv阶段最后一次得到的feature map呢?因为最后一次conv得到的feature map是前面多次conv+ReLU+pooling的结果,具有最强的空间信息和语义信息,随后的FC和softmax所提取的信息已经很难理解,所以我们若想实现CNN的可视化,必须好好利用最后一次conv得到的feature map。
下面开始我们的计算过程:实现方法:
1)在CAM中,我们根据最后一层的FC学到的权重作为对应feature map的权重,而后upsampling到原像素空间,看起来利索应当,但当我们在最后一次适用conv之后,得到对应的feature map,之后多次使用FC,我们如何计算feature map对应的权重呢?
这里有一个小问题,我们为什么使用conv阶段最后一次得到的feature map呢?因为最后一次conv得到的feature map是前面多次conv+ReLU+pooling的结果,具有最强的空间信息和语义信息,随后的FC和softmax所提取的信息已经很难理解,所以我们若想实现CNN的可视化,必须好好利用最后一次conv得到的feature map。
下面开始我们的计算过程:
整体结构如下图所示:
Guided Grad-CAM(导向反向传播和Grad-CAM的结合)
1)问题:虽然Grad-CAM可以很好的类别判别能力,也可以将相关区域定位出来,但是其不具备像素空间梯度可视化(比如导向反向传播和反卷积这种细粒度重要性可视化)的方法
2)解决问题:
2.1)首先对图像使用插值法进行上采样
2.2)然后将导向反向传播和Grad-CAM结合起来,实现可视化
4、Tell Me Where to Look: Guided Attention Inference Network(GAIN)
这篇文章里用到了Grad-CAM来得到Attention Map。Grad-CAM是CAM的进一步拓展。CAM假设分类网络最后不是用FC而是Global Average Pooling,那么实际上对于每一类的响应都有一张对应的Feature Map。Feature Map其实就包含了对不同位置的响应强度。所以给定图片想要得到针对某类的Attention Map只要weighted average各个feature map即可。得到weight的方式很直观,从最后分类的FC层的参数就可以得到对于某一类每个feature map的权重。CAM需要网络最后有Global Average Pooling,Grad-CAM去掉了这个限制。
总结:本文通过对卷积神经网络的学习方法进行改进,使得能够获得更好的attention map,因此能够提升图像语义分割及物体定位的性能。