Everything in |

PaB式乌龙茶

园龄:4年1个月粉丝:1关注:0

RCNN, fastRCNN, fasterRCNN

RCNN, fastRCNN, fasterRCNN

参考目录:

RCNN,fast-RCNN,faster-RCNN:https://zhuanlan.zhihu.com/p/64694855

RCNN

参考目录:

RCNN详解:https://blog.csdn.net/weixin_44338712/article/details/107343260

IoU,NMS和bbox回归:https://zhuanlan.zhihu.com/p/60794316

任务

输入:image

输出:1. 类别标签;2. 位置(Bounding box)

解决方法

  • 模块一:提取物体区域(Region proposal)
  • 模块二:对区域进行分类识别(Classification)

传统方法一般是在图片上穷举出所有问题可能出现的区域,然后对这些区域进行分类。对于能分类的区域,使用非极大值抑制(Non-maximumsuppression)去除冗余的区域,在输出结果。

RCNN使用的四个步骤:

  • 设置提取框
  • 对每个框提取特征
  • 图像分类
  • NMS

1. Region

RCNN采用Selective Search生成候选框并合并候选区。算法的主要流程如下:

输入:图片image
输出:物体可能的位置集合L
——————————————————————————————————————————————
使用图像分割算法获得初始区域R={r1,r2,...,rn}
定义相似度集合S={}
for each (ri,rj) in R: # ri,rj互为相邻区域
    计算相似度s(ri,rj)
    S = S ∪ s(ri,rj)
end for

while S ≠ 空:
    s_max(ri,rj) = amax(S)
    合并:rt = ri ∪ rj
    删除所有与ri、rj有关的相似度s(ri,r*),s(rj,r*)
    计算所有与rt相邻区域的相似度,并添加到集合S,S = S ∪ s(rt,r*)
    更新RR = R ∪ rt
end while
从选区R中获取所有可能的bounding boxes集合L
return L
——————————————————————————————————————————————

2. 特征提取

使用CNN获取各个region proposal的特征。由于不同的region proposal的大小是不一样的,所以需要对图片进行缩放。两种缩放方法:

  1. 各向异性缩放

    即按照尺寸直接强行缩放,图像可能会发生扭曲。

  2. 各向同性缩放

    • 扩充bounding box:在原图上将bounding box扩充到需要的尺寸。
    • 扩充region:用bounding box中颜色的均值对图片的尺寸缺失区域进行填0.

然后使用pretrain后的CNN网络在目标数据集上fine tune。训练过程中会产生一些候选的bounding box,我们将候选框与人工标注的框进行IoU计算,大于0.5记为正样本,否则为负样本。随后通过这些样本进行训练。

3. 训练任务

训练任务主要包括两个:SVM分类和bounding box回归。

3.1 SVM分类

由于训练数据集的数据量很小,所以不适用CNN最后的softmax层进行分类,而是将提取出的特征送入SVM分类器进行分类。SVM适用于小样本训练:IoU<0.3为负例,IoU大于0.7为正例,其余的丢弃。

3.2 bounding box regression

现在设Ground truth的bounding box为G=(Gx,Gy,Gw,Gh),模型预测的bounding box为P=(Px,Py,Pw,Ph),则bounding boxregression的目标时找到一种映射关系f,使得f(P)=GG是一个和G接近的框。

我们可以发现,该映射关系可以表示为平移加缩放:

  1. 平移(Δx,Δy):

    Gx=Pwdx(P)+PxGy=Phdy(P)+Py

    其中Δx=Pwdx(P), Δy=Phdy(P)

  2. 缩放(Sw,Sh):

    Gw=Pwexp(dw(P))Gh=Phexp(dh(P))

    其中Sw=exp(dw(P)), Sh=exp(dh(P))

因此,我们所需要的缩放关系即为dx(P), dy(P), dw(P), dh(P),接下来我们可以针对这四个两设计算法。

设计回归

输入x:region proposal对应的pool 5层的特征。

输出y:平移和缩放的尺度dx(P), dy(P), dw(P), dh(P)

真实的平移和缩放量用t表示如下:

tx=(GxPx)/Pwty=(GyPy)/Phtw=log(Gw/Pw)th=log(Gh/Ph)

MSE下的损失函数可以定义为:

loss=i=1N(tiWTx)2

加上L2正则化项后的损失函数:

loss=i=1N(tiWTx)2+λ||W||2

4. 测试过程

  1. Region proposal的确定
  2. RP的特征提取
  3. SVM分类
  4. BBox回归
  5. NMS

RCNN的缺点

  1. 每一个region proposal需要单独计算feature map导致整体的时间变长,且占用空间大;
  2. 每个模块是相互独立的,导致整体精度不高;
  3. 测试时间长。

fastRCNN

参考目录:

ROI pooling:https://blog.csdn.net/fenglepeng/article/details/117885129

fast RCNN:https://blog.csdn.net/weixin_43702653/article/details/124002054?spm=1001.2014.3001.5501

0. 相对于RCNN的改进

  1. 不再对每个region proposal进行卷积,而是对整长图像进行卷积,减少重复计算;
  2. 使用ROI pooling对特征进行尺寸变换,因为全连接层的输入要求尺寸大小一样。
  3. 删除单独的bbox regressor,将regressor放入网络一起进行训练,每个类别对应一个regressor,并用softmax代替原先的SVM分类器。

1. ROI pooling

ROI的全称为region of interest,ROI pooling是池化层的一种,整个过程可以看作将region proposal拼成统一大小的feature map。

输入

  1. 从具有多个卷积池化的深度网络获得的固定大小的feature map;
  2. 一个N*5矩阵,其中N为ROI的数目。5列中,一列为image index,其余四列代表左上角和右下角的坐标。

输出

batch个vector,batch=roi的个数,vector的大小为channel*w*h

实质:将若干个不同大小的box矩形框映射成大小为w*h的矩形框。


具体操作

  1. 根据输入image,将ROI映射到feature map对应位置;
  2. 将映射后的区域划分为相同大小的section;
  3. 对每个section进行max pooling操作。

例如在下图中,我们在一个8×8的feature map,一个ROI,同时我们需要得到2×2的输出。

设我们取得了一个region proposal的位置(左上角和右下角的坐标)为(0,3)(7,8),则我们按照下图示意进行划分,将区域不均等地划分为2×2,再取max pooling。

ROI pooling的好处

  1. 不需要进行warp才做,有效避免了物体被扭曲;
  2. 不需要对每个proposal提取特征,只需要用映射的方法从整张图片的feature map上获取ROI feature区域。

2. 模型结构

和RCNN进行对比,有两点主要不同:

  1. 最后一个卷积层后加了一个ROI pooling layer;
  2. 损失函数使用了multi-task loss,将边框回归bounding box regression直接加入了CNN网络的训练。

损失函数

分类器损失:

Lcls(p,u)=logpu

回归器损失:

Lloc(tu,v)=ix,y,w,hsmoothL1(tiuvi)

where

smoothL1(x)={0.5x2if |x|<1|x|0.5otherise

多任务损失函数:

L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)

fasterRCNN

参考目录:

faster-RCNN:https://blog.csdn.net/weixin_43702653/article/details/124045469?spm=1001.2014.3001.5501

详解faster-RCNN:https://blog.csdn.net/weixin_42310154/article/details/119889682

RPN:https://zhuanlan.zhihu.com/p/106192020

联合训练:https://blog.csdn.net/Friedrichor/article/details/123943381

fast-RCNN的局限性:依旧使用selective search方法确定region proposal。faster-RCNN改为使用RPN网络提取region proposal。

fast-RCNN的三大模块:

  • Conv layers

    勇于提取输入图像的特征,输出feature map。

  • region proposal networks(RPN)

    最重要的模块,用于提取RP。

  • ROI head

    通过RPN模块确定RP后,后续的结构和fast-RCNN相似。

1. Conv layers

还有三种层,包括13个conv层,13个relu层和4个pooling层。

  • conv: kernel_size=3, pad=1, stride=1
  • pooling: kernel_size=2, pad=0, stride=2

假设输入为图像为M×N大小的输入图像,经过网络后会变为M/16×N/16的feature map。

2. Region Proposal Networks

RPN包括以下部分:

  • 生成anchor boxes
  • 判断每个anchor box为foreground(前景,包含物体)或者background(背景)(二分类任务)
  • bbox regression对锚框进行微调,让positive anchor和ground truth更加接近

2.1 anchors

在feature map上,对于每个像素点,预设九个anchor,作为初始的检测框,如下图所示。后面会通过两次bounding box regression来修正检测框的位置。

2.2 cls layer(分类)

在分类任务中,feature map通过sfotmax得到两个值,分别对应目标为前景和背景的概率。RPN并不关心最终分类是什么,它只关心是前景还是背景。

2.3 reg layer (回归)

生成每一个anchor相对于ground truth的坐标偏移量。计算偏移量和缩放量的公式和前文提到的bounding box regression相同。

为什么不直接预测修正后的anchor坐标,而是要预测偏移量?

因为直接预测坐标的数量级较大,难以训练;同时坐标偏移具有较好的数学公式,方便求导。

2.4 生成proposal

proposal层的输入有三个:

  • cls层生成的(M/16)×(N/16×2k向量
  • reg层生成的(M/16)×(N/16×4k向量
  • im_info=[M,N,scale_factor]

修正偏移量的要点:

  • 利用 reg layer的值对原始的anchor进行修正;
  • 边界处理:把超出图像边界的positive anchor超出的部分收俩到图像边界处,防止ROI pooling的过程中超出边界;
  • 剔除尺寸非常小的positive anchor;
  • 利用cls layer的score对positive layers进行排序;然后使用NMS;
  • 输出一堆RP的左上角和右下角的坐标值。

3. fasterRCNN的训练方法

3.1 四步交替迭代训练

  1. 训练RPN,使用大型预训练模型共享卷积核权重,端到端训练RPN;
  2. 训练fastRCNN,冻结第一步训练好的RPN,使用和第一步中相同的大型预训练模型共享卷积,训练从RP到最终输出的网络;
  3. 冻结共享卷积,调优RPN;
  4. 冻结RPN和共享卷积,调优fastRCNN;
  5. 重复3,4进行迭代训练。

3.2 联合训练

将四个部分融合到一个网络中,实现端到端的训练过程。

本文作者:PaB式乌龙茶

本文链接:https://www.cnblogs.com/pab-oolongtea/p/17829297.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   PaB式乌龙茶  阅读(48)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起