上一章:十、生成对抗网络
更多章节:人工智能入门课程
目录
R-FCN: 基于区域的完全卷积神经网络(Region-Based Fully Convolutional Network)
YOLO - 只需要一次检测(You Only Look Once)
我们之前讨论的图像分类模型会接收一个图像并生成一个分类结果,例如MNIST问题中的类别“数字”。然而,在很多情况下,我们不仅仅想知道图像描述了什么物体--我们希望能够确认它们的确切位置。这是目标检测(object detection)的意义所在。
课前练习
![](https://img-blog.csdnimg.cn/img_convert/c1ed044c25074b22fe12a94e65f384c2.png)
图像摘自YOLO v2 web site
一种简单的目标检测方法
假设我们想从一张图片中找到一只猫,一个非常简单的目标检测的方法如下:
- 将图像划分成多个网格块。
- 在每个网格块上进行图像分类。
- 对那些分类结果达到一定阈值的块,我们可以认为它们包含目标物体。
图像摘自 练习笔记
这种方法远非理想,因为它只能让算法非常不精确的定位目标的边界框。为了更准确的定位,我们需要引入某些形式的回归技术来预测边界框的坐标--这种技术需要用到特殊的数据集进行训练。
目标检测中的回归
这篇博客文章 对形状检测进行了优雅的介绍。
目标检测的数据集
在进行目标检测任务时,您可能需要用到如下数据集:
- PASCAL VOC - 包含20个类别
- COCO - 上下文中的常见物体.包含80个分类, 不仅包含边界框的标记,还包括分割掩码的标记。
目标检测评价指标
交并比(Intersection over Union)
对于图像分类,衡量算法性能非常容易,但对于目标检测,我们需要同时评估分类的正确性与边界框位置推断的准确性。为了评估边界框的准确性,我们将使用所谓的交并比(Intersection over Union,简称IoU),来测量两个框(或者两个任意区域)的重叠程度。
图2摘自 这篇关于IoU的优秀博客文章
它的概念很简单-我们用两个图形的交集的面积除以它们并集的面积。对于两个完全相同的的区域,IoU是1,对于完全分离的两个区域,IoU是0。其他情况,它会在0和1之间变化。我们通常只考虑那些IoU超过某个特定阈值的边界框。
平均精度
假设我们想衡量识别给定类型的目标$C$的识别程度。为了衡量它,我们使用平均精度指标,其计算方法如下:
- 考虑精确率-召回率(Precision-Recall)曲线,该曲线显示算法在不同阈值(从0到1)下的准确度的变化情况。
- 根据不同的阈值,我们将在图像中检测到或多或少的目标,并且得到不同的精确率和召回率。
- 曲线将如下所示 :
![](https://img-blog.csdnimg.cn/img_convert/8669e912a39d3bbe88da2d4f80403c19.png)
I图像摘自 NeuroWorkshop
给定分类$C$的平均精确率是曲线下面的区域。更准确的说,召回率X轴通常(由11个点)分成10份,并且在所有这些点上对精准率进行平均。
解释:
-
TP(True Positive):真正例,表示模型正确地将正样本分类为正样本。也就是模型预测为正样本且实际上是正样本的数量。
-
FP(False Positive):假正例,表示模型错误地将负样本分类为正样本。也就是模型预测为正样本但实际上是负样本的数量。
-
FN(False Negative):假反例,表示模型错误地将正样本分类为负样本。也就是模型预测为负样本但实际上是正样本的数量。
-
TN(True Negative):真反例,表示模型正确地将负样本分类为负样本。也就是模型预测为负样本且实际上是负样本的数量。
- 召回率 (Recall): 是指模型正确检测出的正样本占所有正样本的比例。Recall=TP/(TP+FN)
- 精确率 (Precision): 是指模型识别为正样本的样本中,实际为正样本的样本所占的比例。Precision=TP/(TP+FP)
- 阈值 (Threshold): 是一个用于进行分类的数值,高于该阈值的判定为正例,低于该阈值的判定为负例。
AP=(1/11)
其中为将召回率使用11个插值{0,0.1,0.2 ...0.9,1}平均分为10份,第i个插值的精确度。第i个召回率插值对应的精确度的计算方法(插值函数(interp))一般为:召回值大于当前召回值插值,且小于下一个召回值插值区间的最大精确度。
AP和IoU
我们仅考虑那些交并比(IoU)高于一定值的检测结果。例如,在PASCAL VOC数据集中,通常假设IoU阈值为0.5。但在COCO AP中,则会使用不同的IoU阈值来测量准确度。
![](https://img-blog.csdnimg.cn/img_convert/a682000d3654fcc51d2f77a9ff410532.png)
图像摘自NeuroWorkshop
平均精确率均值 - mAP
目标检测的主要度量标准是所谓的平均精确率均值(Mean Average Precision),或者说mAP。它是平均精确率的均值,是模型对样本中所有物体类别识别的平均精确率(AP)的平均值,有时也会考虑不同的IOU 阈值进行平均。更详情的mAP的计算过程在在这篇博客文章中有描述,同时,这有示例代码。
不同的目标检测方法
目标检测算法主要分为两大类:
- 区域候选网络(R-CNN,Fast R-CNN,Faster R-CNN)。主要思想是生成感兴趣区域(Regions of Interests (ROI)) ,然后在这些区域上运行卷积神经网络(CNN),寻找激活值最大的区域。这类似于朴素方法,区别在于ROI以更巧妙的方式生成兴趣区域。这种方法主要的缺点是它们执行速度很慢,因为我们需要对图像进行多次CNN分类器的传递(需要将 CNN 分类器多次作用于图像上,分别在不同区域进行分类)。
- 单次传递方法(One-pass (YOLO, SSD, RetinaNet) methods).在这些架构中,我们设计网络通过一次传递来同时来预测类别和ROI。这种方法的优点:这类方法速度更快,因为只需要一次正向传播 (forward pass) 就可以完成检测和分类。正向传播是指信息从网络的输入层向前传递到输出层的过程。
R-CNN: 基于区域的卷积神经网络
R-CNN 使用选择性搜索算法(Selective Search)生成层级结构的ROI区域,然后将这些区域依次通过卷积神经网络提取特征,然后使用支持向量机分类器(SVM-classifiers)来确定对象类别,使用线性回归来确定边界框坐标。官方文件
图像由van de Sande et al. ICCV’11提供
图片出自这个博客
F-RCNN - Fast R-CNN
这个方法与R-CNN类似,但区别是输入图片经过卷积层处理之后再提取兴趣区域。
图像由 the Official Paper, arXiv, 2015提供
Faster R-CNN
这种方法的主要思想是使用神经网络预测ROI-区即选网络(Region Proposal Network)。论文,2016
图像由the official paper提供
R-FCN: 基于区域的完全卷积神经网络(Region-Based Fully Convolutional Network)
R-FCN算法甚至比Faster R-CNN更快。它的主要思想如下:
- 我们使用ResNet-101 提取特征数据
- 使用位置敏感得分图(Position-Sensitive Score Map)处理提取到的特征。得分图使用C个类别中的每个类别分别将输入特征分成k*k个区域,同时训练(C层)网络来预测各个子区域的目标分类。我们将得到每个子区域可能是哪些目标分类(一个子区域可能同时被识别为多个分类)。
- 所有的网络对k*k个区域中的每个区域进行目标类别投票,票数最多的类别即为该区域所属的类别。
- R-FCN 的优点:
- 比 Faster R-CNN 速度更快,因为 R-FCN 采用完全卷积的架构,可以避免大量的重复计算。
- 仍然可以保持较好的检测精度。
- R-FCN 的缺点:
- 可能需要更多的训练数据才能达到最佳性能。
- 总而言之,R-FCN 通过采用完全卷积的架构和投票机制,在提升检测速度的同时,基本保持了 Faster R-CNN 的精度水平。
图像由官方论文提供
YOLO - 只需要一次检测(You Only Look Once)
YOLO 是一种实时的一次检测(one-pass)算法。主要思想如下:
- 图像被划分为一个S*S网格
- 对于每个网格,CNN预测n种可能存在的目标,每个目标的边界框的坐标,以及置信度(confidence)= 概率(probability )*交并比(IoU)。
![](https://img-blog.csdnimg.cn/img_convert/a359aa8b07cbf8d7bd26b7952c63300a.png)
图像由官方论文提供
其他算法
✍️ 练习: 目标检测
在以下代码笔记中继续您的学习
总结
在这节课中,您快速的浏览了所有可以完成检测的各种方法!
挑战
通读这些关于YOLO的文章和笔记本,并请您自己尝试这些方法。
课后练习
复习与自学
作业: 目标检测
上一章:十、生成对抗网络
更多章节:人工智能入门课程