个人博客:Sekyoro的博客小屋
个人网站:Proanimer的个人网站—
目标检测也是属于cv热点方向之一,但之前我做得并不多,这里通过微软的教程以及都l学习一下.
在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。 在计算机视觉里,我们将这类任务称为目标检测(object detection)或目标识别(object recognition)
目标检测在无人驾驶和机器人、摄像头里用得很多.
基本概念
bouding box
在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右下角的x和y坐标决定。 另一种常用的边界框表示方法是边界框中心的(x,y)轴坐标以及框的宽度和高度
目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 这里我们介绍其中的一种方法:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。 这些边界框被称为锚框(anchor box)
也就是采样区域的设置方式,这里使用不同的缩放比和宽高比生成锚框,假设缩放比为有n个,m个宽高比,比较简单的组合就是
(
s
1
,
r
1
)
,
(
s
1
,
r
2
)
,
…
,
(
s
1
,
r
m
)
,
(
s
2
,
r
1
)
,
(
s
3
,
r
1
)
,
…
,
(
s
n
,
r
1
)
.
(s_1,r_1),(s_1,r_2),\ldots,(s_1,r_m),(s_2,r_1),(s_3,r_1),\ldots,(s_n,r_1).
(s1,r1),(s1,r2),…,(s1,rm),(s2,r1),(s3,r1),…,(sn,r1).
可以通过杰卡德系数,也就是交并比IoU衡量锚框与真实边界框之间的相似性
J
(
A
,
B
)
=
∣
A
∩
B
∣
∣
A
∪
B
∣
.
J(\mathcal{A},\mathcal{B})=\frac{|\mathcal{A}\cap\mathcal{B}|}{|\mathcal{A}\cup\mathcal{B}|}.
J(A,B)=∣A∪B∣∣A∩B∣.
在训练集中,我们需要给每个锚框两种类型的标签。一个是与锚框中目标检测的类别,另一个是锚框相对于真实边界框的偏移量。
在预测时,我们为每个图像生成多个锚框,预测所有锚框的类别和偏移量,根据预测的偏移量调整它们的位置以获得预测的边界框,最后只输出符合特定条件的预测边界框
Naive approach
假设我们想在照片上找到一只猫,一种非常简单的物体检测方法如下:
- 将图片分解为多个平铺(tiles)
- 对每个平铺运行图像分类。
- 那些识别率较高的tiles可以被认为包含所讨论的对象。
然而,这种方法远非理想,因为它只允许算法非常不精确地定位对象的边界框(bounding box )。为了获得更精确的位置,我们需要运行某种回归(regression)来预测边界框的坐标——为此,我们需要特定的数据集。
目标检测的指标
Intersection over Union
指的就是上面的交并比
虽然对于图像分类,很容易测量算法的性能,但对于对象检测,我们需要测量类的正确性以及推断的边界框位置的精度。对于后者,我们使用所谓的并集交集(IoU),它测量两个bouding box(或两个任意区域)重叠的程度。
们用两个图形的并集面积来划分两个图形之间的相交面积。对于两个相同的区域,IoU将是1,而对于完全不相交的区域,它将是0。否则,它将在0到1之间变化。我们通常只考虑IoU超过某个值的边界框。
Average Precision
PR(Precision-Recall)曲线下的面积,这与混淆矩阵相关.
- 考虑精度-召回曲线显示了取决于检测阈值(从0到1)的精度。
- 根据阈值的不同,我们会得到或多或少的图像中检测到的对象,以及不同的精度和召回率值。
计算多个不同阈值(threshold)的precision.比如设置10个均分的阈值
A
P
=
1
11
∑
i
=
0
10
Precision
(
R
e
c
a
l
l
=
i
10
)
AP=\frac1{11}\sum_{i=0}^{10}\text{Precision}(\mathrm{Recall}=\frac i{10})
AP=111i=0∑10Precision(Recall=10i)
AP与IoU
我们将仅考虑IoU高于特定值的那些检测。包括计算AP时也只考虑IoU高于阈值的
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.使用生成的区域来生成最终的候选区域提案
得到2000个区域proposals后,CNN充当特征提取器,并且输出密集层由从图像中提取的特征组成,并且提取的特征被馈送到SVM中以对该候选区域提议内的对象的存在进行分类。除了预测区域建议内对象之外,该算法还预测四个值,这些值是偏移值,以增加边界框的精度。例如,给定一个区域提案,该算法本来可以预测一个人的存在,但该区域提案中那个人的脸可能会被减半。
存在的问题
- 训练网络仍然需要大量的时间,因为每张图像需要对2000个区域建议进行分类。它不能实时实现,因为每个测试图像大约需要47秒。
- 选择性搜索算法是一种固定的算法。因此,在那个阶段没有学习。这可能导致产生糟糕的候选地区proposals。
F-RCNN
这种方法类似于R-CNN,但ROI区域是在应用卷积层后定义的。
将输入图像提供给CNN以生成卷积特征图。从卷积特征图中识别proposal regions,并通过使用RoI池化层将其扭曲(warp )成正方形,我们将其重塑为固定大小,以便将其馈送到完全连接的层中。
根据RoI特征向量,我们使用softmax层来预测所提出区域的类别以及边界框的偏移值
可以看出,生成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,即所谓的区域建议网络。
上述两种算法(R-CNN和Fast R-CNN)都使用选择性搜索来找出区域建议。选择性搜索是一个缓慢而耗时的过程,会影响网络的性能。1506.01497v1.pdf (arxiv.org)提出了一种对象检测算法,该算法没有使用选择性搜索算法,并让网络学习区域建议。
类似于Fast R-CNN,图像被提供作为卷积网络的输入,该卷积网络提供卷积特征图。不是在特征图上使用选择性搜索算法来识别区域建议,而是使用单独的网络来预测区域建议。
不是在特征图上使用选择性搜索算法来识别区域建议,而是使用单独的网络来预测区域建议。然后使用RoI池化层对预测的区域建议进行整形,该RoI池层随后用于对建议区域内的图像进行分类并预测边界框的偏移值。
R-FCN: Region-Based Fully Convolutional Network
- 我们使用ResNet-101提取特征
- 特征由Position-Sensitive Score Map处理,每个类对应的对象由k*k个块构成,也就是说通过一个特征图得到一个d*C*k*k的输出,d表示d个regional proposals,d中的每一块可能对应图像中的某一部分,相当于把每一部分分为大小相同且对应不同类的特征,然后通过pool.
- 对于k*k区域的每一块,对每一个对象类vote(其实就是计算类概率),最大值就是对应的类.
YOLO
YOLO是一种实时one-pass算法
- 图像被分成SXS块
- 对于每块区域,CNN预测n个可能的类,bounding box坐标,以及置信度(置信度=概率*IoU)
YOLO的工作原理是,我们拍摄一张图像,并将其分割成一个SxS网格,在每个网格中我们取m个边界框。对于每个边界框,网络输出该边界框的类概率和偏移值。具有高于阈值的类概率的边界框被选择并用于在图像内定位对象。
YOLO算法的局限性在于它很难处理图像中的小物体,例如,它可能很难检测到一群鸟。这是由于算法的空间约束。
参考资料
- Object detection with neural networks — a simple tutorial using keras | by Johannes Rieke | Towards Data Science
- AI-For-Beginners/lessons/4-ComputerVision/11-ObjectDetection/README.md at main · microsoft/AI-For-Beginners (github.com)
- 13.4. 锚框 — 动手学深度学习 2.0.0 documentation (d2l.ai)
- jrieke/shape-detection: 🟣 Object detection of abstract shapes with neural networks (github.com)
- R-CNN, Fast R-CNN, Faster R-CNN, YOLO — Object Detection Algorithms | by Rohith Gandhi | Towards Data Science
如有疑问,欢迎各位交流!
服务器配置
宝塔:宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取
云服务器:阿里云服务器