关于人工智能:深度学习与CV教程12-目标检测-两阶段RCNN系列

37次阅读

共计 9349 个字符,预计需要花费 24 分钟才能阅读完成。

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/37
  • 本文地址:http://www.showmeai.tech/article-detail/271
  • 申明:版权所有,转载请分割平台与作者并注明出处
  • 珍藏 ShowMeAI 查看更多精彩内容

本系列为 斯坦福 CS231n《深度学习与计算机视觉 (Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频能够在 这里 查看。更多材料获取形式见文末。


引言

ShowMeAI 在后面的内容中给大家做了很多图像分类的介绍,次要围绕卷积神经网络(LeNet / AlexNet / NIN / VGG / Google / ResNet / MobileNet / squeezenet)解说,但计算机视觉畛域有其余一些更为简单的工作,例如本篇开始介绍的指标检测(object detection)问题。

1. 计算机视觉工作

大家晓得人工智能畛域的 3 大热点方向是 计算机视觉(CV,computer vision)、自然语言解决(Natural Language Process,NLP)和语音辨认(Speech Recognition) 利用。而计算机视觉畛域又有 图像分类、指标检测、图像宰割 三大工作,如下图所示

这 3 大工作其实对应机器视觉了解图像的 3 个次要档次:

1.1 图像分类(Classification)

图像分类工作中,咱们要将图像识别断定为某个类别。它是最简略、最根底的图像了解工作,也是深度学习模型最先获得冲破和实现大规模利用的工作。大家在后面也理解到了 ImageNet 这个权威评测集,每年的 ILSVRC 催生了大量的优良深度网络结构,为其余工作提供了根底。

有一些其余的利用,包含人脸识别、场景辨认等都能够化归为分类工作来解决。

1.2 指标检测(Detection)

图像分类工作关怀整体图片类别,而指标检测则关注特定的物体指标,要求在图片中,同时辨认出指标物的类别信息和地位信息(是一个 classification + localization 的问题)。

相比分类,指标检测工作要求咱们须要从背景中拆散出感兴趣的指标,并确定这一指标的形容(类别和地位),检测模型的输入模式通常是一个列表,列表的每一项应用一个数组给出检出指标的类别和地位(罕用矩形检测框的坐标示意)。

1.3 图像宰割(Segmentation)

图像宰割包含语义宰割(semantic segmentation)和实例宰割(instance segmentation),前者是对前背景拆散的拓展,要求分来到具备不同语义的图像局部(相当于像素级别的分类),而后者是检测工作的拓展,要求形容出指标的轮廓(相比检测框更为精密)。

宰割是对图像的像素级形容,它赋予每个像素类别意义,实用于了解要求较高的场景,如无人驾驶中对路线和非路线的宰割,医疗影像中对于不同区域的划分。

1.4 总结

图像分类对应将图像划分为单个类别的过程,它通常对应于图像中最突出的物体。理论事实世界的很多图像通常蕴含多个物体,如果仅仅应用图像分类模型调配繁多标签是十分毛糙的,并不精确。而指标检测(object detection)模型能够辨认一张图片的多个物体,并能够给出不同物体的具体位置(边界框)。指标检测在很多场景有用,如无人驾驶和安防零碎。

2. 罕用指标检测(Object Detection)算法综述

2.1 总体介绍

常见的经典指标检测算法如下图所示:

指标检测的基本思路是:解决 定位(localization)+ 辨认(Recognition) 两个工作。

一个大抵的 pipeline 如下图所示,咱们能够用同样的特色抽取过程,借助两个不同的分支输入。

  • 一个分支用于做图像分类,即 全连贯 + Softmax 判断指标类别,和单纯图像分类区别在于这里还另外须要一个「背景」类。
  • 另一个分支用于辨认指标地位,即实现回归工作输入四个数字标记突围盒地位(例如中心点横纵坐标和突围盒长宽),该分支输入后果只有在分类分支判断不为「背景」时才应用。

2.2 传统办法

传统的指标检测框架,次要包含三个步骤:

  • ① 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;
  • ② 提取候选区域相干的视觉特色。比方人脸检测罕用的 Harr 特色;行人检测和一般指标检测罕用的 HOG 特色等;
  • ③ 利用分类器进行辨认,比方罕用的 SVM 模型。

2.3 两阶段 vs 一阶段 办法

当初支流的深度学习指标检测办法次要分为两类:两阶段(Two Stages)指标检测算法 一阶段(One Stage)指标检测算法

1) 两阶段(Two Stages)

  • 首先由算法(algorithm)生成一系列作为样本的候选框,再通过卷积神经网络进行分类。
  • 常见的算法有 R-CNN、Fast R-CNN、Faster R-CNN 等等。

2) 一阶段(One Stage)

  • 不须要产生候选框,间接将指标框定位的问题转化为回归(Regression)问题解决(Process)。
  • 常见的算法有 YOLO、SSD 等等。

上述两类办法,基于候选区域(Region Proposal)的办法(两阶段)在检测准确率和定位精度上占优,基于端到端(一阶段)的算法速度占优。绝对于 R -CNN 系列的「两步走」(候选框提取和分类),YOLO 等办法只「看一遍」。

咱们在本篇中给大家介绍两阶段的指标检测办法,次要是 R -CNN 系列指标检测办法,在下篇内容 指标检测 (SSD,YOLO 系列)中给大家介绍一阶段的指标检测办法(YOLO 系列,SSD 等)。

3. 两阶段指标检测算法发展史

4. 两阶段指标检测典型算法

4.1 R-CNN

如何将深度学习分类算法利用到指标检测?

  • 用深度学习 分类模型提取特色 办法代替传统图像特征提取算法。

R-CNN 核心思想: 对每张图片选取多个区域,而后每个区域作为一个样本进入一个卷积神经网络来抽取特色。

1) R-CNN 网络结构

R-CNN 算法是较早提出的两阶段指标检测算法,它先找出 Region Proposal,再进行分类和回归。

  • 所谓 Region Proposal 就是图中指标可能呈现的地位。
  • 因为传统办法须要枚举的区域太多了,所以通过利用图像中的纹理、边缘、色彩等信息,能够保障在选取较少窗口(几千甚至几百)的状况下放弃较高的响应比。所以,问题就转变成找出可能含有物体的候选框,这些框之间是能够相互重叠相互蕴含的,这样咱们就能够防止暴力枚举的所有框了。

2) R-CNN 利用流程

对于每张输出的图像,R-CNN 指标检测次要包含下述步骤:

  • ① 利用选择性搜寻 Selective Search 算法在图像中从下到上提取 2000 个左右的可能蕴含物体的候选区域 Region Proposal
  • ② 因为获取到的候选区域大小各不相同,所以须要将每个 Region Proposal 缩放 (warp) 成对立的 \(227 \times 227\) 的大小并输出到 CNN,将 CNN 的 fc7 层的输入作为特色
  • ③ 将每个 Region Proposal 提取到的 CNN 特色输出到 SVM 进行分类
  • ④ 应用这些区域特色来训练线性回归器对区域地位进行调整

3) R-CNN 有余与优化

R-CNN 的成果如下图所示,它有一些不足之处(也是系列算法后续改良的点):

  • R-CNN 尽管不须要穷举所有框了,然而它须要对所有 ss 算法选取出的候选框 region proposal (2000 多个)进行CNN 提取特色 + SVM 分类,计算量很大,导致 R -CNN 检测速度很慢,一张图都须要 47s。
  • Selective search 提取的区域品质不够好
  • 特征提取与后续 SVM 分类器是独立训练的,没有联结优化,且训练耗时长

优化形式为:

  • 2000 个 region proposal 是图像的一部分,能够对图像只进行一次卷积提取特色,而后将 region proposal 在原图的地位映射到卷积层特色图上,失去映射后的各个 proposal 的特色输出到全连贯层做后续操作。
  • 每个 region proposal 的大小都不一样,而全连贯层输出必须是固定的长度,因而不能将 proposal 的特色间接输出全连贯层,后续改良向 R -CNN 模型引入了 SPP-Net(也因而诞生了 Fast R-CNN 模型)。

4.2 SPP-Net

1) 设计出发点

咱们通过后面的 CNN 相干常识学习晓得,CNN 的卷积层不须要固定尺寸的图像,而全连贯层是须要固定大小的输出。所以当全连贯层面对各种尺寸的输出数据时,就须要对输出数据进行 crop(抠图)或者 wrap(图像 resize)操作。

在 R-CNN 中,因为不同的 proposal 大小不同,所以须要先 resize 成雷同大小再输出到 CNN 中。既然卷积层是能够承受任何尺寸的,能够在卷积层前面加上一部分构造使得前面全连贯层的输出为固定的,这个「化腐朽为神奇」的构造就是 spatial pyramid pooling layer。

下图是 R-CNN 和 SPP-Net 检测流程的比拟:

SPP-Net 和一般 CNN 的比照构造如下,在网络结构上,间接把 pool5 层替换成 SPP 层:

SPP-Net 的具体细节如下,由 features map 上确定的 region proposal 大小不固定,将提取的 region proposal 别离通过三个卷积 \(4 \ast 4\),\(2 \ast 2\),\(1 \ast 1\),都将失去一个长度为 21 的向量(21 是数据集类别数,能够通过调整卷积核大小来调整),因而不须要对 region proposal 进行尺寸调整:

相比 R -CNN,SPP-Net 有两大长处。

① 通过「特色金字塔池化」模块,实现了 CNN 的多尺度输出,使得网络的输出图像能够是任意尺寸的,输入则不变,同样是一个固定维数的向量。

② R-CNN 要对每个区域计算卷积,而 SPPNet 只须要计算一次卷积,从而节俭了大量的计算工夫。

  • R-CNN 流程中,先用 ss 算法失去 2000 个 proposal 别离做卷积操作
  • SPP-Net 只对原图进行一次卷积计算,失去整张图的卷积特色 feature map,而后找到每个候选框在 feature map 上的映射 patch,将此 patch 作为每个候选框的卷积特色,输出到 SPP 层以及之后的层,实现特征提取工作。

4.3 Fast R-CNN

对于 RCNN 速度过慢等问题,提出了基于 RCNN 的改善模型 Fast RCNN。

1) 外围改良

Fast RCNN 次要改良以下局部:

  • ① 将 classification 和 detection 的局部交融到 CNN 中,不再应用额定的 SVM 和 Regressor,极大地缩小了计算量和训练速度。
  • ② Selective Search 后不再对 region proposal 失去的 2k 个候选框进行截取输出,改用 ROI Project,将 region proposal 映射到 feature map 上
  • ③ 应用 ROI pooling 将在 feature map 上不同尺度大小的 ROI 归一化成雷同大小后就能够通过 FC 层。

2) 外围环节

如下图所示为 Fast R-CNN 流程与网络结构

Fast R-CNN 具体包含的外围环节如下:

① Region Proposal:与 R-CNN 统一

跟 RCNN 一样,Fast-RCNN 采纳的也是 Selective Search 的办法来产生 Region Proposal,每张图片生成 2k 张图片。然而不同的是,之后不会对 2k 个候选区域去原图截取,后输出 CNN,而是间接对原图进行一次 CNN,在 CNN 后的 feature map,通过 ROI project 在 feature map 上找到 Region Proposal 的地位。

② Convolution & ROI 映射

就是对原图输出到 CNN 中去计算,Fast-RCNN 的工具包提供提供了 3 种 CNN 的构造,默认是应用 VGG-16 作为 CNN 的骨干构造。依据 VGG-16 的构造,Fast-RCNN 只用了 4 个 MaxPooling 层,最初一个换成了 ROI Pooling,因而,只须要对 Region Proposal 的在原图上的 4 元坐标 \((x, y, w, h)\) 除以 \(16\),并找到最近的整数,便是 ROI Project 在 feature map 上映射的坐标后果。最终失去 \(2k\) 个 ROI。

③ ROI Pooling

对每一个 ROI 在 feature map 上截取后,进行 ROI Pooling,就是将每个 ROI 截取出的块,通过 MaxPooling 池化到雷同维度。

ROI Pooling 的计算原理是,将每个不同大小的 ROI 均匀划分成 \(7 \times 7\) 的 grid,在每个 grid 中取最大值,最初所有 ROI 都会池化成大小为 \(7 \times 7\) 维度。

④ 全连贯层 & 输入

将每个 ROI Pooling 后的块,通过全连贯层生成 ROI 特征向量,最初用一个 Softmax 和一个 bbox regressor 进行分类和回归预测,失去每个 ROI 的类别分数和 bbox 坐标。全连贯层为矩阵相乘运算,运行耗费较多,速度较慢,作者在这里提出能够应用 SVD 矩阵合成来放慢全连贯层的计算。

⑤ 多任务损失

Fast-RCNN 的两个工作:

  • 一个是分类,分为 \(n(品种) + 1(背景)\) 类,应用的是Cross Entropy + Softmax 的损失函数
  • 第二个是 Bbox 的 Localization 回归,应用跟 Faster-RCNN 一样的基于 Offset 的回归,损失函数应用的是 Smooth L1 Loss,具体原理在下方 Faster-RCNN 中介绍。

3) Fast R-CNN 网络成果

Fast R-CNN 成果如上图所示,相比之 R-CNN 它在训练和预测速度上都有了很大的晋升,但它仍旧有不足之处,大家察看整个流程,会发现在候选区域抉择上,仍旧应用的 Selective Search 办法,它是整个流程中的工夫耗费瓶颈,无奈用 GPU 硬件与网络进行减速。

4.4 Faster R-CNN

Faster-RCNN 在 Fast-RCNN 的根底上做了两个重大的翻新改良:

  • ① 在 Region Proposal 阶段提出了 RPN(Region Proposal Network)来代替了 Selective Search
  • ② 应用到了 Anchor

1) Faster R-CNN 网络结构

Faster R-CNN 的总体流程构造如下,可分为 Backbone、RPN、ROI+ 分类 / 回归 三个局部。

2) Anchor(锚框)

Anchor 是图像检测畛域一个罕用的构造,它能够用来示意原图中物体所在的区域,是一个以 feature map 上某个点为核心的矩形框。

Faster-RCNN 的 anchor,在 feature map 上每个点,生成 3 种尺度和 3 种比例共 9 个 anchor。

  • 下图是一个 anchor 的示意图,每个点会生成尺度为小(\(128\times128\))、中(\(256\times256\))、大(\(512\times512\)),如图中红、绿、蓝色的 anchor,\(1:1\), \(2:1\), \(1:2\) 三种比例共 9 个 anchor。
  • 这样充分考虑了被检测物体的大小和形态,保障物体都能由 anchor 生成 region proposal。

3) RPN 网络结构

RPN 是一个全卷积的神经网络,它的工作原理能够分成 classification,regression 和 proposal 三个局部

① Classification/ 分类

Classification 局部将失去的 feature map 通过一个 \(3 \times 3\) 和 \(1 \times 1\) 的卷积后,输入的维度为 \([1 \times 18 \times 38 \times 50]\),这 18 个 channel 能够分解成 \(2\times9\),2 代表着是否是感兴趣物体备选区域(region proposal)的 0/1 的 score,9 代表着 9 个 anchors。

因而,特色图维度 \(38\times50\) 的每一个点都会生成 9 个 anchor,每个 anchor 还会有 0/1 的 score。

② Regression/ 回归

Regression 局部原理和 Classification 局部差不多,feature map 通过一个 \(3 \times 3\) 和 \(1 \times 1\) 的卷积后,输入的维度为 \([1 \times 36 \times 38 \times 50]\),其中 36 个 channel 能够分成 \(4 \times 9\),9 就是跟 cls 局部一样的 9 个 anchor,4 是网络依据 anchor 生成的 bbox 的 4 元坐标 target 的 offset。通过 offset 做 bbox regression,再通过公式计算,算出预测 bbox 的 4 元坐标 \((x, y, w, h)\) 来生成 region proposal。

③ Proposal/ 候选区

将前两局部的后果综合计算,便能够得出 Region Proposals。

  • 若 anchor 的 \(IoU > 0.7\),就认为是前景
  • 若 \(IoU < 0.3\),就认为是背景
  • 其余的 anchor 全都疏忽

一般来说,前景和背景的 anchor 保留的比例为 \(1:3\)

① RPN 网络训练策略

RPN 网络的训练样本有如下的策略和形式:

② RPN 网络监督信息

RPN 网络是监督学习训练,蕴含分类和回归两个工作,分类分支和回归分支的预测值和 label 构建形式如下:

③ RPN 网络 LOSS

RPN 网络的总体 loss 由 2 局部形成,别离是分类 loss 和回归 loss,为其加权求和构造。其中分类 loss 应用惯例的穿插熵损失,回归损失函数应用的是 Smooth L1 Loss,实质上就是 L1 Loss 和 L2 Loss 的联合。

④ RPN 网络回归分支 Loss

特地说一下回归局部应用到的 Smooth L1 Loss,比照于 L1 Loss 和 L2 Loss,Smooth L1 Loss 能够从两方面限度梯度:

  • ① 当预测框与 ground truth 的 Loss 很大的时候,梯度不至于像 L2 Loss 那样过大
  • ② 当预测框与 ground truth 的 Loss 较小的时候,梯度值比 L1 Loss 更小,不至于跳出部分最优解。

4) 生成 Proposals

联合分类和回归后果得出 Region Proposals。若 anchor 的 \(IoU > 0.7\),就认为是前景;若 \(IoU < 0.3\),就认为是背景,其余的 anchor 全都疏忽。一般来说,前景和背景的 anchor 保留的比例为 \(1:3\)。

失去 Region Proposal 后,会先筛选除掉长宽小于 16 的预测框,依据预测框分数进行排序,取前 N(例如 6000)个送去 NMS,通过 NMS 后再取前 \(top_k\)(例如 300)个作为 RPN 的输入后果。

5) Rol Pooling

① Roi pooling 核心思想

候选框共享特色图特色,并放弃输入大小统一。

候选框分为若干子区域,将每个区域对应到输出特色图上,取每个区域内的最大值作为该区域的输入。

② Rol Pooling 有余

在 ROI 映射中,波及到 region proposal 的坐标映射变换问题,在这过程中难免会产生小数坐标。然而在 feature map 中的点相当于一个个的 pixel,是不存在小数的,因而会将小数坐标量化成向下取整,这就会造成肯定的误差。

在 ROI Pooling 中,对每个 ROI 划分 grid 的时候又会有一次坐标量化向下取整。

这样,整个过程像素坐标会通过两次量化,导致 ROI 尽管在 feature map 上有不到 1 pixel 的误差,映射回原图后的误差可能会大于 10 pixel,甚至误差可能会大于整个物体,这对小物体的检测十分不敌对。

6) Rol Align

Faster R-CNN 中通过 ROI Align 打消 RoI Pooling 中产生的误差。

ROI Align 的原理是,先将 ROI Project 和 ROI Pooling 时计算出的 ROI 带小数的坐标存储在内存中,不间接量化成像素坐标。

随后,ROI Align 不取每个 grid 的最大值,而是再将每个 grid 划分成 \(2\times2\) 的小格,在每个小格中找到中心点,将离中心点最近的四个点的值进行双线性差值,求得中心点的值,再取每个 \(grid\) 中四个中心点的最大值作为 \(Pooling\) 后的值。

7) BBox Head

上面是分类与回归的 BBox 头局部,它的解决流程开展后如下图所示:

而 BBox 训练阶段的样本构建形式如下,咱们比照 RPN 阶段的样本构建形式:

① BBox Head 中的监督信息

BBox 头的分类与回归工作的标签构建形式如下,其中分类分支是典型的分类问题,学习每个预测框的类别;回归分支则是学习每个 RoI 到实在框的偏移量。

② BBox Head Loss

BBox 头的总体 loss 由分类 loss 和回归 loss 加权组合形成。

8) Faster R-CNN 成果

Faster R-CNN 的成果如下图所示

5. 举荐学习

  • 能够点击 B 站 查看视频的【双语字幕】版本
  • 【课程学习指南】斯坦福 CS231n | 深度学习与计算机视觉
  • 【字幕 + 材料下载】斯坦福 CS231n | 深度学习与计算机视觉 (2017·全 16 讲)
  • 【CS231n 进阶课】密歇根 EECS498 | 深度学习与计算机视觉
  • 【深度学习教程】吴恩达专项课程 · 全套笔记解读
  • 【Stanford 官网】CS231n: Deep Learning for Computer Vision

斯坦福 CS231n 全套解读

  • 深度学习与 CV 教程(1) | CV 引言与根底
  • 深度学习与 CV 教程(2) | 图像分类与机器学习根底
  • 深度学习与 CV 教程(3) | 损失函数与最优化
  • 深度学习与 CV 教程(4) | 神经网络与反向流传
  • 深度学习与 CV 教程(5) | 卷积神经网络
  • 深度学习与 CV 教程(6) | 神经网络训练技巧 (上)
  • 深度学习与 CV 教程(7) | 神经网络训练技巧 (下)
  • 深度学习与 CV 教程(8) | 常见深度学习框架介绍
  • 深度学习与 CV 教程(9) | 典型 CNN 架构 (Alexnet, VGG, Googlenet, Restnet 等)
  • 深度学习与 CV 教程(10) | 轻量化 CNN 架构 (SqueezeNet, ShuffleNet, MobileNet 等)
  • 深度学习与 CV 教程(11) | 循环神经网络及视觉利用
  • 深度学习与 CV 教程(12) | 指标检测 (两阶段, R-CNN 系列)
  • 深度学习与 CV 教程(13) | 指标检测 (SSD, YOLO 系列)
  • 深度学习与 CV 教程(14) | 图像宰割 (FCN, SegNet, U-Net, PSPNet, DeepLab, RefineNet)
  • 深度学习与 CV 教程(15) | 视觉模型可视化与可解释性
  • 深度学习与 CV 教程(16) | 生成模型 (PixelRNN, PixelCNN, VAE, GAN)
  • 深度学习与 CV 教程(17) | 深度强化学习 (马尔可夫决策过程, Q-Learning, DQN)
  • 深度学习与 CV 教程(18) | 深度强化学习 (梯度策略, Actor-Critic, DDPG, A3C)

ShowMeAI 系列教程举荐

  • 大厂技术实现:举荐与广告计算解决方案
  • 大厂技术实现:计算机视觉解决方案
  • 大厂技术实现:自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程:吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程:斯坦福 CS224n 课程 · 课程带学与全套笔记解读
  • 深度学习与计算机视觉教程:斯坦福 CS231n · 全套笔记解读

正文完
 0