Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(2015)阅读笔记

原文链接

一、解决问题

2016年前最前沿水平的物体检测网络是基于候选算法来预测物体位置的。像SPPnet和Fast R-CNN这些先进的算法减少了检测网络的运行时间,但是RP(Region Proposal)的计算却仍然是瓶颈所在。

二、解决方法

候选区域网络(RPN,region proposal network):该网络与检测网络共享全图像的卷积特征,从而使近乎零成本的区域提出成为可能。

(一)整体结构

Faster RCNN大体由两部分构成,一是RPN结构,另一个是Fast RCNN结构。整体思路是使用RPN结构代替Fast RCNN的SS算法部分来提取RP。如下图所示。
在这里插入图片描述
结构细节图如下。
在这里插入图片描述
测试时的过程:原始图像输入至卷积结构(红框1)进行特征提取,得到整张图像的特征图。将此特征图送入RPN(红框2),经过一个3x3的卷积后分两条路线进行回归(对位置进行初步的纠正)和分类(找到想要的前景,作为感兴趣域,注意,RPN中分类至区分前景和背景,不对前景进行细致分类),进而得到RPs位置信息。根据这些位置信息在之前得到的特征图上提取对于的ROIs,再分别经过ROI池化层抽取到固定大小的特征。分送入后面的全连接层进行分类(对ROI进行识别)和回归(精准纠正位置信息)。

(二)RPN

RPN也可看做两部分,一是与Fast RCNN公用的卷积部分(红框1),二是用来实现寻找RP功能的独有部分(红框2)。工作的详细流程如下:
1.卷积部分对输入图像进行特征图的提取。
2.对1步骤中得到的特征图进行3x3的卷积操作,相当于每个点又融合了周围3x3的空间信息,扩大了感受野。得到新的特征图。
3.对2步骤得到的特征图按照锚点提取滑动窗。每个特征图上的点提取三个尺度不同长宽比共k个滑动窗(默认k=9,对应9个锚点,位置一样,但形状和大小不一样)。
4.对k个滑动窗分两路进行操作。
第一路为分类:将滑动窗进行1x1卷积再经过一个二分类的softmax得到是前景或者背景的对应概率,也就是说对于每个滑动窗分别得到前景和背景的2个概率得分。
第二路为回归:将滑动窗进行1x1卷积直接进行位置移动的回归,每个滑动窗分别得到窗口中心坐标和窗口的宽度、高度(x,y,w,h)4个参数的回归结果。
此处RPN的回归同Fast R-CNN中的bounding-box回归相比数有区别的。 Fast R-CNN中基于RoI的bounding-box回归的输入是任意size的RoIs进行Pool操作提取后的(size相同且固定)。而在RPN中,用来bounding-box回归的输入是拥有k个size的锚点,为了解决不同尺度变化的问题,同时训练和学习了k个不同的回归器,这k个回归器并不分享权重。
5.做NMS(非极大值抑制,即根据分类的得分对这些ROI进行排序,然后选择其中的前N个ROI);
RPS输出的维度为:2N+4N = 6N

(三)锚点

锚点是在红框2中经过3x3卷积后特征图上的每个点的位置对应的不同尺度和纵横比下的匹配。下图中的256-d表示特征图的通道数为256。对每个滑动位置使用3个尺度和3个纵横比产生k = 9个锚点。对于大小为W x H(通常为~2,400)的卷积特征图,总共有W x H x k个锚点。
在这里插入图片描述

(四)训练

1.四步交替训练的方式

第一步:训练RPN。该网络使用ImageNet预先训练的模型对CNN部分进行初始化,并针对区域提出的任务进行微调端对端。
第二步:我们使用由步骤1 RPN生成的RP作为Fast R-CNN的数据,并对其单独训练。该检测网络也由ImageNet预训练模型初始化。此时,两个网络不共享卷积层。
第三步,我们使用Fast R-CNN网络来初始化RPN,并进行训练,但固定了共享卷积层,只调整了RPN特有的层。现在这两个网络共享卷积层。
第四步:保持共享卷积层固定,我们微调Fast R-CNN的独特层。因此,两个网络共享相同的卷积层并形成统一的网络。
可以运行类似的交替训练以进行更多迭代,但实验显示改进幅度很小。

2.损失函数

(1).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({pi},{ti})=\frac{1}{N_{cls}}∑_{i}L_{cls}(p_{i},p^{*}_{i})+λ\frac{1}{N_{reg}}∑_{i}p^{*}_{i}Lreg(ti,t^{*}i) L(pi,ti)=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)其中, i i i是一个小批量数据中锚点的索引, p i p_{i} pi是锚点 i i i作为目标的预测概率。如果锚点标签为正,真实标签 p i ∗ p^{*}_{i} pi为1,如果标签为负,则为0。 t i t_{i} ti是表示预测边界框4个参数化坐标的向量,而 t i ∗ t_{i}^{*} ti是与正锚点相关的真实边界框的向量。 N c l s N_{cls} Ncls为一个mini-batch中经过红框2中3xe卷积后特征图格子的数量。 N r e g N_{reg} Nreg为一个mini-batch中锚点的数量。 λ λ λ默认为10,所以 1 N c l s : = λ 1 N r e g \frac{1}{N_{cls}} := λ\frac{1}{N_{reg}} Ncls1:=λNreg1

分类损失函数

L c l s L_{cls} Lcls是两个类别上(目标或不是目标)的对数损失。

回归损失函数

L r e g ( t i , t i ∗ ) = S m o o t h L 1 ( t i − t i ∗ ) L_{reg}(t_{i},t^{*}_{i})=Smooth_{L1}(t_{i}−t^{*}_{i}) Lreg(ti,ti)=SmoothL1(titi) s m o o t h L 1 ( x ) = { ( x ) = 0.5 x 2 , ∣ x ∣ &lt; 1 ∣ x ∣ − 0.5 , o t h e r w i s e s smooth_{L1}(x)= \begin{cases} \mathcal(x)=0.5x^{2}, &amp;\text{$|x|&lt;1$}\\ \mathcal|x|−0.5, &amp;\text{$otherwises $} \end{cases} smoothL1(x)={(x)=0.5x2,x0.5,x<1otherwises p i ∗ L r e g p^{*}_{i}L_{reg} piLreg表示回归损失仅对于正锚点激活。cls和reg层的输出分别由 p i p_{i} pi t i t_{i} ti组成。

(2)Fast RCNN损失函数
总体损失函数

L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t_{u} ,v) = L_{cls}(p,u) + λ[u ≥ 1]L_{loc}(t u ,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)当u=0时(背景)λ=0,即识别为背景的情况下,位置回归不参与损失函数计算。当u=1,2,3,…,k(第1,2,3,…,k类)时,λ=1。

分类损失函数

交叉熵损失函数。因为标签是one-hot形式,所以只由真实类别u对应的softmax结果概率觉得。 L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-logp_{u} Lcls(p,u)=logpu

位置回归损失函数

smooth L1损失函数,比较真实分类u对应的预测平移缩放参数 t u = ( t u x , t u y , t u w , t u h ) t_{u}=(t_{ux},t_{uy},t_{uw},t_{uh}) tu=(tux,tuy,tuw,tuh) 和真实平移缩放参数 v = ( v x , v y , v w , v h ) v=(v_{x},v_{y},v_{w},v_{h}) v=(vx,vy,vw,vh) 的差距:
L l o c ( t u , v ) = ∑ i ∈ x , y , w , h s m o o t h L 1 ( t u i − v i ) L_{loc}(t_{u},v)=∑_{i∈{x,y,w,h}}smooth_{L1}(t_{ui}−v_{i}) Lloc(tu,v)=ix,y,w,hsmoothL1(tuivi) s m o o t h L 1 ( x ) = { ( x ) = 0.5 x 2 , ∣ x ∣ &lt; 1 ∣ x ∣ − 0.5 , o t h e r w i s e s smooth_{L1}(x)= \begin{cases} \mathcal(x)=0.5x^{2}, &amp;\text{$|x|&lt;1$}\\ \mathcal|x|−0.5, &amp;\text{$otherwises $} \end{cases} smoothL1(x)={(x)=0.5x2,x0.5,x<1otherwises

三、效果

更快更准,真正意义上实现了端到端的训练。

参考

Faster R-CNN论文翻译——中英文对照
Faster R-CNN论文详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNNFaster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值