细粒度图像分类学习笔记

 下面的内容大多是结合其它的博客的内容和自己的理解进行整理,加深自己的理解和方便查询,没有贴上原来博客的地址,如果有雷同,我不是故意的,希望见谅!

细粒度图像分类的难点包括两个方面:准确定位到具有分辨力的关键区域,以及从检测到的关键区域中提取有效特征进行分类。关于区域定位主要有两种方法:监督式和非监督式,监督式即对训练数据标注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的标注信息。

RA-CNN网络结构图.png
从图中可以看到 ,(a1)(a2)(a3)分别表示3个不同的scale子网络(网络结构相同,参数不同),(b1)(b2)(b3)分别表示3个不同scale子网络的卷积层,这些卷积层就是从输入图像中提取特征,根据提取到的特征,一方面传给全连接层fc和softmax层去预测该图像的类别概率,一方面通过APN网络(d1)(d2)得到区域信息,这两个方面的操作也就是文中说的multi-task,一个task做分类,另一个task做区域检测。
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如何实现?详见如下图:

细粒度图像分类学习笔记_第1张图片
image.png
注:针对某一特定类别,比如图中的这个狗狗,我们将最后一次卷积操作得到的feature map与训练FC得到的特征权重进行累加求和,得到我们的CAM(当我读到这里的时候,产生了一个疑惑,图中所示的CAM明明是映射到了原像素空间,但是经过多次卷积池化feature map的size肯定不等于原图像大小,目前的理解是将最后得到的CAM直接upsampling到原像素空间,我们的目的是计算图像中的每个像素对最终结果的贡献程度)
image.png

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时对梯度的选择性:

细粒度图像分类学习笔记_第2张图片
image.png
实现方法
 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。
 下面开始我们的计算过程:
细粒度图像分类学习笔记_第3张图片
image.png

整体结构如下图所示:
细粒度图像分类学习笔记_第4张图片
image.png
注:paper中还强调Grad-CAM可视化方法不仅仅可用于一般的图像分类网络的可视化、输出结构化网络的可视化还可用于视觉问答网络的可视化等等
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去掉了这个限制。

细粒度图像分类学习笔记_第5张图片
image.png
神经网络的识别方式,当识别狗时,网络会将“注意力”放在狗身上,同样的当识别猫时,网络会将“注意力”放在猫身上。但是GAIN的作者发现了一个问题,那就是在识别某些物体的时候,网络容易会将“注意力”放在和所要识别的物体相关的东西上,而不会将“注意力”放在物体本身上。如图2所示,可以看出,网络在识别船的时候,却把“注意力”放在了水面上。
细粒度图像分类学习笔记_第6张图片
image.png
针对于本问题,作者提出了一种新的训练方式,通过在最小化原图像识别损失函数的同时来最小化遮挡住待识别物体的图像的识别分数来训练整个网络,训练后的网络能够更好的将“注意力”放在待识别的物体上。给定图像,分类网络输出对于c个类别上的分布,对于每一类可以利用Grad-CAM的方法得到一张Attention Map。根据Attention Map把重要的部分遮盖掉得到c张不同的图。然后同一个分类网络需要对每张处理过的图分类,使得对应的正确类别上的分数尽可能的低。当然如果有正确的attention annotation,可以额外加一个loss来帮助学习attention map。
细粒度图像分类学习笔记_第7张图片
GAIN工作方式.png
网络分为两个部分,第一部分为分类部分,就是简单的使用VGG对图像进行特征提取,然后使用全链接层实现对物体的识别。所以本论文的主要创新点主要集中在第二部分上。
image.png
上面这种训练方式被作者成为weak supervision。此外为了提高attention map质量,作者还在GAIN的基础上添加了额外的监督部分(integrating extra supervision),文中称这种方式为full supervision,如下图所示
细粒度图像分类学习笔记_第8张图片
image.png
image.png
加入了这部分pixel-level的监督学习后,所得到的attention_map的精准度更高。同时本文也指出获取这种pixel-level的分割图是很费时的,而作者提出的这种方法可以大大减少对pixel-level分割图的需求量。
总结:本文通过对卷积神经网络的学习方法进行改进,使得能够获得更好的attention map,因此能够提升图像语义分割及物体定位的性能。

你可能感兴趣的:(细粒度图像分类学习笔记)