当前位置: 首页>編程日記>正文

SSD目标检测

SSD目标检测

一、简介

SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势。
SSD主要用来解决目标检测的问题(定位+分类),即输入一张待测图像,输出多个box的位置信息和类别信息;测试时,输入一张图像到SSD中,网络输出一个下tensor(多维矩阵),对该矩阵进行非极大值抑制(NMS)就能得到每个目标的位置和label信息
在这里插入图片描述
SSD具有如下主要特点:

  • 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类;
  • 基于Faster RCNN中的Anchor,提出了相似的Prior box;
  • 加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式,即在不同感受野的feature map上预测目标

二、SSD 300网络结构

在这里插入图片描述
截止到目前目标检测分为了2种主流框架:

Two stages:以Faster RCNN为代表,即RPN网络先生成proposals目标定位,再对proposals进行classification+bounding box regression完成目标分类。
Single shot:以YOLO/SSD为代表,一次性完成classification+bounding box regression。
SSD与YOLO区别:

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

在这里插入图片描述
2 Prior Box
在SSD300中引入了Prior Box,实际上与Faster RCNN Anchor非常类似,就是一些目标的预选框,后续通过classification+bounding box regression获得真实目标的位置。
SSD按照如下规则生成prior box:

  • 以feature map上每个点的中点为中心(offset=0.5),生成一些列同心的prior box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)
  • 正方形prior box最小边长为min−sizemin_-sizeminsize,最大边长为 min−size∗max−size\sqrt{min_-{size}*max _-{ size}}minsizemaxsize
  • 每在prototxt设置一个aspect ratio,会生成2个长方形,长宽为:aspect−ratio∗max−size\sqrt{aspect_-{ratio}}*max _-{ size}aspectratiomaxsize
    1/aspect−ratio∗min−size1/\sqrt{aspect_-{ratio}}*min _-{ size}1/aspectratiominsize

在这里插入图片描述
而每个feature map对应prior box的min_size和max_size由以下公式决定:
[公式]

公式中的 m 是指进行预测时使用feature map的数量,如SSD300使用conv4-3等6个feature maps进行预测,所以 m = 6 。同时原文设定smins_{min}smin=0.2 ,smaxs_{max}smax=0.9。

那么:

对于conv4-3: k=1 , min−size=s1∗300min_ -{size}=s_{1}*300minsize=s1300 , max−size=s2∗300max_ -{size}=s_{2}*300maxsize=s2300
对于conv-7:k=2 , min−size=s2∗300min_ -{size}=s_{2}*300minsize=s2300 , max−size=s3∗300max_ -{size}=s_{3}*300maxsize=s3300

显然可以用上述公式推导出每个feature maps使用的Prior Box size。但是在SSD300中prior box设置并不能完全和上述公式对应:
在这里插入图片描述

三、SSD的数据流
对于新学习SSD的人,肯定有一个很大的困惑,就是这么多feature maps和Prior Box,如何组合在一起进行forwards/backwards。本节专门介绍SSD的数据流动方式,也许有点难。但是只有了解SSD的数据流动方式才能真的理解。
在这里插入图片描述四、 SSD网络结构优劣分析
SSD算法的优点应该很明显:运行速度可以和YOLO媲美,检测精度可以和Faster RCNN媲美.
但也有缺点:

需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。
虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。
五、算法
(1)算法步骤
1、输入一幅图片(300x300),将其输入到预训练好的分类网络中来获得不同大小的特征映射,修改了传统的VGG16网络

①将VGG16的FC6和FC7层转化为卷积层,如图1上的Conv6和Conv7;
②去掉所有的Dropout层和FC8层;
③添加了Atrous算法(hole算法);
④将Pool5从2x2-S2变换到3x3-S1;
2、抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2层的feature map,然后分别在这些feature map层上面的每一个点构造6个不同尺度大小的bbox,然后分别进行检测和分类,生成多个bbox。

3、将不同feature map获得的bbox结合起来,经过NMS(非极大值抑制)方法来抑制掉一部分重叠或者不正确的bbox,生成最终的bbox集合(即检测结果);
(2)算法细节
①多尺度特征映射

SSD算法中使用到了conv4_3,conv_7,conv8_2,conv7_2,conv8_2,conv9_2,conv10_2,conv11_2这些大小不同的feature maps,其目的是为了能够准确的检测到不同尺度的物体,因为在低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的。

我们将一张图片输入到一个卷积神经网络中,经历了多个卷积层和池化层,我们可以看到在不同的卷积层会输出不同大小的feature map(这是由于pooling层的存在,它会将图片的尺寸变小),而且不同的feature map中含有不同的特征,而不同的特征可能对我们的检测有不同的作用。
总的来说,浅层卷积层对边缘更加感兴趣,可以获得一些细节信息,而深层网络对由浅层特征构成的复杂特征更感兴趣,可以获得一些语义信息,对于检测任务而言,一幅图像中的目标有复杂的有简单的,对于简单的patch我们利用浅层网络的特征就可以将其检测出来,对于复杂的patch我们利用深层网络的特征就可以将其检测出来,因此,如果我们同时在不同的feature map上面进行目标检测,理论上面应该会获得更好的检测效果。

②Defalut box

在这里插入图片描述
如上图所示,在特征图的每个位置预测K个bbox,对于每一个bbox,预测C个类别得分,以及相对于Default box的4个偏移量值,这样总共需要 (C+4)×K个预测器,则在m×n的feature map上面将会产生 (C+4)×K×m×n个预测值。

SSD中的Defalut box和Faster-rcnn中的anchor机制很相似。就是预设一些目标预选框,后续通过softmax分类+bounding box regression获得真实目标的位置。对于不同尺度的feature map 上使用不同的Default boxes。

③Loss
loss函数分为两部分:计算相应的default box与目标类别的confidence loss以及相应的位置回归。
在这里插入图片描述

其中N是match到Ground Truth的default box数量;而alpha参数用于调整confidence loss和location loss之间的比例,默认alpha=1。

位置回归则是采用 Smooth L1 loss,loss函数为:
在这里插入图片描述

confidence loss是典型的softmax loss:
在这里插入图片描述
④数据增广
数据增强可以明显的提高算法的性能。

不同于Faster R-CNN,SSD算法使用了多种数据增强的方法,包括水平翻转、裁剪、放大和缩小等。主要的目的是为了使得该算法对输入的不同大小和不同形状的目标具有更好的鲁棒性。直观的理解是通过这个数据增强操作可以增加训练样本的个数,同时构造出更多的不同形状和大小的目标,将其输入到网络中,可以使得网络学习到更加鲁棒的特征。
在这里插入图片描述
在这里插入图片描述
⑤ NMS(非极大值抑制)
NMS简单原理: 对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大 score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值的框从B中移除.重复这个过程,直到B为空。

在 SSD 算法中,NMS 至关重要。因为多个 feature map 最后会产生大量的 bounding boxes,即最终检测结果。然而在这些bounding boxes中存在着大量的错误的、重叠的、不准确的样本,这不仅造成了巨大的计算量,如果处理不好会影响算法的性能。仅仅依赖于IOU 是不现实的,IOU值设置的太大,可能就会丢失一部分检测的目标,即会出现大量的漏检情况;IOU值设置的太小,则会出现大量的重叠检测,会大大影响检测器的性能。

即使在IOU处理掉大部分的bounding boxes之后,仍然会存在大量的错误的、重叠的、不准确的bounding boxes(,这就需要NMS进行迭代优化。
在这里插入图片描述
⑥SSD算法的局限:
SSD采用多尺度的特征图来预测物体,使用具有较大感受野的高层特征信息预测大物体,具有较小感受野的低层特征信息预测小物体。

这样就带来一个问题:使用的低层网络的特征信息预测小物体时,由于缺乏高层语义特征,导致SSD对于小物体的检测效果较差。

而解决这个问题的思路就是对高层语意信息和低层细节信息进行融合。DSSD采用Top Down的网络结构进行高低层特征的融合并且改进了传统上采样的结构。

DSSD算法思想:

DSSD使用一种通用的Top Down的融合方法,使用VGG和Resnet网络,以及不同大小的训练图片尺寸来验证算法的通用性。

将高层的语义信息融入到低层网络的特征信息中,丰富预测回归位置框和分类任务输入的多尺度特征图,以此来提高检测精度。

在提取出多尺度特征图之后,DSSD 提出由残差单元组成的预测模块,进一步提取深度的特征最后输入给框回归任务和分类任务。
其他的就不多赘述了~


https://www.fengoutiyan.com/post/14660.html

相关文章:

  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機