论文:https://arxiv.org/pdf/1512.02325.pdf
代码:https://github.com/amdegroot/ssd.pytorch
目录
一 介绍
SSD--single shot multibox detection,是目标识别领域中对 不同类的物体(汽车,人。。。)的识别,识别的表示方式是对被识别的物体画bounding box(包围框)。除此之外还有其他种类的目标识别,比如下图:
SSD 网络的特点是 对不同尺度下的 feature map 中每一个点都设置一些 default box, 这些default box有不同的大小和横纵比例,对这些default box进行分类和边框回归的操作。在预测阶段,SSD会对每个default box 生成一个分类标签(属于每一类的概率构成的向量)以及位置坐标的调整(两个点有四个坐标值)。
SSD 的特点和贡献:
是当时的最高性能的one stage方法,精确度与two stage的faster cnn基本持平
SSD的核心是对 固定设置的default box(不同尺度feature map中每一个空间位置都设置一组default box,这里只考虑空间位置,不考虑feature 的通道个数)计算属于各类物体的概率以及坐标调整的数值。这个计算方法是 对每层的feature map 做卷积操作,卷积核设定为3*3,卷积核的个数是与default box个数相关。
SSD同时实现了端到端的操作(可以理解为输入是图像,输出是结果而不是什么中间的特征)和比较高的准确率
二 SSD网络结构:
SSD网络由两部分组成,前部分是一些经典的特征提取网络,在这里作为base network,使用的是VGG16。后半部分是作者增加的网络,提取成特征的基础之上处理得到不同尺度的feature map,生成许多组default box进行预测分类和位置调整信息。
两部分网络要想直接连接在一起需要经过一个处理,VGG16的两个全连接层被改掉(FC6,7)。之前用全连接层是因为在这两层要完成分类,改动过后可以与后面的卷积层连接,这个地方需要注意1*1的卷积层,1*1的感受野是1,它对空间位置上的信息没有进行任何改变,它完成的是维度信息的整合。在作者加入的后半部分也用到了1*1的卷积层,并且发挥了1*1卷积层降维的作用。
把全连接层换成1*1的卷积层的另一个好处:输入图像的大小可以变化(虽然SSD300只使用300*300的图片作为输入),因为全连接层的参数由前后两层的元素个数决定,如果输入图像的大小不统一,那么就找不到一个固定大小的全连接层
模型的输入与输出
输入:300*300*3 的图像
default box:六个尺度下的feature map 中每一个点设置多个default box,不同尺度下的feature map决定了default box 的scale,不同的横纵比决定了default box 的形状。
实现对不同尺度feature map进行分类预测和位置调整的方法是进行卷积操作,一个卷积核相当于完成对一种default box的一个信息(比如类别信息,位置信息)进行处理,一个卷积核可以完成对所有空间位置的操作。因此模型图中的filters的计算公式可以理解为:default box形状数量*(分类类别+四个位置信息)。
三 模型训练
matching规则
为了训练网络,需要把网络提出的default box(也可以叫做priors)与标记好的ground truth进行一个比对。如果满足标准就真为是match,那么这个priors就是 一个positive 样本,否则就是negative样本。这个标准是IoU,可以理解为priors与ground truth两个box 的交并比,阈值为0.5.
训练目标(损失函数)
网络的损失函数:
其中:
l is predicted box
N is the number of matched default boxes
g is ground truth
位置损失函数:
注意这部分的位置损失只计算经过match的正样本,即i属于positive。
g(由ground truth计算出来的):d是priors的w,h,g是ground truth的w,h
l是由feature map经过卷积计算出来的
其中smooth L1的计算方法如下:(参考https://blog.csdn.net/jningwei/article/details/78853669)
类别损失函数:
这部分损失函数既考虑正样本也考虑负样本。
be anindicator for matching the i-th default box to the j-th ground truth box of category p.如果x为1说明两者match,否则就是0