SSD究竟如何实现功能以及如何优化--个人探讨

SSD究竟如何实现功能以及如何优化--个人探讨

SSD已经推出很长时间了,简单的结构 和one-stage 的训练,让我心生喜欢。

美中不足就小目标的召回率吧,这确实也是一个让人头疼的问题。

要想优化SSD,先来把SSD的原理吃透吧。

首先是特征提取,这涉及到不同的backbone network, 一开始是VGG、ResNET,后来也不断有新的结构提出。

本文主要还是以VGG为例,我个人觉得VGG是 old but classic。

先上一波网络结构图

SSD网络的检测流程图


SSD训练的损失函数

为什么是conv4_3 来负责小目标,而不是conv3-3或者 conv5-1. 这个问题我觉得自己没有想明白,也许weiliu大神当时有做过实验,或者有自己的考虑。毕竟神经网络是玄学。。。

以ssd 300为例。对应conv4_3的default box minsize是30 maxsize 是60

30/300 =1/10, 所以在图片中长和宽占比都小于十分之一的目标,对于SSD300模型来说,是几乎不具备检测能力的。

其实神经网络就基于仿生学诞生的,所以至少现阶段应该努力达到人眼的识别能力。这一点上SSD差的有点多啊

因此后续会进行一些实验,如果拿conv3_3之类更低一级的特征层来生成priorbox会出现什么现象呢,会不会导致运算时间大大增加? 需不需要做特征融合?

毕竟SSD的一大优势就是 FPS和mAP的trade-off,最后上一波SSD和YOLO V3的对比.....

反正我就是对基于anchor boxes的方法爱的深层。。

SSD缺点

需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。这个可以通过K均值聚类实现。

虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。

请大家多多支持,我是从事AI工作的中科院妹子~

发布于 2019-04-25

文章被以下专栏收录