以RefineDet为例探索anchor的匹配机制

  该博文主要是从数据分析和多方面思考的角度,对一个检测网络进行剖析,这里选择RefineDet主要是这个网络既有one-stage的特点,又有two-stage的特点,当然同样的分析方法也可以放到其他网络里面。在RefineDet中,我试着从正样本的质量和数量的角度,来探索anchor机制在目标检测中的作用,正样本和负样本是直接用来回归目标框位置和学习分类器的,那么思考,是否可以通过调整anchor参数,从而提高检测的准确率等问题。很多东西都在学习,也没有一套科学的、具体的分析方法,因此下面的分析都是按照自己的探索之路走的,可能有些分析很多余,或是不全面,或是说服力不够,伙伴们可以指出来,我们共同进步。
  另外博文中用到的代码来自:https://github.com/luuuyi/RefineDet.PyTorch

一、RefineDet网络

在这里插入图片描述  本博文重点在于anchor机制的匹配,以及two-stage的优势分析上,因此对于RefineDet网络只做简单的介绍,因此对该网络不熟悉的宝宝可以自行去了解。
  RefineDet的主要思想:一方面引入two stage类型的object detection算法中对box的由粗到细的回归思想(由粗到细回归其实就是先通过RPN网络得到粗粒度的box信息,然后再通过常规的回归支路进行进一步回归从而得到更加精确的框信息,这也是two stage类型的object detection算法效果优于one stage类型的一个重要原因)。另一方面引入类似FPN网络的特征融合操作用于检测网络,可以有效提高对小目标的检测效果,检测网络的框架还是SSD。

二、anchor匹配机制

  第一阶段匹配(first_stage):truths 与anchor框一一对应,在anchor框中找到与truths的iou最大的那个anchor进行匹配,这里最大iou有可能值比较小,因此后续会统计first_stage的平均iou来评价这个阶段找到的正样本anchor框的质量,可视化图如下:
在这里插入图片描述  对于1号truths,所有anchors框中,第367号anchor框和该truths的iou最大,且该值为0.7,因此第367号anchor框为正样本框,下面的匹配对也是按照这样的方式得到,那么first_stage匹配的平均iou为:avg_iou = (0.7 + 0.6 +0.3+0.2) / 4 =0.45,0.45可以作为评价该阶段匹配到的正样本的质量。

  第二阶段匹配(second_stage):如果该anchor框与任何一个truths的iou大于0.5,那么该anchor框就是正样本,这里找到的正样本的iou都是大于0.5的,因此这里anchor框的质量还是可以的,但是在该阶段的匹配中,有些truths可以匹配到很多正样本的anchor框,有些truths一个都匹配不到,可视化图如下:
在这里插入图片描述

  对于1号anchor框,在所有truths中,和1号truth的iou最大,并且该iou>0.5,因此1号anchor框为正样本,剩下的正样本框都是按照该方法得到的,4,9,10号anchor框为负样本框,他们和truths的最大iou <0.5,因为为负样本。另外还注意到一个现象,该阶段并不是所有的truth都能匹配到正样本的anchor框,例如3号turth,没有正样本anchor框,是因为和其匹配的anchor框的iou<0.5,另外有些truth能够匹配到多个正样本anchor框,例如1号truth有3个,而2号truth只有1个匹配的正样本anchor框,正样本anchor框在truth中分布不均匀,也就是有些truth得到很好的学习,有些truth没有得到充分的学习。

三、RefineDet中anchor匹配结果分析

  RefineDet网络中有两次anchor的匹配过程,一次发生在ARM中,只有两类,背景和目标,使用上面的anchor匹配机制,我们得到了正负样本,采用难例挖掘的方式,使得正负样本的比例为1:3,然后正负样本直接去学习分类器,正样本去学习box的回归参数,就是在正样本的基础上,向truth进行回归之后,得到一个预测框。
  ODM在ARM得到的预测框的基础上,再进行一次anchor框的匹配,然后将这些ARM预测框分为正样本和负样本,分别用来学习分类器和回归器,最终嗯ODM预测框才是我们真正需要输出的预测框。
  下面的曲线和可视化图是RefindDet在KITTI数据上的训练结果
  如下曲线中,在ARM和ODM的first_stage的avg_iou和second_stage的avg_pos_num随着训练的深入,这两个值的走向,可以看到,经过ARM的预测之后,即ODM中的样本框的质量很好,这种两个阶段的检测实现了检测框由粗到细的过程。

armodm
在这里插入图片描述在这里插入图片描述

  如下可视化图中,黄色框为truth,蓝色框为第一阶段匹配到的正样本框,在arm中,其iou=0.4,数字1指的是,在anchor的匹配中,该truth只有一个对应的正样本框,说明在arm的second_stage的匹配中,该truth没有得到正样本框。在odm中,黄色框是经过arm的预测之后的框,明显更truth更贴近,iou为0.94,并且在odm的second_stage的匹配中,该truth有31个对应的正样本框。

armodm
在这里插入图片描述在这里插入图片描述

四、预设的anchor尺寸、面积对正样本质量的影响

4.1、KITTI数据集中目ground truths(已归一化)的aspect_ratios(h/w)分布如下:
在这里插入图片描述
  蓝色是KITTI数据集中ground truths(高和宽已经归一化到0~1之间)aspect_ratios(h/w)的分布,三个红色实心圆点分别代表anchor的aspect_ratios= 0.5, 1, 2,可以看到,在aspect_ratios= 1, 2附近,说明anchor和目标框的比例是一致的,那么aspect_ratios为1或2附近的ground truths和anchor框的匹配度更好,表现为first stage的匹配出来的正样本的iou值很高,second stage匹配到的正样本的数量多,而aspect_ratios >4的ground truths,得到的正样本的质量不好,数量又少。
  下面的分布图是实际训练过程中,ground truths的aspect_ratios和第一阶段的anchor匹配中得到的iou,这个iou值越大,说明和该ground truths匹配的anchor的框质量越好,可以看到,在由参数设置得到的anchor和ground truths匹配得到的正样本质量不是很好,在arm网络的调整之后得到的框是odm的的预设anchor,可以看到这里调整之后的anchor框向ground truth方向进行了靠拢,这样odm和ground truth的匹配度更高。当然在odm中,还是会存在低质量的正样本,这些有可能是面积因素导致的。

armodm
在这里插入图片描述在这里插入图片描述

4.2、KITTI数据集中目ground truths(已归一化)的area分布如下:
  在RefineDet中有四个feature map参与网络的回归,大小分别是64x64、32x32、16x16、8x8,这四层anchor的基础尺寸是32, 64, 128, 256,注意,这里所说的尺寸大小都是针对与输入网络512的大小来说的,因此这些基础尺寸归一化之后是32/512 = 0.0625、64/512 = 0.125、128/512 = 0.25、256/512 = 0.5,因此该四层frature map的anchor面积(三种尺寸的面积都一样)是0.0625x0.0625=0.00390625、0.125x0.125=0.015625、0.25x0.25=0.0625、0.5x0.5=0.25,结合KITTI数据集中的ground truths(已归一化)的area,其分布图如下:
在这里插入图片描述  上面绿色是各个区间分布的ground truth个数,区间是[0, 0.0039],(0.0039, 0.0156],(0.0156, 0.0625], (0。0625, 0.25],(0.25, 0.4]。
  由4.1和4.2可知,当anchor的面积、尺寸和ground truth都贴合时,得当的正样本质量好,且数量多。
  那么这里可以思考下:1、在one-stage的检测框架,(SSD,YOLO等),能不能通过设置合适的anchor的大小和尺寸,从而达到RefindDet 这种two-stage的效果,即acnhor框不需要arm网络的修正,通过分析数据中ground truths的大小和面积,一开始就朝着arm修正过的框的方向设置,提高正样本的质量,从而提高最后的检测准确率。还有一种猜想,不需要过多的去设置anchor框,只是给一个大致的合理的初始化值,CNN网络可以自动去学习anchor框和ground truth之间的距离,因此你怎么去调整anchor框的初始化大小值,最终在检测准确率上都没有表现。在之前的实验中,也尝试在SSD 和YOLO网络里面调整过anchor框的值,但是那时候的调整没有科学依据,因此调整也没有得到很好的反馈。
  2、摒弃anchor框,最近几年流行的free anchor的做法,例如FCOS和foveabox网络,后续中将对这种free anchor的网络进行训练,测试,和RefineDet进行比较,同时对里面的正样本从质量和数量上进行分析,看没有初始化anchor框,得到的正样本是怎么样的。

五、训练时每个feature map层对正样本的贡献率

  共有四层feature map ,大小分布是level_1:64x64,level_2: 32x32,level_3:16x16,level_4:8x8,每层生成的anchor个数分别是12288个, 3072个, 768个,192个,下面的曲线图训练过程中,四层feature map各自生成的正样本个数占总的正样本个数的比例:

armodm
在这里插入图片描述在这里插入图片描述

  这个是KITTI数据集,目标框有大有小,训练过程中,正样本在四个level中都有分布,在实际数据中,可以根据自己的数据集,分析每层feature map的利用率,再结合四个level在测试过程中的贡献率,从而对level进行精简或者增加,根据自己的数据集,定制特有的网络结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值