当前位置:网站首页>Faster RCNN原理及复现代码
Faster RCNN原理及复现代码
2022-08-04 05:34:00 【热血厨师长】
原理

Faster RCNN主要可以分为四个内容:
- Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
- Region Proposal Networks。RPN网络用于生成区域建议框。该层通过softmax判断anchors属于前景或者背景,再利用预测框回归修正anchors获得精确的建议框。
- Roi Pooling。该层收集输入的feature maps和建议框,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
- Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
Conv layers
图中黑色方框的内容就是Conv layers,实际上就是传统图像分类中的经典网络,比如VGG、ResNet。在目标检测中是作为特征提取的骨干网络,它不直接参与框的预测,而是输出特征层。所以,它的最后一层不是输出类别数,而是输出一个宽高可变的特征层。
Region Proposal Networks
上图绿框内展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得前景和背景分类(通道数为18是2x9,一共有9个先验框,2是采用多分类交叉熵,若采用二元交叉熵就是1),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal(这里同理是4x9,4则是代表候选框在rpn上的坐标)。这里的proposal也就是建议框,在建议框内的物体在图中是属于前景的。所以在RPN网络这一部分,模型只会分出前景和背景。
而最后的proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
Roi Pooling
将输入的特征层看作是图像,用rpn生成的候选框截取的图像,然后resize成 pool_size * pool_size的大小。这样处理后,即使大小不同的proposal输出结果都是固定大小,实现了固定长度输出。
Classification
从ROI Pooling层获取到固定大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:
- 通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
- 再次对proposals进行bounding box regression,获取更高精度的rect box
但在实际的代码中,还需要对ROI Pooling层的输出进行常规的卷积、AveragePooling、Flatten的操作后才能进行最后的物体具体分类和预测框回归操作。所以从整体上看来,Faster RCNN的网络是分成两步走的,第一步是backbone->rpn输出物体大致位置的建议框,第二步是对建议框里面的内容进行详细的分类和位置预测。这也就是Two-Stage目标检测网络的架构了。
如何训练Faster RCNN
Faster RCNN的训练也是分两步走
- 进行backbone-rpn的训练,此时会进行第一次反向传播,并且rpn网络会输出一个预测结果作为后续classifier的数据输入,如果这里没有训练好进而会导致classifier的训练没有数据输入,所以有时候会直接跳过这一步。
- 根据rpn网络输出结果对classifier进行训练。
那么值得一提的是,在训练过程中,训练数据有可能会存在正负样本不均衡的情况,如背景数量远远大于前景数量或者情况相反。那么Faster RCNN则会将正负样本的数量都限制在128个,如果图像中的正样本少于128个,将使用负样本填充小批量数据。

代码
Reference
边栏推荐
- RuntimeError: You called this URL via POST, but the URL doesn‘t end in a slash and you have APPEND_S
- sql常用函数
- 更改软件的默认安装位置
- 通过socks5代理下载webrtc源码错误:curl: (7) Can't complete SOCKS5 connection xx.xx.xx.xx
- 2022在 Go (Golang) 中使用微服务的系统课程
- C# 剪裁图片内容区域
- 无一技之长学什么可以做到月入上万?
- 狗都能看懂的Vision Transformer的讲解和代码实现
- Uos统信系统 DISK(RAID+LVM)
- Flask request 返回网页中 checkbox 是否选中
猜你喜欢

C# 剪裁图片内容区域

狗都能看懂的Self-Attention讲解

【C语言】数组名是什么

Memory limit should be smaller than already set memoryswap limit, update the memoryswap at the same

你要悄悄学网络安全,然后惊艳所有人

解决腾讯云DescribeInstances api查询20条记录以上的问题

file editor
![虚幻引擎 5 完整指南[2022六月最新课程学习内容]](/img/b3/fe90bca8166108e2e577d5a5e2ea6a.png)
虚幻引擎 5 完整指南[2022六月最新课程学习内容]

JUC锁框架——基于AQS的实现,从ReentrantLock认识独占和共享

Fabric v1.1 environment construction
随机推荐
为什么不使用VS管理QT项目
Unity Day03
JVM intro
CMDB 阿里云部分实现
ZYNQ之FPGA LED 灯闪烁实验
POI及EasyExcel
webrtc代码解读一:音频数据的接收解码播放过程
vim的介绍
【HIT-SC-MEMO7】哈工大2022软件构造 复习笔记7
JUC锁框架——初识AQS
普通用户 远程桌面连接 服务器 Remote Desktop Service
IP 核之 MMCM/PLL 实验
安全漏洞是如何被发现的?
JUC锁框架——基于AQS的实现,从ReentrantLock认识独占和共享
沉浸式体验参加网络安全培训班,学习过程详细到底!
实现高并发服务器(二)
并发概念基础:并发、同步、阻塞
新冠病毒和网络安全的异同及思考
Vmmem process (WSL2) consumes huge amount of memory
狗都能看懂的CenterNet讲解及代码复现