(6)单次目标检测——SSD

    SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)。SSD具有如下主要特点:

    从YOLO中继承了将detection转化为regression的思路,同时一次即可完成网络训练

    基于Faster RCNN中的anchor,提出了相似的prior box;

    加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式,相当于半个FPN思路。即在不同尺度的特征图上分别进行预测。

    对比SSD于YOLO的网络结构如下:


SSD与YOLO网络结构对比

   可以看到YOLO在卷积层后接全连接层,即检测时只利用了最高层feature maps(包括Faster RCNN也是如此);而SSD采用了特征金字塔结构进行检测,即检测时利用了conv4-3,conv-7(FC7),conv6-2,conv7-2,conv8_2,conv9_2这些大小不同的feature maps,在多个feature maps上同时进行softmax分类和位置回归。

    SSD使用低层feature map检测小目标,使用高层feature map检测大目标 。

   进在SSD中引入了Prior Box,实际上与anchor非常类似,就是一些目标的预选框,后续通过softmax分类+bounding box regression获得真实目标的位置。但是需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。

    在生成一系列的 predictions 之后,会产生很多个符合 ground truth box 的 predictions boxes,但同时,不符合 ground truth boxes 也很多,而且这个 negative boxes,远多于 positive boxes。这会造成 negative boxes、positive boxes 之间的不均衡。训练时难以收敛。

    因此,先将每一个物体位置上对应 predictions(default boxes)是 negative 的 boxes 进行排序,按照 default boxes 的 confidence 的大小。 选择最高的几个,保证最后 negatives、positives 的比例在3:1。

    训练技巧,在使用SSD时候,经常需要选择设置一些超参数,包括Bbox的尺寸和比例等,在训练前对这些做一些统计分析,提前设置好bbox尺寸对训练效果有明显帮助。

你可能感兴趣的:((6)单次目标检测——SSD)