Course 4:目标检测与分割
课程简介
YOLO、SSD、语义分割等视觉检测技术。
一、目标检测基础
目标检测任务不同于图像分类——它不仅要知道图像中有什么物体,还要知道它们在哪里。输出是用边界框(Bounding Box)标注的物体位置和类别。
1.1 目标定位
对于包含单个物体的图像,神经网络可以同时输出类别和边界框:
$$y = [p_c, b_x, b_y, b_h, b_w, c_1, c_2, ..., c_n]^T$$
其中 $p_c$ 表示是否存在物体,$(b_x, b_y)$ 是边界框中心坐标,$b_h, b_w$ 是高度和宽度,$c_i$ 是类别概率。
损失函数可以使用平方误差或更鲁棒的变体。
1.2 滑动窗口检测
传统的滑动窗口方法:使用不同大小的窗口在图像上滑动,对每个窗口区域进行分类。
缺点:计算量大、窗口尺寸选择困难、定位不精确。
1.3 YOLO算法
YOLO(You Only Look Once)由Joseph Redmon在2016年提出,将目标检测视为回归问题,一次性预测所有边界框和类别。
核心思想:
1. 将输入图像划分为 $S \times S$ 的网格
2. 每个网格负责检测中心落在该网格的物体
3. 每个网格预测 $B$ 个边界框和 $C$ 个类别的概率
输出张量维度:$S \times S \times (B \times 5 + C)$
其中5表示:$p_c, b_x, b_y, b_h, b_w$。
YOLO的损失函数包含三个部分:
- 坐标误差(边界框位置)
- 置信度误差(是否存在物体)
- 分类误差(物体类别)
YOLOv3的改进:
- 多尺度检测(3个不同尺度)
- 使用Darknet-53骨干网络
- 使用逻辑回归预测物体置信度
- 跨越残差连接的FPN结构
1.4 SSD算法
SSD(Single Shot MultiBox Detector)在YOLO基础上引入了多参考框(Anchor Boxes)和金字塔特征图:
- 在不同尺度的特征图上做检测(从大特征图检测小物体,小特征图检测大物体)
- 每个位置预置多个不同形状的参考框
- 直接预测参考框的偏移量和类别置信度
1.5 R-CNN系列
R-CNN(Region-based CNN):
1. 使用选择性搜索(Selective Search)生成约2000个候选区域
2. 对每个候选区域裁剪和缩放
3. 使用CNN提取特征
4. 使用SVM分类器和边界框回归器
缺点:训练分阶段、速度慢(每张图几十秒)。
Fast R-CNN:
- 整张图只过一次CNN,共享卷积计算
- 使用ROI Pooling从特征图中提取固定大小的特征
- 多任务损失(分类+边界框回归)
Faster R-CNN:
- 使用区域提议网络(RPN)替代选择性搜索
- RPN和Fast R-CNN共享卷积特征
- 真正实现端到端训练
速度对比:
- R-CNN:几十秒/张
- Fast R-CNN:~2秒/张
- Faster R-CNN:~0.2秒/张
- YOLO/SSD:~0.02秒/张
1.6 语义分割
语义分割为图像中的每个像素分配一个类别标签。
全卷积网络(FCN):
- 将全连接层替换为卷积层
- 使用转置卷积(上卷积)恢复到原始分辨率
- 跳连接结合浅层和深层特征
U-Net:
- 编码器-解码器结构
- 跳连接将编码器的特征直接传给解码器对应层
- 在医学图像分割中表现优异
1.7 目标检测评估指标
IoU(交并比):
$$\text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}}$$
IoU > 0.5 通常认为检测正确。
mAP(Mean Average Precision):
对所有类别的AP取平均,是目前最常用的评估指标。
延伸阅读
- 📺 B 站播放列表:Deep Learning Specialization — 深度学习专项课程
- 📚 更多学习资源,请访问 deeplearning.ai 官网