前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
转自 http://blog.csdn.net/evandeng2009/article/details/49814097
@凌晨
2020/05/28
2.9K0
CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
LVM扩容操作
可以看到,现有系统是一块硬盘sda,共64G,并分成两个分区,sda1直接挂载到/boot目录,sda2分区则交给了LVM来管理,并挂载到根目录/和/home目录
全栈程序员站长
2022/08/31
6.6K0
LVM扩容操作
linux使用--根目录空间不足,追加空间到根目录下
最近在爬虫,要保存大量的源码在linux上,最后发现根目录不足,想要追加根目录的空间,我的系统是centos7,还好之前分配了一整个系统盘给centos,有200g,根目录目前使用了50g,现在从home目录分配100g给root目录,剩50g给自己,也就是home目录,我目前就给home留了40g,之前都给的时候出了些小问提,还没琢磨出来,就少分一点,我们先用着,可能是 Free  PE 的问题 。如果是安装时候硬盘空间用完了,也可以进行再挂载一个硬盘进行追加空间。
拓荒者
2019/08/22
16.1K0
linux使用--根目录空间不足,追加空间到根目录下
Lvm管理
逻辑卷管理LVM(Logical Volume Manager)是Linux系统的一种管理硬盘分区机制,具有动态管理硬盘的能力。本文介绍了如何通过LVM在多块云盘上创建一个逻辑卷,适用于Linux实例。
mikelLam
2022/10/31
9210
Linux磁盘管理之LVM快速入门配置
描述:LVM——Logical Volume Manager就是动态卷管理在Linux2.4内核以上实现的磁盘管理技术,它可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。
全栈工程师修炼指南
2020/10/26
3.2K0
Linux磁盘管理之LVM快速入门配置
Linux 温习(六): LVM 磁盘
逻辑卷管理器(Logical volume Manager)是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整。
高久峰
2023/09/18
7320
Linux 温习(六): LVM 磁盘
CentOS系统将 /home目录合并到 /根目录的图文教程
我记得在最新安装麒麟Linux服务器的时候需要先格式化硬盘,然后挂载到根目录,但是由于麒麟linux服务器没有部分的镜像源,所以我将其更换了Centos7系统,隐隐约约记得也做了格式化和分区,最近发现磁盘空间显示快满了,仔细一看系统目录仅有50GB,好吧可能真的是我忘记了,无论什么原因,这点空间肯定是不够的,毕竟重新迁移宝塔的模板和目录较为费事而且还可能出现一些未知的错误,所以需要移动/home目录转移到根目录下,按照百度教程操作没有问题,重新记录一下移动过程。
李洋博客
2023/03/23
7K1
CentOS系统将 /home目录合并到 /根目录的图文教程
Linux 温习(六): LVM 磁盘
逻辑卷管理器(Logical volume Manager)是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整。
陈大剩博客
2023/02/17
3.4K0
Linux 温习(六): LVM 磁盘
基于LVM的磁盘管理
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
耕耘实录
2018/12/20
1.9K0
Linux磁盘管理之LVM快速入门配置
描述:LVM——Logical Volume Manager就是动态卷管理在Linux2.4内核以上实现的磁盘管理技术,它可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。
全栈工程师修炼指南
2022/09/28
1.9K0
Linux磁盘管理之LVM快速入门配置
Linux磁盘扩容 之 LVM 扩容之路
众所周知,我们大多数服务都是跑在 Linux上的,因为Linux命令行形式的特性,也导致了很多开发者只喜欢把Linux当做跑服务的机器,并不作为日常的使用。这样导致了我们只能记得常用的部署命令,但遇到一些复杂的Linux运维就不知如何下手了。这不,我这两天就遇到了服务器磁盘不足的问题,一开始只想Google一下快速搞定,结果还是得补补Linux中LVM的这块知识点才可以。为了方便后人快速扩容,特此记录。
全栈程序员站长
2022/08/28
6.2K0
Linux磁盘扩容 之 LVM 扩容之路
Linux 虚拟机根目录磁盘空间扩容
因个人学习需要,两三年前在笔记本上安装了一套虚拟机但磁盘空间很小,只有30g,安装了一个 Oracle 12c 就已经没剩下多少空间了,也没其可清理的垃圾文件,故只有扩容了。以前扩容使用的是单独添加一块盘,感兴趣的可戳此了解[Oracle 12C 补丁升级中出现磁盘不足的解决办法],本次则直接在原来的磁盘基础上扩容。
JiekeXu之路
2022/07/14
5.7K0
Linux 虚拟机根目录磁盘空间扩容
Centos对home目录进行扩容
-- 通过df -h 查看,/home目录大小不足。通过增加一块硬盘,扩大/home大小。
jwangkun
2022/01/09
6.5K0
Linux LVM --- 硬盘扩容
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,在Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和 分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷(volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。
Kevin song
2020/03/24
27.1K0
Linux LVM --- 硬盘扩容
uos-server-20-1060e 文件系统LVM逻辑卷管理
LVM是逻辑盘卷管理(LogicalVolumeManager)的简称,在Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,扩容文件系统,LVM将若干个磁盘分区连接为一个整块的卷(volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logicalvolumes),并进一步在逻辑卷组上创建文件系统。
Kevin song
2024/03/02
5820
uos-server-20-1060e 文件系统LVM逻辑卷管理
centos7.5扩展根目录下空间大小
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
拓荒者
2019/08/22
3.6K0
centos7.5扩展根目录下空间大小
linux磁盘挂载和扩容。
扩容: 1、磁盘分区 [root@ecs-7837 ~]# fdisk /dev/vda
@凌晨
2020/05/28
6.5K0
linux磁盘挂载和扩容。
磁盘扩容
磁盘扩容 磁盘分区 parted /dev/sdb # GPT就是GRUB分区表,如果是MBR,最大支持2T分区 mktable gpt # 创建一个 2G 的磁盘空间 mkpart primary 0K 2048G # 给1好分区更改为 lvm 格式 toggle 1 lvm centos7 xfs 文件系统 lvm 扩展 因为Centos7默认文件系统是xfs文件系统类型,在xfs文件系统中,只能增大分区而不能减小。 Centos6,Centos5系统都是ext4,ext3文件系统。所以操作方法有一点
张琳兮
2020/08/01
2.8K0
Linux下对lvm逻辑卷分区大小的调整(针对xfs和ext4不同文件系统)
当我们在安装系统的时候,由于没有合理分配分区空间,在后续维护过程中,发现有些分区空间不够使用,而有的分区空间却有很多剩余空间。如果这些分区在装系统的时候使用了lvm(前提是这些分区要是lvm逻辑卷分区),那么就可以轻松进行扩容或缩容!不同文件系统类型所对应的创建、检查、调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做一记录: ----------------------------------------------------------------------
洗尽了浮华
2018/01/22
4.2K0
CentOS7默认安装的/home中转移空间到根目录
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
拓荒者
2019/08/22
2.4K0
相关推荐
CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
更多 >
LV.1
腾讯云TDP会员
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档