SNIPER: Efficient Multi-Scale Training
前言
图像金字塔是传统的提升物体检测精度的策略之一,其能提升精度的一个原因是尺寸多样性的引入。但是图像金字塔也有一个非常严重的缺点:即增加了模型的计算量,一个经过3个尺度放大(1x,2x,3x)的图像金子塔要多处理14倍的像素点。
SNIPER(Scale Normalization for Image Pyramid with Efficient Resampling)的提出动机便是解决图像金字塔计算量大的问题,图像金字塔存在一个固有的问题:对于一张放大之后的高分辨率的图片,其物体也随之放大,有时甚至待检测物体的尺寸超过了特征向量的感受野,这时候对大尺寸物体的检测便很难做到精确,因为这时候已经没有合适的特征向量了;对于一个缩小了若干倍的图像中的一个小尺寸物体,由于网络结构中降采样的存在,此时也很难找到合适的特征向量用于该物体的检测。因此作者在之前的SNIP论文中便提出了高分辨率图像中的大尺寸物体和低分辨率图像中的小尺寸物体时应该忽略的。
需要注意的是SNIPER只是一个采样策略,是对图像金字塔的替代。在论文中作者将SNIPER应用到了Faster R-CNN和Mask R-CNN中,同理,SNIPER也几乎可以应用到其它任何检测甚至识别算法中。
作者已经开源了基于MXNet的源码,我们在后面的分析中会结合源码进行讲解。
1. SNIPER 详解
作为一个采样策略,SNIPER的输入数据是原始的数据集,输出的是在图像上采样得到的子图(chips),如图1的虚线部分所示,而这些chips会直接作为s。当然,chips上的物体的Ground Truth也需要针对性的修改。那么这些chips是怎么计算的呢,下面我们详细分析之。
1.1 Chips生成
那么整个图像金字塔的chips的总数约为:
1.2 正chips
因为多尺度的chips之间是互相覆盖的,所以可以保证了一个Ground Truth至少被一个Chip采样得到,一个Ground Truth既可以被不同尺度的chips所共同包围,也可以被相同尺度的不同chips所共同包围。
图2中得到的chips便是从图1中的虚线部分裁剪出来的。如图2所示,绿色的Ground Truth代表的是和该chips匹配的待检测物体,而红色的Ground Truth由于面积不在范围内,因此不会被标注出来,在检测的时候等同的看做背景区域。
1.3 负chips
如果只用正chips作为样本进行训练,模型的假正利率往往很高(不包含任何物体的chip判断为包含包含物体的chip)。具体原因是因为参与模型训练的数据都是包围着Ground Truth的chips,而在测试的时候(第2节详细介绍SNIPER的测试部分),输入的是整张图像的图像金字塔,这时候必然包含不包围任何Ground Truth的背景区域,也就是说训练集和测试集的分布是不一样的。
如图3所示,上排绿色部分表示Ground Truth,下排红色区域表示弱RPN预测的候选区域,橙色区域表示根据弱RPN得到的负chips。
1.4 SNIPER的训练
通过上面的分析,我们可以根据Ground Truth和弱RPN得到一批正chips和一批负chips,这批chips将作为训练样本直接输入给检测算法。SNIPER采用了Faster R-CNN作为这些chips的检测算法框架,并且SNIPER后面模型训练的细节也基本和Faster R-CNN相同,除了一点,SNIPER接的Faster R-CNN的RPN和Fast R-CNN使用了不同的标签系统。
2. SNIPER的测试过程
在图像金字塔提取完检测框之后,使用soft-NMS得到最终的候选区域。
3. 总结
小物体检测一直是困扰物体检测领域的一个重要难题,传统的图像金字塔式解决该问题的一个常见的传统策略,但是速度太慢,SNIPER的提出便是动机便是解决图像金字塔的速度问题。
需要注意SNIPER并不是一个检测算法,而是对输入图像的一个采样策略,其采样的结果(chips)将作为输入输入到物体检测算法中。
算法虽然使用了RPN,但是并不是离开了RPN就无法工作了,RPN提供了一个提取假正利率的功能,这个可以通过Selective Search或者Edge Box近似替代。
另外,SNIPER仅仅是对训练速度的提升,往往更重要的检测速度并没有提升,反而是模型必须依赖图像金字塔,这反而降低了模型的通用性。
最后,作者开源的源码和论文出入较大,读起来比较费劲,等之后有时间的话再详细学习这份源码。
最后更新于