• 深度学习-物体检测SSD


    一:SSD结构

    VGG-16为基础,使用VGG的前五个卷积,后面增加从CONV6开始的5个卷积结构,输入图片要求300*300

    1. 分别将VGG16的全连接层FC6和FC7转换成3x3的卷积层Conv6和1x1的卷积层Conv7

    2.去掉所有的Dropout层和FC8层

    3.同时将池化层pool5中的stride=2的2x2变成了stride=1的3x3

    4.添加了Atous算法,目的获取更加密集的得分映射

    5.然后在VGG16的基础上新增了卷积层来获得更好的特征图以用于检测

    它针对输入的图片获取不同尺度的特征映射,但是在预测阶段仅仅使用了最后一层的特征映射。 同时在不同的特征映射上面进行预测,它在增加运算量的同时可能会提高检测的精度,因为它具有更多的可能性。

    二:流程

     

    如上图,输入以辆汽车图片,经历了多个卷积层和池化层,可以看到,不同的卷积层会输出不同大小的feature map(特征图),而且不同的feature map中有不同的特征,不同的特征有不同的作用,都会输入到NMS中。总的来说,浅层卷积层对边缘更加感兴趣,可以获得一些位置信息,二深层网络对有浅层特征构成的复杂特征更感兴趣,可以获得一些语义信息,对于检测任务而言,目标有复杂有简单的,对于简单的我们利用浅层网络的特征就可以检测出来,对于复杂的利用深层网络的特征检测出来。因此,如果同时在不同的feature map上面进行检测,理论上会有更好的检测结果。

     SSD中引入了Defalut Box(候选框),实际上与Faster R-CNN的anchor box(候选框,不同的结构力叫法不一样)机制类似,就是预设一些目标预选框,不同的是在不同尺度feature map所有特征点上使用PriorBox层

    生成一系列feature map时,传统框架会在feature map上进行region proposal提取出可能有物体的部分然后分类,这一步非常费时,所以SSD就放弃了,而是选择将直接生成一系列defaul box(候选框),然后以prior box为初始bbox,将bbox回归到正确的GT位置上去,预测出的定位信息实际上是回归后的bboxes和回归前的prior box的相对坐标,整个过程通过网络的一次前向传播就可以完成。

    三:Detector和classifier

     Detector和classifier的三个部分

    1.PriorBox层:生成default boxes,默认候选框

    2.Conv3x3:生成localization,4个位置偏移

    3.Conv3x3:confidence,21个类别置信度(要区分出背景)

     

    四:PriorBox层-default boxes

     训练中还有一个东西:Prior box,是指实际中选择的要投入训练过程的Default box(每一个feature map cell 不是k个Default box都取)。
          也就是说Default box是一种概念,Prior box则是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。
           举个列子:假设一个训练样本中有2个ground truth box,所有的feature map中获取的prior box一共有8732个。那可能分别有10、20个prior box能分别与这2个ground truth box匹配上。

    default boxex类似于RPN当中的滑动窗口生成的候选框,SSD中也是对特征图中的每一个像素生成若干个框,以feature map上每个点的中点为中心(offset=0.5),生成一些列同心的Defalut box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)

     

    特点分析:
    priorbox:相当于faster rcnn里的anchors,预设一些box,网络根据box,通过分类和回归给出被检测到物体的类别和位置。每个window都会被分类,并回归到一个更准的位置和尺寸上
    各个feature map层经过priorBox层生成prior box 

     根据输入的不同aspect ratio 和 scale 以及 num_prior来返回特定的default box,default box 的数目是feature map的height x width x num_prior。

     

    五:localization与confidence

     这两者的意义如下,主要作用用来过滤,训练

    六:训练与测试流程

    1.train流程

     输入->输出->结果与ground truth标记样本回归损失计算->反向传播, 更新权值

    2.样本标记

    先将prior box与ground truth box做匹配进行标记正负样本,每次并不训练8732张计算好的default boxes, 先进行置信度筛选,并且训练指定的正样本和负样本, 如下规则

    正样本:

    1.与GT重合最高的boxes, 其输出对应label设为对应物体.
    2.物体GT与anchor iou满足大于0.5

    负样本:其它的样本标记为负样本

    七:损失

     网络输出预测的predict box与ground truth回归变换之间的损失计算, 置信度是采用 Softmax Loss(Faster R-CNN是log loss),位置回归则是采用 Smooth L1 loss (与Faster R-CNN一样)

     

  • 相关阅读:
    C#的类型转换
    dpdk 运行testpmd 出现: Couldn‘t get fd on hugepage file (已解决)
    【matplotlib基础】--样式表
    06 Qt自绘组件:Switch动画开关组件
    第三次线上面试总结(2022.9.15 二面)
    危化企业双重预防机制数字化建设进入全面实施阶段
    【Typescript基础】函数详解
    10个python爬虫入门实例
    c语言:通讯录
    leetcode11-盛最多水的容器
  • 原文地址:https://blog.csdn.net/m0_73426548/article/details/142172558