目标检测Faster-RCNN论文简读

前言

来了来了,接下来读到的这篇是计算机视觉领域非常重要的论文,之后有许多重要的视觉论文都有应用其中的思想。

Faster RCNN其实就是用RPN替换了SS算法,如果没有看过Fast RCNN建议先了解
Fast RCNN传送门

Faster R-CNN

摘要

In this work, we introduce a Region Proposal Network (RPN) that shares full-image convolutional features with the detection network, thus enabling nearly cost-free region proposals. An RPN is a fully convolutional network that simultaneously predicts object bounds and objectness scores at each position. The RPN is trained end-to-end to generate high-quality region proposals, which are used by Fast R-CNN for detection.

RPN是与检测网络共享全图的卷积特征,以此是无成本的。

简介

目前区域提议的方法都很慢,如SS和Edge Boxes。

提出了一个解决方案PRN,这个网络共享卷积层,达到减少工作量和计算时间

提出了锚框

相关工作

研究目前的方法

目标提议

  1. 基于超像素分组方法
  2. 基于滑动窗口方法

用于目标检测的深度网络

R-CNN、OverFeat和MultiBox

更快的R-CNN

简单分为两个模块,一是负责生成候选区域,二是对这些候选区进行检测。

对于这两个模块,开发了利用共享特征对两个模块进行联合训练的算法

区域提议网络

简称RPN,将任意尺寸的图像作为输入,输出一组矩阵目标提议,并每个提议都带有置信度分数。

为了生成区域建议,将在最后一个共享卷积层输出的卷积特征图上滑动一个小型网络。

每个滑动窗口被映射到一个低维特征(ZF为256-d,VGG为512-d)。这些特征送入两个并行的全连接层,分类和边界框。

锚点

就是在每个滑动窗口基础上,生成多个不同大小比例的框

平移不变性:如果目标平移了,提议也随之平移。而且是在共享的特征上平移,在锚框生成数k=9和VGG-16的情况下,输出层的参数是(512 * (4 + 2) * 9)。

损失函数

正标签分给两类锚框:

  1. 与真实边界框有最高交并比(IOU)重叠的锚点
  2. 一个与目标交并比重叠大于0.7的任何真实框
    非正锚框与所有的真实框交并比均低于0.3,则为负标签

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\}) = {1\over N_{cls}}{\sum_i}{L_{cls}(p_i,p^*i)} + \lambda {1\over N{reg}} \sum_i {p^*i L{reg}(t_i,t^*_i)} L({pi},{ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)

下面是对于RPN损失函数的解释:
i i i 是一个mini-batch中锚框的索引
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对应的真实框
L c l s L
{cls} Lcls用 s m o o t h L i smooth
{L_i} smoothLi

通过 N c l s N_{cls} Ncls、 N r e g N_{reg} Nreg和 λ \lambda λ归一化
λ \lambda λ默认为10
N c l s N_{cls} Ncls是一个最小批次中的所有样本数量为256
N r e g N_{reg} Nreg是anchor位置的个数(不是anchor个数)约为2400

对于边界框回归,有
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 ) , 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 ) 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),\\ 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),tx∗=(x∗−xa)/wa,ty∗=(y∗−ya)/ha,tw∗=log(w∗/wa),th∗=log(h∗/ha)

变量 x x x, x a x_a xa和 x ∗ x^* x∗为别是预测框、锚框和真实框,( y y y、 w w w、 h h h同理)

训练RPN

该RPN采用反向传播与随机下降(SGD)实现端对端训练。

"以图像为中心"的采样策略。

每个小批量样本均来自单张图像,其中包含大量正负样本锚点。容易偏向负样本。(如一张图片只有两三个目标,其他非目标就会很多,这就是负样本)。所以论文改为随机采样256个锚点,平衡正负样本的数量。

通过均值为0、标准差为0.01的正态分布中随机抽取权重来初始化。用于提取特征的卷积层(如 VGG-16 的前几层)并没有随机初始化,而是加载了在 ImageNet 数据集上已经训练好的权重。

ZF Net:这是一个较浅的网络,参数量较小,所以作者更新所有层的参数。

VGG-16:这是一个很深的网络,参数量巨大。为了节省显存(Conserve memory),作者只更新了从 conv3_1 层开始往后的层。

前 60,000 次迭代:学习率为 0.001(大步走,快速接近最优解)。

后 20,000 次迭代:学习率降为 0.0001(小步走,精细调整,防止震荡)。

总迭代次数:80,000 次(mini-batches)。

​​交替训练 (Alternating training)​​

​​理解:​​ 这是一种迭代式训练方法。先训练一个模块,用其输出训练另一个模块,然后用更新后的另一个模块重新初始化第一个模块并再次训练,如此交替进行,使两个模块逐渐适应彼此并收敛到共享特征。

​​翻译:​​

​​在这个解决方案中,我们首先训练 RPN,然后使用它生成的候选区域去训练 Fast R-CNN。​​

​​接着,用经过 Fast R-CNN 调优后的网络(主要指共享的卷积层权重)来初始化 RPN 网络(即替换掉 RPN 原有的初始化权重)。​​

​​然后重复这个过程(即用更新后的共享层再次训练 RPN,再用新的 RPN 候选区域训练 Fast R-CNN)。​​

​​这个方案被用于本文的所有实验中。​​ (作者最终选择的方法)

相关推荐
研究点啥好呢2 小时前
3月28日Github热榜推荐 | 你还没有为AI接一个数据库吗
数据库·人工智能·驱动开发·github
财迅通Ai2 小时前
探路者旗下通途半导体推出人工智能全栈压缩技术 撬动万亿级端侧人工智能市场
人工智能·探路者
cxr8282 小时前
OpenClaw Node 行业实践案例
人工智能·ai智能体·openclaw
不一样的故事1262 小时前
测试的核心本质是风险管控
大数据·网络·人工智能·安全
禁默2 小时前
从零吃透大语言模型 LLM,AI 应用开发必懂底层逻辑
人工智能·机器学习·语言模型·大模型
童话名剑2 小时前
YOLO v6(学习笔记)
yolo·目标检测·yolov6
空空潍2 小时前
Spring AI 实战系列(二):ChatClient封装,告别大模型开发样板代码
java·人工智能·spring
张较瘦_2 小时前
[论文阅读] AI + 软件工程 | 从1对1到规模化,Lacy用AI+专家代码漫游重构软件入职指导
人工智能·重构·软件工程
卖报的大地主2 小时前
视觉生成底层技术发展脉络与研究图谱
人工智能·深度学习·计算机视觉