单阶多层检测器: SSD(一)
对于物体检测任务, 第4章的Faster RCNN算法采用了两阶的检测架构, 即首先利用RPN网络进行感兴趣区域生成, 然后再对该区域进行类别的分类与位置的回归, 这种方法虽然显著提升了精度, 但也限制了检测速度。 YOLO算法利用回归的思想, 使用一阶网络直接完成了物体检测, 速度很快, 但是精度有了明显的下降。
在此背景下, SSD(Single Shot Multibox Detecor) 算法借鉴了Faster RCNN与YOLO的思想, 在一阶网络的基础上使用了固定框进行区域生成, 并利用了多层的特征信息, 在速度与检测精度上都有了一定的提升。
本章将首先介绍SSD方法的主要思想, 然后针对重要的结构模块,从代码层面一一解读其实现方法, 最后将分析SSD的优缺点, 并介绍一些经典的改进算法。
1. SSD总览
作为一阶网络, SSD算法从多个角度对物体检测做了创新, 是一个既优雅又高效的检测网络, 本节将从算法层面简要介绍SSD的总体过程
1.1 SSD的算法流程
SSD算法的算法流程如图5.1所示, 输入图像首先经过了VGGNet的基础网络, 在此之上又增加了几个卷积层, 然后利用3×3的卷积核在6个大小与深浅不同的特征层上进行预测, 得到预选框的分类与回归预测值, 最后直接预测出结果, 或者求得网络损失。
SSD的算法思想, 主要可以分为4个方面:
·数据增强: SSD在数据部分做了充分的数据增强工作, 包括光学变换与几何变换等, 极大限度地扩充了数据集的丰富性, 从而有效提升了模型的检测精度。
·网络骨架: SSD在原始VGGNet的基础上, 进一步延伸了4个卷积模块, 最深处的特征图大小为1×1, 这些特征图具有不同的尺度与感受野, 可以负责检测不同尺度的物体。
·PriorBox与多层特征图: 与Faster RCNN类似, SSD利用了固定大小与宽高的PriorBox作为区域生成, 但与Faster RCNN不同的是, SSD不是只在一个特征图上设定预选框, 而是在6个不同尺度上都设立预选框, 并且在浅层特征图上设立较小的PriorBox来负责检测小物体, 在深层特征图上设立较大的PriorBox来负责检测大物体。
·正、 负样本的选取与损失计算: 利用3×3的卷积在6个特征图上进行特征的提取, 并分为分类与回归两个分支, 代表所有预选框的预测值, 随后进行预选框与真实框的匹配, 利用IoU筛选出正样本与负样本, 最终计算出分类损失与回归损失。