目标检测涉及的一系列网络总结RCNN FastRCNN FasterRCNN FPN MaskRCN等

目录

一、RCNN - Rich feature hierarchies for accurate object detection and semantic segmentation

步骤:

创新:

缺点:

候选区域算法

selective search

训练:

二、FastRCNN

步骤:

优点:

缺点:

创新:

ROI pooling

训练:

Loss:

 

三、Faster R-CNN:

Towards Real-Time Object Detection with Region Proposal Networks

步骤:

创新:

RPN

Anchor

RPN训练:

RPN Loss:

RPN与FastRCNN权重共享 训练方式:

四、ResNet

五、FCN

六、FPN特征金字塔

横向连接merge:

head结构:

混叠效应:

七、MaskRCNN

输出:

创新点:

技术要点:

ROI Align

双线性插值

   3. Loss function:

sigmoid和softmax的区别


一、RCNN - Rich feature hierarchies for accurate object detection and semantic segmentation

步骤:

  1. region proposal   使用selective search 选择候选框 约2000个
  2. 对每个候选框进行CNN特征提取 featuremap的维度固定
  3. linear SVM分类

创新:

region proposal

缺点:

对每个ROI都用网络提取feature map

 

 

候选区域算法

候选区域算法用分割不同区域的办法来识别潜在的物体。在分割的时候,我们要合并那些在某些方面(如颜色、纹理)类似的小区域。相比滑窗法在不同位置和大小的穷举,候选区域算法将像素分配到少数的分割区域中。所以最终候选区域算法产生的数量比滑窗法少的多,从而大大减少运行物体识别算法的次数。同时候选区域算法所选定的范围天然兼顾了不同的大小和长宽比。

 

候选区域算法比较重要的特征就是要有较高的召回率。

 

selective search

选择性搜索算法使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域作为输入,通过下面的步骤进行合并:

首先将所有分割区域的外框加到候选区域列表中

  1. 首先将所有分割区域的外框加到候选区域列表中
  2. 基于相似度合并一些区域
  3. 将合并后的分割区域作为一个整体,跳到步骤1

通过不停的迭代,候选区域列表中的区域越来越大。可以说,我们通过自底向下的方法创建了越来越大的候选区域。表示效果如下:

相似度

选择性搜索算法如何计算两个区域的像素度的呢?

主要是通过以下四个方面:颜色、纹理、大小和形状交叠

最终的相似度是这四个值取不同的权重相加

 

https://blog.csdn.net/yuanlulu/article/details/82157071

 

训练:

R-CNN需要先使用selective search进行region的选择,再finetune一个预训练的模型,再训练SVM分类器,再进行框的回归。

 

 

二、FastRCNN

步骤:

1.selective search 提取2000个候选框

2.用一个神经网络对全图进行特征提取

3.ROI pooling  在全图特征上摘取每个ROI区域对应的特征

4.全连接层 进行分类与bbox修正

 

优点:

1.取代RCNN串行的特征提取方式,一个CNN提取全图的特征

2.除了 selective search之外其他的步骤可以合在一起训练

 

缺点:

selective search依然存在

 

创新:

ROI Pooling 用一个神经网络对全图进行特征提取

属于max pooling

ROI pooling

具体操作如下:

(1)根据输入image,将ROI映射到feature map对应位置;([x/16]四舍五入)

(2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);(四舍五入)

(3)对每个sections进行max pooling操作;

这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度

具体介绍:https://blog.csdn.net/auto1993/article/details/78514071

https://blog.csdn.net/luo841297935/article/details/88699495

(&SPP Net 金字塔层空间特征pooling

与SPPnets不同,SPPnets在一副图像得到对应的特征后,从这张图像的特征上proposal对应的部分,采用空间金字塔池化,对于不同输入大小的proposal都能得到一个固定大小的特征向量。)

 

训练:

Fast-RCNN将finetune和分类器的训练结合了起来。原因也非常简单,因此Fast R-CNN采用的RoI pooling是可以进行反向传播的,也就是可以求导的

 

Loss:

多任务loss

  1. 分类loss
  2. bbox回归loss 可以表示框位置的四个值为target

 

三、Faster R-CNN:

Towards Real-Time Object Detection with Region Proposal Networks

 

步骤:

1.共享的卷积层 为全图提取特征 得到feature map

2.RPN层 生成待测框ROI  类似注意力机制的作用

3.ROI Pooling 在全图的特征图上摘取每个ROI对应的特征

4.FCN  进行分类  FastRCNN的detector层(reg+cls)

创新:

RPN层 生成待测框ROI

ROI Pooling

 

RPN

创新点:

RPN(region proposal networks)用于替代之前的selective search。这个层还可以在GPU上运算来提高速度。
RPN的目的:

  1. 有效地进行region proposal,在不同的大小,不同的尺度,不同的比例下
  2. 支持反向传播
  3. 支持在GPU上运算
  4. 能够和Fast R-CNN结合起来运算

属于滑动窗的算法

为了能够进行region proposal,作者使用了一个小的网络,在基础的卷积层输出的特征上进行滑动,这个网络输入大小为n*n,输入后会映射(用的n*n卷积)为一个固定长度的特征向量,然后接两个并联的fc层(用的1*1卷积层代替),这两个fc层,一个为box-regressoin,一个为box-classification。如下图:

输入:图

输出:bbox + objectness score

结构:

CNN(ZF or VGG)

 à sliding window (n*n cov + 1*1 cov for fc )

 à reg+cls   

 

Anchor

包括在sliding window中

3个方向,3个尺度,共9个

具有平移不变性

 

本质:

(转载自:https://www.zhihu.com/question/42205480/answer/155759667

 anchor 的本质是什么,本质是 SPP(spatial pyramid pooling) 思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入 resize 成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。接下来是 anchor 的窗口尺寸,这个不难理解,三个面积尺寸(1282,2562,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的 anchor 。示意图如下

至于这个 anchor 到底是怎么用的,这个是理解整个问题的关键。
下面是整个 Faster RCNN 结构的示意图:

利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)

在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=1,这样一来,滑动得到的就是51x39个3x3的窗口。对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。

 

 

RPN训练:

正样本:IoU高

负样本:IoU低

舍弃的样本:无重合的

 

RPN Loss:

分类:log loss

回归:robust loss(smooth L1)

对两类loss进行归一化+权重平衡

每个anchor对应一个回归项

 

RPN与FastRCNN权重共享 训练方式:

  1. 交替训练
  2. 近似联合训练
  3. 非近似联合训练
  4. 4步交替训练法(最终使用的):

第一步中,我们对RPN进行训练,该网络通过ImageNet预训练模型进行初始化,并针对区域提议任务进行端到端微调。在第二步中,我们使用步骤1 RPN生成的提议,通过Fast R-CNN训练一个单独的检测网络。该检测网络也由ImageNet预训练模型初始化。此时,两个网络不共享conv层。在第三步中,我们使用检测器网络来初始化RPN训练,但是我们修复了共享的conv层,并且只对RPN特有的层进行微调。现在这两个网络共享conv层。最后,保持共享的conv层不变,我们微调快速r-cnn的fc层。因此,两个网络共享相同的conv层并形成一个统一的网络

————————————————

原文链接:https://blog.csdn.net/weixin_39958313/article/details/87096861

 

 

https://www.jianshu.com/p/656343761fd5

https://blog.csdn.net/weixin_39958313/article/details/87096861

 

 

四、ResNet

待更新

 

 

五、FCN

待更新

 

 

六、FPN特征金字塔

 

c5   p5

c4   p4

c3   p3

c2   p2

 

网络直接在原来的单网络上做修改,每个分辨率的 feature map 引入后一分辨率缩放两倍的 feature map 做 element-wise 相加的操作。

通过这样的连接,每一层预测所用的 feature map 都融合了不同分辨率、不同语义强度的特征,融合的不同分辨率的 feature map 分别做对应分辨率大小的物体检测。

这样保证了每一层都有合适的分辨率以及强语义特征。

同时,此方法只是在原网络基础上加上了额外的跨层连接,在实际应用中几乎不增加额外的时间和计算量

 

高层:语义信息强,空间粗糙

底层:语义信息若,空间信息强

结构:

一个自底向上的线路,

一个自顶向下的线路,

一个横向连接(lateral connection)。图中放大的区域就是横向连接,

 

横向连接merge:

1*1的卷积核  :用于降维,减少核数,保持与后面的通道数相同,但size不变 (主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小)

2 up: 两倍最近邻上采样 放大图像

然后二者按element-wise元素宽度相加

每个金字塔层featuremap后都再接head层

再接3*3卷积 与已经融合的特征图:消除混叠效应,生成最好的参考特征图

 

若为resnet则

金字塔:resnet的佟size的stage中取后四层的末层

head结构:

3*3 的卷积滑动窗得到featuremap及两个相邻的 1*1 卷积分别做分类和回归的预测

(3*3卷积减少上采样造成的aliasing effect混叠效应)

并共享权重,共享语义信息

5area*3层金字塔=15anchor/金字塔

 

混叠效应:

在统计、信号处理和相关领域中,混叠是指取样信号被还原成连续信号时产生彼此交叠而失真的现象。当混叠发生时,原始信号无法从取样信号还原。而混叠可能发生在时域上,称做时间混叠,或是发生在频域上,被称作空间混叠。在视觉影像的模拟数字转换或音乐信号领域,混叠都是相当重要的议题。因为在做模拟-数字转换时若取样频率选取不当将造成高频信号和低频信号混叠在一起,因此无法完美地重建出原始的信号。为了避免此情形发生,取样前必须先做滤波的操作。

 

在视频信号处理过程中,有两种方法可以消除混叠现象:

 

直接提高采样频率,但是采样频率不能无限提高;

在采样频率固定的情况下,可通过低通滤波器消除大于尼奎斯特频率的高频信号,从而消除混叠现象;

所以这边使用一个3∗3 3*33∗3卷积核来卷积特征图来产生最后的参考特征图。

————————————————

https://blog.csdn.net/qq_33948796/article/details/89513416

https://blog.csdn.net/baidu_30594023/article/details/82623623

 

七、MaskRCNN

=FasterRCNN+ResNeXt +FPN+RPN+head:FCN+2fc

 

输出:

class label

bounding box

object mask

 

创新点:

  1. ROI Align
  2. label predict 和mask classification 的步骤是平行的

将mask和分类的确定分离   &FCN 基于像素级别的多分类共享,同时分割和分类 FCN 得到mask

在每个ROI后增加小分支  ≈小的FCN

 

技术要点:

  1. 强化的网络backbone  ResNeXt+FPN
  2. ROI Align
  3. Loss function 中用了sigmoid

 

ROI Align

http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b

https://blog.csdn.net/kk123k/article/details/86563425

https://www.cnblogs.com/wangyong/p/8523814.html

https://blog.csdn.net/u013355826/article/details/56680521

ROI pooling改为ROI Align

pixel-to-pixel alignment:

ROI Pooling 粗糙的空间量化 [/16] + 7*7 bin,四舍五入两次,不精确

ROI Align  保留空间位置 *116 +双线性插值 精确 解决Misalignment 对齐问题

 

对于检测图片中大目标物体时,两种方案的差别不大,而如果是图片中有较多小目标物体需要检测,则优先选择RoiAlign,更精准些。

 

步骤:

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性插值的方法计算出这四个位置的值,然后进行最大池化操作。

举例来说:

1)Conv layers使用的是VGG16,feat_stride=32(即表示,经过网络层后图片缩小为原图的1/32),原图800*800,最后一层特征图feature map大小:25*25

2)假定原图中有一region proposal,大小为665*665,这样,映射到特征图中的大小:665/32=20.78,即20.78*20.78,此时,没有像RoiPooling那样就行取整操作,保留浮点数

3)假定pooled_w=7,pooled_h=7,即pooling后固定成7*7大小的特征图,所以,将在 feature map上映射的20.78*20.78的region proposal 划分成49个同等大小的小区域,每个小区域的大小20.78/7=2.97,即2.97*2.97

4)假定采样点数为4,即表示,对于每个2.97*2.97的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法(下面介绍)进行计算,这样,就会得到四个点的像素值,如下图

上图中,四个红色叉叉‘×’的像素值是通过双线性插值算法计算得到的

最后,取四个像素值中最大值作为这个小区域(即:2.97*2.97大小的区域)的像素值,如此类推,同样是49个小区域得到49个像素值,组成7*7大小的feature map。

 

双线性插值

https://blog.csdn.net/kk123k/article/details/86563425

减少失真

一维线性插值

 

双线性插值

 

为了求图一中箭头所指点的坐标。先在图二红色平面内求投影点的y坐标,以及图三蓝色平面内投影点的y坐标,最后在黑色平面内根据两个投影点求出橙色箭头所指点的坐标

 

   3. Loss function:

每个 ROIAlign 对应 K * m^2 维度的输出。K 对应类别个数,即输出 K 个mask,m对应 池化分辨率(7*7)。

mask部分Loss 函数定义:

 Lmask(Cls_k) = Sigmoid (Cls_k),    

平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的 Sigmoid 计算得到。

 

     Why K个mask?通过对每个 Class 对应一个 Mask 可以有效避免类间竞争(其他 Class 不贡献 Loss )。

 

多任务loss,分开训练

MaskRCNN: per-pixel sigmoid +average binary Cross Entropy loss 二值交叉熵 不同类互不干扰 

& FCN:     per-pixel softmax +multinomial cross-entropy导致类间竞争

 

交叉熵: tlogO+(1-t)log(1-O)  O为sigmoid输出

 

多分类常用softmax entropy loss,对应的总概率和是1

 

sigmoid和softmax的区别

https://www.jianshu.com/p/52fcd56f2406

https://blog.csdn.net/uncle_ll/article/details/82778750

sigmoid (即逻辑回归函数):

0到1之间的概率值

当x趋近于负无穷时,y趋近于0;当x趋近于正无穷时,y趋近于1;当x= 0时,y=0.5.6

softmax函数:

概率和累加和为1

 

 

backbone:

ResNeXt+FPN

head:FCN

 

对于mask分支来说,使用FCN的好处:

可以保持空间信息

参数少而结果精确

maskrcnn解析

https://blog.csdn.net/linolzhang/article/details/71774168

https://blog.csdn.net/sunflower_sara/article/details/88640945

 

 

      

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值