首页 / 资料库 / 微软 · AI 入门

资料库12 分钟读完MIT目标检测计算机视觉

目标检测

译自《Object Detection》 · 查看英文原文

原文出处Object Detection 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。

到目前为止,我们接触的都是图像分类模型:输入一张图片,输出一个类别结果,比如 MNIST 问题里的"数字"类。但很多时候,光是知道图片里画着物体还不够,我们想知道它们的确切位置。这正是目标检测(object detection)要做的事。

课前小测

原文此处有一张图,画的是目标检测的实际效果:一张街景照片里,行人、骑行者、汽车、交通信号灯等物体被一个个矩形框圈出,框上标着类别名(图来自 YOLO v2 网站)。

目标检测的朴素做法

假设我们想在一张照片里找到猫,一种非常朴素的做法是:

  1. 把照片划分成若干小方块
  2. 对每个小方块跑一次图像分类
  3. 哪个方块的激活值足够高,就认为它包含要找的物体

原文此处有一张图,演示这种分块检测:图像被网格切分,含有猫的格子被点亮(图出自练习笔记本)。

这个办法远谈不上理想,因为它只能很粗糙地定位物体的边界框(bounding box)。要想定位更精确,就得跑某种回归(regression)来预测边界框的坐标,而这就需要专门的数据集。

用于目标检测的回归

这篇博客对形状检测有一段由浅入深的入门介绍,写得很不错。

目标检测数据集

做这个任务,你可能会遇到下面这些数据集:

  • PASCAL VOC:20 个类别
  • COCO(Common Objects in Context,场景中的常见物体):80 个类别,带边界框和分割掩码(segmentation mask)

原文此处有一张图,展示 COCO 数据集的样例照片,人物、动物、车辆等日常物体都标好了边界框。

目标检测的评估指标

交并比

图像分类的好坏容易衡量,目标检测不行:既要判断类别对不对,又要看推断出的边界框位置准不准。衡量后者,用的是所谓的交并比(Intersection over Union,IoU),它度量两个框(或任意两块区域)重叠得好不好。原文此处有一张图,画的是两个矩形框的相交区域与合并区域,旁边配着 IoU 的计算公式(引自这篇讲 IoU 的优秀博客的图 2)。

思路很简单:两个图形相交的面积,除以它们合并起来的面积。两块区域完全重合时 IoU 为 1,完全不相交时为 0,其余情况在 0 到 1 之间变化。我们通常只认 IoU 超过某个设定值的边界框。

平均精确率

假设要衡量模型对某个物体类别 $C$ 的识别效果。用的指标是平均精确率(Average Precision,AP),计算方法如下:

  1. 看精确率-召回率曲线(Precision-Recall curve),它展示检测效果随检测阈值(从 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 会在不同的 $\mbox{IoU Threshold}$ 取值下分别测量 AP。原文此处有一张图,展示引入 IoU 阈值后精确率-召回率曲线的变化(图来自 NeuroWorkshop)。

平均精确率的均值 mAP

目标检测的主要指标叫平均精确率的均值(Mean Average Precision),简称 mAP。它是 AP 在所有物体类别上取平均的值,有时也对 $\mbox{IoU Threshold}$ 取平均。mAP 的详细计算过程在这篇博客里有讲解,这里还附有代码示例。

目标检测的不同路线

目标检测算法大体分两大类:

  • 区域建议网络(Region Proposal Network)一类:R-CNN、Fast R-CNN、Faster R-CNN。主要想法是先生成一批感兴趣区域(Region of Interest,ROI),再对每个区域跑 CNN,寻找激活值最大的结果。这跟朴素做法有点相似,区别在于 ROI 的生成方式更聪明。这类方法的一个主要缺点是慢,因为 CNN 分类器要对图像反复扫描很多遍。
  • 单趟(one-pass)一类:YOLO、SSD、RetinaNet。这类架构把网络设计成一趟前向传播同时预测类别和 ROI。

R-CNN:基于区域的 CNN

R-CNN选择性搜索(Selective Search)生成层次结构的 ROI 区域,这些区域随后送入 CNN 特征提取器和 SVM 分类器来确定物体类别,再用线性回归确定边界框坐标。官方论文

原文此处有两张图:第一张展示选择性搜索层层合并生成的候选区域(图来自 van de Sande 等人 ICCV'11 的论文);第二张是 R-CNN 的流程示意图(图来自这篇博客)。

F-RCNN:Fast R-CNN

这个做法与 R-CNN 相似,区别是区域在卷积层应用之后才定义。原文此处有一张图,画的是 Fast R-CNN 的网络结构(图来自官方论文arXiv 版本,2015)。

Faster R-CNN

这一方法的主要想法是用神经网络来预测 ROI,也就是所谓的区域建议网络(Region Proposal Network)论文,2016。原文此处有一张图,展示 Faster R-CNN 的整体结构(图来自官方论文)。

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

这个算法比 Faster R-CNN 还快。主要想法如下:

  1. 用 ResNet-101 提取特征
  2. 特征交给位置敏感得分图(Position-Sensitive Score Map)处理。类别 $C$ 中的每个物体被划分成 $k\times k$ 个区域,我们训练网络去预测物体的各个部件
  3. $k\times k$ 个区域中的每个部件都对物体类别投票,得票最高的类别胜出

原文此处有一张图,展示 R-FCN 按部件划分并投票的机制(图来自官方论文)。

YOLO:You Only Look Once

YOLO 是一种实时的单趟算法。主要想法如下:

  • 图像被划分成 $S\times S$ 个区域
  • 对每个区域,CNN 预测 $n$ 个可能的物体、边界框坐标,以及置信度 = 概率 × IoU

原文此处有一张图,展示 YOLO 的网格检测流程(图来自官方论文)。

其他算法

练习:目标检测

继续在下面的 notebook 里学习:

ObjectDetection.ipynb

小结

这节课把实现目标检测的各种方法快速过了一遍。

挑战

读一读这些讲 YOLO 的文章和 notebook,自己动手试一试:

课后小测

复习与自学

作业:目标检测

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课