度量学习、细粒度识别相关论文阅读笔记(二)—— RA-CNN(细粒度、注意力机制)
度量学习、细粒度识别相关论文阅读笔记(二)——Look Closer to See Better:Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition—RA-CNN(细粒度、注意力机制)
- 细粒度分类(fine-grained)
- RA-CNN
- 网络优点
- 网络流程
- 网络结构
- 分类和attention区域定位
- task 1:分类
- task 2:attention区域检测
- attention区域放大
- 网络loss
- 交替训练
细粒度分类(fine-grained)
区分大类中的细小类别。如图中,在啄木鸟种细分不同的品种。由于细小类别间的差异非常小,所有细粒度分类问题的难点为:1.定位关键区域;2.从关键区域中提取有效信息。
有监督方法:对训练数据标注bounding box
无监督方法:无bounding box,通过网络自主学习
通常采用无监督或有监督(目标检测)方法检测出指定区域->在指定区域中提取特征->分类
论文观点:人为标注的region不一定是最优的,同时定位关键区域与从关键区域中提取有效信息是具有相互促进关系的。
RA-CNN
网络优点
1.多scale:训练过程中可以逐渐聚焦到关键区域,能更加准确
2.两个子网络的设计以及交替训练的方式
3.不需要bounding box的标注信息。
网络流程
RA-CNN网络分为3个子网络,3个子网络的网络结构都是一样的,但网络参数不一样。
每个子网络包含一个分类网络和一个APN网络。具体流程为:
(1)输入图像首先输入到第一个子网络中,通过分类网络进行分类。
(2)然后第一个APN网络基于分类网络提取到的特征进行训练,得到attention区域。
(3)在原始图像中将attention区域crop下来进行放大,再作为第二个子网络的输入。
这样重复进行3次,得到3个子网络的输出进行融合。
网络结构
图中(a1)、(a2)、(a3)分别表示3个不同scale的网络;(b1)、(b2)、(b3)分别表示3个不同scale网络的卷积层。这三个网络具有相同的网络结构。根据第bi个CNN提取到的特征,一方面使用fc层(因此三个网络的输入尺寸是固定的)和softmax层计算类别概率;另一方面通过APN网络(d1)、(d2)得到attention区域信息。
其实本质与object detection类的算法是一样的,只不过这里的区域检测不是监督学习,也就是说不需要bounding box的标注信息,而是通过end-to-end训练得到的。
分类和attention区域定位
task 1:分类
Wc代表CNN的参数,f(*)代表fc层和softmax运算。上式表示分类网络的输出。
task 2:attention区域检测
Wc同样是上述CNN的参数,g(*)表示APN网络的运算。APN网络可以用两个全连接层来实现,最后一个全连接层输出channel为3,分别对应tx,ty,tl。tx,ty对应attention区域的中心点,tl表示正方形区域边长的一半。
因此,attention区域左上角点的坐标和右下角点的坐标可以用下式表示:
得到坐标值和尺寸后,为了crop出局部的信息,在整张图片上使用添加Mask的方法(element-wise multiplication)来近似裁剪操作。
文中使用logistic function(sigmoid函数)来构造mask,这样可以使函数连续,易于反向传播。
当k设置为较大的正整数时(文中设为10),sigmoid函数类似于阶跃函数。因此当x在tx(tl)和tx(br)之间时,h(x-tx(tl))-h(x-tx(br))就趋近于1-0=1,y轴同理。这样的话只有当x在tx(tl)和tx(br)之间且y在ty(tl)和ty(br)之间时,M()才趋于1 * 1=1,其他情况都是趋于1 * 0或0 * 1或0 * 0。
attention区域放大
由于网络输入尺寸是固定的,因此在获取到attention区域位置后,使用双线性插值进行放大,输入到子网络中进行下一步处理。
网络loss
网络的损失函数包括两个部分:分类损失(Lcls)以及pairwise ranking loss(Lrank)。
Lrank为网络结构图右侧的红色大括号部分。第一个scale网络和第二个scale网络构成一个Lrank,同样第二个scale网络和第三个scale网络构成另一个Lrank。在训练这个网络的时候采取的是损失函数交替训练的策略。
Lrank的公式如下式:
pt(s)为Figure2中最后预测出来的概率条形图中的绿色部分。从Lrank损失函数可以看出,当更后面的scale网络的pt大于相邻的前面的scale网络的pt时,损失较小,通俗讲模型的训练目标是希望更后面的scale网络的预测更准。margin参数在实验中设置为0.05。
交替训练
- 初始化分类子网络: 用预训练的VGG-Net初始化分类子网络中卷积层和全连接层的参数;
- 初始化APN: 查找分类子网络的最后一层卷积层(conv5_4 in VGG-19)具有最高响应值(highest response)的区域,用该区域的中心点坐标和原图边长的一半来初始化(tx,ty,tl);
- 固定APN的参数,训练分类子网络直至Lcls收敛; 随后固定分类子网络的参数,训练APN网络直至Lrank收敛.这个训练过程是迭代交替进行的,直到两个网络的损失收敛.