小嘿嘿之卷积神经网络Faster R-CNN发展及原理

paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection
代码解析:https://blog.csdn.net/qq_41576083/article/details/82966489

论文的整个网络 { 公 共 的 特 征 提 取 网 络 , 目 前 在 看 的 源 码 中 可 以 选 择 V G G 16 等 网 络 来 作 为 特 征 提 取 网 络 , 继 而 在 特 征 提 取 网 络 的 最 后 输 出 的 基 础 上 R P N 网 络 , R P N 网 络 主 要 用 于 输 出 候 选 框 ( r o i ) 的 坐 标 修 正 量 以 及 针 对 每 一 个 候 选 框 的 可 靠 打 分 f a s t − r c n n 网 络 , 用 于 生 成 最 终 的 目 标 框 坐 标 以 及 目 标 框 内 的 类 别 信 息 。 \begin{cases} 公共的特征提取网络,目前在看的源码中可以选择VGG16等网络来作为特征提取网络,继而在特征提取网络的最后输出的基础上\\ RPN网络,RPN网络主要用于输出候选框(roi)的坐标修正量以及针对每一个候选框的可靠打分\\ fast-rcnn网络,用于生成最终的目标框坐标以及目标框内的类别信息。 \end{cases} VGG16RPNRPNroifastrcnn

1 发展历程

1.1 目前的卷积神经网络

{ 图 像 分 类 的 C N N : L e N e t 、 A l e x N e t 、 V G G 、 G o o g L e N e t 目 标 检 测 的 C N N : R C N N 、 F a s t R C N N 、 F a s t e r R C N N 、 Y O L O 、 Y O L O v 2 、 S S D \begin{cases} 图像分类的CNN:LeNet、AlexNet、VGG、GoogLeNet \\ 目标检测的CNN:RCNN 、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD \end{cases} {CNN:LeNetAlexNetVGGGoogLeNetCNN:RCNNFastRCNNFasterRCNNYOLOYOLOv2SSD

1.2 Faster R-CNN发展由来

CNN → \to RCNN → \to Fast RCNN → \to Faster RCNN

1.2.1 CNN

在这里插入图片描述
算法步骤:
1.首先,我们把下面的图片用作输入;
2.之后,我们将图片分成多个区域;
3.将每个区域看作单独的图片;
4.把这些区域照片传递给CNN,将它们分到不同类别中;
5.当我们把每个区域都分到对应的类别后,再把它们结合在一起,完成对原始图像的目标检测。

1.2.2 RCNN(基于区域的卷积神经网络)

在这里插入图片描述
算法步骤:
1.首先取一个预训练卷积神经网络;

  • 根据需要检测的目标类别数量,训练网络的最后一层;
  • 得到每张图片的感兴趣区域(Region of Interest),对这些区域重新改造,以让其符合CNN的输入尺寸要求;
    4.得到这些区域后,我们训练支持向量机(SVM)来辨别目标物体和背景。对每个类别,我们都要训练一个二元SVM;
    5.最后,我们训练一个线性回归模型,为每个辨识到的物体生成更精确的边界框。
    注意:
  • 根据选择性搜索,要对每张图片提取2000个单独区域;
  • 用CNN提取每个区域的特征。假设我们有N张图片,那么CNN特征就是N*2000;
  • 用RCNN进行目标检测的整个过程有三个模型:
    1- 用于特征提取的CNN
    2- 用于目标物体辨别的线性SVM分类器
    3-调整边界框的回归模型。
1.2.3 Fast RCNN

在这里插入图片描述
在每张照片上只运行一次CNN,然后找到一种方法在2000个区域中进行计算。在Fast RCNN中,我们将图片输入到CNN中,会相应地生成传统特征映射。利用这些映射,就能提取出感兴趣区域。之后,我们使用一个Rol池化层将所有提出的区域重新修正到合适的尺寸,以输入到完全连接的网络中。
步骤:
1.输入图片;
2.输入到卷积网络中,它生成感兴趣区域;
3. 利用Rol池化层对这些区域重新调整,将其输入到完全连接网络中;
4.在网络的顶层用softmax层输出类别。同样使用一个线性回归层,输出相对应的边界框。

所 以 , 和 R C N N 所 需 要 的 三 个 模 型 不 同 , F a s t R C N N 只 用 了 一 个 模 型 就 同 时 实 现 了 区 域 的 特 征 提 取 、 分 类 、 边 界 框 生 成 。 \green{所以,和RCNN所需要的三个模型不同,Fast RCNN只用了一个模型就同时实现了区域的特征提取、分类、边界框生成。} RCNNFastRCNN

1.2.4 RCNN家族对比

在这里插入图片描述

2 Faster R-CNN算法

在这里插入图片描述
Faster RCNN是Fast RCNN的优化版本,二者主要的不同在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN用的是Region Proposal网络(RPN)。RPN将图像特征映射作为输入,生成一系列object proposals,每个都带有相应的分数。
步骤:
1.输入图像到卷积网络中,生成该图像的特征映射。
2. 在特征映射上应用Region Proposal Network,返回object proposals和相应分数。
3.应用Rol池化层,将所有proposals修正到同样尺寸。
4.最后,将proposals传递到完全连接层,生成目标物体的边界框。

2.1 算法过程

在这里插入图片描述

2.2 激活函数

激活函数的目的:引入非线性可以让模型解决线性不可分问题。
详情请见博客《小嘿嘿之常见分类算法之SVM/k-近邻/BP神经网络/朴素贝叶斯》BP神经网络节。

2.3 卷积层

Conv layers=conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
重 要 的 事 需 要 说 三 遍 ! ! ! \red{重要的事需要说三遍!!!}
1 、 所 有 的 c o n v 层 都 是 : k e r n e l s i z e = 3 , p a d = 1 , s t r i d e = 1 ; \red{1、所有的conv层都是:kernel_size=3,pad=1,stride=1;} 1convkernelsize=3pad=1stride=1
2 、 所 有 的 p o o l i n g 层 都 是 : k e r n e l s i z e = 2 , p a d = 0 , s t r i d e = 2 \red{2、所有的pooling层都是:kernel_size=2,pad=0,stride=2} 2poolingkernelsize=2pad=0stride=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中都可以和原图对应起来。

2.4 softmax

softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。下图展示了softmax的计算方法:
在这里插入图片描述
首先,我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。
1)将预测结果转化为非负数
softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
2)各种预测结果概率之和等于1
为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。

2.5 Region Proposal Networks

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

2.5.1 1 × \times × 1卷积

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

2.5.2 anchor

anchor机制:
对于公共特征提取网络输出结果,stride和大概为16,即输入图片尺寸与输出特征图(也可以理解为是一个图片,反正都是一个矩阵)尺寸的比,假设最后输出特征图尺寸为60X60,那么可以理解为60X60个点,每一个点都可以作为一个窗口中心点,那么窗口的尺寸呢?这就是anchor的用处,每一个anchor即对应9个(一般是9个)窗口尺寸,再将每一个窗口应用在每一个中心点上,用来截取原图像,那么一共可以截取60X60X9约3W幅图片,即60X60X(9X4)个坐标。然后针对这些窗口,网络又需要预测窗口中是否存在目标,即对于每一个窗口还要有两个概率输出,也就是一共要有60X60X(9X2)概率得分,用于甄别对应的候选框里是否存在目标,达到候选窗筛选的功能。
所谓anchors,实际上就是一组由rpn/generate_anchors.py生成的矩形。
[[ -84. -40. 99. 55.]
[-176. -88. 191. 103.]
[-360. -184. 375. 199.]
[ -56. -56. 71. 71.]
[-120. -120. 135. 135.]
[-248. -248. 263. 263.]
[ -36. -80. 51. 95.]
[ -80. -168. 95. 183.]
[-168. -344. 183. 359.]]
其中每行的4个值 ( x 1 , y 1 , x 2 , y 2 ) (x_1,y_1,x_2,y_2) (x1,y1,x2,y2)表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为{1:1,1:2,2:1}三种,实际上通过anchors就引入了检测中常用到的多尺度方法.
在这里插入图片描述
注 : 关 于 上 面 的 a n c h o r s s i z e , 其 实 是 根 据 检 测 图 像 设 置 的 。 在 p y t h o n d e m o 中 , 会 把 任 意 大 小 的 输 入 图 像 r e s h a p e 成 800 x 600 ( 即 2.1 节 中 的 M = 800 , N = 600 ) 。 再 回 头 来 看 a n c h o r s 的 大 小 , a n c h o r s 中 长 宽 1 : 2 中 最 大 为 352 x 704 , 长 宽 2 : 1 中 最 大 736 x 384 , 基 本 是 c o v e r 了 800 x 600 的 各 个 尺 度 和 形 状 。 \green{注:关于上面的anchors size,其实是根据检测图像设置的。在python demo中,会把任意大小的输入图像reshape成800x600(即2.1节中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。} anchorssizepythondemoreshape800x6002.1M=800N=600anchorsanchors1:2352x7042:1736x384cover800x600

那么这9个anchors是做什么的呢?借用Faster RCNN论文中的原图,遍历Conv layers计算获得的feature maps,为每一个点都配备这9种anchors作为初始的检测框。这样做获得检测框很不准确,不用担心,后面还有2次bounding box regression可以修正检测框位置。

在这里插入图片描述
解释:

  • 在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变
  • 假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4k coordinates
  • 补充一点,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练

其 实 R P N 最 终 就 是 在 原 图 尺 度 上 , 设 置 了 密 密 麻 麻 的 候 选 A n c h o r 。 然 后 用 c n n 去 判 断 哪 些 A n c h o r 是 里 面 有 目 标 的 p o s i t i v e a n c h o r , 哪 些 是 没 目 标 的 n e g a t i v e a n c h o r 。 所 以 , 仅 仅 是 个 二 分 类 而 已 ! \red{其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!} RPNAnchorcnnAnchorpositiveanchornegativeanchor!
eg.那么Anchor一共有多少个?原图800x600,VGG下采样16倍,feature map每个点设置9个Anchor
所以:ceil(800/16) × \times ×ceil(600/16) × \times ×=50 × \times × 38 × \times × 9=17100
其中ceil()表示向上取整,是因为VGG输出的feature map size= 50 × \times × 38

在这里插入图片描述

2.5.3 bounding box regression原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在了解bounding box regression后,再回头来看RPN网络第二条线路
在这里插入图片描述

2.6 Roi Pooling

而RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到Rol pooling层有2个输入:
1、原始的feature maps
2、RPN输出的proposal boxes(大小各不相同)

### 回答1: 区域卷积神经网络(Region-based Convolutional Neural Network,R-CNN)是一种用于目标检测的深度学习模型。它由Ross Girshick等人于2014年提出,是目标检测领域的一个重要里程碑。 R-CNN的基本思想是先使用选择性搜索(Selective Search)等算法对输入图像进行区域提取,然后对每个提取出的区域进行卷积神经网络CNN)特征提取,最后使用支持向量机(SVM)进行目标分类和边界框回归。整个R-CNN模型可以分为三个部分:区域提取、CNN特征提取和目标分类与边界框回归。 具体来说,R-CNN首先对输入图像进行选择性搜索,得到一些可能包含目标的区域。然后,对每个区域进行裁剪和缩放,将其转换为固定大小的图像块,并输入到预训练的CNN模型中进行特征提取。在这里,R-CNN使用了AlexNet等经典的CNN模型来提取特征。最后,使用SVM对每个区域进行分类和边界框回归,得到目标检测结果。 R-CNN虽然在目标检测领域取得了很好的效果,但其存在一些问题,例如计算量大、训练时间长等。后续的研究者对R-CNN进行了改进,提出了Fast R-CNNFaster R-CNN和Mask R-CNN等模型,进一步推动了目标检测领域的发展。 ### 回答2: 区域卷积神经网络(R-CNN)是一种用于物体检测和识别的神经网络模型。R-CNN模型在传统的卷积神经网络的基础上增加了区域建议网络(Region Proposal Network, RPN)和区域分类器(Region Classifier)两个关键组件。 首先,RPN组件负责生成一系列可能包含物体的候选区域。它通过在输入图像上滑动一个大小固定的窗口,并对每个窗口提取特征。然后,RPN利用这些特征来评估窗口是否可能包含物体。这个评估过程可以通过二分类器来完成,即判断每个窗口内是否有物体。同时,RPN还会为每个窗口生成可能包含物体的候选边界框(bounding box)。 接下来,区域分类器组件负责对每个候选区域进行物体分类和边界框的精确定位。首先,每个候选区域都会被改变成固定的大小,并通过卷积操作提取特征。然后,这些特征会被输入到一个全连接的分类器中,用于判断候选区域内的物体类别。同时,另一个全连接的回归器用于对边界框进行微调,从而更精确地定位物体。 整个R-CNN模型的训练过程是从已标注的图像数据中获取正负样本,其中正样本是与真实边界框有高IoU(Intersection over Union)的候选区域,负样本则是与真实边界框有低IoU的候选区域。这些样本以及经过卷积操作提取的特征将被用于训练分类器和回归器的参数。 相比于传统的物体检测方法,R-CNN模型能够更准确地定位和识别物体。它通过引入RPN和区域分类器的方式,不仅能够生成候选区域,还能对每个候选区域进行分类和精确定位。这种端到端的训练方式使得R-CNN模型具有更高的准确性和鲁棒性,因而在许多计算机视觉任务中取得了很好的效果。 ### 回答3: 区域卷积神经网络(R-CNN)是一种用于目标检测和图像识别的深度学习算法。传统的卷积神经网络CNN)将所有图像的区域都视为相等的,并忽略了目标在图像中的具体位置。而R-CNN通过引入区域建议网络(Region Proposal Network,RPN)来解决这个问题。 R-CNN的工作流程包括三个主要步骤:候选框生成、特征提取和目标识别。首先,R-CNN使用选择性搜索算法从图像中生成一些可能包含目标的候选框。然后,对于每个候选框,R-CNN采用卷积神经网络来提取其特征表示。这些特征被输入到一个支持向量机(SVM)分类器中,以判断该候选框是否包含目标。最后,采用边界框回归算法来微调候选框的位置,以更准确地框出目标的位置。 相比于传统的目标检测方法,R-CNN具有以下优势。首先,R-CNN利用了CNN在大规模图像数据集上预训练的能力,可以提取更丰富和有意义的特征表示。其次,R-CNN引入了RPN来生成候选框,避免了对图像中所有可能位置的滑动窗口进行处理的复杂计算,大大提高了计算效率。此外,R-CNN还引入了SVM分类器和边界框回归算法,进一步提高了目标检测的准确性。 R-CNN在目标检测任务中取得了很好的效果,并为后续的目标检测算法奠定了基础,如Fast R-CNNFaster R-CNN。尽管R-CNN在性能上有所提升,但其训练和推理过程仍然较为复杂和耗时。因此,后续的研究提出了一系列优化方案,以提高目标检测算法的速度和精度,如YOLO和SSD等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值