首页 > 编程知识 正文

ssd检测框架,目标检测ssd原理

时间:2023-05-03 19:43:24 阅读:187042 作者:516

论文链接: https://arxiv.org/pdf/1512.02325.pdftensorflow来源链接: https://github.com/balancap/SSD-tensor flow

SSD是继YOLO之后另一种备受关注的目标检测结构,沿用了YOLO中直接回归Box和分类概率的方法,同时借鉴Faster R-CNN,大量使用anchor提高识别精度。 通过组合这两种结构,SSD可以维持较高的识别速度,将mAP提高到较高的水平。

一、基本结构和原理作者给出了两种SSD结构,SSD 300和SSD 512,用于不同输入大小的图像识别。 本文以SSD 300为例,可以比较图1的上半部分为SSD 300、下半部分为YOLO。 SSD 300中输入图像的尺寸为300x300,特征提取部使用VGG16的卷积层,将VGG16的两个全部连结层变换为通常的卷积层(图中conv6和conv7 ),然后变换为多个卷积conv8_1、con V8

图1:SSD 300和YOLO结构比较1、SSD同时使用多个卷积层输出进行分类和位置回归:

由图1可知,YOLO仅使用最后一层的7x7数据进行了回归,但SSD对conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2进行了最后的检索固态硬盘有什么好处呢?

要回答这个问题,我们必须先回顾一下YOLO的结构。 YOLO在训练时ground truth和bbox是一对一的关系。 ground truth计算其中心位置所在区域中IOU最大的bbox对应的loss。 如果两个ground truth的大小和位置相似,则很可能对应同一区域的同一区域。为了解决这个问题,SSD的作者对YOLO的结构进行了以下优化:

a、重新启用了Faster R-CNN的anchor结构。 SSD有多个接地真时,每个anchor (原文中称为default box,只是名字不同)选择与IOU对应的最大接地真。 一个ground truth只能对应一个ground truth,但一个ground truth可以对应大量的anchor,所以无论两个ground truth靠得多近,bbox都不会在YOLO上碰撞。

B、同时使用多个水平的anchor进行回归作者认为,仅用同一水平的多个anchor进行回归,还不够。 因为这上面所有的anchor的IOU很可能都很小。 这意味着所有的anchor都离ground truth很远,用这个anchor训练的话误差会很大。 例如,在图2中,左下方的阶层由于feature map的大小较大,anchor覆盖的范围较小,远远小于ground truth的大小,因此在这个阶层中与所有anchor对应的IOU较小; 右边的高水平因为feature map的大小很小,anchor覆盖的范围很广,远远超过了ground truth的大小,所以IOU也同样只有图2中间的anchor有很大的IOU。 通过对多个级别的anchor同时计算IOU

找到与ground truth的尺寸、位置最接近(即IOU最大)的一批anchor,在训练时也就能达到最好的准确度。

图2:不同层级输出的feature map上anchor的IOU差异会比较大

2、anchor尺寸的选择:

下面来看下SSD选择anchor的方法。首先每个点都会有一大一小两个正方形的anchor,小方形的边长用min_size来表示,大方形的边长用sqrt(min_size*max_size)来表示(min_size与max_size的值每一层都不同)。同时还有多个长方形的anchor,长方形anchor的数目在不同层级会有差异,他们的长宽可以用下面的公式来表达,ratio的数目就决定了某层上每一个点对应的长方形anchor的数目:

公式1

上面的min_size和max_size由公式2计算得到,Smin=0.2,Smax=0.95,m代表全部用于回归的层数,比如在SSD 300中m就是6。第k层的min_size=Sk,第k层的max_size=Sk+1

公式2

注:以上是作者论文中给的计算各层anchor尺寸的方法,但在作者源码中给的计算anchor方法有点差异,没有和论文的方法完全对应上。

图3:anchor的尺寸的选择

3、loss的计算:

SSD包含三部分的loss:前景分类的loss、背景分类的loss、位置回归的loss。计算公式如下:

公式3 公式4

公式3中Lconf (x,c)是前景的分类loss和背景的分类loss的和,Lloc (x,l,g)是所有用于前景分类的anchor的位置坐标的回归loss。

公式里的N表示被选择用作前景分类的anchor的数目,在源码中把IOU>0.5的anchor都用于前景分类,在IOU<0.5的anchor中选择部分用作背景分类。只选择部分的原因是背景anchor的数目一般远远大于前景anchor,如果都选为背景,就会弱化前景loss的值,造成定位不准确。在作者源码中背景分类的anchor数目定为前景分类anchor数的三倍来保持它们的平衡。xpij是第i个anchor对第j个ground truth的分类值,xpij不是1就是0。

Lloc (x,l,g)位置回归仍采用Smooth L1方法, 有不了解的可以去百度下,其中的α是前景loss和背景loss的调节比例,论文中α=1。

整个loss的选取如下图,这只是个示意图,每个点的anchor被定死成了6个来方便演示,实际应用时不同层级是不一样的:

图4:SSD在6个层级上进行回归 二、优缺点

SSD的优点在前面章节已经说了:通过在不同层级选用不同尺寸、不同比例的anchor,能够找到与ground truth匹配最好的anchor来进行训练,从而使整个结构的精确度更高。
SSD的缺点是对小尺寸的目标识别仍比较差,还达不到Faster R-CNN的水准。这主要是因为小尺寸的目标多用较低层级的anchor来训练(因为小尺寸目标在较低层级IOU较大),较低层级的特征非线性程度不够,无法训练到足够的精确度。
下图是各种目标识别结构在mAP和训练速度上的比较,可以看到SSD在其中的位置:

图5:各种目标检测结构的比较

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。