Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition
简介
本文介绍了一种recurrent attention convolutional neural network (RA-CNN),用于细粒度图像分类。本文总体的思想并不难,如下图。网络结构分为两部分,一部分为识别类别,跟一般的分类网络一样,从输入图像到卷积层到fc最后加softmax;一部分为提取局部Attention的分支(attention proposal sub-network,APN),用来从整体特征定位到局部特征。loss使用分类loss及ranking loss。本文方法不需要指定局部特征的外接框,模型会通过训练来学习哪些局部特征会有助于细粒度的分类。
整体流程:先输入整图,b1网络输出类别、红色的APN部分输出Attention的坐标,通过Attention的坐标提取局部图像,局部图像放大后输入下一个scale的网络b2,以此类推。虽说论文上写了End-to-End训练,但整体训练还是挺复杂的。但是方法并不需要标注Attention的区域,由网络自己学到,是一个weak-supervised方法。
Attention Proposal Network
分类的部分没有什么特别的,主要是Attention部分。Attention部分在网络最后层特征后接两个fc回归三个参数[tx, ty, tl] 其中tx,ty为Attention方形中心的坐标,tl是Attention方形边长的一半。用这些信息可以crop出Attention部分,单直接的crop操作是无法求导的,作者为了此操作可以求导,用其他方式近似crop操作。
Attention区域的坐标,坐上顶点跟右下顶点可以很容易的通过中心坐标tx、ty及tl来计算:
通过坐标来计算Attention的Mask区域:
其中当k很大时,h(x)可以近似一个阶跃函数,M将x、y坐标图像按上面方式计算,可以使得Attention内的部分输出1,Attention外的部分为0,得到一个Attention的Mask。然后通过点乘得到Attention部分的图像:
最后通过双线性插值,将Attention的部分进行放大:
Classification and Ranking & Multi-scale Joint Representation
loss为分类跟Attention的ranking部分loss相加。
左边为分类loss,多个尺度的都加上。右边为rank loss,其目的是使更大scale(s+1)的预测概率p比上一个scale的预测概率要大。公式如下:
rank loss为一个margin loss,迫使更细粒度的分类概率至少大于上一个scale粒度分类概率margin。也是网络训练的核心了,因为更细粒度的部分只有进一步提高分类的概率,才能迫使网络更加关注能够提高概率的细节部分。
Inference
最后inference部分,作者将每一个scale最后的特征先normmalize再cat起来,再训练个softmax进行分类。如果按照上面训练loss的规则的话,似乎用最后一个scale输出的分类结果也行。不过多scale的特征更全面些。这一部分也是可以直接加入训练进行End-to-End训练的,这也是作者选择softmax而非linear-svm的原因。
Implementation Details
训练部分还有一点繁琐。
-
所有scale的网络初始化参数都用imagenet预训练的参数,是一样的。
-
APN部分的参数初始化,网络最后一层特征响应(例如VGG的话是conv5_4)最强烈位置所对应的tx,ty,tl为原图四分之一长度,用这几个参数预训练APN。
-
训练部分类似EM的方式,固定APN参数训练分类器,然后再固定分类器参数通过rankloss训练APN,直到两个loss收敛。另外tl不能小于上个scale的三分之一。
-
每一scale选取Attention区域后,差值得到原图大小的图像,输入下一个scale网络。还有些优化方面的细节。
Experiments
各个数据及的实验结果