SSD实现细节

目标检测主要分两类:

One-stage:Yolo,SSD

均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归,速度快,准确率低

但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡

Two-stage:R-CNN, Fast R-CNN, Faster R-CNN

先通过Selective Search或者RPN生成候选框,然后对box分类和回归,速度慢,准确率高

 

YoloV1的缺点:Yolo在CNN后的FC之后做检测,同时难以检测小目标,准确率低

SSD的改进

直接在CNN里检测

SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为m*n*p的特征图,只需要采用3*3*p这样比较小的卷积核得到检测值

不同尺度的特征图做检测

大尺度特征图用于检测小物体小尺度特征图用于检测大物体,它在增加运算量的同时可能会提高检测的精度

加入anchor机制

对于大小为M*N的特征图,相当于有MN个单元,每个单元设置K个anchor,而对于每个anchor还要预测c-1+1背景)的概率和anchor的四个偏移量,所以输出是MNKc+4,由于SSD是卷积检测的,所以每个channel对应一个输出,Kc+4)个卷积核

过程:

  • 输入是300*300*3, 在VGG-16的基础上做改动
  • 将FC6和FC7换成卷积层
  • 去掉dropout和FC8
  • 添加Atrous算法
  • 将Pool5改成3*3-S1
  • 抽取conv4-3,conv7,conv8-2,conv9-2,conv10-2,conv11-2,分别做anchor提取特征
  • 将各层得到的box做NMS得到最终结果

贡献:

  • 提出一个单阶段检测器,相对于yolo更快更准,并且不需要RPN和ROI pooling
  • 使用小卷积核在不同尺度的FM上做预测和回归
  • 相对于Faster R-CNN,对小目标检测效果更好

多尺度特征:

相对于传统方法使用某层特定FM做回归预测,SSD使用6层不同尺度的FM做回归预测

相对于Faster R-CNN在conv layers后的FM上生成anchor,SSD在这六层分别生成anchor,然后将这些anchor结合起来,最后做NMS

  • 浅层卷积层对边缘更加感兴趣,可以获得一些细节信息,而深层网络对由浅层特征构成的复杂特征更感兴趣,可以获得一些语义信息,对于检测任务而言,一幅图像中的目标有复杂的有简单的,对于简单的patch我们利用浅层网络的特征就可以将其检测出来,对于复杂的patch我们利用深层网络的特征就可以将其检测出来。
  • 低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的

anchor

数目:

SSD一共在六层FM上应用anchor机制,分别是

  • Conv4-3: 38*38,K=4
  • CONV7:19*19,K=6
  • CONV8-2:10*10,K=6
  • CONV9-2:5*5,K=6
  • CONV10-2:3*3,K=4
  • CONV11-2:1*1, K=4

所以总的anchor数是:

38*38*4 + 19*19*6 + 10*10*6 + 5*5*6 + 3*3*4 + 1*1*4 = 8732

Scale and ratio:

Scale:

假设一共在m层FM上提取anchor,SSD300中是6层,使用如下公式求scale,其中最底层smin=2,最高层smax=0.9

Ratio:

Ar={1, 2, 3,1/2, 1/3}

通过这五种比例,得到五个anchor,另外对于ar=1,添加一个anchor,

损失函数:

Lloc用的Smooth L1,Lconf用的多分类logloss

精度提升的原因

  • 数据增强:SSD算法使用了多种数据增强的方法,包括水平翻转、裁剪、放大和缩小等。论文明确指出,数据增强可以明显的提高算法的性能
  • OHEM:当box很多的时候,大多数负样本,这就造成正负样本的不均衡,文中依据confidience score对default box进行排序,挑选其中confidience高的box进行训练将正负样本比例设定为1:3,其他的负样本权重置0,发现这leads to faster optimization and a more stable training,不然会出现全是负样本的情况,从而影响模型性能。

如何重多个default box中找到和ground truth最接近的box

首先,寻找与每一个ground truth有最大的IoU的default box

之后将剩余还没有配对的default box与任意一个ground truth尝试配对,只要两者之间的IoU大于阈值(SSD 300 阈值为0.5),就认为match;

配对到ground truth的default box就是positive,没有配对的default box就是negative

速度提升的原因

  • 原因1:首先SSD是一个单阶段网络,只需要一个阶段就可以输出结果;而Faster-rcnn是一个双阶段网络,尽管Faster-rcnnBB少很多,但是其需要大量的前向和反向推理(训练阶段),而且需要交替的训练两个网络
  • 原因2:Faster-rcnn中不仅需要训练RPN,而且需要训练Fast-rcnn,而SSD其实相当于一个优化了的RPN网络,不需要进行后面的检测,仅仅前向推理就会花费很多时间;
  • 原因3:YOLO网络虽然比SSD网络看起来简单,但是YOLO网络中含有大量的全连接层,和FC层相比,CONV层具有更少的参数;同时YOLO获得候选BB的操作比较费时;
  • 原因4:SSD算法中,调整了VGG网络的架构,将其中的FC层替换为CONV层,这一点会大大的提升速度,因为VGG中的FC层都需要大量的运算,有大量的参数,需要进行前向推理;
  • 原因5:使用了atrous算法,具体的提速原理还不清楚,不过论文中明确提出该算法能够提速20%。
  • 原因6:SSD设置了输入图片的大小,它会将不同大小的图片裁剪为300x300,或者512x512,和Faster-rcnn相比,在输入上就会少很多的计算

优缺点:

优点:

运行速度超过YOLO,精度超过Faster-rcnn(一定条件下,对于稀疏场景的大目标而言)。

缺点:

需要人工设置prior boxmin_sizemax_sizeaspect_ratio。网络中default box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的default box大小和形状恰好都不一样,导致调试过程非常依赖经验。(相比之下,YOLO2使用聚类找出大部分的anchor box形状,这个思想能直接套在SSD上)

虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值