《Look-Closer-to-See-Better-Recurrent-Attention-Convolutional-Neural-Network-for-Fine-grained-Image-Recognition》笔记

简介

本文参考以下文章:

CVPR 2017 oral, 微软亚洲研究院梅涛工作,做细粒度分类。
就是网络的叠加,从coarse to fine,三个scale网络的叠加,前两个scale多了APN去get感兴趣区域,输入到后一个scale里面。

摘要

识别纹理细密的物体类别(比如鸟类)是很困难的,这是因为判别区域定位(discriminative region localization)和细粒度特征学习(fine-grained feature learning)是很具有挑战性的。现有方法主要都是单独地来解决这些挑战性问题,然而却忽略了区域检测(region detection)和细粒度特征学习之间的相互关联性,而且它们可以互相强化。本篇论文中,我们提出了一个全新的循环注意力卷积神经网络(recurrent attention convolutional neural network —— RA-CNN),用互相强化的方式对判别区域注意力(discriminative region attention)和基于区域的特征表征(region-based feature representation)进行递归学习。在每一尺度规模上进行的学习都包含一个分类子网络(classification sub-network)和一个注意力建议子网络(attention proposal sub-network —— APN)。APN 从完整图像开始,通过把先期预测作为参考,由粗到细迭代地生成区域注意力,同时精调器尺度网络(finer scale network)以循环的方式从先前的尺度规格输入一个放大的注意区域(amplified attended region)。RA-CNN 通过尺度内分类损失(intra-scale classification loss)和尺度间排序损失(inter-scale ranking loss)进行优化,以相互学习精准的区域注意力和细粒度表征。RA-CNN 并不需要边界框或边界部分的标注,而且可以进行端到端的训练。我们实施了综合性实验,实验证明 RA-CNN 在 3 个细粒度任务中均表现不俗,在 CUB Birds,Stanford Dogs 和 Stanford Cars 上的相对精度增益分别为3.3%、3.7%、3.8%。

引言

通过计算机视觉方法识别纹理细密的物体种类已经受到了学界的强烈关注。这一类任务往往是极具挑战性的,这是因为一些纹理细密的物体种类只能被该领域的专家所识别出来。与一般的识别不同,细粒度图像识别(fine-grained image recognition)是应该能够进行局部定位(localizing),并且能在其从(subordinate)类别中表征很小的视觉差异的,从而使各种应用收益,比如专家级的图像识别、图像标注等等。


图 1. 两种啄木鸟。我们可以从高度局部区域(highly local regions),比如黄色框里的头部,观察到非常不易察觉的视觉差异,这是难以在原始图像规格中进行学习的。然而,如果我们可以学着去把注意区域放大到一个精细的尺度,差异可能就会更加生动和显著。

作者提出的RA-CNN算法不需要对数据做类似bounding box的标注就能取得和采用类似bounding box标注的算法效果。在网络结构设计上主要包含3个scale子网络,每个scale子网络的网络结构都是一样的,只是网络参数不一样,在每个scale子网络中包含两种类型的网络:分类网络和APN网络。因此数据流是这样的:输入图像通过分类网络提取特征并进行分类,然后attention proposal network(APN)网络基于提取到的特征进行训练得到attention区域信息,再将attention区域crop出来并放大,再作为第二个scale网络的输入,这样重复进行3次就能得到3个scale网络的输出结果,通过融合不同scale网络的结果能达到更好的效果。多scale网络的最大优点在于训练过程中可以逐渐聚焦到关键区域,能更加准确,因此多scale网络是本文的第一个亮点。另外针对分类网络和APN网络设计两个loss,通过固定一个网络的参数训练另一个网络的参数来达到交替训练的目的,文中也说明了这二者之间本身就是相互促进的,因此这两个子网络的设计及其交替训练方式是本文的第二个亮点。要说第三个亮点的话,那应该就是不需要bounding box的标注信息了,因为这种细粒度图像的bounding box标注会比普通的bounding box更难,更加需要专业知识,因此无监督式地寻找关键区域是比较理想的方向。总的来讲这篇文章的网络结构和训练策略设计得非常巧妙,不愧是CVPR2017的oral。

细粒度(fine-grained)图像分类是近几年比较火的领域,可以看FIugre1中的例子,虽然都是啄木鸟,但是要细分不同的品种,可以看出这两类之间的特征差异非常小。因此细粒度图像分类的难点主要包含两方面:1、discriminative region localization;2、finegrained feature learning from those regions。也就是说一方面要能准确定位到那些关键区域,另一方面要能从那些关键区域中提取有效的信息,在作者看来这两方面是相互促进的,所以在训练网络的时候采取了交替训练的策略。目前关于这样的区域定位方法主要分为两种:监督式和非监督式。监督式也就是对训练数据标注bounding box信息,类似object detection算法;非监督式的就是通过网络去学习这些区域信息,训练数据没有bounding box信息。

其他一些细粒度图像算法一般是怎么做呢?主要分两步,第一步是采用无监督或者有监督(比如常见的object detection算法)的算法检测出指定的区域。第二步是从第一步检测到的区域中提取特征用于分类。但是人为标定的区域(region)不一定是最适合模型分类的区域,另外作者认为这两步之间是有相互促进关系的,因此有了RA-CNN网络。

相关工作

关于细粒度图像识别的研究沿着两个维度进行,即判别性特征学习和复杂的局部定位。

判别性特征学习

学习判别性特征对于细粒度图像识别至关重要。由于深度学习的成功,大多数方法依赖于强大的卷积深层特征,其在通用和细粒度识别上比手工定义的我特征有着显着改善[4,5,6,17,29]。为了学习更强大的特征表示,深度残差网络[9]通过优化残差函数将CNN加深到152层,其将ImageNet测试集中的错误率降低到3.75%[17]。为了更好地建模细粒度类别中存在的微妙差异,最近提出一种双线性结构[19]来计算两个独立CNN的成对特征的相互作用来捕获图像的局部差异,这已经取得了鸟类分类中最先进的成果[30]。此外,另一种方法[34]提出用Fisher Vector[23]统一CNN与空间加权表示,显示了在鸟[30]和狗数据集[13]的优异结果。

复杂的局部定位

以前的工作主要集中在利用边界框和部分注释等额外注释来定位细粒度识别中的重要区域[10,18,22,30,32,33]。然而,手动注释的大量劳动使得此任务对于大规模的实际问题不可行。最近,出现了一些新的研究,旨在提出一个更一般的情况,并提出使用无监督的方法来挖掘注意力区域。基于视觉注意力的方法在两者上提出了一个两级域网对象和部分,其中通过聚类方案从CNN中的内部隐藏表示中学习部分模板[31]。 采用深度滤波器响应[34]和多维描述符[28]提出通过分析来自CNN的过滤器响应来以无监督的方式一致地响应特定模式来学习一组部分检测器。空间变压器[11]进一步提出了一种动态机制,可以主动空间变换图像以进行更准确的分类。而现有的模式仍然难以准确地定位微妙的地区由于它们的小尺寸。我们最相关的工作来自[20]和[35]。他们都建议放大歧视性的本地区域,以提高细粒度识别的表现。然而,从[20]和[35]的区域定位者的学习依赖于预处理区域提案或类别标签,这对准确的区域定位提出了挑战。

方法


图2. 循环注意力卷积神经网络的框架。输入图像从上到下按粗糙的完整大小的图像到精炼后的区域注意力图像排列。不同的网络分类模块(蓝色部分)通过同一尺度的标注预测$Y^{(s)}$和真实$Y^∗$之间的分类损失$L_{cls}$进行优化,注意力建议(红色部分)通过相邻尺度的$p_t^{(s)}$和$p_t^{(s+1)}$之间的成对排序损失$L_{rank}$(pairwise ranking loss Lrank)进行优化。其中$p_t^{(s)}$和$p_t^{(s+1)}$表示预测在正确类别的概率,$s$代表尺度。APN是注意力建议网络,fc代表全连接层,softmax层通过fc层与类别条目(category entry)匹配,然后进行softmax操作。$\oplus$代表“剪裁(crop)”和“放大(zoom in)”。

Figure2是以3个scale为例子的网络结构(可以根据需要叠加多个scale)。(a1)、(a2)、(a3)分别表示3个不同scale的网络。(b1)、(b2)、(b3)分别表示3个不同scale网络的卷积层,这些卷积层实现的就是从输入图像中提取特征,也就是现在CNN网络干的主要的活,这三个网络的结构是一样的。根据提取到的特征,一方面传给全连接层和softmax层去预测该图片的类别概率,另一方面通过APN网络(d1)、(d2)得到区域信息。这两个方面的操作也就是文中说的multi-task,一个task做分类,另一个task做区域检测,听起来是不是觉得和object detection类的算法很像,其实本质是一样的,只不过这里的区域检测不是监督学习,也就是说不需要bounding box的标注信息,而是通过end-to-end训练得到的,另外这两个task的损失函数设计也比较重要。文中的公式1对应task1:

公式2对应task2:

这里的$W_c$就是指的(b1)或(b2)或(b3)网络的参数,也就是一些卷积层、池化层和激活层的集合,用来从输入图像中提取特征,$W_c * X$就是最后提取到的特征。然后$f()$函数(task1)是全连接层和softmax层,用来将学习到的特征映射成类别概率,也就是$p(X)$。$g()$函数也就是APN网络(task2)可以用两个全连接层实现,其中最后一个全连接层的输出channel是3,分别对应$t_x$、$t_y$、$t_l$。这里因为假设检测出来的区域都是正方形,所以得到的$t_x$和$t_y$表示区域的中心点坐标,$t_l$表示正方形区域边长的一半(为什么是一半后面会解释)。

全连接后接的都是tanh。怎样把crop的操作变成可以反向传播呢?用boxcar functions(方脉冲函数)去近似。

假设原始图像的左上角是坐标系的起点,用符号$tl$表示左上角这个点,用符号$br$表示右下角这个点,那么根据APN网络得到的$t_x$、$t_y$和$t_l$可计算得到crop得到的区域的左上角点和右下角点的x轴($t_{x(tl)}$、$t_{x(br)}$)和y轴($t_{y(tl)}$、$t_{y(br)}$)坐标分别如公式3所示。所以前面之所以$t_l$表示边长的一半是为了公式3中的式子可以少写$1/2$。

定义好了坐标关系,就可以用一个mask$M$和输入图像$X$做元素乘积来得到crop后的区域。这个过程可以用公式4来表示:

其中Mask的公式如下,后面会介绍为什么要用这样的函数。

在M()函数中的h()就是sigmoid函数:

公式6比较好理解,因为就是常见的sigmoid函数。首先k这个参数可以设定成一个较大的正整数(实验中设置为10),这个时候sigmoid函数就很像一个阶跃函数。这样当$-kx$很大时(比如正无穷),分母也是趋于无穷大的,这个时候$h(x)$接近于0;当$-kx$很小时(比如负无穷),分母的后一半是趋于0的,这样整个分母就趋于1,这样$h(x)$接近于1。因此当x在$t_{x(tl)}$和$t_{x(br)}$之间时,$h(x-t_{x(tl)})-h(x-t_{x(br)})$就趋近于$1-0=1$,y轴同理。这样的话只有当x在$t_{x(tl)}$和$t_{x(br)}$之间且$y$在$t_{y(tl)}$和$t_{y(br)}$之间时,$M()$才趋于$11=1$,其他情况都是趋于$10$或$01$或$00$。
那么为什么要用这个稍微复杂的mask函数来做crop,而不是直接根据坐标和边长信息生成一个0-1的mask,答案是:end-to-end优化训练需要这样的连续函数。

确定好了如何crop的策略,接下来就是对crop后的区域放大,文中介绍采用的是双线性插值(bilinear interpolation),公式如下:

其中,$m=[i/\lambda]+\alpha$,$n=[j/\lambda]+\beta$,$\lambda$是上采样因素,等于放大倍数除以$t_l$,$[·]$和$\{·\}$分别是整数部分和小数部分。

接下来看看损失函数。本文的损失函数主要包含两部分,如公式8所示。一部分是$L_{cls}$,也就是分类的损失,$Y^{(s)}$表示预测的类别概率,$Y^*$表示真实类别。$L_{rank}$表示pairwise ranking loss,可以看FIgure2中红色的大括号,第一个scale网络和第二个scale网络构成一个$L_{rank}$,同样第二个scale网络和第三个scale网络构成另一个$L_{rank}$。在训练这个网络的时候采取的是损失函数交替训练的策略,后面会详细介绍。

$L_{rank}$的公式如式子9所示,输入中$p_t^{(s)}$中的t表示真实标签类别,$s$表示scale,因此比如$p_t^{(2)}$表示第二个scale网络的真实标签概率(Figure2中最后预测出来的概率条形图中的绿色部分)。从$L_{rank损}$失函数可以看出,当更后面的scale网络的$p_t$大于相邻的前面的scale网络的$p_t$时,损失较小,通俗讲模型的训练目标是希望更后面的scale网络的预测更准。margin参数在实验中设置为0.05。

于是这样的网络就可以得到输入$X$的不同scale特征,比如用式子10表示,其中$N$表示scale的数量,$F_i$表示第$i$个scale网络的全连接层输出,文中称$F_i$为$descriptor$。

那么如何融合不同scale网络的输出结果呢?

多尺度特征的一个融合: 把三个scale 的特征concat起来,然后再分类得到结果。

训练细节

  1. 用imagenet初始化3个scale的classification网络;
  2. 找出响应最大的区域,预训练APN;
  3. 交替训练 classification 和APN(固定一个训练另一个)。

APN网络的梯度更新


图 3. 区域注意力学习的相关说明。顶行指明了特定尺度下的两个典型区域输入,底行指明了反向传播到输入层的导数。黑色箭头显示了 $t_x$、$t_y$ 和 $t_l$ 的优化方向,与人类的感知是一致的。

前面提到的APN网络用于从特征生成区域信息($t_x$、$t_y$、$t_l$),这3个坐标值通过Mask实现crop操作,这个过程的示意图可以看图3。第一行的两个图分别表示两个不同scale网络的输入,第二行表示在训练网络时回传的梯度值分布情况,箭头就是表示梯度的更新方向,比如右下角图中的$t_x$和$t_y$的更新方向是趋于输入图像的右下角区域,$t_l$的更新方向是变得更大。

总结

在conclusion部分,作者也对未来的工作方向做了介绍:可以看出第一点主要针对在实验中scale 3网络的效果不及scale 2网络的效果,主要原因是scale 3丢失了较多的全局信息。第二点是关于如何融合不同scale的region attention信息,毕竟在RA-CNN中不同scale的attention信息之间没有做融合。

实验


图 4. 不同尺度规格下,已学习区域注意力的五种鸟类实例。在逐渐放大到注意力区域(attended region)后,我们可以观察到清晰且显著的分类视觉线索。


表2. 在CUB-200-2011 数据集上,关于分类精度的注意力局部的对比。


表 3. CUB-200-2011 数据集上的对比结果。Train Anno. 代表在训练中使用边界框或部分标注。


图 5. 在第三尺度规格对鸟类、狗类和猫类进行注意力定位。从多种图像样本中进行学习的区域(每一行),都代表一个特定细粒度类别下的一致性注意力区域,可以从其它种类中对该类别进行辨别分类。

一分一毛也是心意