深度学习计算机视觉

2020深度学习目标检测(上)

2020-08-14  本文已影响0人  zidea

目标检测

今天我们来聊一聊目标检测,那么首先什么是目标检测?其实目标检测是由两个任务组成的,一个是识别,就是将图片中出现物体所属类别识别出来,另一个是检测,就是在确定物品所属种类后将物体所在位置检测出来。

主要说两种目标检测,区域神经网目标检测和单发多框目标检测,会分享一些有关这些目标检测主流的实现。

我们是将图像以像素的形式保存输入给计算机,具体来说I(x,y) x 和 y 表示每一个像素位置信息。这样一来计算机得到图像信息就很少,需要自己通过读解图像以获得更多的信息。

目标检测

首先目标检测输入一张图片,然后输出是一个列表,列表中每一条数据包括目标两个方面信息:类别和位置。好首先明确这些我们就去找算法如何将他们之间关系。其实就是回答目标是什么,目标在哪这两个问题。目标是什么属于分类问题,目标在哪就难了,需要通过坐标表示出来其位置,说到数值问题,大家可能自然会想到回归问题。

这里用一些简单话来把这件事说一下,我们就是将图片切分成许多大小不同区域,然后观察这个区域是否有我们想要找的目标。如果是,那么也就是说明这个图像区域置信度高,然后就是分类问题来识别这个区域是什么东西,接下来通过调整区域大小,缩小一些或者扩大一些来合适框住我们想要物体。其实看起来很简单,但是目标识别就是基于这个做法来进行目标识别,只是关于图片区域的选取做的越来越巧妙,越来越抽象而已。

根据找候选区域和进行识别是先后来做还是一起来做可以将目标检测分为 SSD 单发检测模型和 two-stage 检测模型两种。

在开始之前我们先明确一些概念,对于概念这里只需要简单了解一下即可,随着随后深入学习大家可能会了解更多

r_cnn_bbox_001.jpeg

基于区域卷积神经网

这一次我们并不是把整张图片输入到神经网络,而是将图片切分为一个区域和一个区域逐一输入到神经网络,这样做好处是我们可以得到目标位置信息。那么如果我们根据位置和大小来遍历一张图片,这样显然是行不通,因为这样计算量太大。所以有关区域选择是有技巧,可以借助类似聚类这样算法来启发式进行区域生产。然后我们卷积需要输入一个长宽固定大小正方形的图片,所以有了候选框我们还需进行 resize 处理。最后再输入神经网进行分类。好接下来基于区域卷积神经网络都是遵循这些步骤进行的,只是具体实现这些步骤方式不同而已。

R-CNN(Region CNN)

早在 R-CNN 出现之前人们都是在使用 HOG 技术来进行简单目标识别,HOG 能够识别任务比较简单,局限性也很大,对于输入图像具有一定要求。R-CNN 早出现 2014 年,虽然今天在目标检测任务时,已经几乎没有人再去选择 R-CNN 来完成目标检测任务,但是在当下流行的模型中看到其身影,因为他给我们留下如何去做目标检测这件事的大概思路。

在 R-CNN 中,候选框提取是用 CNN 卷积,之前如果已经了解过了 fine-tuning ,那么就不难理解如何使用 CNN 来提取候选框。fine-tuning 技术适用一些小样本,也就是样本数量不多情况时。我们将一些基于 imageNet 这样大规模数据集训练出的经典网络的最后一层去掉,保留之前所有层来获取特征层,这些特征层可以看作一个一个区域。现在损失函数不仅单单考虑分类正确性还需要考虑候选框的位置的损失值。

r_cnn_bbox_002.jpg

我们可以思考一下,这里对于分类问题为什么不用 softmax 而是用 SVM 去做单分类。

r_cnn.png

在 R-CNN 中的,在 RCNN 中候选框的选择使用的方法是 selective search。selective search 生产的候选框方案是根据相邻像素颜色或 pattern 进行聚类选择候选框,然后将候选框压缩为方形(warped region)。然后选择分类器 SVM 进行分类。SVM 是一个单分类 SVM 对于所有分类都需要进行一次分类任务。如果我们有 10 分类,那么对于每一个候选框就需要跑 10 次 SVM。

r_cnn_001.png

FAST R-CNN

每张图片要生产大概 2000 个区域,然后对每一个区域进行一次预测。那么也就是在 R-CNN 要进行几乎 2000 次的 forward,这也是 R-CNN 慢的问题,在 R-CNN 也就是先由 selective Search 从图片生产大概 2000 个候选框,然后对每一个候选区域进行 CNN。所以在 2015 年出现了 FAST R-CNN ,FAST R-CNN 是在 R-CNN 基础上变得更简单更快。主要优化工作是先对图片进行 CNN 然后在 CNN 上进行 selective Search 进行生产候选框,再去做分类和bbox回归工作。

我们之前候选框进入 CNN 之前进行一次 resize 再进入 CNN,但是在 FAST R-CNN 是先做卷积然后在生产候选框,这样就带来问题,因为在卷积中做 resize 是没有求导的,所以引入 RoI Pooling ,作用

R-CNN 的耗时原因是 CNN 是在每张图片的每一个 proposal 上单独进行的,没有共享计算,便提出将基础网络在图片整体上运行完毕后,再传入 R-CNN 子网络,共享了大部分计算,故有 Fast 之名。

fast_r_cnn_roi_001.png

RoI

我们现在简单解释一下 RoI pooling 作用,我们是将 selective research 提取出的候选框在输入 CNN 前进行一次大小调整,将这些区域 resize 为长宽等长的方形后再输入 CNN,现在我们是在 CNN 中直接做 selective research 了,所以如何对这些候选框进行调整尺寸呢?因为在卷积中进行 resize 后我们就没有办法对卷积求导了,所以这里使用了一种类似 max pooling 技术,就是通过 max pooling 在对区域进行缩放时保留该区域的最大值作为其值,下面图掩饰 RoI pooling 的整个过程。

fast_r_cnn_roi_003.gif

最近的项目涉及到目标检测,有关目标检测我们还需要进一步探讨研究,经过一段紧张和学习也沉淀下来一些关于目标检测的一些知识。准备先给出一些概念然后给大家一些代码实现,实现主要基于 pytorch 来实现目标检测。

FASTER R-CNN

Faster R-CNN 的改进的点就是用 RPN(Region Proposal Network) 的技术来取代了 selective Research 生产候选框。这是因为 selective Research 对于我们基本属于黑盒,因为其中技术过于复杂,复杂就可能影响到生产候选框的速度,所以有必要对其进行简化。那么有什么好的办法能够代替 selective research 来生产候选框呢?也就是我们 RPN 来取代 selective research 技术生产候选框。

faster_r_cnn_anchor_box.png

(如图)具体做法是,我们以每一个像素为中心来生产一系列不同尺寸,不同长宽比例的锚框(anchor box),这里叫锚框原因可能是这些框是从一点生产出来的,所以叫做锚框。将这些生产的框到 CNN 层投入 softmax 和 bbox reg,softmax 是用于判定该框是否属于背景,是一个二分类器,而 bbox reg 是对锚框进行回归。得到 2k scores 也就是 2k 候选框的置信度,也就是表示候选框是否为背景,4k 表示我们给 2k 框每一个框两个坐标点,得到候选框同样会输入到 RoI 进行调整候选框的大小。

上一篇 下一篇

猜你喜欢

热点阅读