目标检测(Object Detection)学习_P1

目标检测也是属于cv热点方向之一,但之前我做得并不多,这里通过微软的教程以及d2l学习一下.

在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。 在计算机视觉里,我们将这类任务称为目标检测(object detection)或目标识别(object recognition)

目标检测在无人驾驶和机器人、摄像头里用得很多.

基本概念

bouding box

在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右下角的x和y坐标决定。 另一种常用的边界框表示方法是边界框中心的(x,y)轴坐标以及框的宽度和高度

目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。 这些边界框被称为锚框(anchor box)

也就是采样区域的设置方式,这里使用不同的缩放比和宽高比生成锚框,假设缩放比为有n个,m个宽高比,比较简单的组合就是

可以通过杰卡德系数,也就是交并比IoU衡量锚框与真实边界框之间的相似性

在训练集中,我们需要给每个锚框两种类型的标签。一个是与锚框中目标检测的类别,另一个是锚框相对于真实边界框的偏移量。

在预测时,我们为每个图像生成多个锚框,预测所有锚框的类别和偏移量,根据预测的偏移量调整它们的位置以获得预测的边界框,最后只输出符合特定条件的预测边界框

Naive approach

假设我们想在照片上找到一只猫,一种非常简单的物体检测方法如下:

  1. 将图片分解为多个平铺(tiles)
  2. 对每个平铺运行图像分类。
  3. 那些识别率较高的tiles可以被认为包含所讨论的对象。

然而,这种方法远非理想,因为它只允许算法非常不精确地定位对象的边界框(bounding box )。为了获得更精确的位置,我们需要运行某种回归(regression)来预测边界框的坐标——为此,我们需要特定的数据集。

目标检测的指标

Intersection over Union

指的就是上面的交并比

虽然对于图像分类,很容易测量算法的性能,但对于对象检测,我们需要测量类的正确性以及推断的边界框位置的精度。对于后者,我们使用所谓的并集交集(IoU),它测量两个bouding box(或两个任意区域)重叠的程度。

IoU

们用两个图形的并集面积来划分两个图形之间的相交面积。对于两个相同的区域,IoU将是1,而对于完全不相交的区域,它将是0。否则,它将在0到1之间变化。我们通常只考虑IoU超过某个值的边界框。

Average Precision

PR(Precision-Recall)曲线下的面积,这与混淆矩阵相关.

  1. 考虑精度-召回曲线显示了取决于检测阈值(从0到1)的精度。
  2. 根据阈值的不同,我们会得到或多或少的图像中检测到的对象,以及不同的精度和召回率值。

img

计算多个不同阈值(threshold)的precision.比如设置10个均分的阈值

AP与IoU

我们将仅考虑IoU高于特定值的那些检测。包括计算AP时也只考虑IoU高于阈值的

img

Mean Average Precision - mAP

目标检测的主要指标称为平均精度(mAP)。它是Average Precision的值,是所有对象类的平均值,有时也计算在给定的几个IoU阈值上的均值.

Different Object Detection Approaches

对象检测算法有两大类:Region Proposal Networks (R-CNN、Fast R-CNN、Faster R-CNN).主要思想是生成ROI(Regions of Interests),在每个ROI上运行CNN.

One-pass (YOLO, SSD, RetinaNet) 在这些体系结构中,我们设计网络以一次性预测类和ROI.

R-CNN

R-CNN使用选择性搜索rcnn_pami.pdf (ulsan.ac.kr)1311.2524.pdf (arxiv.org)生成ROI区域的分层结构,然后通过CNN特征提取器和SVM分类器来确定对象类别,并通过线性回归来确定边界框坐标

选择性搜索UijlingsIJCV2013.pdf (uva.nl)

1.生成初始子分割,我们生成许多候选区域

2.使用贪婪算法递归地将相似的区域组合成更大的区域

3.使用生成的区域来生成最终的候选区域提案

img

得到2000个区域proposals后,CNN充当特征提取器,并且输出密集层由从图像中提取的特征组成,并且提取的特征被馈送到SVM中以对该候选区域提议内的对象的存在进行分类。除了预测区域建议内对象之外,该算法还预测四个值,这些值是偏移值,以增加边界框的精度。例如,给定一个区域提案,该算法本来可以预测一个人的存在,但该区域提案中那个人的脸可能会被减半。

RCNN-1

存在的问题
  • 训练网络仍然需要大量的时间,因为每张图像需要对2000个区域建议进行分类。它不能实时实现,因为每个测试图像大约需要47秒。
  • 选择性搜索算法是一种固定的算法。因此,在那个阶段没有学习。这可能导致产生糟糕的候选地区proposals。

F-RCNN

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

FRCNN

将输入图像提供给CNN以生成卷积特征图。从卷积特征图中识别proposal regions,并通过使用RoI池化层将其扭曲(warp )成正方形,我们将其重塑为固定大小,以便将其馈送到完全连接的层中。

根据RoI特征向量,我们使用softmax层来预测所提出区域的类别以及边界框的偏移值

img

可以看出,生成proposal regions的算法效率很重要,R-CNN使用过选择性搜索算法,F-RCNN通过先将图像通过卷积层得到feature map,在feature map上进行生成region of proposals 并warp成相同大小的ROI再输入到FC进行分类.

“Fast R-CNN”比R-CNN快的原因是,你不必每次向卷积神经网络提供2000个区域建议。相反,每个图像只进行一次卷积运算,并从中生成特征图。

Faster R-CNN

这种方法的主要思想是使用神经网络来预测ROI,即所谓的区域建议网络。

FasterRCNN

上述两种算法(R-CNN和Fast R-CNN)都使用选择性搜索来找出区域建议。选择性搜索是一个缓慢而耗时的过程,会影响网络的性能。1506.01497v1.pdf (arxiv.org)提出了一种对象检测算法,该算法没有使用选择性搜索算法,并让网络学习区域建议。

类似于Fast R-CNN,图像被提供作为卷积网络的输入,该卷积网络提供卷积特征图。不是在特征图上使用选择性搜索算法来识别区域建议,而是使用单独的网络来预测区域建议。

不是在特征图上使用选择性搜索算法来识别区域建议,而是使用单独的网络来预测区域建议。然后使用RoI池化层对预测的区域建议进行整形,该RoI池层随后用于对建议区域内的图像进行分类并预测边界框的偏移值。

img

R-FCN: Region-Based Fully Convolutional Network

  1. 我们使用ResNet-101提取特征
  2. 特征由Position-Sensitive Score Map处理,每个类对应的对象由k*k个块构成,也就是说通过一个特征图得到一个dC\k*k的输出,d表示d个regional proposals,d中的每一块可能对应图像中的某一部分,相当于把每一部分分为大小相同且对应不同类的特征,然后通过pool.
  3. 对于k*k区域的每一块,对每一个对象类vote(其实就是计算类概率),最大值就是对应的类.

r-fcn image

YOLO

YOLO是一种实时one-pass算法

  1. 图像被分成SXS块
  2. 对于每块区域,CNN预测n个可能的类,bounding box坐标,以及置信度(置信度=概率*IoU)

YOLO的工作原理是,我们拍摄一张图像,并将其分割成一个SxS网格,在每个网格中我们取m个边界框。对于每个边界框,网络输出该边界框的类概率和偏移值。具有高于阈值的类概率的边界框被选择并用于在图像内定位对象。

YOLO算法的局限性在于它很难处理图像中的小物体,例如,它可能很难检测到一群鸟。这是由于算法的空间约束。

参考资料

  1. Object detection with neural networks — a simple tutorial using keras | by Johannes Rieke | Towards Data Science
  2. AI-For-Beginners/lessons/4-ComputerVision/11-ObjectDetection/README.md at main · microsoft/AI-For-Beginners (github.com)
  3. 13.4. 锚框 — 动手学深度学习 2.0.0 documentation (d2l.ai)
  4. jrieke/shape-detection: 🟣 Object detection of abstract shapes with neural networks (github.com)
  5. R-CNN, Fast R-CNN, Faster R-CNN, YOLO — Object Detection Algorithms | by Rohith Gandhi | Towards Data Science
-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道