基于深度学习的2D图像目标检测

参见第一部分网址1,第二部分网址2

目前学术和工业界出现的目标检测算法分成3类:(参见一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

1. 传统的目标检测算法:Cascade + HOG/DPM + Haar/SVM以及上述方法的诸多改进、优化;

2. 候选区域/框 + 深度学习分类:通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:

R-CNN(Selective Search + CNN + SVM)、SPP-net(ROI Pooling)、Fast R-CNN(Selective Search + CNN + ROI)、Faster R-CNN(RPN + CNN + ROI)、R-FCN等系列方法;

3. 基于深度学习的回归方法:YOLO/SSD/DenseBox 等方法;以及最近出现的结合RNN算法的RRC detection;结合DPM的Deformable CNN等

(上图总结这里

传统目标检测流程:

1)区域选择(穷举策略:采用滑动窗口,且设置不同的大小,不同的长宽比对图像进行遍历,时间复杂度高)

2)特征提取(SIFT、HOG等;形态多样性、光照变化多样性、背景多样性使得特征鲁棒性差)

3)分类器分类(主要有SVM、Adaboost等)

一、如何计算一个图像的HOG特征维数呢?


        Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。最后将所有块的特征串联起来,就得到了人体的特征。例如,对于64*128的图像而言,每16*16的像素组成一个cell,每2*2个cell组成一个块,因为每个cell有9个特征,所以每个块内有4*9=36个特征,以8个像素为步长,那么,水平方向将有7个扫描窗口,垂直方向将有15个扫描窗口。也就是说,64*128的图片,总共有36*7*15=3780个特征。

 

二、SVM

  1. 从零开始实现简单的SVM分类器
  2. 书本—SVM分类器

三、DPM

DPM目标检测算法

四、Selective Search

参见 

Selective Search原理及实现   

目标检测之选择性搜索-Selective Search

在目标检测时,为了定位到目标的具体位置,通常会把图像分成许多子块,然后把子块作为输入,送到目标识别的模型中。分子块的最直接方法叫滑动窗口法。滑动窗口的方法就是按照子块的大小在整幅图像上穷举所有子图像块。这种方法产生的数据量想想都头大。和滑动窗口法相对的是另外一类基于区域(region proposal)的方法。selective search就是其中之一!

首先通过简单的区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小(小的区域先聚合,这样是防止大的区域不断的聚合小区域,导致层次关系不完全)不断的聚合相邻小区域,类似于聚类的思路。这样就能解决object层次问题。

最后对于计算速度来说,只能说这个思路在相对穷举,大大减少了后期分类过程中的计算量。
 

selective search首先, 过分割后基于颜色纹理等相似度合并,

然后,过分割、分层合并、建议区域排序

step0:生成区域集R,具体参见论文《Efficient Graph-Based Image Segmentation》
step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空

为了保证能够划分的完全,对于相似度,作者提出了可以多样化的思路,不但使用多样的颜色空间(RGB,Lab,HSV等等),还有很多不同的相似度计算方法。

通过上述的步骤我们能够得到很多很多的区域,但是显然不是每个区域作为目标的可能性都是相同的,因此我们需要衡量这个可能性,这样就可以根据我们的需要筛选区域建议个数啦。

这篇文章做法是,给予最先合并的图片块较大的权重,比如最后一块完整图像权重为1,倒数第二次合并的区域权重为2以此类推。但是当我们策略很多,多样性很多的时候呢,这个权重就会有太多的重合了,排序不好搞啊。文章做法是给他们乘以一个随机数,毕竟3分看运气嘛,然后对于相同的区域多次出现的也叠加下权重,毕竟多个方法都说你是目标,也是有理由的嘛。这样我就得到了所有区域的目标分数,也就可以根据自己的需要选择需要多少个区域了。
 

基于Selective Search + DPM/HoG + SVM的物体识别

 

五、bounding-box regression 框回归

  1. 边框回归(Bounding Box Regression)详解
  2. 一文看懂——检测模型中的边框回归(Bounding Box Regression)

 

线性回归就是给定输入的特征向量 X, 学习一组参数 W, 使得经过线性回归后的值跟真实值 Y(Ground Truth)非常接近. 即Y≈WXY≈WX 。 那么 Bounding-box 中我们的输入以及输出分别是什么呢?

Input:
RegionProposal→P=(Px,Py,Pw,Ph)RegionProposal→P=(Px,Py,Pw,Ph),这个是什么? 输入就是这四个数值吗?其实真正的输入是这个窗口对应的 CNN 特征,也就是 R-CNN 中的 Pool5 feature(特征向量)。 (注:训练阶段输入还包括 Ground Truth, 也就是下边提到的t∗=(tx,ty,tw,th)t∗=(tx,ty,tw,th))

Output:
需要进行的平移变换和尺度缩放 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P), 或者说是Δx,Δy,Sw,ShΔx,Δy,Sw,Sh 。 我们的最终输出不应该是 Ground Truth 吗? 是的, 但是有了这四个变换我们就可以直接得到 Ground Truth, 这里还有个问题, 根据(1)~(4)我们可以知道, P 经过 dx(P),dy(P),dw(P),dh(P)dx(P),dy(P),dw(P),dh(P) 得到的并不是真实值 G, 而是预测值G^G^。 的确, 这四个值应该是经过 Ground Truth 和 Proposal 计算得到的真正需要的平移量(tx,ty)(tx,ty) 和尺度缩放(tw,th)(tw,th) 。
 

六、R-CNN

  1. 里最详细说明
  2. R-CNN 论文解读
  3. R-CNN文章详细解读
  4. R-CNN算法解析

  5. R-CNN 训练

R-CNN的本质, 用深度CNN网络取代了HoG/DPM的特征提取

借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。

具体是:

  1. 给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
  2. 对于每个区域利用 CNN 抽取一个固定长度的特征向量。
  3. 再对每个区域利用 SVM 进行目标分类。

R-CNN 系统分为 3 个阶段,反应到架构上由 3 个模块完成。

  1. 生产类别独立的候选区域,这些候选区域其中包含了 R-CNN 最终定位的结果。
  2. 神经网络去针对每个候选区域提取固定长度的特征向量。
  3. 一系列的 SVM 分类器。

Intersection over Union(IoU)

R-CNN优点:

  1. 效果比DPM方法大幅度提高

  2. 开启了CNN网络的目标检测应用

  3. 引入了BBR和分类结合的思想

  4. 定义了RoI, 基于推荐区域的思想

 

R-CNN问题:

  1. 不是端到端的模型,依赖SS和SVM!

  2. 计算速度相当慢!

  3. 对于过大过小的东西,效果很不好。

  4.  

七、Overfeat的改进

LeCun的Overfeat是个端到端的模型,直接抛弃了SVM,并且把BBR整合一起使用FCN(Fully-Connected Net)搞定, 解决了后面一端的问题(取代了SVM和BBR)。 

三大优化:   第一, 先进行CNN再滑动窗口, 而不是先滑动窗口再进行CNN计算。 把窗口滑动放到CNN之后进行。 避免重复的特征计算。 

 

 

 

第二, 多类别并行计算框架, 进一步减少CNN特征计算因为没有找到特定类别而浪费。

 

第三, 把FCN直接用CNN网络取代, 计算量大大减少。怎么做到的呢? 结合上面两点, 利用每个类别实现一个0-1的CNN网络, 然后所有类别并行处理。

八、SPPNet的改进

R-CNN和Overfeat都存在部分多尺度,重叠效果的问题。  某种意义上, 应对了HoG特征, 这样对于物体来说类似BoW模型, 我们知道DPM里面,是带有组件空间分布的弹性得分的, 另外也有HoG Pyramid的思想。 如何把Pyramid思想和空间限制得分加入改善多尺度和重叠的效果呢? MR-CNN里面尝试了区域增强, Overfeat里面尝试了多尺度输入。 但是效果都一般。  这里我们介绍另外一个技术Spatial Pyramid Matching, SPM。把空间和Pyramid结合的思想。 

SPM考虑空间信息,将图像分成若干块(sub-regions),分别统计每一子块的特征,最后将所有块的特征拼接起来,形成完整的特征,这就是SPM中的Spatial。在分块的细节上,采用了一种多尺度的分块方法,即分块的粒度越大越细(increasingly fine),呈现出一种层次金字塔的结构,这就是SPM中的Pyramid。
 

1. SPM

把BoW修改金字塔Pyramid方式进行空间限制,做特征提取。 

 

2.  SPM用在CNN特征之后,R-CNN里面 SVM分类之前。 

 

 

3. 基于CNN的Pooling技术来实现SPM, 通过不同尺度的Pooling技术很容易就实现了CNN特征的SPM特征。 

 

4. 先特征后区域的处理, 某种意义上取代了多尺度输入,或者特征增强。

和R-CNN相比做到了先特征后区域, 和Overfeat相比自带Multi-Scale。 

 

于是SPPNet(Spatial Pyramid Pooling Net)很空出世!

上图spp layer分成1x1(塔底),2x2(塔中),4x4(塔顶)三张子图,对每个子图的每个区域作max pooling(论文使用的),出来的特征再连接到一起,就是(16+4+1)x256的特征向量。

无论输入图像大小如何,出来的特征固定是(16+4+1)x256维度。这样就实现了不管图像尺寸如何,SPP层的输出永远是(16+4+1)x256特征向量。
 

SPPNet优点:

  1. 提取SPP的概念, 把CNN的Pooling用的出神入化, 取代了HoG Pyramid的改进。 对于大小尺度的物体识别有改进。 

  2. 进一步强调了CNN特征计算前移, 区域处理后移的思想, 极大节省计算量。 

 

SPPNet缺点:

   1. 依然不是端到端的模型

   2. 过于注重CNN特征的分离, CNN特征提取没有联动调参数!

 

九、Fast R-CNN的改进

 

Fast R-CNN 基本和SPPNet类似, 全部打通区域推荐之后到目标识别后一端!而且效果较好!

 

 

基于SPPNet, Fast R-CNN做了两大改进: 

一, 简化SPP成为RoI Pooling, 只用了最细分的SPPNet。  把RoI区域变成了RoI Pooling, 这就是RoI Pooling的思想的来源。 Pyramid上层更粗的特征, 可以依赖FCN进行整合学习。 

 

 

二, CNN特征网络联动调参数!

 

这样, Softmax分类误差和线性回归误差叠加的误差, 可以反传通过FCN, ROI Pooling和ConvNet层。 

 

 

ROI池化层

    为了说清楚为什么ROI池化层能够把任意大小的卷积特征转换成固定长度的向量,不妨设卷积层输出的宽度为w,高度为h,通道为c。不管输入的图像尺寸是多少,卷积层的通道数都不会变,也就是说c是一个常数。而w、h会随着输入图像尺寸的变化而变化,可以看作是两个变量。以上图中的ROI池化层为例,它首先把卷积层划分为4x4的网格(利用SPM分块形成固定长度的特征向量),每个网格的宽是w/4、高是h/4、通道数为c。当不能整除时,需要取整。接着,对每个网格中的每个通道,都取出其最大值,换句话说,就是对每个网格内的特征做最大值池化(Max Pooling )。这个4x4的网格最终就形成了16c维的特征。接着,再把网络划分成2x2的网格,用同样的方法提取特征,提取的特征的长度为4c。再把网络划分为1x1的网格,提取的特征的长度就是c,最后的1x1的划分实际是取出卷积中每个通道的最大值。最后,将得到的特征拼接起来,得到的特征是16c+4c+c = 21c维的特征。很显然,这个输出特征的长度与w, h两个值是无关的,因此ROI池化层可以把任意宽度、高度的卷积特征转换为固定长度的向量。

 

    应该怎么把ROI池化层用到目标检测中来呢,其实,可以这样考虑该问题:网络的输入是一张图像,中间经过若干卷积形成了卷积特征,这个卷积特征实际上和原始图像在位置上是有一定对应关系的。原始图像的目标会使得卷积特征在同样位置产生激活。因此,原始图像中的候选框,实际上也可以对应到卷积特征中相同位置的框。由于候选框的大小千变万化,对应到卷积特征的区域形状也各有不同,但是不用担心利用ROI池化层可以把卷积特征中的不同形状的区域对应到同样长度的向量特征。综合上述步骤,就可以将原始图像中的不同长宽的区域都对应到一个固定长度的向量特征,这就完成了各个区域的特征提取工作。

    在R-CNN中,对于原始图像的各种候选区域框,必须把框中的图像缩放到统一大小,再对每一张缩放后的图片提取特征。使用ROI池化层后,就可以先对图像进行一遍卷积计算,得到整个图像的卷积特征;接着,对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用ROI池化层对位置框中的卷积提取特征,就可以完成特征提取工作。

RoI层是个啥
RoI层的作用和SPPNet中的SPP层作用类似:承上启下。

承上: 接收在每个候选区域在feature map上投影出的特征patch,输出长度固定的特征向量。
启下: 特征向量的长度固定的原因为了对付FC层的特殊要求。
说白了就是如何把不同尺寸的侯选区域提取特征变换成为固定大小的特征向量。

RoI层是特殊的SPP层,RoI层是使用单个尺度的SPP层(为什么不用多个尺度的原因是多个尺度准确率提升不高,但是计算量成倍的翻)

RoI层的Forward
引用shenxiaolu1984.

RoI层将候选区域分为H×WH×W块。对每个小块做max-pooling.将候选区的局部特征映射转变为大小统一的数据,送入下一层。


 

 

Fast R-CNN优点:

  1. 吸收了SPPNet和R-CNN的精华,极大的打通并且改进了从区域推荐到目标检测一端。 

  2. RoI Pooling技术横空出世, 极大的发挥了区域计算后移的优势, 加快了训练速度。

  3. Log 损失和Smooth L1的损失下的FCN、RoI Pooling、ConvNet三层联动调参数成熟, 并且带来效果上的提升。  

  4. 并且应用VGG16,取代AlexNet作为CNN网络模型

Fast R-CNN缺点:

  1. 依然没有实现端到端的模型,对SS区域推荐依赖严重。 

 

 

 

十、Faster R-CNN的改进

  1. Faster R-CNN论文笔记——FR

SPPNet和Fast R-CNN都面临着并非端到端模型的困惑, 那么RBG、何凯明和孙剑, 微软的3位牛人合作开启了端到端模型的开发。 

提出RPN(Region Proposal Net)取代了SS区域推荐。 RPN有点类似Overfeat的ConvNet的滑动窗口, 但是加入了Anchor Box的设计。 

 RPN还是需要先使用一个CNN网络对原始图片提取特征。为了方便读者理解,不妨设这个前置的CNN提取的特征为51 x39x256,即高为51、宽39、通道数为256。对这个卷积特征再进行一次卷积计算,保持宽、高、通道不变,再次得到一个51x39x256的特征。为了方便叙述,先来定义一个“位置”的概念:对于一个51x39x256的卷积特征,称它一共有51x39个“位置”。让新的卷积特征的每一个“位置”都“负责”原图中对应位置9种尺寸的框的检测,检测的目标是判断框中是否存在一个物体,因此共有51x39x9个“框”。在Faster R-CNN的原论文中,将这些框都统一称为“anchor"

ancho:的9种尺寸,它们的面积分别128*128, 256*256, 512*512。每种面积又分为3种长宽比,分别是2:1, 1:2, 1:1。 anchor的尺寸实际是属于可调的参数,不同任务可以选择不同的尺寸。

    对于这51x39个位置和51x39x9个anchor,下图展示了接下来每个位置的计算步骤。设k为单个位置对应的ancho:的个数,此时k=9。首先使用一个3x3的滑动窗口,将每个位置转换为一个统一的256维的特征,这个特征对应了两部分的输出。一部分表示该位置的anchor为物体的概率,这部分的总输出长度为2xk(一个anchor对应两个输出:是物体的概率+不是物体的概率)。另一部分为框回归,框回归的含义与Fast R-CNN中一样。一个anchor对应4个框回归参数,因此框回归部分的总输出的长度为4xk。
 

上图中可以看到,在feature map上会有一个sliding window,这个sliding window会遍历feature map上的每一个点,并且在每个点上配置k个anchor boxes。

在Overfeat的ConvNet上的滑动窗口, 加上Multi-Scale的图像输入设计, 编程了带Anchor Box推荐的区域Pyramid。 这种机制, 某种意义上是带了先验的Attention机制。 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

这样 RPN的Anchor和Pyramid和定位都可以是参数学习, 例如:9 anchors x 2 scores x width x height。 

如果在考虑ROI Pooling对推荐区域的修正作为新的RPN,就会带来ROI Pooling的迭代:

 

Anchors  (RPN介绍)


在每一个滑动窗口的位置,我们同时预测k个推荐区域,故回归层有4k个输出(每个侯选区域是一个元素个数为4的元组(2个座标))。分类层输出2k个得分(即对每个推荐区域是目标/非目标的估计概率)

k个推荐区域对应着k个参考框的参数形式,我们称之为anchors.每个anchor以当前滑动窗口的中心为中心,并与尺度和长宽比相关。默认地我们使用3种尺度和3种长宽比,对于每个滑动位置就有k=9个anchor。对于大小为W×H(例如2,400)的卷积特征映射,总共有WHk个anchor。

特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128^2,256^2,512^2}× 三种长宽比例{1:1,1:2,2:1} 下图示出51*39个anchor中心,以及9种anchor示例。

分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。
对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。

就局部来说,这两层是全连接网络;就全局来说,由于网络在所有位置(共51*39个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。

需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。

侯选区域生成网络的训练

训练数据

对每个anchor给定标签选项,认定两种anchors为正样本:

anchor/anchors与ground-truth box有着最高的IoU记为正样本
剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本
剩下的anchor/anchors记为非正样本,对训练没有贡献,不使用
同一个ground-truth可以确定多个anchors.
 

所以最初,  RPN的损失是单独计算进行参数学习的。 

 

但是后来, RPN的误差也全部整合处理了, 一个端到端的模型诞生,并且具有较好的区域推荐、特征Pyramid,和Box回归的效果保证。 

 

Faster R-CNN优点:

  1. 和Overfeat一样是一个端到端的模型, 但是集成了以前图像处理里面的思想: 区域推荐RPN, 特征Pyramid和Box回归。

  2. 较好的ConvNet特征共享, 效率更高

  3. 提出了RPN网络,并且整合后的效果和Fast R-CNN一样

Faster R-CNN缺点:

  1. 依然难以做到实时高效

  2. 功能上没有进入实例分割阶段。 

 

小结

最后总结一下各大算法的步骤:

RCNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)

2.每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取

3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4.对于属于某一类别的候选框,用回归器进一步调整其位置

Fast R-CNN

1.在图像中确定约1000-2000个候选框 (使用选择性搜索)

2.对整张图片输进CNN,得到feature map

3.找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

4.对候选框中提取出的特征,使用分类器判别是否属于一个特定类

5.对于属于某一类别的候选框,用回归器进一步调整其位置

Faster R-CNN

1.对整张图片输进CNN,得到feature map

2.卷积特征输入到RPN,得到候选框的特征信息

3.对候选框中提取出的特征,使用分类器判别是否属于一个特定类

4.对于属于某一类别的候选框,用回归器进一步调整其位置

简言之,即如本文开头所列

R-CNN(Selective Search + CNN + SVM)

SPP-net(ROI Pooling)

Fast R-CNN(Selective Search + CNN + ROI)

Faster R-CNN(RPN + CNN + ROI)

总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。

 

我们发现, 单纯的端到端ConvNet模型的Overfeat很难达到较好的效果。 如何融合图像处理经典思想里面的区域推荐, 特征金字塔, 和框回归,还是非常有必要。 而Faster R-CNN做到了这些。  这个过程中一直伴随着性能的提升, 其中重要一步就是如何让特征计算不要重复,做到一次计算。 如何进一步提高速度, 和增强功能, 是后续网络的要改进的地方。 例如, 我们发现ConvNet的计算在Faster R-CNN已经达到很高的共享, 但是ROI之后依然有ConvNet的计算, 如何进一步共享这部分计算呢? 请看下期。 

 

在如何让检测更快? 主要有两种思路:

1. 把好的方法改进的更快!

前面我们提到了从R-CNN到Faster R-CNN主要的技术思想就是避免特征计算浪费。 所以要把ConvNet特征计算前移,只做一次计算。 而把区域操作后移。 我们也提到Faster R-CNN在RoI之后还有部分ConvNet的计算。 有没有可能把ROI之上的计算进一步前移? R-FCN(Region-based Fully Convolutional Networks) 基于这个思路,做到了,所以更快, 某种意义上,是Fatest R-CNN。

R-FCN

2. 把快的方法,改进的更好!

前面我们谈到overfeat的效果一般, 但是overfeat基于滑动窗口和回归思想的速度很快。 从效果上来说, overfeat 的效果一般, 对于重叠情况很多不能识别的情况。 如何将基于回归的思想,做到逼近区域推荐的效果?YOLO把分而治之和IoU的思想集成进来了。 而SSD把多尺度Anchor Box的思想集成进来了。

除了快还有什么?当然是做优做强

Faster R-NN有三大主要部件, RPN 做区域推荐, RoI Pooling类似特征Pyramid,改善极大极小重叠, 分类和Box回归的Log 加 Smoothed L1 损失, 针对定位修正。 如何要做优做强?

能否比RPN做的更优?

前面我们提到RPN能够达到Selective Search的效果, 那么假如还要更好, 怎么能够做到?AttractioNet利用了NMS(non-maxima suppression)效果。 AttentionNet利用了弱注意力集中的机制。

能否比RoI Pooling做的更优?

前面我们提到RoI Pooling能够做到和HoG Pyramid和DPM空间限制类似的SPM(Spatial Pyramid Matching)的效果, 那么加入还要更好, 怎么能够做到? ION(Inside-Outside Net)提出了四方向上下文的思想, FPN提出了特征Pyramid网络

能否比RoI Pooling做的更强?

前面我们提到RoI Pooling是建立在RoI基础上的, 对应的区域推荐, 如何进一步对齐到像素点? Mask R-CNN提出了RoI Align的思想。 在误差计算中,除了分类, Box回归基础上再加入像素点Mask Branch距离的思想。

那么,什么是FCN(Fully Convolutional Networks), IoU, NMS, Weak Attention
Narrowing, ION, FPN, RoI Align 和 Mask Branch思想?理解了这些, 你对下面这个图,就不再陌生!

 

 

下面, 开启下半场的路程!

 

十一、R-FCN

参考:

  1. 『计算机视觉』R-FCN:Object Detection via Region-based Fully Convolutional Networks

前面我们提到, Faster R-CNN打通前后端成为端到端的模型的同时, ConvNet模型也换成了VGG-16的模型。 但是在GoogLeNet和ResNet网络结构上, 全连接FC层就只有一层了, 最后一层,为Softmax分类服务了。

 

那么, 如果要把GoogLeNet和ResNet应用到Faster R-CNN中去,就面临一个现象,去掉最后一层FC层, 因为那是用来做分类的。 需要换到新的尾部网络, 能够兼容分类和Box回归。

 

 

这样, 我们再来看RoI Pooling的使用, 那么RoI Pooling后面的FC层也要换成卷积层。 这样, 卷积层就被RoI Pooling层隔断了。 而且这种隔断使得RoI Pooling后面的ConvNet重复计算了。

 

 

 

一个问题,能不能直接把后面FCs变成ResNet之后的ConvNet直接丢弃? 不行, 这样的效果会打折扣, 为什么? 我们在Fast R-CNN继承SPPNet的SPM技术, 演绎出RoI Pooling的时候讲了,RoI Pooling只是相当于最细分的区域固定, 那么粗粒度的部分, 可以由后续的多层FCs来达到类似的效果。 如果去掉, 就少了金字塔结构了,或者少了深度了。

 

那么, 如何把RoI后面的卷积计算也移到前面去?就是R-FCN解决的问题!一方面要保留空间限制, 另一方面要有一定特征层次。 R-FCN提出了Position-Sensitive RoI Pooling

Position-Sensitive RoI Pooling的思想, 正式将位置并行起来, 是一种结合了空间信息的的注意力机制。 每个小的子框数据来源一个和特点位置绑定的ConvNet特征层。

  1. 具体网络设计说明参见这里

 

一旦和位置绑定了,那么特征计算, 就从以前的中心点, 变成了一系列从上下左右的不同子框去看的特征图。 那么再把这些组合起来。 即暗含了不同空间信息。类别的说,就是你先上下左右的看这个山峰, 回头把看的拼接起来, 判断山峰有没有认错。 选择好不同位子的特征,再整合起来, 得到在不同位子点确认的特征, 再做Pooling, 通过Pooling进行投票。

 

这样的效果就是,把特征计算放在前面, 而把位置信息拼接投票放在最后处理。 而不是先通过位置划出特征, 然后把带位置的特征先融合,再做分类和回归。 这里直接进行位置投票。 要注意的PS RoI Pooling和RoI Pooling并不是一个Pooling。

R-FCN优点:

  1. 清楚的关联了速度提升和ConvNet特征共享的关系。
  2. 通过不同位置为注意力的并行特征计算,再极好的利用Pooling来投票, 取代了RoI Pooling后续计算的计算要求。
  3. 速度快, 效果好的均衡下的推荐选择。

R-FCN问题:

  1. 依然无法实现视频基本的实时(每秒24帧图像)。
  2. 功能上没有涉及到像素级别的实例分割

 

 

十二、YOLO

参考

  1. 图解YOLO
  2. You Only Look Once(YOLO):Unified, Real-Time Object Detection

  3. YOLO系列,YOLOv1 的大脑、躯干和手脚

YOLO核心思想:从R-CNN到Fast R-CNN一直采用的思路是proposal+分类 (proposal 提供位置信息, 分类提供类别信息)精度已经很高,但是速度还不行。 YOLO提供了另一种更为直接的思路: 直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把 Object Detection 的问题转化成一个 Regression 问题)。

大致流程:

  1. Resize成448*448,图片分割得到7*7网格(cell)
  2. CNN提取特征和预测:卷积不部分负责提特征。全链接部分负责预测:a) 7*7*2=98个bounding box(bbox) 的座标 和是否有物体的confidence 。 b) 7*7=49个cell所属20个物体的概率。
  3. 过滤bbox(通过nms)
  • 每个网格要预测B个bounding box(图中黄色实线框),每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。 
    这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的: 
     
    其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

  • 每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。 
    注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

    • 每个网格还要预测类别信息,论文中有20类。7x7的网格,每个网格要预测2个 bounding box 和 20个类别概率,输出就是 7x7x(5x2 + 20) 。 (通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是S x S x (5*B+C)的一个tensor。 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的)
  •  

 

损失函数如下所示:

这样YOLO的损失函数考虑了, 1)框回归, 2)是否有物体, 和有哪个物体, 3)另外就是区域最合适的物体。

 

 

其实,我们前面提到了Overfeat效果不好, 一个很大原因就是Overfeat没有专门为了提高召回率的区域推荐机制。
而有区域推荐RPN的Faster R-CNN慢的一个重要原因,就是RPN的计算量基本也够计算Overfeat了。 所以它是两个阶段。

O
 

前面我们提到, Faster R-CNN 已经很快了, 但是做不到实时, 因为视频要求1秒24帧以上。 既然YOLO很快, 那么必然用到视频中去了。 如果再视频中, 还可以进一步优化YOLO到Fast YOLO更快。 更快,就是共享! 对的, 共享了类别的概率图Class Prob. Map。 通过修正而不是重新学习。 所以更快!

 

 

 

YOLO优点:

1. 典型的回归加分类模型和单一的CNN网络

2. 分治思想很好

3. 实时性很好, 基本上接近1秒24帧的标准。

4. 比Select Search找的框少很多(区域推荐更看重召回率)

 

YOLO问题:

1. 准确率不高, 不如Faster R-CNN和R-FCN

2. 小物体,不规则物体识别差

3. 定位精度不高

 

十三、YOLO-v2(YOLO9000: Better, Faster, Stronger)

参考

  1. YOLO2

  2. YOLO2原理理解
  3. YOLOv2 论文笔记

  4. YOLO,YOLO2学习

  5. 目标检测|YOLOv2原理与实现(附YOLOv3)

  6. yolo-nano详解

OLO改进策略:

1.Bath Nomalization

        Bath Nomalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。

        YOlLOv2中,在每个卷积后面都添加了Bathch Normalization层,并且不再使用droput,mAP提升了2.4%

2.High Resolution Classifier

        目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),ImageNet分类模型基本采用大小为 224*224 的图片作为输入,分辨率相对较低,不利于检测模型。

      YOLOv1在采用 224*224 分类模型预训练后,将分辨率增加至 448*448 ,并使用这个较高分辨率在检测数据集上finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。

       因此,YOLOv2增加了在ImageNet数据集上使用 448*448 输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。

3.Convolutional With Anchor Boxes

        在YOLOv1中,输入图片被划分为 7*7 网格,每个单元格预测2个边界框。YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。

          YOLOv2借鉴了RPN网络的先验框(anchor boxes,prior boxes,SSD也采用了先验框)策略。RPN对CNN特征提取器得到的特征图(feature map)进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,RPN预测的是边界框相对于先验框的offsets值(其实是transform值,详细见Faster R_CNN论文),采用先验框使得模型更容易学习。

       YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。为了使检测所用的特征图分辨率更高,移除其中的一个pool层。在检测模型中,YOLOv2不是采用 448*448 图片作为输入,而是采用 416*416 大小。因为YOLOv2模型下采样的总步长为 32 ,对于 416*416 大小的图片,最终得到的特征图大小为 13*13 ,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置。

       对于YOLOv1,每个cell都预测2个boxes,每个boxes包含5个值: (x, y, w, h, c) ,前4个值是BBox位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及BBox与ground truth的IOU)。但是每个cell只预测一套分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。

4.Dimension Clusters

     在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的groud truth做了聚类分析。因为设置先验框的主要目的是为了使预测的BBox与ground truth的IOU更高,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标: 

 

如何进一步提高YOLO的准确度呢?记得RPN里面利用了各种框的长宽比先验知识么? Anchor Box(根据特征点标记9种框,然后进行回归计算)。 大概5种左右的框就占据了60%的情况。

5.New Network:Darknet-19

6.Direct location prediction

       YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。总结来看,根据边界框预测的4个offsets(tx,ty,tw,th),可以按如下公式计算出边界框实际位置和大小:

这样,把单纯的框预测, 变成带先验的框预测, 就是长度和宽度拥有一定的先验。

 

7.Fine-Grained Feature

        YOLOv2的输入图片大小为 416*416 ,经过5次maxpooling之后得到 13*13 大小的特征图,并以此特征图采用卷积做预测。 13*13 大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。

其他一系列改进技巧, 使得YOLOv2 要比YOLO好!你会看到下面, 提升最大的是dimension priors。 所以尺度计算一个先验

YOLO9000, 分层的物体标签实现wordtree。

 

YOLO-v2优点:

1. 引入BN(Batch normalization) (%2 mAP改进)

2. 高分辨率图片(448x448), 改善小物体识别 (4% mAP改进)

3. 更细化的分块(13x13) (1% mAP改进)

4. 引入Anchor框 ( K-means ) (81% 召回 到 88% 召回)

YOLO-9000优点:

5. 分层的结果标签 COCO ImageNet

 

 

YOLO-v2问题:

1. 没有实现实例分割。

 

 

 


YOLO3

yolo官方网站](https://pjreddie.com/darknet/

参考

  1. yolo系列之yolo v3【深度解析】

  2. YOLOv3 深入理解

  3. 从零开始PyTorch项目:YOLO v3目标检测实现(上)

不考虑神经网络结构细节的话,总的来说,对于一个输入图像,YOLO3将其映射到3个尺度的输出张量,代表图像各个位置存在各种对象的概率。

我们看一下YOLO3共进行了多少个预测。对于一个416*416的输入图像,在每个尺度的特征图的每个网格设置3个先验框,总共有 13*13*3 + 26*26*3 + 52*52*3 = 10647 个预测。每一个预测是一个(4+1+80)=85维向量,这个85维向量包含边框座标(4个数值),边框置信度(1个数值),对象类别的概率(对于COCO数据集,有80种对象)。

对比一下,YOLO2采用13*13*5 = 845个预测,YOLO3的尝试预测边框数量增加了10多倍,而且是在不同分辨率上进行,所以mAP以及对小物体的检测效果有一定的提升。

 

YOLO v3主要有几个改进点,还是非常赞的:

1、类别预测方面主要是将原来的单标签分类改进为多标签分类,因此网络结构上就将原来用於单标签多分类的softmax层换成用于多标签多分类的逻辑回归层。首先说明一下为什么要做这样的修改,原来分类网络中的softmax层都是假设一张图像或一个object只属于一个类别,但是在一些复杂场景下,一个object可能属于多个类,比如你的类别中有woman和person这两个类,那么如果一张图像中有一个woman,那么你检测的结果中类别标签就要同时有woman和person两个类,这就是多标签分类,需要用逻辑回归层来对每个类别做二分类。

2、采用多个scale融合的方式做预测。原来的YOLO v2有一个层叫:passthrough layer,假设最后提取的feature map的size是13*13,那么这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。当时这么操作也是为了加强YOLO算法对小目标检测的精确度。这个思想在YOLO v3中得到了进一步加强,在YOLO v3中采用类似FPN的upsample和融合做法(最后融合了3个scale,其他两个scale的大小分别是26*26和52*52),在多个scale的feature map上做检测,对于小目标的检测效果提升还是比较明显的。虽然在YOLO v3中每个grid cell预测3个bounding box,看起来比YOLO v2中每个grid cell预测5个bounding box要少,其实不是!因为YOLO v3采用了多个scale的特征融合,所以boundign box的数量要比之前多很多,以输入图像为416*416为例:(13*13+26*26+52*52)*3和13*13*5相比哪个更多应该很清晰了。

3、关于bounding box的初始尺寸还是采用YOLO v2中的k-means聚类的方式来做,不过数量变了。这种先验知识对于bounding box的初始化帮助还是很大的,毕竟过多的bounding box虽然对于效果来说有保障,但是对于算法速度影响还是比较大的。作者在COCO数据集上得到的9种聚类结果:(10*13); (16*30); (33*23); (30*61); (62*45); (59*119); (116*90); (156*198); (373*326),这应该是按照输入图像的尺寸是416*416计算得到的。

4、网络结构(Darknet-53)一方面基本采用全卷积(YOLO v2中采用pooling层做feature map的sample,这里都换成卷积层来做了),另一方面引入了residual结构(YOLO v2中还是类似VGG那样直筒型的网络结构,层数太多训起来会有梯度问题,所以Darknet-19也就19层,因此得益于ResNet的residual结构,训深层网络难度大大减小,因此这里可以将网络做到53层,精度提升比较明显)。Darknet-53只是特征提取层,源码中只使用了pooling层前面的卷积层来提取特征,因此multi-scale的特征融合和预测支路并没有在该网络结构中体现。

 

十四、SSD

  1. SSD详解
  2. SSD原理解读-从入门到精通
  3. 知乎SSD

和Anchor Box思想和Pyramid思想一致, 引入多尺度和多默认比例。

 

SSD算法步骤:

1. 输入一幅图片(200x200),将其输入到预训练好的分类网络中来获得不同大小的特征映射,修改了传统的VGG16网络;

将VGG16的FC6和FC7层转化为卷积层,如图1上的Conv6和Conv7;
去掉所有的Dropout层和FC8层;
添加了Atrous算法(hole算法),参考该链接
将Pool5从2x2-S2变换到3x3-S1;
2. 抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2层的feature map,然后分别在这些feature map层上面的每一个点构造6个不同尺度大小的BB,然后分别进行检测和分类,生成多个BB,如图1下面的图所示;

3. 将不同feature map获得的BB结合起来,经过NMS(非极大值抑制)方法来抑制掉一部分重叠或者不正确的BB,生成最终的BB集合(即检测结果);
传统算法与SSD算法的思路比较:

对于BB的生成,Faster-rcnn和SSD有不同的策略,但是都是为了同一个目的,产生不同尺度,不同形状的BB,用来检测物体。对于Faster-rcnn而言,其在特定层的Feature map上面的每一点生成9个预定义好的BB,然后进行回归和分类操作进行初步检测,然后进行ROI Pooling和检测获得相应的BB;而SSD则在不同的特征层的feature map上的每个点同时获取6个不同的BB,然后将这些BB结合起来,最后经过NMS处理获得最后的BB。


 

多尺度CNN网络采用类似GoogLeNet的那种分层输出模式。

 

 

所以结合起来,就有了SSD如下网络:

从SSD的网络可以看到, 这个多尺度是并行实现的。

 

SSD优点:

1. 在YOLO基础上引入多尺度特征映射, 并且分成ConvNet并行实现

2. 引入Anchor Box机制

3. 和YOLO比效果更好, 速度更快

 

SSD问题:

1. 效果很难突破R-FCN和Faster R-CNN

 

 

 

十五、AttentionNet(没有看太懂,以后再看)

  1. 论文
  2. 遍地开花的 Attention ,你真的懂吗?

  3. AttentionNet 详解
  4. 目前主流的attention方法都有哪些

  5. 深度学习之Attention Mechanism

主力集中的思想比较简单:

在调整 Bounding Box 的位置时,大多数算法使用的都是以回归类型的损失,直接优化最后的 Bounding Box 的座标值。通过这种方法得到的座标值准确性可能不会很高。我们可以仔细思考动物的视觉锁定一个目标的过程,首先大体看一张图片,对于要找到的物体,我们会有一个大致的方位。然后注意力会向那个物体的大致方向转移,直到锁定目标。
  AttentionNet 就可以理解为模仿动物视觉的这样一个过程。它是通过不断迭代的方法直到找到最后的 Bounding Box。同时 AttentionNet 也是一个一体的对象检测网络,它不需要分离任何的模型进行单独的训练。
 

我们来看图 1,对于这些图片,我们大致能锁定其中人的位置,将 Bounding Box 的左上角和右下角初始化为图像的左上角和右下角,然后 Bounding Box 的左上角和右下角同时向人位置的大体方位进行迭代,迭代到一定的次数,Bounding Box 会在人的位置附近收敛。停止调整其自身位置。此过程就是 AttentionNet 进行迭代定位的过程。不过对於单独的 AttentionNet 只能实现单目标的检测。要想实现多目标的检测,请看如下章节的介绍。

  这种通过迭代检测物体的方式,将物体的存在性判断与边界框的优化,集成到了一个卷积神经网络当中。将边界框的回归问题转化为物体大体方向的分类问题。其过程模仿了人类和动物定位物体的过程。换一个角度思考,也可以理解为多个模型的集成。对于定位的最终目标,需要多个步骤来预测。其中每次定位的方向都是模糊的方向。但是对于多次预测来说,多个方向的集合足以预测一个准确的位置。

和区域推荐相比有一定优势:

而这个注意力迁移的过程, 可以解读为左上点和右下点相互尽可能靠近的一个过程:

整个过程循环迭代, 直到检测的比较精准为止。

 

这种注意力移动的过程,也必须和具体目标对应起来, 才能应用到多目标的情况下:

所以说, 不同类别就可以配置成并行的结构框架。

这样的话, 多个目标实例都要拥有一个这样的注意力移动的过程。 而多个实例,就也可以并行实现。

 

这样的话, 采用两阶段过程, 第一步先找到每个实例对应的一个大框, 第二步, 细化找到准确的框。

 

AttentionNet优点:

  1. 全新的区域查找方式
  2. 对比R-CNN,效果有提升

AttentionNet问题:

  1. 多实例的方式较为复杂
  2. 移动迭代,计算量过大

AttractioNet

(Act)ive Box Proposal Generation via (I)n-(O)ut Localization (Net)work, 如何框优化?

一) 更集中注意!

二) 更细化定位

 

如何细化定位?通过对物体分布概率的在横轴和纵轴上的裁剪。

 

 

对应的网络结构ARN(Attend & Refine),然后反复迭代, 最后通过NMS矫正。 这个过程是不是和RPN结构加RoI Pooling迭代过程有点类似。 不一样的地方, 每个ARN的框推荐都会被用上,使用NMS进行修正。

 

而ARN和之前RPN结构不太一样, 它的横轴和纵轴是分别细化,然后通过In-Out 最大似然度来定义的, 也就是前面的那个细化的示意图。

 

上面解释了ARN, 那么NMS是什么呢?其实就是一个局部求最值的过程!

 

 

NMS修正的过程,效果能从多个框中找到一个最符合的框, 有点类似投票。

 

 

AttractioNet优点:

  1. 实现提出迭代优化区域思想
  2. AttractioNet 要比Selective Search效果更好
  3. 基于CNN网络上的区域推荐

AttractioNet问题:

  1. 反复迭代会降低运行速度
  2. 网络结构复杂, 不如RPN简单

 

十六、G-CNN

Grid R-CNN由商汤提出的,其主要是对faster R-CNN框架中定位框回归支路的更改,将以往通过回归方式实现proposal位置修正的方法,更改为通过全卷积网络来实现目标定位框的精确修正。

Grid R-CNN

Grid-CNN与Grid R-CNN不同。

Grid-CNN 吸收了YOLO分而治之的思想。 然后进行区域合并。

但是它不是简单的合并, 而是采用迭代优化的思路。

 

这个过程和NMS非常不一样, 通过反复的IoU计算, 优化迭代。

为了避免特征的反复计算,它把特征计算作为全局步骤, 而把回归反复优化的部分称为回归部分。

 

你可以看到回归框的移动过程:

 

G-CNN优点:

  1. 通过迭代优化替换了类似NMS的简单的合并。
  2. 效果比Faster R-CNN要好点
  3. 通过分而治之, 速度要比Faster R-CNN快点。

G-CNN问题:

  1. 速度依然太慢,难以实时应用

 

十七、ION

参考:

  1. Inside-Outside Net中在卷积图片中应用IRNN的理解

收录于CVPR2016

Inside-Outside Net是提出基于RNN的上下文的目标检测方法。 对于图像上下左右移动像素, 用RNN来编码, 称为这个方向上的上下文。

这样, 实现了4方向RNN上下文, 用来提取上下文特征。

v2-2eca29655b88967b9219f746fea24cbc_720w.jpg

并且设置了RNN堆栈来强化不同粒度的上下文。

 

所以R-FCN里面对空间限制进行迭代编码类似, 不过这次不是人为划分框的位置, 而是通过IRNN直接编码。

 

v2-2f8f7bf13c92597a04185904ea1c9db0_720w.jpguploading.4e448015.gif正在上传…重新上传取消

对比添加上下文和没有上下文的网络设置区别。 对比得到IRNN可以提高2个mAP的提升。

 

ION优点:

  1. 提出RNN上下文的概念
  2. 对小物体的识别的效果提升
  3. 比R-FCN效果要佳。

ION问题:

  1. RNN计算量增加,速度变慢

 

十八、FPN  (feature pyramid networks for object detection

参考:CVPR2017

  1. 『计算机视觉』FPN:feature pyramid networks for object detection(代码分析)

  2. FPN详解
  3. FPN: 一种高效的CNN特征提取方法

  4. FPN全解-最全最详细

  5. 物体检测之FPN及Mask R-CNN

如何将特征金字塔融合成神经网络,为了避免重复计算。FPN:端到端训练的特征金字塔

提出FPN网络, 通过卷积和拼接得到特征金字塔网络

有了特征金字塔,有什么好处呢? 对于不同大小的物体可以在不同缩放上进行分割。

 

这样,在每个层次就可以利用类似的尺度来发现目标物体。

做到各个尺度的兼容:

FPN优点:

  1. 多尺度和小物体的融合考虑
  2. 速度和准确率的兼容
  3. 可以广泛的结合, 提高不同模型的效果

FPN问题:

  1. 需要多层计算,增加计算量

 

 

十九、Mask R-CNN

参考

  1. 物体检测之FPN及Mask R-CNN
  2. 『计算机视觉』Mask-RCNN

  3. 『计算机视觉』Mask-RCNN_项目文档翻译

稍微回顾一下, 第一次提出RoI, 再R-CNN里面

 

第一次提出RoI Pooling在Fast R-CNN里面

 

第一次提出 RPN在Faster R-CNN里面:

 

到了Mask R-CNN, 做了什么改进呢?提出了RoI Align , 方便后面增加的Mask Branch, 对应到像素点。

 

什么是mask?

有了Mask之后, 我们能实现实例分割了

 

那么, RoI Pooling和RoI Align的区别在于哪里呢?如何能够精确的反向找到对应像素点边缘? 这样的话,就要求对Pooling的划分不能按照Pooling的边缘, 而是要按照像素点缩放后的边缘。

 

而用Pooling的话, 就会有偏差, 这种偏差对应到像素的Mask上就会找不准边界, 之前有人利用RoI Wrapping进行插值矫正。

对于Mask和分类,回归学习, 即可以基于FPN或者就是RoI Align的特征

Mask计算的先驱:

1. MNC(Multi-task Network Cascade)的RoI Wrapping, 插值估算

2. FCIS (Fully Convolutional Instance Segmentation)的positional aware sliding masks

RoI Align要比Segment要好很多!

在加上人体姿势的17个关键点

Mask R-CNN优点:

  1. ROIPool 到 ROIAlign (借鉴了ROI Wrapping)
  2. Mask的预测 (借鉴了MNC和FCIS)
  3. State-of-Art的效果
  4. 轻微调整可以做人体姿态识别

Mask R-CNN问题:

  1. 速度不够快
  2. 像素预测需要大量训练数据

Mask X R-CNN

 

带Weight Transfer learning的Mask R-CNN。

效果提升:

小结

 

给一个概要的takeaway

  1. 速度优先:SSD算法
  2. 速度和效果均衡: R-FCN算法
  3. 效果优先:Faster R-CNN, Mask R-CNN
  4. 一网多用:Mask R-CNN

 

对于实践开发

另外matterport公司在github上对Mask R-CNN的开源实现,

https://github.com/matterport/Mask_RCNN 。

 

参考:

Ross Girshick, “CVPR 2017 Tutorial on Deep Learning for Objects and Scenes”

https://www.robots.ox.ac.uk/~vgg/rg/slides/vgg_rg_16_feb_2017_rfcn.pdf

 

二十 CornerNet

  1. CornerNet-Lite,基于关键点的目标检测算法,已开源

  2. CornerNet 和 CornerNet-Lite

二十一 CenterNet

  1. CenterNet Pro Max开源

  2. 真正的CenterNet——Objects as Points论文解读

  3. CenterNet:将目标视为点 (已开源)

 

 

编辑于2020-4-15

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章