CodeRoadMap
路线图学习路径文章题库资源社区

浏览

首页路线图学习路径知识库题库文章资源社区我的学习
CodeRoadMap

中文编程学习导航:路线图、讲义与题库,进度可同步。

路线图学习路径文章题库社区

© 2026 CodeRoadMap

津ICP备2026012044号-1|coderoadmap@126.com
首页/AI 人工智能入门 · 微软 12 周课/目标检测

课程目录

  1. 01人工智能简介
  2. 02知识表示与专家系统
  3. 03神经网络简介
  4. 04神经网络入门:感知机
  5. 05使用感知器进行多类别分类
  6. 06神经网络简介:多层感知机
  7. 07使用我们自己的框架进行MNIST分类
  8. 08神经网络框架
  9. 09使用 PyTorch/TensorFlow 进行分类
  10. 10计算机视觉
  11. 11计算机视觉简介
  12. 12使用光流检测运动
  13. 13卷积神经网络
  14. 14宠物面部分类
  15. 15预训练网络与迁移学习
  16. 16使用迁移学习对牛津宠物进行分类
  17. 17自动编码器
  18. 18生成对抗网络
  19. 19目标检测
  20. 20使用好莱坞头部数据集进行头部检测
  21. 21分割
  22. 22人体分割
  23. 23自然语言处理
  24. 24将文本表示为张量
  25. 25嵌入
  26. 26语言建模
  27. 27训练 Skip-Gram 模型
  28. 28循环神经网络
  29. 29生成网络
  30. 30使用 RNN 进行词级文本生成
  31. 31注意机制与Transformer
  32. 32命名实体识别
  33. 33命名实体识别 (NER)
  34. 34预训练大型语言模型
  35. 35遗传算法
  36. 36深度强化学习
  37. 37other-deeprl-lab
  38. 38多智能体系统
  39. 39伦理与负责任的人工智能
  40. 40多模态网络
第 19 课1 小时

目标检测

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

课程内容

目标检测

我们之前处理的图像分类模型会接收一张图片并输出一个类别结果,例如在 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. ICCV’11

RCNN-1

图片来源:这篇博客

F-RCNN - 快速R-CNN

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

FRCNN

图片来源:官方论文,arXiv,2015

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

图片来源:官方论文

其他算法

  • RetinaNet: 官方论文
    • Torchvision中的PyTorch实现
    • Keras实现
    • Keras示例中的RetinaNet目标检测
  • SSD(单次检测器):官方论文

✍️ 练习:目标检测

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

ObjectDetection.ipynb

总结

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

? 挑战

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

  • 关于YOLO的优秀博客文章
  • 官方网站
  • YOLO:Keras实现,逐步讲解笔记本
  • YOLO v2:Keras实现,逐步讲解笔记本

课后测验

复习与自学

  • 目标检测 by Nikhil Sardana
  • 目标检测算法的优秀比较
  • 深度学习目标检测算法综述
  • 目标检测算法基础入门
  • Python实现Faster R-CNN进行目标检测

作业:目标检测


← 上一课生成对抗网络下一课 →使用好莱坞头部数据集进行头部检测