论文笔记-SNIPER:Efficient Multi-Scale Training

 

1. 介绍

目前的目标检测架构都是对输入图像的所有像素进行操作,从而产生proposals等,当采用多尺寸的图像金字塔时,所需的存储空间很大,在训练时,单一GPU上能训练的图像数量很小(取决于GPU的显存和图像的分辨率),这样就造成了batch size很小,从而使训练时间很长。因此作者提出了一种新的训练思路:先粗略定位一下正负例所在的区域,然后以该区域内的像素信息作为卷积网络的输入,再精确检测出该区域内的所有正例和负例。
这里写图片描述
如上图所示,先大概框出风筝所在的图像位置(黄色边框),黄色边框要包含完整的风筝目标,然后以该边框的区域作为网络的输入,精确检测出风筝的位置(红色边框)。这样做,我们在检测风筝时,不需要对整个图像进行处理,而是仅处理图像的一部分(论文中作者称为chip),这样可以有限降低所需的存储空间,增加单一GPU上所能训练的图像的数量,显著提高训练速度。

原文提到,正例chips是通过ground truth bbox得到,负例chips是通过RPN网络产生的proposals得到。

2. SNIPER(Scale Normalization for Image Pyramids with Efficient Resampling)

2.1 生成chip

在每一张图像上产生n种不同尺寸的chips,分别为{s_1,…s_n},每一种尺寸产生的chips记为C_i,对于每一个C_i,首先被resize成固定的W_i * H_i大小(本文作者在实验过程中采用的size为512*512)。也就是说,作者首先在original size的图像上产生多种尺寸的chips,然后再将每一种尺寸的chips都resize到512*512。

2.2 选择positive chip

对于每一种尺寸的chip,都会选定一个面积范围,
这里写图片描述
这个范围用来筛选参与训练的gt bbox和proposals的数量。如在该chip内面积过大或过小的对象都不参与训练。在面积限定范围内的gt bbox被记为这里写图片描述。我们选定的该chip区域,要完全包含符合面积条件的所有对象。最后我们把所有的chips结合到一块,就应该包含整张图像所有我们要进行训练的对象。对于每一个gt bbox,可能同时被多个尺寸的chips包含在内,也可能在同一尺寸的多个chips内。与某一chip有部分重叠,没有完全包含在该chip内的gt instances,超出的部分被剪裁掉,但是仍然参与后面的标签分配。

因为作为网络输入的chips的size远远小于原始图像的size,,而且SNIPER通过挑选chips的方式,去除了训练样本中大量的background,因此,可以有效的节省存储空间,提高训练速度。下图是选择chips的一个例子:
这里写图片描述

2.3 选择Negative Chip

只在图像上生成positive chips有一个问题,就是大量的background被排除在训练样本之外,虽然能够加速训练,但是最后优化出来的模型可能会有较高的false positive rate。因此作者想要通过训练一个RPN网络,输出可能包含false positives的proposals,该proposals并不需要很精确。输出的proposals可能有一部分已经包含在了positive chips内,所以该部分proposals将被移除。下图展示了negative chips的选择例子:
这里写图片描述

2.4 Label确定

由RPN网络产生的proposals,与gt bbox等IoU大于0.5,即标注为正例。在训练时,gt bbox不受这里写图片描述
的限制,但是proposals受上式的限制。每一个chip中包含300个proposals。
在训练过程中,每一个batch随机选择一定数量的chips进行训练。在COCO数据集上,每一张图像平均生成约5个大小为512*512的chips。

3. 实验

在COCO训练集上,训练SNIPER采用128的batch size,0.015的学习率,chip的size为512*512,training image scales为(512/ms,1.667,3)(ms是图像高度和宽度的最大值)。每一种尺寸的面积限定范围为(0,80*80),(32*32,150*150),(120*120,inf)。对于RPN网络的训练,共2epoches,每一epoch迭代7000次,学习率为0.015.
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/duanyajun987/article/details/85780126