目标检测-Two Stage-Faster RCNN

文章目录

  • 前言
  • [一、Faster RCNN的网络结构和流程](#一、Faster RCNN的网络结构和流程)
    • [Faster R-CNN的流程图](#Faster R-CNN的流程图)
    • [Faster R-CNN网络结构图(以VGG为backbone):](#Faster R-CNN网络结构图(以VGG为backbone):)
  • [二、Faster RCNN的创新点](#二、Faster RCNN的创新点)
  • [三、Faster RCNN的训练过程](#三、Faster RCNN的训练过程)
  • 总结

前言

前文提到了目标检测-Two Stage-Fast RCNN提到了Fast RCNN主要缺点是:

  • 通过手工方法(Selective Search)寻找的候选框,非常耗时。

Faster RCNN针对上述缺点做了改进


提示:以下是本篇文章正文内容,下面内容可供参考

一、Faster RCNN的网络结构和流程

  1. 利用backbone网络提取特征,获得共享卷积特征图(Feature Map)

近些年来随着深度学习特征提取网络的成熟,将这类特征提取网络称为骨干网(backbone)

  1. 利用RPN(Region Proposal Network)网络生成候选框,进行分类和第一次边框修正

使用RPN网络取代手工方法生成候选框,RPN网络的流程是:

  1. 使用3×3的卷积核窗口对共享卷积特征图(Feature Map)进行卷积,获得通道(channel)为256的输出:256 x H x W
  2. 使用两个1×1卷积分别对每个锚点的锚框进行卷积,获得(2 x k) x H x W个类别分数和(4 x k) x H x W个目标框参数
    ps:特征图的每个像元都预先设置以该像元为中心(锚点)的k(k=9)个相同大小的锚框(anchor boxes)
  3. 将类别分数和目标框参数合并得到k x H x W个候选框:k x H x W x 5
  1. 将生成的Region Proposal和共享特征图(Feature Map)输入RoI pooling和全连接层进行分类和第二次边框修正

RoI pooling:

  1. 将共享卷积特征图输入到池化层,获取共享池化特征图
  2. 将候选框在原图的位置映射到共享特征图,以获取每个候选框的卷积特征图
  3. 将将候选框在卷积特征图的位置映射到共享池化特征图,以获取每个候选框的池化特征图
    ps:将候选框在原图的位置映射到共享池化特征图时,为了和图像像元对齐,使用了两次量化操作(不能整除时取整对齐)

Faster R-CNN的流程图

Faster R-CNN网络结构图(以VGG为backbone):

二、Faster RCNN的创新点

  • Faster R-CNN的主要贡献就是设计了提取候选区域的网络RPN,代替了费时的选择性搜索selective search,使得检测速度大幅提高(5-17 fps),并使得整个过程变成完全的端到端。

三、Faster RCNN的训练过程

非极大值抑制(Non-Maximum Suppression,NMS)

  • 一些anchors是高度重叠的,为了减少冗余,提高速度,Faster R-CNN采用非极大值抑制(Non-Maximum Suppression,NMS)去除了IoU在0.7以上的冗余框,这样每张影像大概有2k个候选框参与训练。

NMS:

先假设有6个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于人脸的概率 分别为A、B、C、D、E、F。

  1. 从最大概率矩形框F开始,分别判断A~E与F的重叠度IoU是否大于某个设定的阈值;
  2. 假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
  3. 从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
  4. 就这样一直重复,找到所有被保留下来的矩形框。
    IoU:IoU 的全称为交并比(Intersection over Union),通过IoU的值可以判断边框间的重叠度,计算方式为两个框的交集和并集的比值

损失函数

一种网络,四个损失函数:

• RPN classification(anchor good.bad):SoftmaxLoss

• RPN regression(anchor->propoasal):SmoothL1Loss

• Fast R-CNN classification(over classes):SoftmaxLoss

• Fast R-CNN regression(proposal ->box):SmoothL1Loss

边框修正主要由4个值完成,(tx,ty,th,tw),表示x和y方向上做出平移(由tx和ty决定),并且长宽各自放大一定的倍数(由th和ty决定)

训练过程

Faster R-CNN的训练方式有三种:

  1. RPN和Fast R-CNN交替训练,这种方式也是作者采用的方式。
  2. 近似联合RPN和Fast R-CNN的训练,在训练时忽略掉RoI边框修正的误差,也就是说只对anchor做了边框修订,这也是为什么叫"近似联合"的原因。
  3. 联合RPN和Fast R-CNN的训练。

对于作者采用的交替训练的方式,步骤如下:

  1. 使用在ImageNet上预训练的模型初始化共享卷积层并训练RPN。
  2. 使用上一步得到的RPN参数生成RoI proposal。再使用ImageNet上预训练的模型初始化共享卷积层,训练Fast R-CNN部分(分类器和RoI边框修订)。
  3. 将训练后的共享卷积层参数固定,同时将Fast R-CNN的参数固定,训练RPN。(从这一步开始,共享卷积层的参数真正被两大块网络共享)
  4. 同样将共享卷积层参数固定,并将RPN的参数固定,训练Fast R-CNN部分。

测试过程

Faster R-CNN的测试流程和训练流程相似,描述如下:

  1. 首先通过RPN生成约20k个anchor(40×60×9)
  2. 对20k个anchor进行第一次边框修正,得到修订边框后的proposal
  3. 对超过图像边界的proposal的边进行clip,使得该proposal不超过图像范围
  4. 忽略掉长或者宽太小的proposal
  5. 将所有proposal按照前景分数从高到低排序,选取前6k个proposal
  6. 使用阈值为0.7的NMS算法排除掉重叠的proposal
  7. 针对上一步剩下的proposal,选取前300个proposal进行分类和第二次边框修正

总结

相比于之前的算法,Faster RCNN由于其端到端的特性得到广泛应用,但是受Two Stage算法思想的影响,速度仍不够快,

并且ROI Pooling有两次量化操作,会引入误差影响精度。

相关推荐
想跑步的小弱鸡2 分钟前
Leetcode hot 100(day 4)
算法·leetcode·职场和发展
Fantasydg3 分钟前
DAY 35 leetcode 202--哈希表.快乐数
算法·leetcode·散列表
jyyyx的算法博客4 分钟前
Leetcode 2337 -- 双指针 | 脑筋急转弯
算法·leetcode
3DVisionary7 分钟前
3D-DIC与机器学习协同模拟材料应力-应变本构行为研究
人工智能·机器学习·3d·3d-dic技术 机器学习·应力-应变本构行为·卷积神经网络(ecnn)·数字图像相关法(dic)
神经星星9 分钟前
无需预对齐即可消除批次效应,东京大学团队开发深度学习框架STAIG,揭示肿瘤微环境中的详细基因信息
人工智能·深度学习·机器学习
神经星星9 分钟前
【vLLM 学习】调试技巧
人工智能·机器学习·编程语言
SweetCode15 分钟前
裴蜀定理:整数解的奥秘
数据结构·python·线性代数·算法·机器学习
程序员Linc28 分钟前
写给新人的深度学习扫盲贴:向量与矩阵
人工智能·深度学习·矩阵·向量
ゞ 正在缓冲99%…28 分钟前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
xuanjiong29 分钟前
纯个人整理,蓝桥杯使用的算法模板day2(0-1背包问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
算法·蓝桥杯·动态规划