SSD算法

文章目录

    • 1.目标检测的主流算法
    • 2.核心思想
    • 网络结构
    • 具体过程

1.目标检测的主流算法

  1. two-stage
    以R-CNN,Fast R-CNN,Faster R-CNN等为代表的两阶段结构。产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高。
  2. one-stage
    以YOLO、SSD等方法为代表的Single-Shot结构。该结构为真正的端到端训练。其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,所以其优势是速度快,但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss),导致模型准确度稍低。 SSD算法_第1张图片
    ssd
    SSD算法_第2张图片
    yolo
    SSD算法_第3张图片
    对比SSD和YoLo,SSD采用CNN直接进行检测,而非向Yolo在全连接之后进行检测,一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors),而yolo 仅仅划分图片特征为不重叠的s*s块先验框,每个先验框预测B=2个边框。
    原文:https://blog.csdn.net/xiaohu2022/article/details/79833786
    SSD克服了难以检测小目标,而且定位不准的问题。

2.核心思想

三个特点
1.采用多尺度特征图检测
CNN网络前面的特征图比较大,检测小物体。后面的会逐渐采用stride=2的卷积或者pool来降低特征图大小,检测大物体。
SSD算法_第4张图片
2.采用卷积进行检测
Yolo最后采用全连接网络进行检测,而SSD相当于全卷积网络。
3.设置先验框
Yolo中每个单元的先验框都是正方形的,所以需要在训练过程中自适应目标,SSD采用每个单元设置不同的先验框,一定程度减少训练难度。对输入的每个像素(pixel)作为中心点,设置不同的先验框。每个先验框分为两部分:一部分是置信度。SSD将背景也当做了一个特殊的类别,如果检测目标共有cc个类别,SSD其实需要预测c+1个置信度值。y=[p,bx,by,bw,bh,c1…cn],p表示背景置信度,bx.by表示目标中心点的坐标。另一部分是边界框位置。

网络结构

SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。
SSD算法_第5张图片
分别将VGG16的全连接层fc6和fc7转换成3×33×3卷积层conv6和1×11×1卷积层conv7
VGG16中的Conv4_3层将作为用于检测的第一个特征图。conv4_3层特征图大小是38×3838×38,从后面新增的卷积层中提取Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2作为检测所用的特征图,加上Conv4_3层,共提取了6个特征图,其大小分别是(38,38),(19,19),(10,10),(5,5),(3,3),(1,1),38384+19196+10106+556+334+114=8732,将这些先验框送入NMS模块(非极大值抑制【只保留最大值的意思】),但是不同特征图设置的先验框数目不同,对于先验框的尺度,其遵守一个线性递增规则:随着特征图大小降低,先验框尺度线性增加。
得到了特征图之后,需要对特征图进行卷积得到检测结果。

具体过程

1.ground truth(真实目标)与先验框匹配
匹配成功后,与先验框所对应的边界框负责预测结果。由于Yolo的先验框是单元格,所以YOLo是在单元格中与其IOU最大的边界框匹配。而SSD匹配原则有两个:对于每个ground truth 找到与其最大的IOU最大的先验框匹配。(IOU是两个区域的交集和并集的比)保证每个ground truth一定与某个先验框匹配。匹配上的先验框称为正样本。若没有和真实目标匹配 则是负样本。考虑到一个图片真实结果少,导致负样本太多,所以有第二个原则,对于剩余未匹配的先验框,若IOU大于某个阈值(0.5)则也可以匹配。意味着某个真实结果对应多个先验框。

你可能感兴趣的:(SSD算法)