当前位置: 首页 > news >正文

R-CNN,Fast-R-CNN-Faster-R-CNN个人笔记

注:此博客主要为了方便笔者快速复习,只讲大致框架,只讲推理,不讲训练,因此内容不会很详实。

1.R-CNN

R-CNN系列的开山之作。

本文将该框架划分为3个模块:
1.region proposal generator
2.CNN(选取VGG16作为backbone)
3.SVM

第一个模块。第一个模块负责生成region proposal,也就是许多候选框(后续从这些框中选取某些框作为目标检测的输出框)。这里生成候选框采用了一种叫做selective search的方法。
请注意,这里的候选框是与类别无关(category-independent)的,后续步骤才会确定框的类别。

第二个模块。众所周知CNN可以用于提取图片特征,而此处的CNN就是为了分别提取region proposal对应图像的特征的。也就是说,每一个候选框都会经由CNN生成对应特征。这里就引出一个小问题:后续的SVM要求输入的特征维度是确定的,要达到这个目的,CNN的输入图像维度也要是确定的。但候选框的大小是五花八门的,怎么把每个候选框映射到固定维度大小呢?作者采用了一种叫warp的方法,具体请查阅论文。

在这里插入图片描述

第三个模块怎么使用?若总共有20个类别,就训练出20个SVM。这样,一开始selective search会生成2000个候选框,然后经由CNN得到一个2000 * 4096的矩阵(每个候选框的特征向量维度是4096),再分别对每个特征向量使用20个SVM,得到2000*20的矩阵(每个候选框对应于某一个类别的概率)。

到这一步,理论上已经结束。只是我们可以看出,候选框明显过多。于是,对于每一个类别分别使用非极大值抑制(NMS),削减候选框的数量,可以得到更合理的结果。

此外,selective search的候选框位置不一定就那么刚好对得上真实框。在上一步结束后,这里还用了20个回归器来矫正每一类边界框的位置与大小,使得最后的生成框与真实框的IOU更高。

2.Fast-R-CNN

依然使用selective search,得到许多proposal

CNN(依然选取VGG16):将原图像映射为一个feature map

关于ROI:

这部分是这篇论文的主要创新点。R-CNN中,CNN直接对proposal进行操作,那么就要经历2000次CNN的前馈过程。但在此论文中,我们只进行一次CNN操作:将原图像映射为一个feature map。那怎么提取proposal的相关信息呢?直接通过ROI projection(见图)将proposal映射到feature map的一小块区域,将这一小块区域作为proposal的特征图(也就是说,每个proposal都会对应feature map上的一个“小feature map”)。

在这里插入图片描述

现在有了小feature map,就可以使用一个叫做ROI pooling的操作,将每个小feature map切割为7×7的小块,在每个小块上分别使用max pooling,就得到了7×7的最终特征。这里需要强调,ROI pooling 和SPP-net一样,是对每个channel分别进行操作的。也就是说,如果原图的feature mapchannel为c,那么每个小feature map的最终特征大小为7×7×c

为什么要这样做?因为和之前一样,送入分类模块之前,要保证得到的表征(representation)大小维度是固定的。

最后是分类

分类的SVM变成了线性层。每个7×7×c的输出都会被分类为N个类别中的一个或是背景类。另外,依然有回归器对边界框的位置、大小进行矫正。

Faster R-CNN

上一篇工作提速已经比较明显了,但selective search依然比较耗时。这篇针对这个痛点,提出了RPN,进一步进行提速。

RPN和Faster R-CNN 共享了最开始的卷积层。本文架构与Fast R-CNN的的不同之处就是:将selective search替换为RPN。

按文中的意思,RPN是若干个卷积层构成的,只是除了最后一层(图中左侧),之前的卷积层与Fast R-CNN detector共用了(也就是图中的conv layers部分)。

在这里插入图片描述

RPN如何操作(专指最后一层卷积,也就是图片左侧)?首先要知道,在feature map上每一点会根据长宽比、面积生成k个anchor(这里k3×3=9)。

先将feature map进行padding,然后以3×3的卷积核依次在feature map的每个位置进行滑动。这里若backbone使用的是ZF-net,则feature map的channel为256,即,在feature map的每个位置上,RPN的输出维度是256。之后再将这个256维的向量分别接入两个全连接层,分别产生4k2k个输出(前者用于调整框的大小和位置,后者用于判断每个框是不是背景)。

RPN生成的框会很多,会通过去除超过图片边界的anchor去除大部分框。去除以后剩下的框的数目大致和selective search相同。之后就和Fast R-CNN一样,正常检测,最后做一个NMS就行了。

相关文章:

  • TiDB 深度解析与 K8S 实战指南
  • PowerBI企业运营分析——全动态帕累托分析
  • JavaScript 的“世界模型”:深入理解对象 (Objects)
  • uniappx 打包配置32位64位x86安装包
  • UML 活动图深度解析:以在线购物系统为例
  • 游戏开发核心技术全景解析——从引擎架构到网络安全防护体系
  • LeetCode每日一题4.24
  • 微高压氧舱VS高压氧舱:氧气疗法的“双生花”如何重塑健康?
  • 数据逆序隐写
  • 考研英一学习笔记
  • 倚光科技:详解非球面光学元件的加工与检测方法
  • Python并行计算:1.Python多线程编程详解:核心概念、切换流程、GIL锁机制与生产者-消费者模型
  • 探索 CameraCtrl模型:视频生成中的精确摄像机控制技术
  • XS5032芯片,开启视觉新体验
  • 什么是机器视觉3D碰撞检测?机器视觉3D碰撞检测是机器视觉3D智能系统中安全运行的核心技术之一
  • 题目:这不是字符串题
  • UML 活动图详解:以机票预订系统用户注册为例
  • 3dmax模型怎么处理3dtiles,制作制作B3DM格式文件
  • Linux操作系统--基础I/O(上)
  • 如何获取静态IP地址?完整教程
  • 为什么猛起身会头晕?你的身体在发出这个警报
  • 吃饭睡觉打国米,如今的米兰把意大利杯当成宝
  • 何以中国|福建武夷山:千年茶道的文旅“破圈”与新生
  • 上海市进一步支持汽车置换更新!一图读懂补贴政策实施细则
  • 《哪吒2》票房已达157亿,光线传媒一季度净利增至20亿元
  • 服务业扩大开放,金融、医疗等多领域明确155项试点任务