浅读Fast R-CNN

浅读Fast R-CNN

(参考自:https://arxiv.org/abs/1504.08083

摘要

论文:《Fast R-CNN》

论文地址:https://arxiv.org/abs/1504.08083

代码开源:https://github.com/rbgirshick/fast-rcnn

内容简述:

该文提出一种快速的基于区域的卷积网络方法(fast R-CNN)用于目标检测。相比之前的成果,Fast R-CNN训练VGG16网络比R-CNN快9倍,测试时间快213倍,并在PASCAL VOC上得到更高的精度。与SPPnet相比,fast R-CNN训练VGG16网络比他快3倍,测试速度快10倍,并且更准确。

思路

该网络将整个图像与一组候选框作为输入,采用几个卷积层和最大池化层来处理整个图像,产生卷积特征图(feature map)。然后,对于每个bounding box,ROI池化层从特征图中提取固定长度的特征向量。然后通过一系列全连接层(FCs),最终分成两个同级输出层:

  1. 输出N种类别加上一个背景类别的softmax概率估计。
  2. 将N种类别进行输出,且每种类别输出四个实数值(表示该类别的检测框的修正)。

与R-CNN框架对比不同处:

  1. 在卷积层后加了一个ROI pooling Layer
  2. 损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

流程结构:

一、ROI Pooling

该层使用最大池化将任何有效的ROI内的特征转化成具有HxW的固定空间范围的小特征图,其中HW是层的超参数,独立于任何特定的ROI。RoI是卷积特征图中的一个矩形窗口。 每个RoI由指定其左上角(r,c)及其高度和宽度(h,w)的四元组(r,c,h,w)定义。

RoI最大池化通过将大小为h×w的RoI窗口分割成H×W块,每块的大小约为h/H×w/W,然后对每一块执行最大池化,使这部分大小不一的候选框转变成大小统一的数据,并将输出合并到相应的输出网格单元中,送入下一层。

ROI pooling的反向传播(backward)

对于原始图像:我们将Xi看做第i个激活输入,Yj看做第j个输出:
∂ y ∂ x i = { 0 δ ( i , j ) =  false  ∂ L ∂ y j δ ( i , j ) = true \frac{\partial y}{\partial x_{i}}=\left\{\begin{array}{cc}{0} & {\delta(i, j)=\text { false }} \\ {\frac{\partial L}{\partial y_{j}}} & {\delta(i, j)=\text {true}}\end{array}\right. xiy={0yjLδ(i,j)= false δ(i,j)=true
判决函数 δ(i,j) 表示i节点是否为j节点选为最大值输出。当Xi不在Yj范围内或者Xi不是最大值时,i节点不被选中输出。

对于ROI:一个输入节点可能和多个输出节点相连。设 Xi为输入层的节点,Yrj为第 r个RoI层的第 j个输出节点:
∂ L ∂ x i = ∑ r , j δ ( i , r , j ) ∂ L ∂ y r j \frac{\partial L}{\partial x_{i}}=\sum_{r, j} \delta(i, r, j) \frac{\partial L}{\partial y_{r j}} xiL=r,jδ(i,r,j)yrjL
判决函数 δ(i,r,j) 表示i节点是否被候选区域r的第j个节点选为最大值输出。Loss对于Xi的梯度等于所有相关的最后一层梯度之和。

二、预训练网络的初始化

作者实验了三个预训练的ImageNet网络:

  1. R-CNN的AlexNet
  2. VGG_CNN_M_1024
  3. VGG16

1的宽度与深度较小,所以将这个模型称为模型S(小模型),2的深度与1相同,但是更宽,所以将这个模型称为模型M(中等模型),3的模型是最大的,所以称为模型L。)

每个网络有五个最大池化层和五到十三个卷积层。当预训练网络初始化fast R-CNN网络时,其经历三个过程。

  1. 最后的最大池化层由RoI池层代替,其将H和W设置为与网络的第一个全连接层兼容的配置(例如,对于VGG16,H=W=7)。
  2. 网络的最后一格全连接层和Softmax(其被训练用于1000类ImageNet分类)被替换为前面描述的两个同级层(全连接层和K+1个类别的Softmax以及类别特定的检测框回归)。
  3. 网络被修改为采用两个数据输入:图像的列表和这些图像中的RoI的列表。

三、对网络的微调

当每个训练样本(ROI)来自不同的图像时,通过SPP层的反向传播非常低效,R-CNN亦是如此。低效部分是因为每个ROI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。

所以作者提出了利用训练期间的特征进行共享的概念。在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样N个图像,然后从每个图像采样R/N个 RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N,就减少了小批量的计算。例如,当N=2和R=128时得到的训练方案比从128幅不同的图采样一个RoI(即R-CNN和SPPnet的策略)快64倍。

除了分层采样,Fast R-CNN在微调阶段联合优化Softmax分类器和检测框回归,而不是分别在三个独立的阶段训练softmax分类器,SVM和回归器(该部分是与R-CNN不同之处)。

多任务损失

Fast R-CNN网络具有两个同级输出层:

  1. 输出在N种类别加上一个背景类别上的离散概率分布(每个Roi),P=(P0,P1,……Pn)。P一般由全连接层上的N+1个输出Softmax来计算。
  2. 输出检测框的回归偏移(如下式),对应索引第N个类别。包含左上角坐标以及检测框的长和宽。

t n = ( t x n , t y n , t w n , t h n ) t^{n}=\left(t_{x}^{n}, t_{y}^{n}, t_{w}^{n}, t_{h}^{n}\right) tn=(txn,tyn,twn,thn)

对每个标记的RoI使用多任务损失L以联合训练分类和检测框回归:
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) ( 1 ) L\left(p, u, t^{u}, v\right)=L_{c l s}(p, u)+\lambda[u \geq 1] L_{l o c}\left(t^{u}, v\right)(1) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)(1)

每 个 训 练 的 R O I 用 类 真 值 u 和 检 测 框 回 归 目 标 真 值 v 表 示 。 其 中 L c l s ( p , u ) = − l o g p u , 是 类 真 值 u 的 l o g 损 失 。 对 于 类 真 值 u , 第 二 个 损 失 L l o c 是 定 义 在 检 测 框 回 归 目 标 真 值 元 组 u , v = ( v x , v y , v w , v h ) 和 预 测 元 组 t u = ( t x u , t y u , t w u , t h u ) 上 的 损 失 。 艾 弗 森 括 号 指 数 函 数 为 : λ [ u ≥ 1 ] = { 1 u ≥ 1 0  otherwise  一 般 将 背 景 标 记 为 u = 0 。 对 于 背 景 R O I , 没 有 检 测 框 真 值 的 概 念 , 因 此 将 L l o c 忽 略 。 即 : L = { L c l s + λ L l o c u 为 前 景 L c l s u 为 背 景 对 于 检 测 框 回 归 , 我 们 使 用 损 失 L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } smooth ⁡ L 1 ( t i u − v i ) ( 2 ) 其 中 : smooth ⁡ L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ &lt; 1 ∣ x ∣ − 0.5  otherwise  ( 3 ) 每个训练的ROI用类真值u和检测框回归目标真值v表示。其中L_{c l s}(p, u)=-log p_{u},是类真值u的log损失。\\对于类真值u,第二个损失L_{l o c}是定义在检测框回归目标真值元组u,v=(v_{x},v_{y},v_{w},v_{h})和预测元组\\t^u=(t^u_{x},t^u_{y},t^u_{w},t^u_{h})上的损失。艾弗森括号指数函数为:\\\lambda[u \geq 1]=\left\{\begin{array}{ll}{1} &amp; {u \geq 1} \\ {0} &amp; {\text { otherwise }}\end{array}\right.\\一般将背景标记为u=0。对于背景ROI,没有检测框真值的概念,因此将L_{l o c}忽略。即:\\L=\left\{\begin{array}{l}{L_{c l s}+\lambda L_{l o c}}&amp;u为前景 \\ {L_{c l s}}&amp;u为背景\end{array}\right.\\对于检测框回归,我们使用损失\\L_{l o c}\left(t^{u}, v\right)=\sum_{i \in\{x, y, w, h\}} \operatorname{smooth}_{L_{1}}\left(t_{i}^{u}-v_{i}\right)(2)\\其中:\\\operatorname{smooth}_{L_{1}}(x)=\left\{\begin{array}{cc}{0.5 x^{2}} &amp; {i f|x|&lt;1} \\ {|x|-0.5} &amp; {\text { otherwise }}\end{array}\right.(3) ROIuvLcls(p,u)=logpu,ulogu,Llocuv=(vx,vy,vw,vh)tu=(txu,tyu,twu,thu)λ[u1]={10u1 otherwise u=0ROILlocL={Lcls+λLlocLclsuu使Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)(2)smoothL1(x)={0.5x2x0.5ifx<1 otherwise (3)

( 1 ) 中 的 超 参 数 λ 控 制 两 个 任 务 损 失 之 间 的 平 衡 , 将 回 归 目 标 真 值 v i 归 一 化 为 具 有 零 均 值 和 单 位 方 差 , 所 有 实 验 都 使 用 λ = 1. (1)中的超参数\lambda控制两个任务损失之间的平衡,将回归目标真值v_{i}归一化为具有零均值和单位方差,所有实验都使用\\\lambda=1. (1)λvi使λ=1.

小批量采样

在微调期间,每个随机梯度下降(SGD)的小批量由N=2个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为R=128的小批量,从每个图像采样64个RoI。

在训练期间,图像以概率0.5水平翻转。不使用其他数据增强。

SGD超参数

用于Softmax分类和检测框回归的全连接层的权重分别使用具有方差0.01和0.001的零均值高斯分布初始化。偏置初始化为0。所有层的权重学习率为1倍的全局学习率,偏置为2倍的全局学习率,全局学习率为0.001。 当对VOC07或VOC12 trainval训练时,我们运行SGD进行30k次小批量迭代,然后将学习率降低到0.0001,再训练10k次迭代。当我们训练更大的数据集,我们运行SGD更多的迭代。

四、尺度不变性

作者探索两种实现尺度不变对象检测的方法:

  1. 通过“brute force”学习。
  2. 通过使用图像金字塔。

在“brute force”方法中,在训练和测试期间以预定义的像素大小处理每个图像。网络必须直接从训练数据学习尺度不变性目标检测。

而多尺度方法通过图像金字塔向网络提供近似尺度不变性。 在测试时,图像金字塔用于大致缩放-规范化每个候选框。在多尺度训练时,每次图像采样时随机采样金字塔尺度,作为数据增强的形式。

五、Fast R-CNN检测

将图像和待计算概率的R个候选框的列表作为输入。在测试时,R通常在2K左右。当使用图像金字塔时,ROI被缩放,使其接近224x224个像素。对于每个测试的ROI r使用
Pr ⁡ ( class = k ∣ r ) ≜ p k \operatorname{Pr}(\text {class}=k | r) \triangleq p_{k} Pr(class=kr)pk
为每个类别分配检测置信度,然后对每个类别独立执行非极大值抑制。

六、通过截断的SVD进行提速

对于整体图像分类,与卷积层相比,计算全连接层花费的时间较小。相反,为了检测,要处理的RoI的数量很大,并且接近一半的正向传递时间用于计算全连接层。
层 的 u × v 权 重 矩 阵 W 通 过 S V D 被 近 似 分 解 为 : W ≈ U Σ t V T 在 这 种 分 解 中 , U 是 一 个 u × v 的 矩 阵 , 包 括 W 的 前 t 个 左 奇 异 向 量 , Σ t 是 t × t 对 角 矩 阵 , 其 包 含 W 的 前 t 个 奇 异 值 , 并 且 V 是 v × t 矩 阵 , 包 括 W 的 前 t 个 右 奇 异 向 量 , 截 断 S V D 将 参 数 计 数 从 u v 减 少 到 t ( u + v ) 个 , 如 果 t 远 小 于 m i n ( u , v ) 则 S V D 可 能 是 重 要 的 。 为 了 压 缩 网 络 , 对 应 于 W 的 单 个 全 连 接 层 由 两 个 全 连 接 层 替 代 , 在 它 们 之 间 没 有 非 线 性 。 这 些 层 中 的 第 一 层 使 用 权 重 矩 阵 Σ t V T ( 不 包 含 偏 置 ) , 并 且 第 二 层 使 用 U ( 其 中 原 始 偏 差 与 W 相 关 联 ) 。 当 R o I 的 数 量 大 时 , 这 种 简 单 的 压 缩 方 法 给 出 良 好 的 加 速 。 层的u×v权重矩阵W通过SVD被近似分解为:\\ W \approx U \Sigma_{t} V^{T}\\ 在这种分解中,U是一个u×v的矩阵,包括W的前t个左奇异向量,\Sigma_{t}是t×t对角矩阵,其包含W的前t个奇异值,\\ 并且V是v×t矩阵,包括W的前t个右奇异向量,截断SVD将参数计数从uv减少到t(u+v)个,\\ 如果t远小于min(u,v)则SVD可能是重要的。 为了压缩网络,对应于W的单个全连接层由两个全连接层替代,\\ 在它们之间没有非线性。这些层中的第一层使用权重矩阵\Sigma_{t} V^{T}(不包含偏置),\\ 并且第二层使用U(其中原始偏差与W相关联)。当RoI的数量大时,这种简单的压缩方法给出良好的加速。 u×vWSVDWUΣtVTUu×vWtΣtt×tWtVv×tWtSVDuvt(u+v)tmin(u,v)SVDW线使ΣtVT(),使UWRoI

注释

详情可入群询问283266234。

若本人对文章解读有所误解与不足处,还望斧正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值