Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition gaunthan Posted on Apr 3 2018 ? Deep Learning ? ? Image Classification ? ? Paper Notes ? ? Computer Vision ? > 解读微软CVPR 2017论文:用于精细化图片分类的,基于递归注意力的卷积神经网络——[Fu, Jianlong, Heliang Zheng, and Tao Mei. "Look closer to see better: Recurrent attention convolutional neural network for fine-grained image recognition." Conf. on Computer Vision and Pattern Recognition. 2017.](http://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_paper.pdf)。 ## Overview 近年来,CNN(卷积神经网络)已经在图像领域大放光芒。基于CNN的图像分类技术,目前已经获得了99%以上的准确度——计算机已经能够精确地分辨一张图片中的动物是狗还是猫。然而,它能够分辨出不同狗/猫的品种吗? 上述问题被称为**精细化图像分类**。识别细粒度类别的难点主要为两部分: - 定位有辨别力的区域 - 学习细粒度的特征 以下面识别鸟的图片来解释,就是说我们怎么知道要看的区域是鸟头,而且鸟头的哪些部位是我们需要提取出来做比较的?  以往的精细化图像分类方法,这两个部分是分开处理的。辨别力区域定位方法分为有监督和无监督两种,区别在于前者要求训练集有区域标注。有监督的方法比无监督的方法表现更优,在流行的精细化分类数据集(CUB Birds, Stanford Dogs and Stanford Cars)上能够获得更高的准确度。 将区域定位与特征提取分开,简化了分类方法的设计。然而,这种方式与直觉相违背——有辨别力的区域,我们希望里面有信息量大的特征;提取出来的特征,我们又希望它尽可能具有很高的辨别力。显然,这两者应该是相辅相成的。 基于这种互相强化的学习思路,就诞生了RA-CNN。得益于互相增强的学习方法,RA-CNN不需要训练数据集提供细节标注/边框,便能够高效地、自动地观察到图片中应留意的区域,并对其提取特征,进行分类。而且由于这两个部分是联合学习的,训练可以端到端(end-to-end)。 ## Network Architecture RA-CNN设计了两种子网络,它们分别实现上面所述两个部分的功能: - 分类子网络(Classification Sub-Network):常见的卷积神经网络,用于特征提取和分类。文章中使用的是VGG-Net。 - 注意力建议子网络(Attention Proposal Sub-Network,APN):对输入的图片进行区域裁剪、放大,输出有辨别力的区域的网络。实际上只是普通的全连接网络,参数个数为512*1024*3。forward时会输出3个值,代表裁剪区域的中心位置及其边长。 RA-CNN由3个分类子网络和2个APN组成。APN嵌在分类子网络之间,将上一个分类子网络产生的feature maps裁剪后送入下一个分类子网络,使得特征的学习能够由粗到细进行。 网络结构图如下:  图中蓝色部分网络是分类子网络,红色部分是注意力建议子网络(APN)。APN的结构如下图红框部分所示:  ## Approach ### Attention Proposal Network 为了训练能够端到端,APN对图片进行的裁剪和放大操作需要用函数实现。APN网络的输入是上一级分类子网络的最后一层卷积层。 #### Crop Image 对一张图片进行裁剪、提取其某个正方形区域的操作可以用**boxcar function**实现。该函数的输入是三维的,$(t_x, t_y, t_l)$,分别代表正方形的中心点横纵坐标及其边长的一半。boxcar function相当于一个Mask Matrix,定义如下:    *(tl代表top-left,br代表bottom-right)* 将它点乘输入图像的像素矩阵,将使得不在正方形区域内的点为0。这样就完成了区域的提取:  #### Zoom In Iamge 在提取出注意力区域后,还需对其放大。对区域图进行放大,会使得后续的学习更加容易。放大图片可以使用**双线性插值**(bilinear interpolation)[^bilinear]。 [^bilinear]: [Wikipedia contributors. (2017, November 10). Bilinear interpolation. In Wikipedia, The Free Encyclopedia. Retrieved 09:10, April 3, 2018, from https://en.wikipedia.org/w/index.php?title=Bilinear_interpolation&oldid=809623103](https://en.wikipedia.org/w/index.php?title=Special:CiteThisPage&page=Bilinear_interpolation&id=809623103) ### Loss Functions RA-CNN的损失函数定义如下:  - $L_{cls}$是分类损失,考量分类子网络的分类表现,$Y^{(s)}$和$Y^{*}$分别代表预测的类别向量和实际的类别向量。上式右边第一项累计了分类子网络的总损失。 - $L_{rank}$考量提取的区域对后续分类子网络的分类误差的减少程度,定义如下:  $P^{(s)}_t$代表第s个分类子网络估计的正确类别t的概率。上式将使$P^{(s+1)}_t$大于$P^{(s)}_t + margin$,即更细粒度的分类子网络对正确类别预测的概率变得更大。这种变化要求APN提取的区域具有辨别力。 ### Multi-scale Joint Representation 前面描述了RA-CNN的网络组成成分,借助于APN,不同scale的分类子网络能够生成关注点不同的feature maps,并获得不同的类别概率。为了利用上不同scale学习到的特征,我们把每个分类子网络的最后的全连接层堆叠起来,然后将它们连接到一个全连接层,随后通过softmax层,进行分类。 ## Implementation ### Tranning Strategy 网络的训练过程如下: 1. 初始化分类子网络:用预训练的VGG-Net初始化分类子网络中卷积层和全连接层的参数。 2. 初始化APN:查找分类子网络的最后一层卷积层(conv5_4 in VGG-19)具有最高响应值(highest response)的区域,用该区域的中心点坐标和原图边长的一半来初始化$(t_x, t_y, t_l)$。 3. 固定APN的参数,训练分类子网络直至$L_{cls}$收敛;随后固定分类子网络的参数,训练APN网络直至$L_{rank}$收敛。这个训练过程是迭代交替进行的,直到两个网络的损失收敛。训练过程需满足$t_l^{(s+1)} >= {1 \over 3} * t_l^{(s)}$,即更细粒度的区域大小不得小于更粗粒度的区域的1/3,防止区域包含的物体不完整。 ### Optimization for attention learning RA-CNN容易让人感到疑惑的地方是APN的优化过程。想要理解这个部分,先要清楚地认识到APN的参数组成,然后是损失函数。 APN的目标是获得3个值$(t_x, t_y, t_l)$,它代表着一个正方形区域,是网络认为辨别力高的区域。因此,APN的输入数据是feature map,输出是这3个值。这三个值可以使用全连接神经网络来拟合。 一张图片输入APN后,会得出图片中的一个矩形框位置,对其裁剪并进行放大(这个步骤由实现中的AttentionCropLayer完成),最终得到一张新的图片。损失函数$L_{rank}$评估的便是原图和新图在正确标签上的概率偏差。 APN的训练过程形象上来说就是求出整个参数取值空间下$L_{rank}$的取值,然后更新参数使得$L_{rank}$往梯度下降的方向前进,如下图所示:  图中箭头表明参数的优化方向。derivative map中颜色越深的部分,其梯度的绝对值越大。因此,向着颜色最深的地方前进,就能最快地使$L_{rank}$收敛。 由于更新参数时需要相应的梯度值,因此先使用链式求导法则分别计算$L_{rank}$对三个参数的偏导。以$t_x$为例,有:  ⊙代表逐元素相乘,$D_{top}$代表某个scale的$L_{rank}$误差反向传播到输入层的偏导值。为后续讲解方便,用$L_{rank}'(t_x)$和$M'(t_x)$分别代表上式左右两边的偏导项。 $M'(t_x)$是boxcar function对$t_x$的偏导数,可以用下述阶段函数代替:  在矩阵框中心处导数为0,左边导数为负,右边导数为正,使得使用梯度下降法时$t_x$往中心位置前进。 相应的,优化$t_y$就是自上下往中间靠拢:  优化$t_l$就是放大或缩小边框,使其尽量与$M()$吻合:  根据上面三道偏导式的定义,训练APN实际上就是修改网络参数,调整拟合的矩形框的位置及大小,使损失$L_{rank}$更小。 ## Performance 下面三张图表露了RA-CNN在流行的三个精细化图片分类数据集上的突出表现:    ## Conclusion 通常来说,无监督方法都比有监督方法表现要差。然而,RA-CNN获得了超过state-of-the-art的准确度。它再一次证明了增强学习的潜力。 有进一步了解意向的读者,可以点击链接获取论文公开的[源代码](https://github.com/Jianlong-Fu/Recurrent-Attention-CNN)。需要注意的是,论文作者仅仅公开了训练好的模型和测试代码供实验验证,所有的训练相关的实现细节都没有公布。 ## References - [Fu, Jianlong, Heliang Zheng, and Tao Mei. "Look closer to see better: Recurrent attention convolutional neural network for fine-grained image recognition." Conf. on Computer Vision and Pattern Recognition. 2017.](http://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_paper.pdf)。 赏 Wechat Pay Alipay Machine Learning Yearning In Short Install Nvidia driver, CUDA 9.1 and Tensorflow 1.5 on Fedora 27/28