IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 目标检测网络 -- FasterRCNN -> 正文阅读

[人工智能]目标检测网络 -- FasterRCNN

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


参考网站:
https://zhuanlan.zhihu.com/p/106192020

https://blog.csdn.net/zhangyuexiang123/article/details/108255901

https://blog.csdn.net/weixin_37142859/article/details/93356914

Faster RCNN主要有四个知识点:
1.卷积层–backbone特征提取网络;
2.RPN网络;
3.ROI Pooling
4.分类和回归
网络结构

一、卷积层–backbone特征提取网络

Faster-RCNN主要采用了两种网络结构作为backbone:
VGG16 从图中可以看出,对于一副任意大小的图像P×Q,首先缩放至固定大小M×N,并将其送入网络,Conv layers中包含13个conv层+13个relu层+4个pooling层。但是VGG网络存在着反向传播的时候梯度会逐渐消失的弊端。采用 resnet 效果更佳。

Conv layers中包含13个conv层+13个relu层+4个pooling层:

  1. 所有的conv层都是:kernel_size=3,pad=1,stride=1
  2. 所有的pooling层都是:kernel_size=2,pad=0,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。如图:
卷积示意图
类似的是,Conv layers中的pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。

那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16),这样Conv layers生成的feature map中都可以和原图对应起来。

二、RPN网络

Faster-RCNN核心知识点–RPN网络(region proposal network)。可以从网络图中看出,经过特征提取之后得到了Feature map然后送到rpn网络中。下面将详细说明:

1. 为什么要用RPN网络?
主要原因:用滑动窗口的方式生成检测框非常耗时。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。rpn网络

2. RPN网络原理
总体流程生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals
(这里对anchor解释一下:anchor 其实就是预训练网络卷积层的最后一层 feature map 上的一个像素,以该 anchor 为中心,可以生成 k 种 anchor boxes; 每个 anchor box 对应有一组缩放比例(scale)和宽高比(aspect)。论文中,共使用 3 种 scale(128, 256, 512)和3 种 aspect(1:2, 1:1, 2:1), 所以每个 anchor 位置产生 9 个 anchor boxs)

feature map经过3×3卷积后,分成了两条线:
(1)第一条线经过softmax进行二分类,获得是否是检测物体(前景)和背景的二分类结果。因为是二分类,所以维度是2k score。k是anchor boxes数量。
(2)第二条线是计算anchors的bounding box regression偏移量,以获得精确的proposal。它的维度是4k coordinates。
而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
!](https://img-blog.csdnimg.cn/f35185c16b59423bb5fd8e36aba620a8.png)

所以说这里假如我们backbone提取的feature maps 的维度是W×H×C,在这里,为 feature maps 的每一个点都配k个锚框,所以RPN的输出极为大小为W×H×C×2k的positive/negative softmax分类特征矩阵和W×H×C×4k的坐标回归特征矩阵。

这里还有一个img_info,大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,img_info=[M, N, scale_factor]则保存了此次缩放的所有信息。

接下来,RPN要做的事情就是:

(1). 对于每一个ground truth bounding box (gt_bbox),选择和它重叠度(IoU)最高的一个anchor作为正样本。
(2). 对于剩下的anchor,从中选择和任意一个gt_bbox重叠度超过0.7的anchor,作为正样本,正样本的数目不超过128个。
(3). 随机选择和gt_bbox重叠度小于0.3的anchor作为负样本。负样本和正样本的总数为256

3. Proposal Layers
Proposal Layer负责综合所有 [ d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) ] \left[d_{x}(A), d_{y}(A), d_{w}(A), d_{h}(A)\right] [dx?(A),dy?(A),dw?(A),dh?(A)](这一小节后边会介绍这些参数是什么)变换量和positive anchors,计算出精准的proposal,送入后续RoI Pooling Layer。
(1). 生成anchors,利用对所有的anchors做bbox regression回归(这里的anchors生成和训练时完全一致)
(2). 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors
(3). 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界
(4). 剔除尺寸非常小的positive anchors
对剩余的positive anchors进行NMS(nonmaximum suppression)

bounding box regression原理:
在这里插入图片描述
如图15所示,绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以,我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。

对于窗口一般使用四维向量表示,分别表示窗口的中心点坐标、宽和高。对于图16,红色的框A代表原始的positive Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种变换,使得输入原始的anchor A,经过映射得到一个跟真实窗口G更接近的回归窗口G’
那么,经过何种变换,才能从图中的anchor A变成G’呢?

先做平移
G x ′ = A w ? d x ( A ) + A x G_{x}^{\prime}=A_{w} \cdot d_{x}(A)+A_{x} Gx?=Aw??dx?(A)+Ax?
G y ′ = A h ? d y ( A ) + A y G_{y}^{\prime}=A_{h} \cdot d_{y}(A)+A_{y} Gy?=Ah??dy?(A)+Ay?
再做缩放
G w ′ = A w ? exp ? ( d w ( A ) ) G_{w}^{\prime}=A_{w} \cdot \exp \left(d_{w}(A)\right) Gw?=Aw??exp(dw?(A))
G h ′ = A h ? exp ? ( d h ( A ) ) G_{h}^{\prime}=A_{h} \cdot \exp \left(d_{h}(A)\right) Gh?=Ah??exp(dh?(A))
观察上面4个公式发现,需要学习的是 d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) d_{x}(A), d_{y}(A), d_{w}(A), d_{h}(A) dx?(A),dy?(A),dw?(A),dh?(A) 这四个变换。

当输入的anchor A与GT相差较小时,可以认为上述变换是一种线性变换, 那么就可以用线性回归来建模对窗口进行微调(注意,只有当anchors A和GT比较接近时,才能使用线性回归模型,否则就是复杂的非线性问题了)。接下来的问题,就是如何通过线性回归获得这四个变换了。

线性回归就是给定输入的特征向量X, 学习一组参数W, 使得经过线性回归后的值跟真实值Y非常接近,即 Y = W×X。

对于上述问题,输入X是Feature map,定义为 ?
;同时,还有训练传入A与GT之间的变换量,即 ( t x , t y , t w , t h ) \left(t_{x}, t_{y}, t_{w}, t_{h}\right) (tx?,ty?,tw?,th?),输出是 d x ( A ) , d y ( A ) , d w ( A ) , d h ( A ) d_{x}(A), d_{y}(A), d_{w}(A), d_{h}(A) dx?(A),dy?(A),dw?(A),dh?(A)四个变换,那么,目标函数可以表示为: d ? ( A ) = W ? T ? ? ( A ) d_{*}(A)=W_{*}^{T} \cdot \emptyset(A) d??(A)=W?T???(A)。其中, ? ( A ) \varnothing(A) ?(A)是对应anchor的feature map组成的特征向量, W ? W_{*} W??是需要学习的参数, d ? ( A ) d_{*}(A) d??(A)是得到的预测值(*表示x, y, w, h, 也就是每一个变换对应一个上述目标函数)。

为了让预测值 d ? ( A ) d_{*}(A) d??(A)与真实值 t ? t_{*} t??差距最小,设计L1损失函数: L o s s = ∑ i N ∣ t ? i ? W ? T ? ? ( A i ) ∣ L o s s=\sum_{i}^{N}\left|t_{*}^{i}-W_{*}^{T} \cdot \emptyset\left(A^{i}\right)\right| Loss=iN??t?i??W?T???(Ai)?

函数优化目标为:

W ^ ? = argmin ? W ? ∑ i n ∣ t ? i ? W ? T ? ? ( A i ) ∣ + λ ∥ W ? ∥ \widehat{W}_{*}=\operatorname{argmin}_{W_{*}} \sum_{i}^{n}\left|t_{*}^{i}-W_{*}^{T} \cdot \emptyset\left(A^{i}\right)\right|+\lambda\left\|W_{*}\right\| W ??=argminW???in??t?i??W?T???(Ai)?+λW??

作者论文中,使用的smooth-L损失。需要说明,只有在GT与需要回归框位置比较接近时,才可近似认为上述线性变换成立。对应于Faster RCNN原文,positive anchor与ground truth之间的平移量 ( t x , t y ) \left(t_{x}, t_{y}\right) (tx?,ty?)与尺度因子 ( t w , t h ) \left(t_{w}, t_{h}\right) (tw?,th?))如下:
在这里插入图片描述
其中, x , y , w , h x, y, w, h x,y,w,h对应两组框的中心点坐标和它的宽和高,变量 x , x a , x ? x, x_{a}, x^{*} x,xa?,x?分别对应predicted box, anchor box和ground-truth box中心点的横坐标, y , w , h y, w, h y,w,h都是同理。

三、ROI Pooling

1.为何需要ROI Pooling?
对于传统的CNN(如AlexNet和VGG),当网络训练好后输入的图像尺寸必须是固定值,同时网络输出也是固定大小的vector or matrix。
如果输入图像大小不定,这个问题就变得比较麻烦。有2种解决办法:
(1). 从图像中crop一部分传入网络
(2). 将图像warp成需要的大小后传入网络

回忆RPN网络生成的proposals的方法:对positive anchors进行bounding box regression,那么这样获得的proposals也是大小形状各不相同,即也存在上述问题。所以Faster R-CNN中提出了RoI Pooling解决这个问题。

2.ROI Pooling解释及过程
roi是在原图中的感兴趣区域:可以理解为region of interest。将原图进行特征提取时得到feature map,那么相应的ROI就会在feature map上有映射,这个映射过程就是roi pooling的一部分,一般ROI的步骤会继续进行max pooling,进而得到我们需要的feature map,送入后面继续计算。根据ROIS提供的候选框坐标,映射到FeatureMap,然后进行max-pooling,和普通的max-pooling的不同之处在于池化窗口的内部的各自包含的特征值数量不一样。

输入特征图:
在这里插入图片描述
特征图片对应的建议区域:

在这里插入图片描述
若想输出2*2 的feature map
我们就需要对把这个ROI区域分成4大块,每一块做一下max-pooling 得到最终的值

最终的的值就是
在这里插入图片描述
拓展:ROI Align
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ROIalign按照下面的算法计算
在这里插入图片描述
双线性插值计算方法

如上图,每一个蓝色点周围都有4个像素点,蓝色点的值极为该4个点的加权平均,权重是距离像素点的距离,距离越近,权重越大。如下图所示。
在这里插入图片描述
圆圈代表像素值,色块面积代表权重。以红色点为例,待计算点(黑色点)距离红色点最远,因此它权重最小,反映在色块面积上就是红色色块面积最小。说明红色对黑色点的影响比较小。

四、分类和回归

在这里插入图片描述
Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。
经过roi pooling层之后,batch_size=300, proposal feature map的大小是7*7,512-d,对特征图进行全连接,参照图20,最后同样利用Softmax Loss和L1 Loss完成分类和定位。

即从PoI Pooling获取到7x7大小的proposal feature maps后,通过全连接主要做了如下2件事:

(1)通过全连接和softmax对region proposals进行具体类别的分类,这实际上已经是识别的范畴了
(2)再次对region proposals进行bounding box regression,获取更高精度的rectangle box

五、训练流程及Loss

  1. 在预训练的model上,训练RPN网络
  2. 利用训练好的RPN
  3. 第一次训练Fast-RCNN网络
  4. 第二次训练RPN网络
  5. 再次利用步骤4,训练好的RPN网络搜集proposals
  6. 第二次训练Fast-RCNN网络

在这里插入图片描述
在这里插入图片描述
整个网络使用的损失,如下所示:
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 ? ) \begin{array}{r} L\left(\left\{p_{i}\right\},\left\{t_{i}\right\}\right)=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p_{i}, p_{i}^{*}\right) \\ +\lambda \frac{1}{N_{r e g}} \sum_{i} p_{i}^{*} L_{r e g}\left(t_{i}, t_{i}^{*}\right) \end{array} L({pi?},{ti?})=Ncls?1?i?Lcls?(pi?,pi??)+λNreg?1?i?pi??Lreg?(ti?,ti??)?
在这里插入图片描述
Faster RCNN预测
图片经过 RPN 产生anchor boxes
anchor boxes 通过 bounding box regressor 调整位置
使用 objectness classification 分类器的打分进行 NMS, 减少数量
将 region proposal 交给 fast rcnn 检测.

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:39:40  更:2022-05-09 12:40:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:52:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码