首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >faster RCNN 学习记录

faster RCNN 学习记录

原创
作者头像
yzh
修改2020-08-06 11:10:50
5910
修改2020-08-06 11:10:50
举报
文章被收录于专栏:YZh学习记录YZh学习记录

一、faster RCNN 整体思路

二、RPN的理解

RPN
RPN

2.1 计算loss

loss的计算过程主要分为两类:分类loss,回归loss.

loss的计算过程需要知道真值和预测值。所以求取loss的过程就是真值与预测值求取的过程。

分类loss

真值:给Anchor打标签的过程,就是求真值的过程。

预测值:RPN网络预测出的分类结果,即是前景还是背景

回归loss

真值:Anchor与其对应的GT之间的offst值

预测值:RPN网络预测出的回归结果,即预测出的偏移量offst

很明显,回归的真值与分类的真值有关系,所有此过程的关键在于第一步,Anchor打标签的过程。

anchor打标签

Anchor的生成方式

在特征提取网络部分,以VGGNet为例,假设输入图像的维度为3×600×800,由于VGGNet 包含4个Pooling层,下采样率为16,因此输出的feature map的维度为512×37×50。

首先对 feature map进行3×3的卷积操作,得到的每一个点的维度是512维,这 512维的数据对应着原始图片上的很多不同的大小与宽高区域的特征, 这些区域的中心点都相同。如果下采样率为默认的16,则每一个点的坐 标乘以16即可得到对应的原图坐标。

特征图上的每一个像素点对应原图16x16大小区域的中心点,原图上16x16大小区域的中心点即为anchor的中心点。

根据不同面积,不同宽高比可得出9个不同大小的anchor。

因此Anchor的总数为37×50×9=16650个

Anchor的筛选方法

1. Anchor超出图像边缘部分进行过滤

实现思路:

根据第一个anchor的位置信息在原图上进行偏移,得到所有anchor的位置信息(左上角与右下角位置信息)

获得anchor总数,每一个anchor的位置信息;并将每一个anchor 的标签初始化为-1;

开始计算anchor与GT的IOU值

GT1

GT2

GT3

anchor1

anchor2

anchor3

横向比较:为anchor找到最大IOU值的GT

若最大IOU值小于0.3 ,直接看作负样本,标签为0

若最大IOU值大于0.7,直接看作正样本,标签为1

至于IOU值位于两者之间的数据,对训练没有帮助,直接视为无效数据,标签为-1

纵向比较:为GT找到最大IOU值的anchor,

最大IOU值的anchor直接看作正样本,标签为1(这里可以看作对前面正样本的补充)

2. Anchor 筛选

前面完成了anchor初步筛选,打标签的过程,但是负样本过多,正样本过少,导致正负样本不均衡。影响RPN网络的训练。

RPN默认选取256个Anchor参与损失计算。这里保证正负样本为1;1 .

因此分类loss的真值(即anchor的标签)得到了。

而回归损失的真值就是anchor与对应的GT的偏移量(offst)

Anchor 与GT 偏移量的求取过程:

ground truth:标定的框也对应一个中心点位置坐标x*,y*和宽高w*,h*

anchor box: 中心点位置坐标x_a,y_a和宽高w_a,h_a

所以,偏移量: △x=(x*-x_a)/w_a   △y=(y*-y_a)/h_a 

   △w=log(w*/w_a)   △h=log(h*/h_a)

2.2 RPN卷积网络

RPN训练设置:

在训练RPN时,一个Mini-batch是由一幅图像中任意选取的256个Anchor组成的,其中正负样本的比例为1:1。如果正样本不足128,则多用一些负样本以满足有256个Anchor可以用于训练,反之亦然

RPN 网络分为分类网络分支与回归网络分支

分类是二分类,即前景与背景的分类。由于每个点默认有9个Anchors,并且每个Anchor只预测其属于前景 还是背景,因此通道数为18。随后利用torch.view()函数将特征映射到 2×333×75,这样第一维仅仅是一个Anchor的前景背景得分,并送到 Softmax函数中进行概率计算,得到的特征再变换到18×37×50的维度, 最终输出的是每个Anchor属于前景与背景的概率。

即完成分类loss的预测值的求取过程。

在回归分支中,利用1×1卷积输出36×37×50的特征,第一维的36包 含9个Anchors的预测,每一个Anchor有4个数据,分别代表了每一个 Anchor的中心点横纵坐标及宽高这4个量相对于真值的偏移量。

即完成回归loss的预测值求取过程。

softmax的作用?sigmod有什么区别?

https://www.cnblogs.com/ymjyqsx/p/11379726.html

https://blog.csdn.net/yangwohenmai1/article/details/96156497?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

多分类与多标签分类

https://www.cnblogs.com/ai-learning-blogs/p/11748543.html

2.3 loss函数

分类部分:使用交叉熵损失函数

回归部分:使用smoothL1函数

smoothL1优势

https://cloud.tencent.com/developer/article/1441560

3. 生成Proposal

上文筛选256个Anchor是参与RPN训练的过程。

而RPN网络的输出的四个回归值△x,△y,△w,△h。

将网络中得到的回归偏移作用到Anchor上使Anchor更 加贴近于真值,并修剪超出图像尺寸的Proposal,得到最初的建议区 域。

在这之后,按照分类网络输出的得分对Anchor排序,保留前12000 个得分高的Anchors。由于一个物体可能会有多个Anchors重叠对应,因 此再应用非极大值抑制(NMS)将重叠的框去掉,最后在剩余的 Proposal中再次根据RPN的预测得分选择前2000个,作为最终的 Proposal。

3.1 Proosal再筛选

原因:

上一步生成的Proposal数量为2000个,其中仍然有很多背景框,真正包含物体的仍占少数,因此完全可以针对Proposal进行再一步筛选,过程与RPN中筛选Anchor的过程类似,利用标签与Proposal 构建IoU矩阵,通过与标签的重合程度选出256个正负样本。

优势:

·筛选出了更贴近真实物体的RoI,使送入到后续网络的物体正、负 样本更均衡,避免了负样本过多,正样本过少的情况。

·减少了送入后续全连接网络的数量,有效减少了计算量。

·筛选Proposal得到RoI的过程中,由于使用了标签来筛选,因此也 为每一个RoI赋予了正、负样本的标签,同时可以在此求得RoI变换到对应标签的偏移量,这样就求得了RCNN部分的真值。

实现过程:

首先计算Proposal与所有的物体标签的IoU矩阵,然后 根据IoU矩阵的值来筛选出符合条件的正负样本。筛选标准如下:

·对于任何一个Proposal,其与所有标签的最大IoU如果大于等于 0.5,则视为正样本。

·对于任何一个Proposal,其与所有标签的最大IoU如果大于等于0且 小于0.5,则视为负样本。

选出的正、负样本数量不一,在此设定正、 负样本的总数为256个,其中正样本的数量为p个。为了控制正、负样本 的比例基本满足1:3,在此正样本数量p不超过64,如果超过了64则从正 样本中随机选取64个。剩余的数量256-p为负样本的数量,如果超过了 256-p则从负样本中随机选取256-p个。

经过上述操作后,选出了最终的256个RoI,并且每一个RoI都赋予 了正样本或者负样本的标签。在此也可以进一步求得每一个RoI的真 值,即属于哪一个类别及对应真值物体的偏移量。

NMS理解

https://blog.csdn.net/fu6543210/article/details/80380660?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

三、 ROI Pooling

然而,由于RoI是由各种大小宽高不同的Anchors经过偏移修正、筛 选等过程生成的,因此其大小不一且带有浮点数,然而后续相连的全连 接网络要求输入特征大小维度固定,这就需要有一个模块,能够把各种 维度不同的RoI变换到维度相同的特征,以满足后续全连接网络的要 求,于是RoI Pooling就产生了。

Pooling 的过程关键在于生成7x7大小的区域特征。

两次量化:

第一次是生成的ROI大小 经过16倍下采样生成的特征图(向下取整)

假设大小为332×332,332/16=20.75。RoI Pooling的做法是直接将浮点数量化为整数,取整为20×20。

第二次(向下取整)

通过pooling,将20x20 变为7x7.

参考链接

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、faster RCNN 整体思路
  • 二、RPN的理解
    • 2.1 计算loss
      • 分类loss
      • 回归loss
      • anchor打标签
      • Anchor的生成方式
      • Anchor的筛选方法
      • Anchor 与GT 偏移量的求取过程:
    • 2.2 RPN卷积网络
      • softmax的作用?sigmod有什么区别?
      • 多分类与多标签分类
    • 2.3 loss函数
      • smoothL1优势
    • 3. 生成Proposal
      • 3.1 Proosal再筛选
      • 三、 ROI Pooling
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档