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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Two-stage目标检测技术发展(二)Fast R-CNN和Faster R-CNN -> 正文阅读

[人工智能]Two-stage目标检测技术发展(二)Fast R-CNN和Faster R-CNN

三、Fast R-CNN

Fast R-CNN綜合了R-CNN和SPP-Net的优点。
1.Fast R-CNN设计了类似SPP层的ROI Pooling,同样能够实现固定输出特征的功能,其能够延续SPP-Net的一次提取图像特征的优点。
2.采用SVD分解FC层,能够加快一点网络运算速度。
3.设计了新的损失函数,该损失函数融合分类损失和位置损失。

Fast R-CNN部分算法步骤和R-CNN相似,见Two-stage目标检测技术发展(一)R-CNN和SPP-Net
算法关键步骤:
1.提取候选区域,RP由SS算法提取
2.特征提取,依然是用CNN
3.全连接层分解
4.损失计算
5.反向传播
重复部分不再介绍了,RP提取和特征提取借鉴SPP-Net,SS算法提取RP区域坐标,CNN提取特征图,然后RP区域坐标在特征图上进行特征映射,找到RP区域对应的候选特征区域。
详情看上篇blogs,下面分析Fast R-CNN的不同之处。
在这里插入图片描述
部分内容参考RCNN系列文章之Fast RCNN详解

3.1 全连接层分解

全连接层在整个目标检测过程中会占用较多时间,所以Fast R-CNN采用了SVD来实现加速运算的效果。
SVD可以看这篇blog SVD分解
简单来说,SVD将原来FC层的权重矩阵分解为另一种矩阵。然后利用奇异值矩阵的特性(见下),用奇异值矩阵的一部分替换原FC层权重矩阵,可以在不损失运算效果的前提下,降低运算量,从而实现加速。

注:对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1 %的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
在这里插入图片描述

3.2 损失计算

经过FC层会同时输出类别概率和位置,这两种输出会被分别处理:

在这里插入图片描述
第一个输出为K+1个类别的离散概率分布,而第二个输出为bbox回归的偏置,每一个正在训练的ROI均利用一个ground truth类别u与ground truth框v,采用多任务损失进行分类与边框回归:
在这里插入图片描述
在这里插入图片描述
第一部分是类别的log损失
第二部分是为止损失的回归损失,V为ground truth, t为预测值,方括号是一个指示函数,满足条件为1,否则为0,按照惯例,u=0为背景类,此时忽略回归损失,对于检测框的回归采用了smooth-L1损失,没有使用L2损失。

smooth L1的特性

在这里插入图片描述
当x值很大,即遇到的是离群点,异常值时,导数很大。所以在训练初期,预测值与 groud truth差异过于大时,L2 Loss对预测值的梯度十分大,训练不稳定。
L1 Loss的导数是常数,那么在训练后期,当预测值与 ground truth差异很小时, L1 Loss 损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度
smooth L1在 x 较小时,对x 的梯度也会变小,而在 x 很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smooth L1完美地避开了 L1 loss 和 L2 loss 损失的缺陷。

3.3 反向传播(fine-tune)

R-CNN实现了一个简化的训练过程,通过一个微调阶段联合优化Softmax分类器和bounding-box回归器,而不是将Softmax分类器、SVM和回归器训练在三个不同的阶段。
根本原因是当每个训练样本(即RoI)来自不同的图像时,通过SPP层的反向传播是非常低效的,这正是训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的感受野,通常跨越整个输入图像。由于正向传播必须处理整个感受野,训练输入很大(通常是整个图像)。
(来自知乎某个大佬的解释:RoI-centric sampling和image-centric sampling的区别:SPP-net是先把所有图像用SS计算的RoIs存起来,再从中每次随机选128个RoIs作为一个batch进行训练,这128个RoIs最坏的情况来自128张不同的图像,那么,要对128张图像都送入网络计算其特征,同时内存就要把128张图像的各层feature maps都记录下来(反向求导时要用),所以时间和空间上开销都比较大;而Fast R-CNN虽然也是SS计算RoIs,但每次只选2张图像的RoIs(一张图像上约2000个RoIs),再从中选128个作为一个batch,那么训练时只要计算和存储2张图像的Feature maps,所以时间和内存开销更小)

**如何确定需要更新的权重索引:**Argmax方法,参考pooling的反向传播,在前向传播时记录ROI pooling获取值的索引,反向传播时判断要更新的权重索引和POI pooling索引是否一样,如果一样那就更新,不一样就不更新。

四、Faster R-CNN

经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
要详细了解,可以看一文读懂Faster RCNN
Faster R-CNN与之前三种算法的区别主要有两点:

  • Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
  • Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
    在这里插入图片描述
    算法关键步骤:
    1.特征提取
    2.RPN候选框提取
    3.损失计算
    在这里插入图片描述
    从这两张图片能够很清楚的理解Faster R-CNN与其他网络的不同,主要体现在左下角也就是RPN网络,这个网络能够跟据特征图选出RP区域。以下重点介绍RPN网络的数据处理。

4.1 RPN网络

经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;如R-CNN使用SS方法生成检测框。而Faster R-CNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
在这里插入图片描述
上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

4.2 Anchors生成

cls层第一部分功能是生成anchor。
Faster R-CNN设计了anchors函数来生成anchors,anchors就是一些框,这些框的功能类似RP区域,只不过一个是预设的,一个是算法输出的,anchors是先验信息,RP是后验信息,所以anchors size的设计会影响算法性能。
在这里插入图片描述
关于anchors size,其实是根据检测图像设置的。Faster R-CNN会把任意大小的输入图像reshape成800x600,再来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。
在这里插入图片描述
下面解释如何计算每张特征图输出的anchors数。
特征提取网络ZF model生成256张特征图。之后做RPN网络的3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息。
假设在feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2?k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4?k coordinates
补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练(什么是合适的anchors下文5.1有解释)
最终RPN输出的anchors数即:feature map数目 × anchor数目,feature map数目要看RPN 1×1卷积层设置,原因可以看注解:多通道图像卷积。

4.3 softmax判定样本正负

生成anchor后,如何给每个anchor添加正负标签,这就是cls层的第二部分功能。
在这里插入图片描述
判定anchors正负的方法有两种,1.与ground truth box有最大的IoU的anchors作为正样本;2.与ground truth box的IoU大于0.7的作为正样本。Faster R-CNN采取的第一种方式。定义的负样本为与ground truth box的IoU小于0.3的样本。
softmax前的reshape层用来调整特征大小以方便softmax 处理,后面的reshape将softmax的输出调整回输入前的大小。

4.4 reg layer回归

在这里插入图片描述
reg layer用来微调anchor位置,使位置预测更加准确。
(M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x4k的输出,因为这里是生成每个anchor的坐标偏移量(用于修正anchor),[tx,ty,tw,th]共4个所以是4k。注意,这里输出的是坐标偏移量,不是坐标本身,要得到修正后的anchor还要用原坐标和这个偏移量运算一下才行。

偏移值计算公式:
在这里插入图片描述
其中[xa,ya,wa,ha]是anchor的中心点坐标和宽高,[tx.ty,tw,th]是这个回归层预测的偏移量,通过这个公式计算出修正后的anchor坐标[x,y,w,h]。计算如下:
在这里插入图片描述
[px,py,pw,ph]表示原始anchor的坐标
[dx,dy,dw,dh]表示RPN网络预测的坐标偏移
[gx,gy,gw,gh]表示修正后的anchor坐标。

可能会有的疑问:为什么不直接预测修正后的anchor坐标,而是预测偏移量?

  • 如果直接预测修正后的anchor坐标了,那要这个预设anchor有何用?正是因为预测了偏移量,才能和预设anchor联动起来生成修正后的anchor
  • 直接预测框坐标,数量级比较大,难以训练
  • 坐标偏移一方面大小较小,且偏移具有较好的数学公式,求导方便

cls层生成的(M/16)x(N/16)x2k向量
reg层生成的(M/16)x(N/16)x4k向量
im_info=[M, N,scale_factor]
(1)利用reg层的偏移量,对所有的原始anchor进行修正
(2)利用cls层的scores,按positive socres由大到小排列所有anchors,取前topN(比如6000个)个anchors
(3)边界处理,把超出图像边界的positive anchor超出的部分收拢到图像边界处,防止后续RoI pooling时proposals超出边界。
(4)剔除尺寸非常小的positive anchor
(5)对剩余的positive anchors进行NMS(非极大抑制)
(6)最后输出一堆proposals左上角和右下角坐标值([x1,y1,x2,y2]对应原图MxN尺度)

综上所述,RPN网络总结起来其实就上面四个小标题:
生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

通过上述几个步骤,通过RPN网络获取了RP区域,结合ZF model输出的特征图,得到候选特征区域,后续处理和Fast R-CNN类似,不过多介绍。

注解:基础知识介绍

(1)小批量采样策略
当及逆行fine-tune时,每个SGD的小批量由 N = 2 N = 2 N=2个图像构成,均匀地随机选择(如通常的做法,我们实际上迭代数据集的排列)。 我们使用大小为 R = 128 R = 128 R=128的小批量,从每个图像采样64个RoI。 从候选框中获取25%的RoI,这些候选框与检测框真值的IoU至少为0.5。 这些RoI只包括用前景对象类标记的样本,即 u ≥ 1 u \ge 1 u1。 剩余的RoI从候选框中采样,该候选框与检测框真值的最大IoU在区间 [ 0.1 , 0.5 ) \lbrack 0.1, 0.5) [0.1,0.5)上。 这些是背景样本,并用 u = 0 u = 0 u=0标记。0.1的阈值下限似乎充当难负样本重训练的启发式算法。 正负样本比例为1:3,防止易分负样本过多。
在训练期间,图像以概率0.5水平翻转。不使用其他数据增强

(2)多通道图像卷积
对于多通道图像+多卷积核做卷积,计算方式如下:
在这里插入图片描述
如图,输入有3个通道,同时有2个卷积核。对于每个卷积核,先在输入3个通道分别作卷积,再将3个通道结果加起来得到卷积输出。所以对于某个卷积层,无论输入图像有多少个通道,输出图像通道数总是等于卷积核数量!
对多通道图像做1x1卷积,其实就是将输入图像于每个通道乘以卷积系数后加在一起,即相当于把原图像中本来各个独立的通道“联通”在了一起。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:36:57  更:2022-04-22 18:38:29 
 
开发: 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 10:20:38-

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