尺度变化是目标检测中的关键挑战之一。今天要说的这个技术就特别厉害,在目标检测领域中,目前是性能最强的一个框架。下面让我们一起去见证下它的优势所在。
本次介绍的算法框架:
Scale-Aware Trident Networks for Object Detection
下载地址:https://arxiv.org/abs/1901.01892
在该网络框架中,首先进行了一个控制实验,以研究感受野对不同尺度目标检测的影响。根据勘探实验的结果,提出了一种新的三分支网络(Triddnet),该网络的目标是生成具有均匀代表性的标度特征图。
等下~今天主角是Trident Network,但是其是借鉴了CVPR一篇文章中的Multi-Scale思想,所以接下来我还是有必要带大家了解下那片高质量文章及其框架,那就是——SNIP。那我们开始梳理下SNIP是如何目标检测的。
论文链接:https://arxiv.org/abs/1711.08189
这个框架研究点是目标检测中的小目标的问题。小目标检测一直是目标检测中的难题,如果自己实践过的小伙伴应该都知道,数据集中small类的AP基本都是最低的,主要原因如下:
- CNN网络提取的语义化特征和分辨率之间的矛盾;
- 目前的目标检测都采用了Faster RCNN的Anchor思想,就算小目标在Anchor范围内,也会因为面积小而导致IoU过低。
从上图可以看到,COCO数据集中90%的样本例子的大小都在0.472以下,和ImageNet差别非常大。
- 说明了类似COCO这样的数据集中存在着大量的小物体;
- 也说明了ImageNet预训练的模型在迁移到样本大小差异较大的COCO数据集中,很可能产生一定的domain-shift偏差。
于是,就由生了这样的动机:
- 现在目标检测为了提高对小目标的效果,都采用upsample的方法,这个仁者见智吧,那能不能直接用低分辨率的图像不做upsample来训练网络?
- 能不能通过挑选样本的方式来增加网络效果的,如upsample调整了大小以后,只用64x64~256x256的Ground Truth来训练?用所有的GT来训练真的会更好吗?
实际上,现在有很多针对小目标的措施和改良,如下:
- 最常见的是Upsample来Rezie网络输入图像的大小;
- 用dilated/strous等这类特殊的卷积来提高检测器对分辨率的敏感度;
- 用FPN这种把浅层特征和深层特征融合的,或者最后在预测的时候,用浅层特征和深层特征一起预测;
- 有比较直接的在浅层和深层的Feature Map上直接各自独立做预测的,这个就是我们常说的尺度问题。
主要思路:
在训练和反向传播更新参数时,只考虑哪些在指定的尺度范围内的目标,由此提出了一种特别的多尺度训练方法,即SNIP(Scale Normalization for Image Pyramids)。
如上图所示,在训练时划分了三类尺度,对应三种不同分辨率的图像。每个分辨率下的RoI都有其指定范围,如果GT的box大小在这个范围内,就被标记做valid,否则就被标记为invalid。
在生成Anchor并给Anchor分配label的时候,检查该Anchor是否和某个invalid GT box的overlap超过0.3,若存在,则该Anchor会被视作invalid Anchor;若不存在,则会被视作valid Anchor。
这些invalie anchor在train的时候都会被无效化,也不会加入到反向传播的过程中从而对参数产生影响,相当于在每个分辨率上,只对大小合适的目标进行训练,这就符合了该网络框架设计的初衷。相应的,在inference时候,如果区域面积在那个分辨率的指定范围外,也同样会被抛弃,最后,在进行Rescale和NMS等操作。
仔细阅读后,你会发现该框架考虑了很多细节元素:
- 用的是Deformable RFCN detector,而不是常见的卷积,根据自己的需要作出一定的改变 ;
- 网络结构是Dual path networks(DPN)和ResNet-101,由于需要内存很大,为了适应GPU内存,对图像进行了采样,具体方法是选取一个1000x1000的包含最多目标的区域作为子图像,然后重复该步骤直到所有目标都被选取 ;
- 为了提升RPN的效果,尝试了使用7个尺度,连接conv4和conv5的输出;
- 从功能上来讲,对每一层金字塔图像,分别检测不同尺寸的目标,金字塔图像越大,检测的目标尺寸越小;
- 从网络结构上来讲,3个分支进行参数共享,故网络结构完全一致,区别在于目标尺寸的超参数不同。
实验结果
MS表示multi-scale
今天貌似讲多了,那我们下期认真讲解Trident Network,大家记得关注哦!