代码地址:Grid R-CNN
1. 概述
导读:Grid R-CNN将原(Faster R-CNN)中检测框偏移预估的问题转换为网格点预估问题,有了网格点的帮助,检测的性能有了进一步提升。而这篇文章提出的改进主要在原Grid R-CNN的基础上提升速度,同时也提升精度,改进之后的方法叫作Grid R-CNN Plus。其在COCO数据集上基于Res50-FPN获得了40.4%的mAP,超过前一个版本3%,同时推理的时间相差无几(相比Faster R-CNN FPN)。
2. 方法改进
2.1 Grid Point Specific Representation Region
这一部分是Grid R-CNN Plus中最显著的改进点,既是修改了grid point的特征表达,变为网格点的特定表达。由于只有正样本(IOU>0.5)才会被送入Grid branch,该branch的输出叫heatmap,维度是56∗5656*5656∗56,heatmap的监督信息就如Figure2中第一行的2个图所示,分别是左上角关键点的监督信息和右中位置关键点的监督信息。
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/8373b1277127c518.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21fYnVkZHk=,size_16,color_FFFFFF,t_70)
在Grid RCNN算法中,输出的heatmap和监督信息都是56∗5656*5656∗56大小,但其实这里面是有冗余的,举个例子,对于左上角关键点的预测,其监督信息中只有1/4左右的区域是有效的(Figure2第一行的第一个图),剩下的3/4区域都不会包含左上角关键点的监督信息,也就是说相关的计算是冗余的,因此完全可以把监督信息的区域缩小到真正有效的区域(Figure2第二行的第一个图),同时将模型的输出heatmap大小也设计成28∗2828*2828∗28,这样就能有效减少冗余计算。
将模型的输出heatmap大小设计成28∗2828*2828∗28实现起来也比较简单:grid branch的输出特征图可以按照关键点进行分组,没有必要一个特征图负责所有关键点的预测。
2.2 LightGrid Head
由于最后的输出尺度降低了一半,那也可以同时将grid branch中的其他特征图分辨率也降低,比如14∗1414*1414∗14到7∗77*77∗7。具体来说,通过前面的RPN+ROIAlign产生一个固定的feature map分辨率为14∗1414*1414∗14,接着使用一个步长为2的3∗33*33∗3卷积核,然后再使用7个步长为1的3∗33*33∗3卷积核从而产生7∗77*77∗7分辨率的特征图。紧接着将这个特征分成N组(默认为9),每一组关联一个grid point,接着使用两个组反卷积将特征图尺度变为28∗2828*2828∗28,这里的group deconvolution可以加速上采样的过程。
另外一个好处是,由于我们对每个grid point的表达进行了归一化,因此他们变得更加closer,导致在特征融合时不需要使用很多的卷积层来覆盖这个间隙。在Plus版本,只使用了一个5∗55*55∗5的depth-wise卷积层来代替原来的3个连续的卷积层。
2.3 Image-acrossSample Strategy
由于grid branch在训练时只使用正样本,所以不同采样batch正样本数量的不同会对于精度产生影响,比如,有些图像的正样本很多,但有些图像的正样本数很少。在Plus版本,作者使用了跨图片的采样策略,具体讲,从两个图片中一共采集192个positive proposal,而不再是每张图片采集96个positive proposal。这样就会使训练更具有鲁棒性以及精度提高。
2.4 NMS Only Once
原来的Grid RCNN需要两次NMS,第一次是proposal的生成,只选择Top 125个样本进行边框矫正,第二次是做最后的classification,作者发现,尽管只是一小部分的proposal,进行80类的NMS还是很慢,所以在Plus版本,直接移除了第二个NMS,同时将第一个NMS的IOU阈值设置为0.3,分类阈值设置为0.03,只选择100个proposal进行进一步的分类和回归。
3. 实验结果
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/70be2ca197098d98.webp)