

计算机视觉之目标检测
source link: https://xujinzh.github.io/2023/03/05/ai-cv-object-detection/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

目标检测是计算机视觉的一项基本任务。它能够告诉我们一幅图像中有什么(可能有多个)物体和这些物体在什么位置,位置常使用矩形框的形式给出。本篇我们介绍深度学习类目标检测算法及算法评估方法。
目标检测算法分类
目标检测算法发展至今已经有几十年,出现有多种类型的图像目标检测算法,包括
- 两阶段目标检测算法
- Fast RCNN
- Faster RCNN
- 一阶段目标检测算法
- YOLO 系列
- 无锚点算法
目标检测算法的基本思路
对一幅图像进行目标检测要求同时预测出图像中的物体及位置,最容易想到的方法是先将图片均匀分块,然后使用图像分类算法对每一块图片补丁或图像块进行分类,图片补丁在原图像上的位置作为物体的位置信息。这种方法预测的物体边界框比较粗糙,如一个物体在跨两个图片补丁时,物体尺寸大于或小于补丁尺寸时,都是边界框的预测都是不准确的。
为了解决上面的物体跨补丁、固定尺寸导致的边界框粗糙问题,可以采用滑窗(Sliding Window)的思路。具体的使用不同尺寸、不同长宽比的矩形框窗口按照一定的步长(像素值)从图像左上角依次滑动取到图像的右下角。这样就可以得到很多个不同尺寸、不同长宽比的图片补丁,理论上原图片中的每个物体都能包含在这些图片补丁中。然后再对每一个图片补丁进行分类即可。或者固定窗口尺寸只采用不同长宽比,但是把原图像进行不同比例的缩放,即得到图像金字塔也可以获得理论上包含所有物体的图片补丁。这种方法也有缺点就是效率低,因为滑窗得到的图片补丁是很多的,对每一个图片补丁进行分类会很浪费时间和浪费计算资源,无法满足实时性的要求。
为了解决滑窗的效率问题,可以先对图片补丁进行筛选。因为滑窗得到的图片补丁包含大量的窗口都落在不包含物体的边界区域或物体内部。常用的方法是区域提议(Region Proposal),如 Selective Search 算法就是一种区域提议算法:使用贪心算法,将空间相邻且特征相似的图像块逐步合并到一起,形成可能包含物体的区域,称为提议区域或提议框。提议框的数量明显比滑窗得到的图片补丁少的多,然后使用这些提议框进行分类。使用提议框的边界坐标作为目标的物体的位置信息一般会有一些误差,此时,可通过一个回归分支进行位置信息预测,加上分类分支,整个模型是多任务学习模型。
RCNN 是两阶段目标检测算法。对于一幅图像,第一阶段经过区域提议找出可能包含物体的框,区域提议采用 Selective Search 算法,该算法快但可能不是非常准确。第二阶段对区域提议框进行缩放到统一的尺寸得到 warped region,对每一个 warped region 使用卷积神经网络(AlexNet)得到图像特征,然后每一个图像特征先通过分类头(SVM分类器)预测物体类别,后通过回归头预测边界框偏移量。这一步因为需要对所有 warped region 输入卷积神经网络进行预测,所以比较慢但是准确。
对于第一阶段,区域提议是不需要学习参数的。第二阶段的卷积神经网络、分类分支和回归分支需要通过模型训练学习参数。学习时,训练顺序是先训练卷积神经网络,然后训练分类分支,最后训练回归分支,因此它不是端到端的、多任务学习。对于提议框 P = (px,py,ph,pw)(这里 px,py表示提议框的中心坐标,ph,pw 表示高和宽)和标注框 B = (bx,by,bh,bw):
- 如果 P 和 B 的重叠较大,那么分类目标值就是B的标注类别,回归目标值就是 P 相对于 B 的偏移量;
- 如果 P 和 B 的重叠较小,那么分类目标值就是背景,回归分支不计算损失。
其中边界框的偏移量,即回归分支的预测目标为:
(1)(tx,ty,th,tw)=(bx−pxpw,by−pyph,log(bwpw),log(bhph))
前两个元素表示位置偏差基于边长归一化,后两个元素表示尺度比例的对数。编码后的偏移量既可以避免绝对数值过大或过小影响,又可以把他们的数值编码到一个比较容易预测的范围。
两个矩形框的交并比 IOU 定义为他们的交集面积与并集面积的比值,是对两个矩形框重合度的衡量。
非极大值抑制(Non-Maximum Suppression,NMS)对于一个目标,有时会得到多个预测框,每个预测框对应不同的置信度值。使用非极大值抑制算法,我们可以得到每个目标一个预测框:
- 输入:检测器产生的一系列检测框 P = P1,⋯,Pn 及对应的置信度 s = s1,⋯,sn,IOU 阈值 t
- 步骤:
- 初始化结果集 R = ∅
- 重复直至 P 为空集
- 找出 P 中置信度最大的框 Pi 并加入 R
- 从 P 中删除 Pi 以及与 Pi 交并比大于 t 的框
- 输出: 结果集 R
Fast RCNN
2014 年,针对 RCNN 中多个提议框都需要进行一次卷积神经网络导致模型推断速度慢的问题,提出了 RoIPooling 方法,把提议区域从图像移动到特征图上,这样只需要对整个图像进行一次卷积神经网络特征提取,把提议框通过 RoIPooling 直接映射到特征图上,一次得到所有提议框的卷积后特征。这大幅降低了计算量。
Faster RCNN
2015 年,针对 Fast RCNN 中运行最慢的 Selective Search 区域提议模块,提出了基于卷积神经网络的 RPN 网络,产生区域提议,进一步提高了效率。
Mask RCNN
2017 年针对 Fast RCNN 中提出的 RoIPooling 回归效果差问题,提出了 RoIAlign 提高边界框预测精度。同时,加入 Mask 分支,使得模型能够用于实例分割。
Recommend
-
65
-
47
雷锋网按:本文为雷锋字幕组编译的技术博客,原文 Detecting Pikachu in videos using Tensorflow Object Detection ,作者 Juan De Dios Santos。 翻译 | 于志鹏 整理 | 吴璇 在 TensorFlow 众多功能和工具中,有一...
-
93
作者 | Moses Olafenwa 翻译 | 林椿眄 出品 | 人工智能头条(公众号ID: AI_Thinker ) 作为人工...
-
53
大数据文摘出品 编译:朱一辉、雪清、小鱼 短短10行代码就可以实现目标检测?!
-
47
-
43
小叽导读 : 视觉目标跟踪 (visual object tracking) 是计算机视觉 (computer vis...
-
7
在冠状病毒的情况下,有必要在公共场合佩戴口罩,以避免被感染。在这里,我们已经建立了一个计算机视觉模型,它可以检测到这个人是否戴了口罩。在进一步进行之前,我要感谢Rahul Arora在这方面与我合作。
-
11
为了了解模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,并通过这个指标来进一步调参优化模型。对于分类和回归两类监督模型,分别有各自的评判标准。 不同的问题和不同的数...
-
9
本篇文章是论文阅读笔记和网络理解心得总结而来,部分资料和图参考论文和网络资料 FPN(feature pyramid networks) 是何凯明等作者提出的适用于多尺度目标检测算法。原来多数的 object detection 算法(比如 faster...
-
4
Mask RCNN 是作者 Kaiming He 于 2018 年发表的论文 ROI Pooling 和 ROI Align 的区别
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK