2D 目标检测基础:卷积神经网络与经典检测框架回顾
各位同学,欢迎来到第二章。
做机器人感知这些年,我有个很深的体会:2D 检测是位姿估计的“眼睛”。你连物体在图像里在哪、是什么都不知道,后面的 6D 位姿根本无从谈起。所以这一章,咱们把地基夯实。
我不会从零讲 CNN 的数学推导,那太枯燥。咱们直接从工程视角出发,聊聊卷积神经网络的核心原理,再回顾三个经典检测框架——Faster R-CNN、YOLO、SSD。这些都是我项目里反复用过的“老伙计”,坑也踩过不少,今天一并分享给你。
2.1 卷积神经网络(CNN)核心原理
说白了,CNN 就是一套自动提取特征的流水线。它不像传统方法那样手工设计特征(比如 HOG、SIFT),而是让数据自己“教”网络学什么有用。
2.1.1 卷积层:滑动窗口的“特征扫描仪”
卷积操作,你可以想象成一个手电筒在图像上滑动扫描。每次照到一个局部区域,就计算一次“匹配度”。这个手电筒就是卷积核(Kernel)。
- 局部连接:每个神经元只看一小块区域,不关心全局。这大大减少了参数量。
- 权值共享:同一个卷积核在整个图像上滑动,参数是一样的。为什么?因为图像的纹理特征(比如边缘、角点)在哪个位置都可能出现,没必要为每个位置学一套参数。
- 感受野:随着层数加深,神经元看到的原始图像范围越来越大。底层看边缘,中层看纹理,高层看物体部件。
2.1.2 池化层:降维与不变性
池化层就干两件事:缩小特征图尺寸和保留主要特征。常见的有最大池化(Max Pooling)和平均池化(Average Pooling)。
- 最大池化:取窗口内的最大值。我习惯用它来保留最强烈的纹理响应,比如边缘、角点。
- 平均池化:取窗口内的平均值。适合保留背景信息或整体特征。
池化还带来了平移不变性——物体稍微移动几个像素,池化后的输出变化不大。这对检测来说很重要,因为物体在图像里的位置本来就不固定。
2.1.3 全连接层与分类
经过卷积和池化,特征图被“压平”成一维向量,送入全连接层。全连接层的作用就是做决策——根据提取到的特征,判断“这是什么类别”。
最后接一个 Softmax 层,输出每个类别的概率。嗯,这里要注意:全连接层的参数量通常占整个网络的 80% 以上,所以后来很多检测网络(比如 YOLO)干脆不用全连接层,改用卷积层替代,速度更快。
2.2 经典检测框架回顾
目标检测框架,我习惯把它们分成两派:两阶段(Two-stage)和单阶段(One-stage)。两阶段先提候选框再分类回归,精度高但慢;单阶段一步到位,速度快但精度稍逊。咱们一个个看。
2.2.1 Faster R-CNN:两阶段检测的标杆
Faster R-CNN 是两阶段检测的代表作。它的核心创新是区域建议网络(RPN),把候选框生成也融入网络,实现了端到端训练。
流程很简单:
- 特征提取:用 CNN(比如 VGG16、ResNet)提取整张图的特征图。
- RPN 生成候选框:在特征图上滑动一个小网络,为每个位置生成 k 个锚点框(Anchor Boxes),并判断是前景还是背景。
- ROI Pooling:把不同大小的候选框映射到固定尺寸的特征图上。
- 分类与回归:对每个候选框做精细分类和边框微调。
2.2.2 YOLO:单阶段检测的速度之王
YOLO(You Only Look Once)的理念很暴力:把检测当成回归问题,一次前向传播直接输出边界框和类别概率。
它的做法是:
- 把图像分成 S×S 的网格。
- 每个网格负责预测 B 个边界框和 C 个类别概率。
- 每个边界框包含 5 个值:x, y, w, h, confidence(置信度)。
YOLO 的速度优势很明显,但早期版本(v1、v2)对小物体检测效果不好。为什么?因为每个网格只能预测两个框,如果多个小物体挤在一个网格里,就漏检了。
2.2.3 SSD:单阶段检测的平衡大师
SSD(Single Shot MultiBox Detector)结合了 YOLO 的速度和 Faster R-CNN 的锚点框思想。它的核心是多尺度特征图检测。
具体来说:
- 从 CNN 的不同层(浅层到深层)引出特征图。
- 浅层特征图(分辨率高)负责检测小物体。
- 深层特征图(分辨率低,语义强)负责检测大物体。
- 每个特征图位置都预设不同尺度和长宽比的锚点框。
SSD 在速度和精度之间取得了很好的平衡。我个人觉得,如果你做实时检测,又不想像 YOLO 那样调参调到头秃,SSD 是个不错的起点。
2.3 三大框架对比
为了方便你选型,我整理了一个对比表:
| 框架 | 类型 | 速度 | 精度 | 小物体检测 | 工程复杂度 |
|---|---|---|---|---|---|
| Faster R-CNN | 两阶段 | 慢(~7 FPS) | 高 | 好(RPN 精细) | 高(需要训练 RPN) |
| YOLOv3/v4 | 单阶段 | 快(~30-60 FPS) | 中等 | 一般(网格限制) | 中等 |
| SSD | 单阶段 | 较快(~20-40 FPS) | 中等偏高 | 较好(多尺度特征) | 低(结构简单) |
2.4 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
好了,这一章的内容就到这里。CNN 原理和三大检测框架,是后续所有位姿估计方法的基础。你想想看,不管是做 2D 到 3D 的 PnP 求解,还是端到端的 6D 位姿回归,第一步都是先拿到可靠的 2D 检测结果。所以,别觉得这些基础内容简单,真正用好的时候,细节决定成败。