本文主要用于介绍Wei Liu等于2016年提出的SSD目标检测网络,该网络结合了YOLO和Faster R-CNN的优势。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/pdf/1512.02325.pdf
tf源码地址:https://github.com/balancap/SSD-Tensorflow
caffe源码地址:https://github.com/weiliu89/caffe/tree/ssd .
为更好的理解该论文,建议先行阅读YOLO网络的相关论文,这里也附上本菇之前写的1篇论文笔记供大家参考~
YOLO理解
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
本文提出了一种使用单一深度神经网络实现目标检测的方法。我们将其命名为:SSD。该网络在特征图上会离散化生成多个不同尺度大小的默认边界框,在预测的时候,网络会对每一个默认框进行类别的打分,并且调整其位置使其更贴合真实目标的形状。另外,该网络还结合了不同分辨率下提取的特征,从而应对不同大小的目标。SSD相比于那些需要区域候选的网络(R-CNN系)来讲,要更简单,因为其仅用了一个网络就把整套事情都做完了。因此,SSD是非常易于训练的,并且容易被集成进一个大的系统中。实验表明,在PASCAL, VOC, COCO和ILSVRC这些数据集上,相比于R-CNN系列,SSD都表现出了相当强的竞争力,并且其在训练和预测速度上都很快。而对标同样是单阶段的方法,SSD在输入图片更小的情况下,依然有更高的准确率。
1.2 论文主要贡献
原文作者将本论文的贡献总结如下:
1)在目标检测领域的,单阶段(one-stage/single-shot)算法分支上,本文提出的SSD网络架构模型比当红炸子鸡YOLO模型准确率要更高,且更快。而事实上,在准确率上,SSD甚至也不输那些多阶段的大模型(比如:Faster R-CNN)
2)SSD的核心其实就是利用一些小的卷积层直接在不同尺度的特征图上去预测固定个数默认边界框(default bounding box)的类别分类和相对位置坐标。
3)SSD高准确率的原因在于我们对不同尺度的特征图,分别预测了多个不同尺度和大小的边界框。
4)整一套架构都是端到端(end-to-end)训练的,并且有很高的准确率,即使也一些低分辨率图像上,也有好的预期表现。
5)本文提出的SSD在多个数据集上(PASCAL VOC, COCO, ILSVRC),与其他的目标检测模型做了详实的对比实验,效果好坏,高下立见。
------------------第二菇 - 核心思想------------------
2.1 网络架构梳理
因为SSD和YOLO都是单阶段模型的代表,故而将两者放在一起分析更易让人理解。本质上来说,两个架构都是采用了一个CNN网络来进行检测,只不过SSD采用了多尺度的特征图,这里直接上一张原论文中的对比图,
YOLO和SSD对比图.jpg这里重点理解如下3个不同点即可对整个SSD有比较深刻的认识。
2.2.1 SSD利用了多尺度特征图用于检测
本论文采用的是VGG16的基础网络架构,只不过只使用了前5层,后面2个全连接层都用2个卷积层代替了(图中所示Conv6, Conv7),然后再额外增加了3个卷积层(Conv8, Conv9, Conv10)和1个全局平均池化层。
每一个增加的卷积层,都在改变特征图的大小,因此从图中可以看出(特征图趋势是变小),低层的特征图,感受野较小,高层的特征图,感受野较大。而每一个卷积层提出的特征图,又都直接参与后面的检测(包括定位与分类)。因此SSD能够利用多尺度的特征图用于检测,从而能够检测出不同尺度下的物体。
而与之对比的YOLO只利用了最后一层卷积提出的特征图。
这里再贴一张很棒的示意图(将SSD平铺展开表述)【1】用以说明其多尺度特征图用于检测的原理,
多尺度特征图用于检测示意图.jpg2.2.2 SSD的先验框设置
不同于YOLO的预选框设置方式,SSD的先验预选框参考了Faster R-CNN系列的Anchors机制,根据每一个feature map大小的不同,按照固定的Scale和Ratio生成预选框,每一个框也同样的需要输出相对网格的位置坐标及属于每一个类别的概率(假设一共有c类),如原论文的附图所示,虚线即表示候选框,
SSD示意架构图.jpg2.2.3 SSD直接采用卷积进行检测
与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。假设feature map的大小为,则使用的基础卷积核的大小为(注:应该是通过加padding来保证卷积操作后大小保持不变),对于每一个位置,都会输出一个分类的概率和位置的偏移量。假设候选框个数为,则最后的输出为
这里简单梳理一下,参数的关系,我们以上图红框为例,该层的特征图大小为,假设每一个点生成的默认候选框个数为3,则最后的输出如下图所示【1】,
输出示意图.jpg其中,12的意思就是用于定位的,每个点3个框,定位需要4个变量(),因此
而对应的,63的意思就是用于分类的,每个点3个框,分类一共21(含背景),因此
如果还是有一点疑惑,那再看另一张图,剖析的更为详细【1】,
输出示意图2.jpg虽然是俄文(没找到英文的),但图画的真的很清晰了~所以要重点强调的可能还是要理解到,有多少个默认框,就需要有多少个倍数(与分类和定位数量有关)卷积核~
至此整一套与网络架构相关的关键点已经梳理完毕了~
2.2 训练策略
2.2.1 损失函数
损失函数倒没什么特殊的,跟其他的目标检测算法相似,也是分2部分组成的,分别是位置回归的误差损失,分类的损失。
其中分类损失用的是softmax,公式截图如下,
分类损失.jpg而位置损失用的是Smooth L1 损失,其实跟Faster R-CNN差不多的,具体公式截图如下,
回归误差损失.jpg而总的损失函数就是,
其中,N就是与GT BOX相匹配的Default Box(默认候选框)的个数。就是调权值的超参数。
这里强调一下,上面这句“相匹配”的定义。对于每一个真实的目标框,我们都会选择多个不同大小不同尺度的候选框,我们用来衡量【3】,但是不同于MultiBox中只要最大的逻辑,作者这里认为阈值超过0.5的都能被视为是正样本。
2.2.2 候选框的设计
候选框的设计好坏,直接决定了最终的检测质量,这里作者也特地强调了一些注意点。
没什么特别难以理解的,这里不具体说了,直接盗一张图吧【4】
候选框选择说明.jpg其他一些数据的预处理方法,正负样本的处理等这里就不具体说了,都比较简单好理解,原论文也说的很清楚~
至此,整一套跟SSD相关的理论部分算是讲明白了,其他的实验对比部分,这边就不展开了,总之,是个很不错的模型😄~
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一种单阶段的SSD网络用于目标检测,效果和时效性上都要优于同一战线之前提出的YOLO模型,让众多工业界人士看到了其在工业界巨大的发挥空间,作者也在文中通过一系列实验证明其可行性,为后续发展奠定了基础。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对SSD网络架构的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁
参考文献:
【1】https://docs.google.com/presentation/d/1rtfeV_VmdGdZD5ObVVpPDPIODSDxKnFSU0bsN_rgZXc/pub?start=false&loop=false&delayms=3000&slide=id.g17938598f9_0_1965
【2】https://zhuanlan.zhihu.com/p/33544892
【3】https://arxiv.org/abs/1312.2249
网友评论