基于SSD的交通标志检测-介绍ssd算法

去年11月关注到这类问题。在目标检测这类视觉任务中,目前的处理方式分为two-stage和one-stage,one-stage中代表就是yolo和ssd。yolo去年5月时候就跟学长一起了解过,而关于ssd的内容却所知不多。

网上关于ssd算法论文的内容解读的非常的多,对于初学者,找一篇原创并且排版合理的文章,就可以大致了解ssd算法的内容了。

基于上诉情况,对于ssd算法的内容,我会给出我以前所看的一些文章的链接,给大家参考。而我的重点主要是记录一下,自己在ssd上的个人理解和感觉,以及ssd在交通标志上应用的开发情况。

ssd的链接

AL之路的文章

这是我喜欢的一位博主,他的文章值得一看,而且涉及内容广泛。我的一些内容也会参考他的文章。

ssd算法

不管是对于初学者还是开发者来讲,了解一个算法的功能特点是非常重要的。ssd算法能成为one-stage中的代表,区别它和其他算法,更加有利于理解。

所以,我会把ssd和一些代表性的目标检测算法进行比较,一些会参考他人的想法,一些会是自己的想法。

ssd网络的模块功能

ssd算法的baseNextwork是vgg-16。在vgg的基础上有所改进,改进的内容是把后面两个全连接层改成卷积层,然后在后面加了4个卷积层。图中充分解释了网络的改进情况(在下面第一张图)。

大部分文章基本上都是根据术语来解释网络,但是很少提到网络的功能,对初学者理解网络不友好。

ssd网络分为:卷积层;目标检测层;筛选层。

1.卷积层:就是baseNextwork。基本所有的目标检测网络都会用个cnn卷积网络来提取特征,然后后面再进行目标定位和目标分类的任务。

ssd中的卷积层就是vgg-16衍生出来的,第一张图中的主体部分就是ssd的卷积层。

所以,对于算法的改进之一,就是在baseNextwork上动手脚,一般有各种各样的cnn网络可以选择。对于每个网络的特点,会在我以后的文章中详细介绍。

2.目标检测层:由5个卷积层和1个平均池化层组成,去掉最后的全连接层。这样有点边缘检测和语义分割的意思。没有了全连接层,所以ssd给出的感受野不是全视野。

目标检测层是ssd算法的核心。主要有以下特点。(在第二张图中给出卷积层输出的feature map如何处理)

2.1多尺寸的feature map:这个原理跟语义分割相似,每个stage的卷积层都会输出不同感受野的feature map,结合我最近所了解的边缘检测算法,对于每个stage的卷积层不同利用,也是一种改进算法的思路。ssd算法可以克服yolo对于宽高比不常见的物体,识别准确率较低的问题。而yolo只在最后一个卷积层上做目标定位和类别的训练和预测。

2.2多个anchors

 

3.筛选层:和yolo的筛选层基本一致,同样先过滤类别概率低于阈值的default box,再采用NMS非极大值抑制,筛选重叠度较高的。区别在于ssd有不同feature map的输出的default box。

 

基于SSD的交通标志检测-介绍ssd算法_第1张图片

(从左开始,首先是input图像(300x300),然后是vgg-16的卷积层(conv4_3提取feature map),后面是fc6,fc7改成卷积层(conv7提取feature map),然后是额外的卷积层。最后就是detection层和筛选层。)

注:卷积的作用就是给出input的feature map(特征),接下来的任务就是在根据feature map来进行检测,最后对检测结果进行刷选。

上张图如果是刚接触检测的初学者,可能有点看不懂。上图的重点是解释了基于vgg-16的网络改造情况。和下面这张图对比来看更好。下图把所有的网络模块都展开了,这样更能理解ssd算法是怎样运行的。

基于SSD的交通标志检测-介绍ssd算法_第2张图片

小总结

作为one-stage中的代表算法,不管是目标检测领域的算法,还是其他领域的深度学习算法,模型之间都有很强的延续性。大部分模型算法都借鉴了前人的思想。所以了解经典模型的特点,对于大家在算法这条路上很有帮助。

另外:基于目标检测领域的难点如下:

1.检测速度:实时性要求高,故网络结构不能复杂,参数不能太多,卷积层次不能太多。

2.位置准确率:(x y w h)参数必须准确,检测框大小尺寸要匹配。

3.漏检率:必须尽量检测出所有目标物体,对于靠的近和尺寸小的物体。

4.物体宽高比例不常见。

5.靠的近的物体准确率低。

6.小尺寸物体准确率低。

上述问题,在各类目标算法上都给出相应的解决方法。在另一个专题,我会根据实际代码来解释各类经典的算法是怎么解决上述问题的。

结尾

网上大多数文章只是根据论文的翻译来解释ssd的网络情况,对于网络具体情况,其他文章都写的很详细。但是在初学的时候,如果没有基础,是很难理解网络为什么要那样构造,所以本文重点介绍了网络每部分的作用。之后会根据通过代码的形式具体来解释各部分的内容。

 

你可能感兴趣的:(交通标志-ssd,ssd,目标检测,交通标志)