当前位置:网站首页>Faster R-CNN 论文总结
Faster R-CNN 论文总结
2022-08-09 14:57:00 【明天一定早睡早起】
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
核心是region proposal network(RPN)。本质上是把fast r-cnn当中region proposal的方法从selective search算法替换成RPN。论文提到的训练方法现在已经不用了,pytorch的官方实现当中直接进行了联合训练。
摘要
当前(faster r-cnn提出前)SOTA的目标检测网络需要region proposal算法假设目标位置。如SPPnet和Fast R-CNN都尝试减少这些检测网络的运行时间,这就暴露了region proposal的计算是目标检测的一个瓶颈。作者引入一个region proposal network(RPN),与检测网络一起共享全图的卷积特征,因此几乎可以做到无代价的region proposal。RPN网络是一个全卷积网络,可以同时预测目标在每个位置的边界以及得分。RPN可以被端到端地训练来生成高质量的region proposal,然后通过fast r-cnn进行检测。
介绍
proposal是当前SOTA检测算法的计算瓶颈。
通过深度网络来计算proposal既优雅又高效,作者引入RPN并与SOTA目标检测网络共享卷积层。计算proposal的代价很小(10ms/张)。
用faster r-cnn的提取卷积特征图同样可以用于生成region proposal。在这些卷积特征的基础上添加两层额外的卷积层:一层用于将卷积特征图编码至一个256d的特征向量,另一层在256d特征向量(原文说是在每个conv map position,但是看结构图是256d特征向量)上生成k个region proposal的目标得分以及边界回归。
RPN也是一种全卷积网络。同样可以进行端到端的训练。
RPN

图左是RPN,图右是使用RPN得到建议框的一些例子。
RPN以任意尺寸图像作为输入,输出一组建议框和对应的目标分数。这是通过一个全卷积网络实现的。
为了生成region proposal,我们在共享的最后一层卷积层(一般是某个模型的最后一个卷积层,比如ZF、VGG16)使用一个小网络(3x3的滑动窗,看视频解释是说是用的3x3卷积)进行滑动。该网络和输入的卷积特征图进行全连接。每个滑动窗口都映射到成低维向量(ZF为256d,VGG为512d)。这个向量被输入至两个同级全连接层,即一个是边界回归层(reg),另外一个是分类层(cls)。
anchors
在每个滑动窗口位置(也就是中心点,RPN里面3x3窗口内蓝色的小点),同时预测k个region proposal(可以理解成anchor,后面都当作是anchor),因此reg层编码k个anchor会得到4k个输出(也就是边界框回归输出的4个参数,x和y的偏移量,w和h的缩放因子)。cls层得到2k个输出来估计前景/背景的概率。
三种尺度(面积) { 12 8 2 , 25 6 2 , 51 2 2 } \{128^2,256^2,512^2\} { 1282,2562,5122},(视频里面说是由经验所得,论文好像也没提到?)
三种比例 { 1 : 1 , 1 : 2 , 2 : 1 } \{ 1:1, 1:2, 2:1 \} { 1:1,1:2,2:1}
每个位置在原图上都对应有 3 × 3 = 9 3\times3=9 3×3=9个anchor
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
region proposal的损失函数
为了训练RPN,为每个anchor分配一个二进制类别的标签(即是否为目标,也就是上面提到的前景/背景)。定义两种情况为正标签:
- 和ground truth box有着最大IOU的anchor
- 和任何ground truth box的IOU大于0.7的anchor
需要注意的是一个ground truth box可能会对应多个anchor。而负标签定义为:对于所有ground truth box,IOU小于0.3的anchor。
不满足正负标签条件的anchor均被舍弃,不参与训练。
RPN的损失函数:
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+\lambda\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*) L({ pi},{ ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)
p i p_i pi表示第i个anchor预测为真实标签的概率
p i ∗ p_i^* pi∗当为正样本时为1,当为负样本时为0
t i t_i ti表示第i个anchor的边界框回归参数
t i ∗ t_i^* ti∗表示第i个anchor对应的ground truth bbox的边界框回归参数
N c l s N_{cls} Ncls表示一个mini-batch中所有样本数量,论文为256
N r e g N_{reg} Nreg表示中心点的个数,约2400
λ \lambda λ为超参数,论文为10
t x = ( x − x a ) / w a , t y = ( y − y a ) / h a , t w = log ( w / w a ) , t h = l o g ( h / h a ) t_x=(x-x_a)/w_a,t_y=(y-y_a)/h_a,t_w=\log(w/w_a),t_h=log(h/h_a) tx=(x−xa)/wa,ty=(y−ya)/ha,tw=log(w/wa),th=log(h/ha)
t x ∗ = ( x ∗ − x a ) / w a , t y ∗ = ( y ∗ − y a ) / h a , t w ∗ = log ( w ∗ / w a ) , t h ∗ = l o g ( h ∗ / h a ) t_x^*=(x^*-x_a)/w_a,t_y^*=(y^*-y_a)/h_a,t_w^*=\log(w^*/w_a),t_h^*=log(h^*/h_a) tx∗=(x∗−xa)/wa,ty∗=(y∗−ya)/ha,tw∗=log(w∗/wa),th∗=log(h∗/ha)
x,y,w,h表示box中心(不是左上角)的坐标、宽度和高度。x表示预测box, x a x_a xa表示anchor box, x ∗ x^* x∗表示ground truth box。可以认为是anchor box回归到附近的ground truth box。个人理解相当于通过输入 x a x_a xa输出x,然后得到误差 x − x a x-x_a x−xa,根据 x ∗ − x a x_*-x_a x∗−xa不断修正x。
边栏推荐
猜你喜欢

九、【Vue-Router】缓存路由组件 keep-alive标签

PAT1027 Printing Hourglass
![[Deep learning] attention mechanism](/img/ef/108e6117546dc7fa4b634cd45c3fad.jpg)
[Deep learning] attention mechanism

Linux安装mysql8.0详细步骤--(快速安装好)

仪表盘

深度神经网络中的多任务学习研究综述

如何正确使用防关联浏览器
![[Elementary C language] Detailed explanation of branch statements](/img/5c/9ae0fc48e021d1285badf295dda4be.png)
[Elementary C language] Detailed explanation of branch statements

At the beginning of the C language order 】 【 o least common multiple of three methods

"Deep learning" evaluation index of target detection
随机推荐
Postgraduate Work Weekly (Week 6)
YOLOV1详解
【研究生工作周报】(第十周)
升职加薪之SQL索引
模仿微信金钱输入框规则(修复7.0手机崩溃)
微信小程序封装api
(精中求精) rem适配布局
More than pytorch from zero to build neural network to realize classification (training data sets)
《平凡的世界》(书评)
XGB系列-XGB参数指南
关于亚马逊的坑你知道几个?
【Postgraduate Work Weekly】(Week 8)
记一次解决Mysql:Incorrect string value: ‘\xF0\x9F\x8D\x83\xF0\x9F...‘ for column 插入emoji表情报错问题
自定义指令,实现默认头像和用户上传头像的切换
Retrofit2 初印象?
Dagger2从0基础使用,到单例注入的正确姿势
Sequelize配置中的timezone测试
响应式布局总结
研究生工作周报(第六周)
[Deep Learning] Original Problem and Dual Problem (6)