深度学习深度学习之目标检测

TensorFlow Faster R-CNN 实现详解(未完)

2018-08-09  本文已影响2人  公输睚信

        本文将根据 Mask R-CNNFaster R-CNN 论文以及 TensorFlow 实现的 目标检测 来详细的解析通过 R-CNN 方法来进行目标检测的原理(使用 TensorFlow 训练目标检测器请参考 TensorFlow 训练自己的目标检测器)。

        如下图所示,我们想要知道图像中有哪些目标(人、风筝等),知道了存在的目标之后,还想知道这些目标在图像中的哪个位置(左上角、右下角等)。知道这些信息,在实际中的某些任务上很有帮助,比如,在自动驾驶中,通过摄像头传回的图像,可以检测出前方是否存在行人、车辆等障碍物,而且可以计算出离他们的距离。目标检测的目的即是从一张给定的图像中检测出固定种类的目标以及定位这些目标在图像的位置(如图中的绿色边框、橙色边框)。因此,目标检测包含两个子任务:分类和定位,既要识别目标的类别,又要定位目标的位置。

TensorFlow 目标检测示例图

        上图充分说明了目标检测的难度。主要难度有:1.一张图像中的可识别的目标可能很多,很难在识别准确的基础上不漏掉其中一些目标;2.目标尺度变化很大,很难兼顾大尺度目标和小尺度目标;3.目标之间可能存在重叠、遮挡、形变等复杂关系。相比之下,下图的检测过程就容易很多,因为只包含一个目标,而且目标清晰,但即便如此,最后的定位(黑框)精度也不甚理想。


目标检测:检测人体

        我们知道识别目标属于哪个类别是一个分类任务,最终只需要赋予这个目标一个类标号(0, 1, 2, 3, ...)或类名(人、车、猫、狗、......)即可。现在我们想知道的是:要怎么来表达定位结果?正如你看到(想到)的一样,用一个包含目标的边框来表达目标的定位位置,通常可以用边框的左上角、右下角的坐标,即 (ymin, xmin)、(ymax, xmax),或者中心坐标以及宽高,即 (xc, yc)、w、h 这两种方式来表示目标的位置(见上面两图)。

        目标检测不同于分类任务的关键在于:所面临的图像中可识别的目标可能不止一个,而且还可以是零个,这就使得通常的分类网络不能直接应用于目标检测,但使用分类网络进行特征提取却是通用的技巧。当前,常用的目标检测算法包括:1.单阶段算法:YOLO 系列,SSD 系列;2.双阶段算法:R-CNN系列。本文主要讲解 R-CNN 系列,特别是 Faster R-CNN

一、Faster R-CNN 思想

        我们已经知道目标检测包含两个任务,分别是定位和分类。因为一张图像中可能包含 0 个或 多个 目标,因此目标检测与单纯的分类任务存在本质的差异。但如果先从图像中把所有的目标都单独分割出来,形成分割出来的图像中有且仅有一个目标,则此时就将原任务转化成了一个单纯的分类问题。这就是 R-CNN 论文最原始的思想。因为具有逻辑上的先后关系:先分割出目标,然后再对分割出的目标分类,因此 R-CNN 算法是一个两阶段的算法。此时,目标检测的核心问题在于:1.怎么将目标从图像中分割出来;2.怎么对分割的目标进行识别。因为 2 是一个单纯的分类问题,已经有很多成熟的算法,所以目标检测的关键问题是:怎么从图像中分割目标

        分割目标其实不是一件容易的事,原因有二:1.目标数量、尺度和位置都是任意变化的,分割要做到不遗漏,特别是要做到不加入无效的背景区域很困难。这里涉及到一个技术问题,即:从图像中分割出的一个区域要怎么判定它包含可识别的目标(即目标区域)或不包含目标(即背景区域)?一个下意识的想法也许是:这不是一个二分类任务吗?确实是一个二分类任务!把所有可识别的目标都泛化成一个大类,比如叫正类(类标号为 1),所有背景为另一个类,比如负类(类标号为 0),判断一个分割区域是否为目标区域就成了一个典型的二分类问题。分类问题都是简单的,因此目标检测的关键问题再次被简化,现在的关键问题是:怎么从图像中获取分割区域?这就引出了分割目标困难的第二个原因:2.要高效的对图像进行区域分割,也很困难,困难之处在于高效,即:在分割区域数量尽可能少的情况下,不遗漏所有可识别的目标。一个最原始的分割区域的方式是滑动窗口算法,几乎是以一种穷竭的方法把所有子区域都从图像中分割出来了,但是显然它不够高效。

        R-CNN 最先使用的分割方法是选择搜索(Selective Search),基本思想是:先用图像分割的方法把图像分割成充分多的足够小的区域,然后根据相邻区域的相似性(包括颜色、纹理、尺寸、空间交叠等相似性度量)不断的合并小区域,直至所有的小区域合并成整张图像为止,记录下此过程中的所有中间结果(包括最开始的小区域),这些区域就是最终用于二分类判定是否是目标区域的数据集合。

二、Faster R-CNN 实现

上一篇下一篇

猜你喜欢

热点阅读