深度学习:图像检测概述

RCNN,Fast RCNN ,faster Rcnn :https://www.cnblogs.com/dudumiaomiao/p/6560841.html

一、图像分类 cnn

二、图像-目标检测 rcnn YOLO算法根式实现了快速实时的物体检测

三、图像切割 U型网络粉墨登场 加入了maxpooling的反过程升维采样

四、以图搜图 聚类

五、降噪 和恢复图像 gan 对抗学习

六、图像风格迁移 cycleGan 图像翻译

七、在噪声里生成图片来 依然是GAN,而且是最基础的卷积GAN (DCGAN)就可以给你干出来

深度学习:图像检测概述

计算机视觉:典型的技术路线是:目标分割 ——>目标检测 ——>目标识别 ——>目标跟踪

粗略的理解:

目标分割:像素级的对前景与背景进行分类,将背景剔除;

目标检测:定位目标,确定目标位置及大小;

目标识别:定性目标,确定目标是什么;

目标跟踪:追踪目标运动轨迹。

举个栗子,如:需要对视频中的小明进行跟踪,处理过程将经历如下过程:

(1)首先,采集第一帧视频图像,因为人脸部的肤色偏黄,因此可以通过颜色特征将人脸与背景分割出来(目标分割);

(2)分割出来后的图像有可能不仅仅包含人脸,可能还有部分环境中颜色也偏黄的物体,此时可以通过一定的形状特征将图像中所有的人脸准确找出来,确定其位置及范围(目标检测);

(3)接下来需将图像中的所有人脸与小明的人脸特征进行对比,找到匹配度最好的,从而确定哪个是小明(目标识别);

(4)之后的每一帧就不需要像第一帧那样在全图中对小明进行检测,而是可以根据小明的运动轨迹建立运动模型,通过模型对下一帧小明的位置进行预测,从而提升跟踪的效率(目标跟踪)

图像检测:

R-CNN: https://arxiv.org/abs/1311.2524

Fast R-CNN: https://arxiv.org/abs/1504.08083

Faster R-CNN: https://arxiv.org/abs/1506.01497

Mask R-CNN: https://arxiv.org/abs/1703.06870

一、2014: R-CNN

深度学习:图像检测概述

该论文首次展示出,与更简单的、基于 HOG 特征的其他系统相比, CNN 在 PASCAL VOC 上有非常优越的物体识别表现。

Regions With CNNs (R-CNN) 

R-CNN 的目标是:导入一张图片,通过方框正确识别主要物体在图像的哪个地方。

输入:图像

输出:方框+每个物体的标签

但怎么知道这些方框应该在哪里呢?R-CNN 的处理方式,和我们直觉性的方式很像——在图像中搞出一大堆方框,看看是否有任何一个与某个物体重叠。

深度学习:图像检测概述

生成这些边框、或者说是推荐局域,R-CNN 采用的是一项名为 Selective Search 的流程。在高层级,Selective Search(如上图)通过不同尺寸的窗口来查看图像。对于每一个尺寸,它通过纹理、色彩或密度把相邻像素划为一组,来进行物体识别。

 

 

2、候选区域生成

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:
- 使用一种过分割手段,将图像分割成小区域
- 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
- 输出所有曾经存在过的区域,所谓候选区域

候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

合并规则

优先合并以下四种区域:
- 颜色(颜色直方图)相近的
- 纹理(梯度直方图)相近的
- 合并后总面积小的
- 合并后,总面积在其BBOX中所占比例大的

第三条,保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。
不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

第四条,保证合并后形状规则。

例:左图适于合并,右图不适于合并。
深度学习:图像检测概述

上述四条规则只涉及区域的颜色直方图、纹理直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

作者提供了Selective Search的源码,内含较多.p文件和.mex文件,难以细查具体实现。

深度学习:图像检测概述

流程

RCNN算法分为4个步骤 
- 一张图像生成1K~2K个候选区域 
- 对每个候选区域,使用深度网络提取特征 
- 特征送入每一类的SVM 分类器,判别是否属于该类 
- 使用回归器精细修正候选框位置 

如上图,当边框方案生成之后,R-CNN 把选取区域变形为标准的方形,并将之喂给改良版的 AlexNet(ImageNet 2012 的冠军方案,它启发了R-CNN )。

在 CNN 的最后一层,R-CNN 加入了一个支持向量机svm,它要做的事很简单:对这是否是一个物体进行分类,如果是,是什么物体。这便是上图中的第四步。

对边框进行改进

现在,既然已经找到了方框中的物体,我们是否能缩小边框,让它更符合物体的三维尺寸?答案是肯定的,这是 R-CNN 的最后一步。R-CNN 在推荐区域上运行一个简单的线性回归生成更紧的边框坐标以得到最终结果

这是该回归模型的输入和输出:

输入:对应物体的图像子区域

输出:针对该物体的新边框系统

概括下来,R-CNN 只是以下这几个步骤:

生成对边框的推荐

在预训练的 AlexNet 上运行方框里的物体。用支持向量机来看边框里的物体是什么。

在线性回归模型上跑该边框,在物体分类之后输出更紧的边框的坐标。

R-CNN:

(1)输入测试图像;

(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;

(3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;

(4)将每个Region Proposal提取的CNN特征输入到SVM进行分类;

(5)对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标.

缺陷:

(1)     训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;

(2)     训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;

(3)     速度慢:使用GPU,VGG16模型处理一张图像需要47s;

(4)     测试速度慢:每个候选区域需要运行整个前向CNN计算;

(5)     SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.

二、2015: Fast R-CNN

它加速、简化了 R-CNN。

R-CNN 的效果非常好,但出于以下几个原因,它运行起来特别慢:

  • 对于每一个图像的每一个推荐区域,它都需要一个 CNN (AlexNet) 的 forward pass。这意味着每个图像就需要约 2000 个 forward pass。

  • 它必须分来训练三个不同的模型——生成图像特征的 CNN,预测类别的分类器以及收紧边框的回归模型。这使得训练流水线变得特别困难。

在 2015 年,R-CNN 的第一作者 Ross Girshick 解决了上述两个问题,导致了本简史中第二个算法的诞生: Fast R-CNN

Fast R-CNN 特性

1. RoI (Region of Interest) Pooling

对于 CNN 的 forward pass,Girshick 意识到对于每个图像,许多推荐区域会不可避免的重叠,同样的 CNN 运算会一遍遍重复 (~2000 次)。他的思路很简单:为什么不能在每一个图像上只运行一次 CNN,并找到一种在 ~2000 个推荐里共享计算的方式?

借助名为 RoIPool 的技术,Fast R-CNN 实现了该思路。在其核心,RoIPool 会对图像的所有子区域共享 CNN 的forward pass。上图便是示例,注意每个区域的 CNN 特征,是怎么通过选择 CNN 特征图的相应区域来获取的。然后,每个区域的特征被池化(“pooled”,通常使用 max pooling)。因此原始图像只需要计算一遍,而不是 2000 遍。

2. 把不同模型整合为一个网络

深度学习:图像检测概述

第二项特性是在一个模型里联合训练 CNN、分类器和边框回归量。而此前,提取图像特征要用 CNN,分类要用支持向量机,收紧边框要用回归。Fast R-CNN 用一个单个的网络完成这三项任务。

至于这是如何实现的,请看上图。Fast R-CNN 在 CNN 之上添加一个 softmax 层输出分类,来代替支持向量机。添加一个与 softmax  平行的线性回归层,来输出边框坐标。这种方式,所有需要输出都通过单个神经网络得到。这是模型整体的输入和输出:

输入:有区域推荐的图像

输出:每个区域的物体识别,收紧的边框

FAST-RCNN:

(1)输入测试图像;

(2)利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);

(3)将整张图片输入CNN,进行特征提取;

(4)把建议窗口映射到CNN的最后一层卷积feature map上;

(5)通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;

(6)利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

 

相比R-CNN,主要两处不同:

(1)最后一层卷积层后加了一个ROI pooling layer;

(2)损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练

改进:

(1)     测试时速度慢:R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.

FAST-RCNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.

(2)     训练时速度慢:R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.

FAST-RCNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.

(3)     训练所需空间大:R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.FAST-RCNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.