本节将对SSD算法进行总结, 并介绍多个基于SSD的改进算法。
1. 审视SSD
SSD实现了一个较为优雅、 简洁的物体检测框架, 使用了一阶网络即完成了物体检测任务, 达到了同时期物体检测的较高水平。 总体上,SSD主要有以下3个优点:
·由于利用了多层的特征图进行预测, 因此虽然是一阶的网络, 但在某些场景与数据集下, 检测精度依然可以与Faster RCNN媲美。
·一阶网络的实现, 使得其检测速度可以超过同时期的Faster RCNN及YOLO算法, 对于速度要求较高的工程应用场景, SSD是一个很不错的选择。
·网络优雅, 实现简单, 没有太多的工程技巧, 这也为后续的改善工作提拱了很大的空间。
与此同时, 追求更高检测性能的脚步永不会停止, SSD算法也有以下3点限制:
·对于小物体的检测效果一般, 这是由于其虽然使用了分辨率大的浅层特征图来检测小物体, 但浅层的语义信息不足, 无法很好地完成分类与回归的预测。
·每一层PriorBox的大小与宽高依赖于人工设置, 无法自动学习, 当检测任务更换时, 调试过程较为烦琐。
·由于是一阶的检测算法, 分类与边框回归都只有一次, 在一些追求高精度的场景下, SSD系列相较于Faster RNCN系列来讲, 仍然处在下风。
针对SSD的这些问题, 后续的学者从多个角度探讨了提升SSD性能的策略, 在此介绍4个较为经典的改进算法, 分别是DSSD、 RSSD、RefineDet及RFBNet算法, 如图5.9所示。
2. 特征融合: DSSD
SSD采用多尺度的特征图预测物体, 具有较大感受野的特征图检测大尺度物体, 较小感受野特征图检测小尺度物体。 这样会存在一个问题, 即当小感受野特征图检测小物体时, 由于语义信息不足, 导致小物体检测效果差。
解决该语义信息不足的方法通常是深浅的特征图融合, DSSD正是从这一角度出发, 提出了一套针对SSD多尺度预测的特征融合方法, 改进了传统的上采样方法, 并且可以适用于多种基础Backbone结构。
对于深浅层的特征融合, 通常有3种计算方法:
·按通道拼接(Concatenation) : 将深层与浅层的特征按通道维度进行拼接。
·逐元素相加(Eltw Sum) : 将深层与浅层的每一个元素在对应位置进行相加, 如FPN中的特征融合。
·逐元素相乘(Eltw Product) : 将深层与浅层的每一个元素在对应位置进行相乘, 这也是DSSD采用的特征融合方式。
SSD利用了感受野与分辨率不同的6个特征图进行后续分类与回归网络的计算, DSSD保留了这6个特征图, 但对这6个特征图进一步进行了融合处理, 然后将融合后的结果送入后续分类与回归网络, 如图5.10所示。
具体做法是, 将最深层的特征图直接用作分类与回归, 接着, 该特征经过一个反卷积模块, 并与更浅一层的特征进行逐元素相乘, 将输出
的特征用于分类与回归计算。 类似地, 继续将该特征与浅层特征进行反
卷积与融合, 共计输出6个融合后的特征图, 形成一个沙漏式的结构,
最后给分类与回归网络做预测。
具体的反卷积模块如图5.11所示。 这里深特征图的大小是H×W×512, 浅特征图的大小为2H×2W×D。 深特征图经过反卷积后尺寸与浅特征图相同, 再经过一些卷积、 ReLU与BN操作后, 两者进行逐元素的相乘, 最后经过一个ReLU模块, 得到最终需要的特征图。
这里有以下3点需要说明:
·BN层在卷积与激活函数之间, 由于不同层之间的特征尺度与感受野不同, 直接融合在一起训练难度较大, 利用BN层可以进行均一化处理, 加速训练。
·在实验时, DSSD采用逐元素相乘比逐元素相加提升了0.2%个mAP, 速度上相乘操作比相加稍慢一点。
·对于上采样的实现, 之前的一些方法一般利用双线性插值操作,而DSSD这里使用了反卷积, 即包含了可学习的参数。
在得到特征图后, DSSD也改进了分类与回归的预测模块。 SSD的预测模块是直接使用3×3卷积, 而DSSD则对比了多种方法, 最终选择了如图5.12所示的计算方式, 包含了一个残差单元, 主路和旁路进行逐元素相加, 然后再接到分类与回归的预测模块中。
DSSD的算法将深层的特征融合到了浅层特征图中, 提升了浅层特征的语义性, 也因此提升了模型的性能, 尤其是对于小物体的检测。
3. 彩虹网络: RSSD
原始的SSD算法使用了多层大小与感受野不同的特征图进行检测,因此对于物体的尺度变化有了一定的鲁棒性, 但仍存在以下两个问题:
·各个特征图只考虑当前层的检测尺度, 没有考虑特征图之间的关联性, 容易出现多个特征图上的预选框与一个真实框(GroundTruth)相匹配, 即使有NMS后续操作, 但也不能完全避免这种误检的情况。
·小物体检测效果差: SSD主要利用浅层特征图检测小物体, 但由于浅层的特征图语义信息太少, 影响了对小物体的检测。
针对上述问题, RSSD(Rainbow SSD, R-SSD) 算法一方面利用分类网络增加了不同特征图之间的联系, 减少了重复框的出现, 另一方面提出了一种全新的深浅特征融合的方法, 增加了特征图的通道数, 大幅度提升了检测的效果。
当前, 深、 浅层特征融合已经成为了一种流行的提升检测效果的方法。 RSSD尝试了3种不同的融合方案。 这里的融合只针对需要进行后续分类与回归的特征图, 卷积网络中的其他特征图不参与融合。
3.1 池化融合
对浅层的特征图进行池化, 然后与下一个特征图进行通道拼接(Concatenation) , 作为下一层特征图的最终特征。 类似地, 依次向下进行通道拼接, 这样特征图的通道数逐渐增加, 并且融合了越来越多层的特征, 如图5.13所示。
这样的连接方式可以使得深层特征图既具有高语义信息, 又拥有浅层特征图传来的细节信息, 因此可以提升检测的效果。
3.2 反卷积融合
与池化融合方法相反, 反卷积融合是对深层的特征图进行反卷积,扩充尺寸, 然后与浅层的特征图进行通道拼接, 并逐渐传递到最浅层,如图5.14所示。
这种方法类似于FPN结构, 弥补了浅层的语义信息。
3.3 彩虹(Rainbow) 式融合
最后一种是彩虹式融合方法, 结合了前两种策略, 也是Rainbow SSD最终采用的方式。 网络结构如图5.15所示, 浅层特征通过池化层融合到深层中, 深层特征通过反卷积融合到浅层中, 这样就使每一个特征
图的通道数是相同的。 由于每一层都融合了多个特征图的特征, 并且可以用图5.15的颜色进行区分, 因此被称为Rainbow SSD。
值得注意的是, 由于每一层的特征图尺度不同, 并且感受野也不同, 因此在不同层融合之前, 需要做一次BN操作, 以统一融合时的每个层的尺度, 从而达到均一化的效果。
RSSD除了提出彩虹式的特征提取网络之外, 还共享了分类网络分支的卷积权重。 从图5.15中可以看出, 每一个特征图的特征通道相同,因此可以采用同一个分类网络来提取预选框的类别预测信息, 共用一套分类网络权重参数, 这样做的好处是将不同尺度的问题归一化处理, 模型更加稳定, 也更容易收敛。
总体来看, RSSD在不明显增加计算量的基础上, 融合了双向的特征信息, 并且考虑了各个分类分支的关联性, 使得模型的表达能力更强, 在一定程度上提升了小物体的检测与物体的定位精度。
4. 基于SSD的两阶: RefineDet
SSD作为一阶网络, 通过直接对固定预选框进行预测分类的方法,实现了简单有效的检测, 但相比两阶网络, 其检测精度较低。 另外, 两阶网络如Faster RCNN, 检测精度高, 同时也限制了其检测速度。
在上述前提下, 2018年, CVPR的RefineDet结合了一阶网络与两阶网络的优点, 在保持高效的前提下实现了精度更高的检测。
RefineDet在SSD的基础上, 一方面引入了Faster RCNN两阶网络中边框由粗到细两步调整的思想, 即先通过一个网络粗调固定框(在Faster RCNN中是Anchor, 在SSD中是PriorBox) , 然后再通过一个网细调; 另一方面采用了类似于FPN的特征融合方法, 可以有效提高对小物体的检测效果。
RefineDet的网络结构主要由ARM(Anchor Refinement Module) 、TCB(Transfer Connection Block) 与ODM(Object Detection Module)这3个模块组成, 如图5.16所示。 下面详细介绍这3部分的结构与作用。
4.1 ARM部分
ARM部分首先经过一个VGG 16或者ResNet-101的基础网络, 然后在多个特征图上对应不同大小宽高的Anchors, 并用卷积网络来提取这些Anchors的特征, 进一步可以求得每一个Anchor的分类与回归损失。这一步起到了类似于RPN的作用, 网络结构有点类似于SSD。
具体网络以ResNet-101为例, 假设输入图像大小为320×320, 则图5.16中ARM部分的4个特征图大小分别为40×40、 20×20、 10×10及5×5,前3个是ResNet中的网络层, 最后一个是额外添加的一个模块。
总体来看, ARM有如下两点作用:
·过滤掉一些简单的负样本, 减少后续模型的搜索空间, 也缓解了正、 负样本不均衡的问题。
·通过类似于RPN一样的网络, 可以得到Anchor的预测值, 因此可以粗略地修正Anchor的位置, 为下一个模块提供比固定框更精准的感兴趣区域。 相比一阶网络, 这样做往往可以得到更高的精度。
下面以VGGNet为例, 使用PyTorch实现ARM模块的搭建。
4.2 TCB部分
TCB模块主要用于完成特征的转换操作。 从图5.16中可以看出,TCB模块首先对ARM中的每一个特征图进行转换, 然后将深层的特征图融合到浅层的特征图中, 这一步非常像FPN中自上而下与横向连接操作的操作。
TCB模块的具体结构如图5.17所示, 使用了两个3×3大小的卷积进一步处理ARM部分的特征图, 与此同时, 利用反卷积处理深层的特征图, 得到与浅层尺寸相同的特征, 然后逐元素相加, 最后再经过一个3×3卷积, 将结果输出到ODM模块中。
从网络结构来看, TCB模块有些类似于FPN, 这种深浅融合的网络可以使特征图拥有更加丰富的信息, 对于小物体等物体预测会更加准确。
下面使用PyTorch来搭建一个TCB模块。
4.3 ODM部分
ODM是RefineDet的最后一个模块, 基本采取了SSD多层特征图的网络结构, 但是相比SSD算法, ODM模块的输入有下面两个优势。
·更好的特征图: 相比SSD从浅到深的特征, ODM接收的是TCB模块深浅融合的特征, 其信息更加丰富, 质量更高。
·更好的预选框: SSD使用了固定的预选框PriorBox, 而ODM接收的则是经过ARM模块优化后的Anchor, 位置更加精准, 并且正、 负样本更加均衡。
ODM后续的匹配与损失计算也基本沿用了SSD的算法, 采用0.5作为正、 负样本的阈值, 正、 负样本的比例为1∶ 3。
RefineDet的损失包含了ARM与ODM两部分。 ARM模块包含了交叉熵分类与smoothL1损失函数; ODM部分则是Softmax损失与smoothL1损失两部分。 此外, ARM与ODM损失在训练时可以一起反向传播, 因此可以实现端到端训练。
在具体的代码实现时, 为了计算方便, 在ARM处并没有直接抑制掉得分很低的Anchor, 而是在随后的ODM中将两部分的得分综合考虑, 完成Anchor的分类。 这种操作也保证了全网络只有一次预选框筛选, 从这个角度来看, RefineDet是一阶的。
RefineDet借鉴了两阶网络的优点, 对预选框优化(Refine) 了两次, 这也是其名称RefineDet的由来。 由于结合了Faster RCNN、 SSD及FPN等算法的优势, 在RefineDet算法诞生时, 其在VOC 2007数据集上实现了单模型的最佳效果。
5. 多感受野融合: RFBNet
在物体检测领域中, 精度与速度始终是难以兼得的两个指标。 对于两阶网络, 如Faster RCNN, 第一阶RPN网络用于提取没有类别信息的感兴趣区域, 然后利用第二阶对该区域进行分类与细回归, 这样虽然获得了较高的精度, 但牺牲了速度。 对于性能强悍的主干网络, 如ResNet-101的残差结构、 FPN自上到下的特征融合, 也都是在牺牲了前向速度的前提下, 实现了较高的精度。
一阶网络如SSD、 YOLO等利用一次预测就完成了物体的分类与回归任务, 基本可以达到实时的速度, 但精度始终不如同时期的两阶络。 基于一阶网络的改进算法, 如DSSD、 RefineDet等虽然提升了一阶网络的精度, 但仍牺牲了网络的计算速度。
针对以上问题, RFBNet(Receptive Field Block Net) 受人类视觉感知的启发, 在原有的检测框架中增加了一些精心设计的模块, 使得网络拥有更为强悍的表征能力, 而不是简单地增加网络层数、 融合等, 因此获得了较好的检测速度与精度。
神经学发现, 群体感受野的尺度会随着视网膜图的偏心而变化, 偏心度越大的地方, 感受野的尺度也越大。 而在卷积网络中, 卷积核的不同大小可以实现感受野的不同尺度, 空洞卷积的空洞数也可以实现不同的偏心度。
传统的卷积模块, 如Inception结构, 虽然利用了多个分支来实现多个尺度的感受野, 但由于空洞数都为1, 离心率相同, 因此在融合时仅仅是不同尺度的堆叠。
相比之下, RFBNet同时将感受野的尺度与偏心度纳入到卷积模块中, 设计了RFB模块, 如图5.18所示。 与Inception结构类似, RFB模块拥有3个不同的分支, 并且使用了1×1、 3×3与5×5不同大小的卷积核来模拟不同的感受野尺度, 使用了空洞数为1、 3、 5的空洞卷积来实现不同的偏心度。
完成3个分支后, 再利用通道拼接的方法进行融合, 利用1×1的卷积降低特征的通道数。 可以看出, RFB模块的特征融合与人类的感知特点十分类似。
RFBNet将此RFB模块集成到了SSD中, 在没有使用ResNet-101的前提下, 可以达到两阶网络的检测精度。 同时, RFBNet还尝试使用了更轻量化的网络, 如MobileNet, 检测效果仍然很好, 证明了该算法具有较强的泛化能力。
总体来讲, RFBNet同时实现了较好的检测性能与较快的速度, 并且实现简单, 是一个非常优雅的物体检测算法。
6.总结
SSD利用多个特征图, 只用了一次的预测, 就实现了整个物体检测。 与Faster RCNN相比, 虽然其精度稍逊色一些, 但在追求速度的场景, 尤其是实时检测的要求中, SSD则更为适用。 此外, SSD的单阶检测之所以如此有效, 很大程度上得益于其充分的数据增强手段。 当我们在实际应用时, 如果缺乏数据或者容易发生过拟合现象, 可以借鉴SSD的数据增强过程。