SSD:Single Shot MultiBox Detector

    xiaoxiao2022-06-26  97

    arxiv: http://arxiv.org/abs/1512.02325paper: http://www.cs.unc.edu/~wliu/papers/ssd.pdfslides: http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdfgithub(Official): https://github.com/weiliu89/caffe/tree/ssdvideo: http://weibo.com/p/2304447a2326da963254c963c97fb05dd3a973github: https://github.com/zhreshold/mxnet-ssdgithub: https://github.com/zhreshold/mxnet-ssd.cppgithub: https://github.com/rykov8/ssd_kerasgithub: https://github.com/balancap/SSD-Tensorflowgithub: https://github.com/amdegroot/ssd.pytorchgithub(Caffe): https://github.com/chuanqi305/MobileNet-SSD

    1、设计理念

           SSD和YOLO一样都是采用一个CNN网络来进行检测,但是却采用多尺度的特征图,基本架构如下所示,下面将从SSD核心设计理念总结为一下三点:  

    (1)采用多尺度特征图用于检测        所谓多尺度即采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,如上图所示,一个比较大的特征图和一个比较小的特征图,都用来检测,这样做的好处是比较大的特征图来检测相对较小的目标,而小的特征图负责检测大目标,如下图所示,8*8的特征图可以划分更多的单元,其每个单元的先验框尺度比较小。  

    (2)采用卷积进行检测        与YOLO最后采用全连接层不同,SSD直接采用卷积对不同的特征图进行提取检测结果。对于形状m × n × p的特征图,只需要采用3 × 3 × p这样笔记哦啊小的卷积核得到检测值。

    (3)设置先验框

            在YOLO中,每个单元预测多个边界框,但是其都是相对这个单元本身(正方块),但是真是目标的形状是多变的,YOLO需要在训练过程中自适应目标的形状。SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框(bounding boxes)是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如下图所示,每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练。

     SSD的检测与YOLO不太一样,对于每个单元的先验框,都能输出一套独立的检测值,对应一个边界框,主要分为两个部分。第一部分是各个类别的置信度或者评分,值得注意的是SSD将背景也当作一个特殊的类别,如果检测目标共有c个类别,SSD其实需要预测c + 1 个置信度值,其中第一个置信度指的是不含目标或者属于背景的评分。在预测过程中,置信度最高的那个类别就是边界框所属的类别,特别地,当第一个置信度最高时,表示边界框中并不包含目标。第二部分就是边界框location,包含4个值(cx,cy,w,h),分别表示边界框的中心坐标以及宽高,但是真实预测值其实只是边界框相对于先验框的转换值。

    2、网络结构

            SSD采用VGG作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图用于检测。SSD的网络结构如下图所示,上图是SSD模型,下面是YOLO模型,可以明显看到SSD利用了多适度的特征图做检测。

    3、创新点

     多尺度特征图利用卷积进行检测设置先验框

    4、参考

    https://blog.csdn.net/xiaohu2022/article/details/79833786https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html#ssdhttps://blog.csdn.net/qq_35451572/article/details/80320708

    5、加入我们


    最新回复(0)