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

目标检测

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

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

  • 区域神经网络目标检测

    • R-CNN
    • Fast R-CNN
    • Faster R-CNN
    • Mask R-CNN
  • 单发多框目标检测

    • SSD
    • YOLO

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

  • 分类任务: 将图像结构化为某一类别的信息,用事先定好的类别来描述图片。这个任务相对比较简单,也是深度学习最先突破实现的任务。在深度学习中是通过卷积和池化层不断将空间上的信息压缩到具有类别维度的类别空间上来实现对图像的分类,具体应用如人脸识别和场景识别等。现在更多情况是作为其他任务的基础任务来使用。
  • 目标检测: 在分类任务中,通常图片中出现目标单一或者主题单一,所以分类任务关心是图像的整体,只要给出图片内容描述即可。而目标检测相对于分类就要复杂得多。对目标描述不仅限于类别还需要给出位置信息。而且目标也不再单一,可能是一系列感兴趣的目标列表。
  • 分割: 分割做的事情和目标检测做的事情差不多,不同的是分割不是用方框将目标位置表示处理,而是用多边形线将物体的边缘表示出来。分割分为语义分割(semantic segmentation)和实例分割(instance segmentation)两种,分割是对每一个像素所属类别进行打标签,所以在分割任务上数据集准备要相对大一些。

目标检测

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

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

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

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

  • 候选框(region proposals)
  • 锚框 (anchor box)
  • 边界框 bounding box: bounding box 是框住物体边框
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 进行调整候选框的大小。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353