其他分享
首页 > 其他分享> > SSD学习笔记

SSD学习笔记

作者:互联网

SSD github : https://github.com/weiliu89/caffe/tree/ssd

SSD paper : https://arxiv.org/abs/1512.02325

SSD 动态PPT: https://docs.google.com/presentation/d/1rtfeV_VmdGdZD5ObVVpPDPIODSDxKnFSU0bsN_rgZXc/pub?start=false&loop=false&delayms=3000&slide=id.g179f601b72_0_51

SSD PPT:http://www.cs.unc.edu/~wliu/papers/ssd_eccv2016_slide.pdf

以下文章是本文的补充:

目标检测|SSD原理与实现:https://zhuanlan.zhihu.com/p/33544892

论文阅读:SSD: Single Shot MultiBox Detector : https://blog.csdn.net/u010167269/article/details/52563573
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述原因剖析:
在这里插入图片描述在这里插入图片描述在这里插入图片描述Defalut box分析
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

layer {  
  name: "conv4_3_norm_mbox_priorbox"  
  type: "PriorBox"  
  bottom: "conv4_3_norm"  
  bottom: "data"  
  top: "conv4_3_norm_mbox_priorbox"  
  prior_box_param {  
    min_size: 30.0  
    max_size: 60.0  
    aspect_ratio: 2  
    flip: true  
    clip: false  
    variance: 0.1  
    variance: 0.1  
    variance: 0.2  
    variance: 0.2  
    step: 8  
    offset: 0.5  
  }  
}  

在这里插入图片描述在这里插入图片描述在这里插入图片描述
有一个细节是只有conv4_3层后加了一个Normalization 操作,其他的几层都没有,具体原因参考另一篇文章:Normalization on conv4_3 in SSD :https://blog.csdn.net/ytusdc/article/details/86612355

还有一个细节就是上面prototxt中的4个variance,这实际上是一种bounding regression中的权重。在图10线路(2)中,网络输出[dxmin,dymin,dxmax,dymax],即对应下面代码中bbox;然后利用如下方法进行针对prior box的位置回归:

decode_bbox->set_xmin(  
    prior_bbox.xmin() + prior_variance[0] * bbox.xmin() * prior_width);  
decode_bbox->set_ymin(  
    prior_bbox.ymin() + prior_variance[1] * bbox.ymin() * prior_height);  
decode_bbox->set_xmax(  
    prior_bbox.xmax() + prior_variance[2] * bbox.xmax() * prior_width);  
decode_bbox->set_ymax(  
    prior_bbox.ymax() + prior_variance[3] * bbox.ymax() * prior_height);  

三、SSD训练过程:

然后看一张训练流程图,比较清晰明了:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述**4)**筛选default boxes, 计算完所有default boxes 的分类 loss后,按照 loss 排序,选择 loss 较大且与任意 gt_bbox 之间的 iou 小于 阈值neg_overlap 的样本中的前 3*num_positive 个负样本(保证留下的负样本“够坏”,同时保证1:3的正负比例)。

而后,这正负比为1:3的部分default boxes就是筛选全体default box后剩下的prior boxes,用这些prior box作为参考,对所有预测框其进行分类和回归,进行反向传播更新网络参数,即训练。

3、Data augmentation(数据增强):
在这里插入图片描述在这里插入图片描述

5、NMS(非极大值抑制)

在SSD算法中,NMS至关重要,因为多个feature map 最后会产生大量的BB,然而在这些BB中存在着大量的错误的、重叠的、不准确的BB,这不仅造成了巨大的计算量,如果处理不好会影响算法的性能。仅仅依赖于IOU(即预测的BB和GT的BB之间的重合率)是不现实的,IOU值设置的太大,可能就会丢失一部分检测的目标,即会出现大量的漏检情况;IOU值设置的太小,则会出现大量的重叠检测,会大大影响检测器的性能,因此IOU的选取也是一个经验活,常用的是0.65,建议使用论文中作者使用的IOU值,因为这些值一般都是最优值。即在IOU处理掉大部分的BB之后,仍然会存在大量的错误的、重叠的、不准确的BB,这就需要NMS进行迭代优化。

四、SSD性能评估

1、模块性能评估
在这里插入图片描述在这里插入图片描述

五、SSD网络结构优劣分析

优点:

SSD算法的优点应该很明显:运行速度可以和YOLO媲美,检测精度可以和Faster RCNN媲美。SSD对不同横纵比的object的检测都有效,这是因为算法对于每个feature map cell都使用多种横纵比的default boxes,这也是本文算法的核心。最后本文也强调了增加数据集的作用,包括随机裁剪,旋转,对比度调整等等。

缺点:

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

2、虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。所以增加输入图像的尺寸对于小的object的检测有帮助。另外增加数据集(此处主要是指裁剪)对于小的object的检测也有帮助,原因在于随机裁剪后的图像相当于“放大”原图像,所以这样的裁剪操作不仅增加了图像数量,也放大了图像。

转:
https://blog.csdn.net/ytusdc/article/details/86577939

标签:box,笔记,学习,prior,bbox,https,variance,SSD
来源: https://blog.csdn.net/W1995S/article/details/115337359