论文全称:A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection
论文链接:https://arxiv.org/pdf/1704.03414
论文日期:2017.8.11
期刊:CVPR
算法提出的场景:
目前常用的方法:
data driven,基于大量数据驱动的算法。
存在的问题:
数据集无法涵盖所有的变形与遮挡情况。因为数据集里面这些情况发生的概率太低了,这些类别、遮挡与变形服从长尾分布,算法需要对这些情况学习不变性模型。
算法中心思想:
算法添加了一个对抗性网络,对抗性网络与原始网络联合训练,对抗网络生成原始检测器难以检测的遮挡与变形样本,然后原始网络利用样本进行训练,从而提高检测准确率。
解决问题:
目标检测的目标就是学习一个针对对象视觉模型,然后在图片中将对象定位出来。这就要求模型对于照明、遮挡、变形等情况具有鲁棒性。 目前的大多数算法都是通过增加数据集来提高准确率,COCO数据集就有超过10K个不同场景的汽车样本。
目前算法的局限:
但是这些遮挡与变形的样本数量太少了,难以通过增加数据集包含到所有可能的遮挡与变形情况。通过数据集可知,一些场景下发生遮挡的可能性要更大,例如停车场里面的汽车。一些场景下发生变形的可能性更大,例如动物。但是其他场景下发生遮挡与变形的情况会很少。
目前常用算法:
算法创新:
不使用所有的样本,只选取一些hard example,训练得到的检测准确率会更好。
基于这一结论,本文提出了一个对抗网络,通过在空间上阻止某些特征映射,或者通过操纵特征响应来创建空间变形。对抗网络的主要思想就是生成难以检测的对抗样本。将样本输入到原始网络中进行训练。
目前的算法都在三个方向上进行改进:
本文算法:
以一个更好的方式级联数据,不是通过找出难检测的数据,==而是设计网络去生成对于Fast RCNN难以检测的样本,即对抗网络。==通过联合训练,提高原始检测网络与生成样本的对抗网络。
也有很多算法用到了对抗网络,然而,这些算法中的实验都是在比目标检测数据集复杂度低的数据上进行的,其中图像生成的结果更差。
本文主要集中于利用对抗网络生成数据,而不是利用对抗网络进行更好的监督。
为了更目标检测算法更有鲁棒性,本文不是基于寻找更优秀的数据集,或者是在数据集中找到更难检测的样本。而是通过构建一个对抗网络生成原始网络难以检测的样本。针对于本文:就是遮挡与变形的数据。
原始检测器的损失函数:
LF = Lsoftmax(Fc(X), C) + [C /∈ bg] Lbbox(Fl(X), L)
C:对象的真实类别;
L:对象的空间定位;
A fast RCNN中对抗网络的损失函数:
LA = −Lsoftmax(Fc(A(X)), C)
A(X) :对抗网络,会生成新的对抗样本;
当对抗网络生成的样本原始网络易于检测时,对抗网络将会返回一个高的损失值。相反,如果难以检测的话,对抗网络返回一个低的损失值,但是原始检测网络会返回一个高的损失值。
Fast RCNN包含两个部分:
最后会输入一个softmax的分类与一个soft-L1的回归。
对抗神经网络生成两种类型的特征:
同时学习这两种对抗神经网络,还可以防止过拟合。
对抗神经网络只会在训练阶段才会使用,而且是在特征空间加入Dropout,对抗神经网络是作用在特征映射上的,而不是输入图片。
使用区域特征作为对抗网络的输入,ASDN生成一个mask,用于指出丢弃哪一部分的特征,从而使检测器更难于检测对象。
特征X的尺寸为 d × d × c, d是空间维度,c是通道数。
mask M会输出d×d个值,这些值是0或者1。
Mij是第i行j列的mask值。
Xijk就是第i行j列k通道的特征值。
若Mij = 1,则将特征图上的所有通道的值都丢弃掉。即,Xijk = 0, ∀k。
在使用ASDN提升Fast-RCNN之前要经过预训练,使用了一个阶段级的训练方式,首先只训练Fast-RCNN网络10K次,然后再固定原始网络,使用ASDN生成遮挡样本。
训练过程:
ASDN的目的就是生成使原始网络具有高损失值的mask。
交叉熵损失函数:
采样阈值:
ASDN生成的输出不是一个二值化掩码,而是一个连续的热图。本算法将热图转化为二值化掩码。
本文使用一个重要的采样选出前1/3的像素取值为1,其余的像素为0。从而保证训练期间样本的多样性。更特殊地,选出其中前1/2的像素,然后随机取其中的1/3取值为1,其余的取值为0。
联合训练:
由于将热图转化为了二值化掩码,从而导致无法之间反向传播。
本文仅仅计算只导致Fast-RCNN 分类分数有显著下降的二值化掩码。也只使用难检测的样本的masks作为真实框去训练对抗网络。
ASTN是建立在Spatial Transformer Network基础上的,STN是用于转换特征从而使分类更简单。本文的ASTN正好相反。
STN:
只需要学习定位网络的参数,STN的目的就是使整个学习的过程不同,从而定位网络能通过反向传播直接优化分类对象。
Adversarial STN:
关注于特征映射旋转。通过旋转特征图,使检测器难以检测对象。
定位网络由3个全连接层组成,前两层通过ImageNet预训练的神经网络的 fc6 与 fc7层初始化。
可以直接使用分类损失反向传播,微调ASTN的定位网络。
在实验中发现,需限制旋转的角度,限制旋转角度在±10°以内。将通道维度上特征映射分为4块,对于不同的块估算4个不同的选择角度,每个通道有不同特征类型的激活函数。
同时训练ASDN与ASTN,这样会增加变换的多样性,从而防止过拟合,检测器也会变得更鲁棒。
以不同神经网络作为原始网络,添加对抗网络,进行对比实验:
plant 与 bottle对象在加入了对抗网络之后,检测表现更佳。
然而,将这两个转换组合在一起似乎可以提高某些类别的性能,这些类别仅使用遮挡或变形检测性能就会下降。car 与 aeroplane类别在结合之后性能有提高。