Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >faster RCNN 学习记录

faster RCNN 学习记录

原创
作者头像
yzh
修改于 2020-08-06 03:10:50
修改于 2020-08-06 03:10:50
6710
举报
文章被收录于专栏: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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于Pytorch构建Faster-RCNN网络进行目标检测(一)
尽管R-CNN是物体检测的鼻祖,但其实最成熟投入使用的是faster-RCNN,而且在pytorch的torchvision内置了faster-RCNN模型,当然还内置了mask-RCNN,ssd等。既然已经内置了模型,而且考虑到代码的复杂度,我们也无需再重复制造轮子,但对模型本身还是需要了解一下其原理和过程。
python与大数据分析
2023/09/06
1.2K0
基于Pytorch构建Faster-RCNN网络进行目标检测(一)
【个人整理】faster-RCNN的训练过程以及关键点总结
前言:faster-RCNN是区域卷积神经网络(RCNN系列)的第三篇文章,是为了解决select search方法找寻region proposal速度太慢的问题而提出来的,整个faster-RCNN的大致框架依然是沿袭了fast-RCNN的基本能结构,只不过在region proposal的产生上面应用了专门的技术手段——区域推荐网络(region proposal network,即RPN),这是整个faster最难以理解的地方,本文也将以他为重点进行说明。鉴于篇幅较长,本次系列文章将分为3篇来说明:
小草AI
2019/06/02
17.6K1
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
RCNN全称为Regions with CNN Features,是将深度学习应用到物体检测领域的经典之作,并凭借卷积网络出色的特征提取能力,大幅度提升了物体检测的效果。而随后基于RCNN的Fast RCNN及Faster RCNN将物体检测问题进一步优化,在实现方式、速度、精度上均有了大幅度提升。
肉松
2020/07/27
1.1K0
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
【个人整理】faster-RCNN的核心构件——RPN区域推荐网络(二)
前言:faster-RCNN是区域卷积神经网络(RCNN系列)的第三篇文章,是为了解决select search方法找寻region proposal速度太慢的问题而提出来的,整个faster-RCNN的大致框架依然是沿袭了fast-RCNN的基本能结构,只不过在region proposal的产生上面应用了专门的技术手段——区域推荐网络(region proposal network,即RPN),这是整个faster最难以理解的地方,本文也将以他为重点进行说明。鉴于篇幅较长,本次系列文章将分为3篇来说明:
小草AI
2019/06/02
7.4K0
Faster R-CNN
Fast-RCNN基本实现端对端(除了proposal阶段外),下一步自然就是要把proposal阶段也用CNN实现(放到GPU上)。这就出现了Faster-RCNN,一个完全end-to-end的CNN对象检测模型。
CreateAMind
2018/07/24
5340
Faster R-CNN
faster-rcnn原理介绍
本博客大部分参考http://blog.csdn.net/zy1034092330/article/details/62044941,其中夹杂着自己看论文的理解
全栈程序员站长
2022/11/09
5420
faster-rcnn原理介绍
深度学习-Faster RCNN论文笔记
在本文中,我们展示了算法的变化——用深度卷积神经网络计算区域提议——导致了一个优雅和有效的解决方案,其中在给定检测网络计算的情况下区域提议计算接近领成本。为此,我们引入了新的区域提议网络(RPN),它们共享state-of-the-art目标检测网络的卷积层。通过在测试时共享卷积,计算区域提议的边际成本很小(例如,每张图像10ms)。
肉松
2020/08/06
9390
深度学习-Faster RCNN论文笔记
【Faster R-CNN】3. Faster RCNN代码解析第二弹
回顾一下上节推文的内容,我们将Faster RCNN的数据预处理以及实现细节弄清楚了,并将其总结为了下图:
BBuf
2020/05/19
1.3K0
区域候选网络RPN
图片在输入网络后,依次经过一系列卷积+ReLU得到的51×39×256维feature map,准备后续用来选取proposal。
代码的路
2022/06/18
1K0
区域候选网络RPN
Faster RCNN系列介绍
RCNN网络是Ross B. Girshick大神2014年提出的,是第一个基于深度学习的目标检测算法,是基于深度特征的。它跟传统的目标识别不同的就是使用深度学习的特征代替了传统的基于低层次的颜色、纹理的特征提取。
算法之名
2022/03/24
1.1K0
Faster RCNN系列介绍
最全综述 | 图像目标检测
图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车, 还要在图片中标记出它的位置, 用边框或红色方框把汽车圈起来, 这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。
AI算法与图像处理
2019/07/11
1.4K0
最全综述 | 图像目标检测
fasterrcnn详解_faster RCNN
paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection
全栈程序员站长
2022/11/10
1K0
fasterrcnn详解_faster RCNN
Faster RCNN:RPN,anchor,sliding windows
paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks Github源码pyth
MachineLP
2018/01/09
2.5K0
Faster RCNN:RPN,anchor,sliding windows
【深度学习】深度图像检测算法总结与对比
一. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation
黄博的机器学习圈子
2023/01/10
1.2K0
【深度学习】深度图像检测算法总结与对比
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)
Minerva
2020/05/25
1.3K0
深入浅出理解Faster R-CNN
。这个方法显然存在一些问题,比如当物体是不同大小有不同的宽高比,那训练一个效果很好的检测模型将会是非常复杂的(复杂的原因有两个,一个是如果整个图片很大,那么预测出的边界框坐标的绝对值变化很大,不容易拟合;第二个原因则是框的大小长宽都在变化,加大了我们的拟合难度)。另一个问题则是会存在一些无效的预测,比如当预测
CristianoC
2020/06/02
6470
faster rcnn 详解
经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
全栈程序员站长
2021/06/17
8040
faster rcnn 详解
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
来源丨https://zhuanlan.zhihu.com/p/145842317
3D视觉工坊
2020/11/11
1.9K0
你真的理解Faster RCNN吗?捋一捋Pytorch官方Faster RCNN代码
【技术综述】万字长文详解Faster RCNN源代码
作为深度学习算法工程师,如果你想提升C++水平,就去研究caffe源代码,如果你想提升python水平,就去研究faster-rcnn源代码吧,caffe源代码我们已经解读过了,今天这一期就解读faster-rcnn源代码
用户1508658
2019/07/26
2.6K0
【技术综述】万字长文详解Faster RCNN源代码
faster-RCNN原理及相应概念解释
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
机器学习AI算法工程
2019/10/29
9830
faster-RCNN原理及相应概念解释
相关推荐
基于Pytorch构建Faster-RCNN网络进行目标检测(一)
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档