AI-For-Beginners/translations/zh-CN/lessons/4-ComputerVision/11-ObjectDetection
localizeflow[bot] b0d8fb988f chore(i18n): sync translations with latest source changes (chunk 5/8, 92 changes) 2026-01-30 01:17:32 +00:00
..
lab chore(i18n): sync translations with latest source changes (chunk 5/8, 92 changes) 2026-01-30 01:17:32 +00:00
ObjectDetection.ipynb chore(i18n): sync translations with latest source changes (chunk 5/8, 92 changes) 2026-01-30 01:17:32 +00:00
README.md chore(i18n): sync translations with latest source changes (chunk 5/8, 92 changes) 2026-01-30 01:17:32 +00:00

README.md

目标检测

我们之前处理的图像分类模型会接收一张图片并输出一个类别结果,例如在 MNIST 问题中输出类别“数字”。然而,在许多情况下,我们不仅仅想知道图片中有物体,还希望能够确定它们的具体位置。这正是目标检测的核心所在。

课前测验

目标检测

图片来源:YOLO v2 网站

一种简单的目标检测方法

假设我们想在一张图片中找到一只猫,一种非常简单的目标检测方法如下:

  1. 将图片分割成多个小块。
  2. 对每个小块进行图像分类。
  3. 对于分类结果激活值足够高的小块,可以认为其中包含目标物体。

简单目标检测

图片来源:练习笔记本

然而,这种方法远非理想,因为它只能非常粗略地定位物体的边界框。为了更精确地定位,我们需要进行某种回归来预测边界框的坐标——这需要特定的数据集。

用回归进行目标检测

这篇博客文章对检测形状进行了很好的入门介绍。

目标检测数据集

在进行目标检测任务时,你可能会遇到以下数据集:

  • PASCAL VOC - 包含20个类别
  • COCO - 常见物体上下文数据集。包含80个类别、边界框和分割掩码

COCO

目标检测评估指标

交并比Intersection over Union

对于图像分类来说,评估算法性能相对简单;但对于目标检测,我们需要同时评估类别的正确性以及推断出的边界框位置的精确性。后者通常使用交并比IoU来衡量两个框或任意两个区域的重叠程度。

IoU

图片来源:这篇关于IoU的优秀博客文章

其思想很简单——将两个图形的交集面积除以它们的并集面积。对于两个完全相同的区域IoU值为1对于完全不相交的区域IoU值为0。其他情况下IoU值介于0到1之间。我们通常只考虑IoU值超过某个阈值的边界框。

平均精度Average Precision

假设我们想评估某个类别C的识别效果。为此,我们使用平均精度AP指标其计算方法如下

  1. 绘制精度-召回曲线显示检测阈值从0到1变化时的准确性。
  2. 根据阈值,我们会检测到图片中的更多或更少的物体,并得到不同的精度和召回值。
  3. 曲线如下所示:

图片来源:NeuroWorkshop

类别C的平均精度是该曲线下的面积。更具体地说召回轴通常分为10个部分精度在这些点上取平均值


AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})

AP与IoU

我们只考虑IoU超过某个阈值的检测结果。例如在PASCAL VOC数据集中通常假设\mbox{IoU Threshold} = 0.5而在COCO数据集中AP会针对不同的\mbox{IoU Threshold}值进行测量。

图片来源:NeuroWorkshop

平均平均精度Mean Average Precision - mAP

目标检测的主要评估指标是平均平均精度mAP。它是所有类别的平均精度值有时也会对\mbox{IoU Threshold}进行平均。更详细的mAP计算过程可以参考 这篇博客文章,以及这里的代码示例

不同的目标检测方法

目标检测算法主要分为两大类:

  • 区域提议网络R-CNN, Fast R-CNN, Faster R-CNN。其核心思想是生成兴趣区域ROI并对其运行CNN以寻找最大激活值。这种方法与简单方法有些类似但ROI的生成方式更为智能。这类方法的主要缺点是速度较慢因为需要对图像进行多次CNN分类器的处理。
  • 单次检测YOLO, SSD, RetinaNet方法。这些架构设计的网络能够在一次处理过程中同时预测类别和ROI。

R-CNN基于区域的CNN

R-CNN使用选择性搜索生成ROI区域的层次结构然后通过CNN特征提取器和SVM分类器确定物体类别并通过线性回归确定边界框坐标。官方论文

RCNN

图片来源van de Sande et al. ICCV11

RCNN-1

图片来源:这篇博客

F-RCNN - 快速R-CNN

这种方法与R-CNN类似但区域是在应用卷积层之后定义的。

FRCNN

图片来源:官方论文arXiv2015

Faster R-CNN

这种方法的核心思想是使用神经网络预测ROI——即所谓的区域提议网络论文2016

FasterRCNN

图片来源:官方论文

R-FCN基于区域的全卷积网络

这种算法比Faster R-CNN更快。其核心思想如下

  1. 使用ResNet-101提取特征。
  2. 特征通过位置敏感得分图处理。每个类别C的物体被划分为k\times k区域,并训练预测物体的各部分。
  3. 对于k\times k区域中的每个部分,所有网络对物体类别进行投票,选择投票最多的类别。

r-fcn image

图片来源:官方论文

YOLO - 只看一次

YOLO是一种实时单次检测算法。其核心思想如下

  • 将图像划分为S\times S区域。
  • 对每个区域,CNN预测n个可能的物体、边界框坐标和置信度=概率 * IoU。

YOLO

图片来源:官方论文

其他算法

✍️ 练习:目标检测

通过以下笔记本继续学习:

ObjectDetection.ipynb

总结

在本课中,你快速了解了实现目标检测的各种方法!

🚀 挑战

阅读以下关于YOLO的文章和笔记本并尝试自己动手实践

课后测验

复习与自学

作业:目标检测