动手学深度学习——SSD

张开发
2026/5/14 22:49:42 15 分钟阅读
动手学深度学习——SSD
1. 前言在前面的学习中我们已经依次了解了什么是物体检测边界框如何表示目标位置锚框的基本思想多尺度锚框为什么重要经典检测算法 R-CNN、SSD、YOLO 的总体区别其中SSD是目标检测里非常经典的单阶段检测算法。它的重要意义在于把多尺度特征图、锚框、类别预测和边界框回归整合到了一个统一的检测框架中。如果说前面的内容是在搭积木那么这一节就是把这些积木真正拼成一个完整的检测模型。2. 什么是 SSDSSD 的全称是Single Shot MultiBox Detector从名字中可以拆出两个关键信息2.1 Single Shot“Single Shot” 表示检测过程只需要一次前向传播就能同时完成目标分类和位置预测。也就是说它不像 R-CNN 那样先生成候选区域再逐个处理而是一步到位完成检测。2.2 MultiBox“MultiBox” 表示在多个位置、多个尺度上生成一系列锚框并对这些锚框进行预测。所以 SSD 的本质可以概括为在不同尺度的特征图上对大量锚框同时进行类别预测和边界框回归。3. SSD 的核心思想SSD 的核心思想并不复杂可以分成三句话理解第一句使用卷积神经网络提取图像特征输入图像后先通过主干网络提取特征。第二句在多个尺度的特征图上生成锚框不同层的特征图大小不同分辨率大的层负责小目标分辨率小的层负责大目标第三句对每个锚框同时预测类别和偏移量也就是这个锚框里是什么类别这个锚框应该如何调整才能更接近真实框这样SSD 就把检测任务统一成了一个端到端的卷积预测问题。4. 为什么 SSD 是单阶段检测器SSD 被称为单阶段检测器One-Stage Detector原因在于它不显式地区分“候选区域生成”和“候选区域分类”这两个阶段而是直接对预设锚框做预测。这和 R-CNN 系列很不一样。R-CNN 的思路先找候选区域再对候选区域提取特征并分类SSD 的思路直接在特征图每个位置生成锚框同时做分类和位置回归所以 SSD 结构更统一速度通常也更快。5. SSD 的整体结构李沐这里讲 SSD核心就是让你理解它的模块化结构。通常可以把 SSD 拆成以下几个部分5.1 主干网络主干网络负责从输入图像中提取特征。例如教学实现里往往不会直接上特别复杂的大网络而是用一个相对简化的卷积网络结构来演示 SSD 的思想。5.2 多尺度特征块SSD 不只使用最后一层特征图而是会继续往后接多个卷积块形成一组尺寸越来越小的特征图。例如可以得到较大的特征图中等大小特征图更小的特征图最后接近全局的特征图这些特征图共同负责不同尺度目标的检测。5.3 锚框生成模块在每个尺度的特征图上都要根据预设的sizes和ratios生成锚框。这一步本质上就是前面学过的multibox_prior。5.4 类别预测模块对于每个锚框预测它属于哪个类别或者属于背景。5.5 边界框预测模块对于每个锚框预测它相对于锚框本身的偏移量也就是中心点如何移动宽高如何缩放这样就能把锚框修正成更贴近真实目标的预测框。6. SSD 为什么要用多尺度特征图这一点是 SSD 的灵魂。现实图像中的目标大小差别很大如果只在某一层特征图上做检测会有明显问题对小目标不够敏感对大目标定位不够自然因此 SSD 采取的策略是在不同尺度的特征图上分别负责不同尺度目标。也就是较大特征图检测小目标较小特征图检测大目标这正是前一节“多尺度锚框”的直接应用。7. SSD 的预测过程SSD 的预测过程可以理解为第一步输入图像图像进入神经网络。第二步得到多个尺度的特征图随着网络加深特征图尺寸逐渐减小。第三步在每个特征图位置生成锚框每个位置生成若干不同形状的锚框。第四步对每个锚框做两类预测一类是类别预测一类是边界框偏移预测。第五步合并所有尺度上的预测结果把所有特征图上的锚框预测汇总起来。第六步后处理通常会用非极大值抑制等方法去掉重复预测框得到最终结果。8. 类别预测和边界框预测分别在做什么这部分一定要讲清楚因为这是 SSD 的输出核心。8.1 类别预测对于每个锚框模型都要回答这个锚框中包含什么目标可能输出背景狗猫汽车行人所以类别预测本质上是一个分类问题。8.2 边界框预测锚框本身只是预设候选框不会和真实目标完全重合。因此模型还要预测这个锚框应该如何平移、缩放才能更贴近真实框所以边界框预测本质上是一个回归问题。8.3 两者共同完成检测最终一个检测框之所以成立是因为它同时具备类别信息位置修正信息这两部分缺一不可。9. 李沐代码里 SSD 的结构思路在《动手学深度学习》的实现中SSD 往往不是直接写成一个大而复杂的工业版模型而是拆成几个更容易理解的模块。典型思路包括9.1 为每个尺度构造特征块每个块负责输出一个新的特征图。9.2 为每个块定义类别预测层例如用卷积层直接输出类别分数。9.3 为每个块定义边界框预测层同样用卷积层输出每个锚框的偏移量。9.4 对多个尺度结果进行拼接把所有层上的anchorsclass_predsbbox_preds拼接在一起形成最终输出。10. 为什么 SSD 适合用卷积层直接预测SSD 的设计非常符合卷积神经网络的特点。因为卷积层本来就是在空间位置上共享参数地做局部计算。而目标检测里我们恰好也需要在不同位置上预测目标。所以 SSD 采用卷积层直接输出每个位置多个锚框的类别分数每个位置多个锚框的边界框偏移这让整个模型结构很自然也很高效。11. SSD 和 YOLO、R-CNN 的区别这一节里最好顺带再帮读者把它们区分清楚。11.1 和 R-CNN 相比SSD 不需要先生成候选区域再逐个处理它直接在特征图上对锚框做密集预测。所以 SSD更快更统一更适合实时应用但在某些精细场景下早期两阶段方法精度可能更高。11.2 和 YOLO 相比SSD 和 YOLO 都属于单阶段检测器都强调速度和端到端预测。但 SSD 更强调多尺度特征图锚框机制不同层负责不同尺度目标因此在教学中SSD 特别适合作为“锚框检测思想”的代表模型来讲。12. SSD 的优点SSD 经典是因为它有几个很明显的优点。12.1 速度快作为单阶段检测器SSD 比早期 R-CNN 系列快很多。12.2 结构统一分类和回归都在统一的卷积框架下完成。12.3 多尺度检测能力强通过不同尺度特征图检测不同大小目标。12.4 教学价值高它把锚框、多尺度、卷积预测自然地整合起来非常适合入门目标检测。13. SSD 的局限当然SSD 也不是完美的。13.1 小目标检测仍然有难度尽管用了多尺度特征图但对非常小的目标早期 SSD 仍然可能表现一般。13.2 锚框设计依赖经验锚框的尺度、宽高比设置会直接影响检测效果。13.3 正负样本不平衡问题明显检测中负样本锚框通常远多于正样本锚框这会影响训练。不过这些问题也正是后续很多改进方法努力解决的方向。14. SSD 可以怎样理解成“前面内容的总装配”如果从学习路径回头看你会发现 SSD 正好把前面几节都串起来了。前面学的边界框告诉我们目标位置如何表示。前面学的锚框告诉我们如何为检测提供候选框。前面学的多尺度锚框告诉我们不同大小目标该交给不同尺度特征图处理。这一节的 SSD把这些元素整合进一个完整检测网络中。所以 SSD 这一节本质上就是一次“系统总装”。15. 本节总结这一节我们学习了 SSD核心内容可以概括为以下几点。15.1 SSD 是经典单阶段检测器它通过一次前向传播同时完成类别预测和边界框预测。15.2 SSD 的核心是多尺度特征图 锚框在不同尺度特征图上生成锚框分别检测不同尺度目标。15.3 每个锚框都有两类输出类别预测边界框偏移预测15.4 SSD 是前面检测知识的综合应用边界框、锚框、多尺度检测在 SSD 中真正形成了完整体系。16. 学习感悟SSD 这一节非常适合建立“检测系统观”。因为到了这里我们已经不再是零散地学某个概念而是在看一个完整模型如何组织这些概念用卷积网络提取特征用多尺度特征图分工处理目标用锚框提供候选框基础用分类和回归共同完成检测输出所以 SSD 的意义不仅在于“它是一个算法”更在于它把目标检测这件事讲得非常有结构。

更多文章