目标检测-SSD总结

Posted by 刘知安 on 2019-11-28
文章目录
  1. 1.感悟
    1. 1.1 训练
      1. 1.1.1 网络的搭建
      2. 1.1.2 数据集
      3. 1.1.3 Default box
      4. 1.1.4 Loss function
      5. 1.1.5 可视化
      6. 1.1.6 数据增强
    2. 1.2 评估
    3. 1.3 测试
    4. 1.4 应用
  2. 2.后记

1.感悟

这次前前后后大概花了1周的时间把SSD训练、评估、测试、应用部署整个阶段都学习了一遍,为什么说学习呢?因为代码是别人开源的,但是自己也是from scratch,从0到1全部实现了一次。在这次复现论文的过程中,总得来说,遇到的困难不是很多,Google查下基本都能解决,这里还是记录一下学习时候的感悟吧,以后再翻阅也好有个更新的印象。

1.1 训练

总的来说,我并没有按照论文中说的训练120000 iterations,我只训练了75000,结果已经和paper公布的结果很接近了。

1.1.1 网络的搭建

网络的搭建部分还是比较简单的,注意一下,SSD300在BaseNet用的是VGG-16,最开始初始化的时候是用了pre-trained参数的,其实这个地方我个人觉得影响不会很大,可以自己DIY,不过我没有试过。后面部分网络参数初始化用的是Xavier方式。

1.1.2 数据集

训练数据集用的是VOC2007和VOC2012的training set,然后注意一下怎么把XML的各个标签解析出来,而且XML中的bbox格式是基于左上角和右下角的坐标的,而网络中是基于中心坐标表示的方式,然后长宽分别是基于default box的长和宽,然后取log对数的

1.1.3 Default box

defalut box相当于是先验知识,是基于很多物体的大小和长宽比(aspect ratio)统计得出的,在SSD中分别取了很多种大小,最小比例的是整个图片大小的0.2倍,最大的比例是整个图片的0.9倍,然后中间可以自己随便取一些值,这需要根据中间从多少不同层取预测结果来确定,也就是Multi-feature maps,越靠后,比例应该越大,反之比例越小。然后在每个物体大小比例的前提下,又有不同的长宽比,比如人是高比宽长的,而汽车则相反,SSD论文中取了6个长宽比,具体细节看论文。每一张图片,都会有N多个相同的default boxes。

1.1.4 Loss function

这一部分是最复杂,也是最关键的。大概有下面这些问题需要着重关注:

  • 真的所有default box的都用去匹配吗?
    不是这样的。我们知道,每个训练图片都会有ground truth信息,也就是真实的框,一张图,最多也就10多个物体,也就是10多个真实框,而我们的default boxes会有很多很多,几千个(8732个),怎么可能这么多都拿去训练?策略是:我们根据每个真实框,找到它所对应的default box(怎么找?先以每个真实框为目标,找到它对应最大交并比的default box,当然,匹配到的default box对应的各个长宽比都也考虑。)
    还有一个重点,这也是SSD中需要尤其关注的地方,SSD不仅要求把真实框对应的default box找到,也要求找到default box和真实框IoU大于0.5的框,也算到训练的positive samples中去。这样一来,相当于让算法有了找到更多框的功能,虽然说不是很精确,但是在后面可以用non-max supperission筛除掉。

  • Hard Negative Mining,难负样本挖掘
    按照上面的匹配策略,我们大概会有匹配到几十个正样本,剩下的8000多个全是负的,我们不可能全都拿来训练,SSD采取的策略是让剩下的negative samples先按照置信度排个序,然后按照负正样本比例为3:1的比例选一些负样本出来,参与到loss function的计算中。

1.1.5 可视化

可视化部分用到了visdom这个工具,可以把loss实时地输出到一个图表中,很是方便。支持自适应地将坐标比例缩放。

1.1.6 数据增强

这个部分就不多说了,论文中说的很明白。

1.2 评估

这次的评估指标用的是mAP,具体来说,是VOC 2007的11点取值评估方法,网上有很多相关资料说的很清楚了,如果以后有必要,再翻阅一下。我在训练75000 iterations后已经和论文中公布的结果很接近了,好多类基本都超过了,但是也有几类略低,但都是低了一点点,可接受,总的各类平均mAP是72.5,论文公布的是72.4。

1.3 测试

由于评估结果不错,我就没有再去测试test set了。

1.4 应用

本来我开始是考虑写个Android小程序的,无奈手边没有Android手机。iOS把有手机但没有电脑,也之前没折腾过IOS开发,想了一下也没有必要去花这个时间,最后我就在本机上写了个脚本应用,可以实时打开摄像头进行预测,也可以对视频、图片进行预测。下面是应用到最近比较火的一段视频的结果: