sniper
它算是An Analysis of SC++ale Invariance in Object Detection-SNip的增强版,依然在思考怎么能更好的解决检测中的多尺度问题
Introduction
RCNN本身具有很好的尺度不变形,因为它先从图片中提取proposal,然后都resize到224去提取特征但是这样每个proposal不共享特征的计算,很慢,而Fast系列为了解决这个问题,输入大小不固定,不同尺度的图片都经过同一个的cnn提取特征然后拿proposal去对应位置扣特征,这就破坏了RCNN原来的尺度不变形,但是它很快且整体做特征提取能捕捉更多的context,得到广泛的应用。(注意这个context的问题,下文会继续说到)
现在大家为了解决Fast系列的问题,往往进行多尺度的训练。RCNN中只对扣出来的proposal进行放缩,小的proposal会放大,合适的proposal就会不怎么变,太大的proposal会放小,总之都会resize到一个固定的尺度,检测网络只用适应这一种尺度,而Fast系列多尺度训练时,不管图片中的proposal大还是小都要跟着图片整体做放大或者缩小,这样检测网络还是去适应这些尺度,而且上一篇中引用Naiyan Wang的说法: 这更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity。
上一篇的SNIP是忽略掉大图中的大proposal和小图中的小proposal,也就是把一些极端的情况都忽略掉,相对来说只保留了尺度大致一致(和Imagenet的预训练模型的尺度差不多)的proposal参与训练,但是它也有个缺点就是训练太慢了,每个尺度的图片的每个像素都要参与训练。
综上本文提出一种sniper的方法,通过生成scale specific context-regions,不管那个尺度都采样到512x512,这样既保留RCNN的尺度不变性和Fast系列的速度,也由于过滤到了很大一部分背景而比SNIP快很多
Chip Generation
Positive Chip Selection
在某一尺度下,指定一个aera范围来决定多大的proposal/gt box才能参与到训练,然后有了这些valid gt box,chip从最小cover每个box开始,逐渐扩大达到一个包含最多box数量时停止,这首先就保证了每个valid gt box都能被一个chip cover。然后多个尺度下或者单一尺度下,都有可能存在存在一个box被多个chip cover(见我标注的蓝色1号情况);某一box也可能被chip截断,截断也会保留用于后续过程(见我标注的蓝色2号情况)。
Negative Chip Selection
Positive Chip包含了所有正样本,但是它们包含的背景实在太少了,这样网络见到的都是易于识别出物体的chip,这样难免会出现很多False Positive(误警/误报),所以需要生成一些Negative Chip来参与训练,这些Negative Chip代表的就是那些带有挑战性的,很难确定有木有物体的chip。那么怎么做的?
训练一个简单的RPN生成很多proposal,接着剔除那些被positive chip cover的proposal,这首先会把那些和gt box和接近的proposal给扔了,也就是把易于区分前背景的给扔了。然后像Positive Chip生成时一样,chip逐渐扩大包含一定数量的proposal,然后形成一个Negative Chip Pool,训练时随机挑选一定数量的Negative Chip。(图中红色点是rpn生成的被过滤过的negative proposal,然后红色框就是包含一定数量negative proposal的negative chip,可以看到这些都是很有调整性,易出现false positive情况的chip)
这个做法和多尺度的训练(也能减少false positive)相比,大大减少了需要训练的像素,只处理经过RPN确认过的最可能出现false positive的区域,大大提升了训练速度。
Experiments
有了这些chips后,后面就和faster RCNN一样的训练了,但是由于这些chips都是512x512,且每张图片只有大概只有5个chips,我们可以增大BATch size充分利用batch normalization带来的好处。
SNIPER generates 1.2 million chips for the COCO dataset after the images are flipped. This results in around 5 chips per image. In some images which contain many object instances, SNIPER can generate as many as 10 chips and others where there is a single large salient object, it would only generate a single chip.
可以看出negative chips对recall没有影响,但是对整体AR有提升,说明它的作用
可以看到多尺度很重要,再次看到negative chips的作用
和其他Faster/Mask RCNN各种配置都不同,不太好比较,于是只和自己之前的SNIP比较,fixed BN(不用BN)时和SNIP差不多的精度43.5vs43.6,但是训练速度提升3倍,由于chips尺度小可以增大batch size充分利用BN,这样提升就很明显了46.1vs44.4
One more thing
是开头说的context的问题,论文里有好几次说到太大的context不一定有用
- Since we are able to obtain similar performance by observing less than one tenth of the image, it implies that very large context during training is not important for training high-performance detectors but sampling regions containing hard negatives is.
- Our results suggest that context beyond a certain field of view may not be beneficial during training. It is also possible that the effective receptive field of deep neural networks is not large enough to leverage far away pixels in the image
- SNIPER brings training of instance level recognition tasks like object detection closer to the protocol for image classification and suggests that the commonly accepted guideline that it is important to train on high resolution images for instance level visual recognition tasks might not be correct.