【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

03-01 1317阅读

🚀个人主页:为梦而生~ 关注我一起学习吧!

💡相关专栏:

深度学习 :现代人工智能的主流技术介绍

机器学习 :相对完整的机器学习基础教学!

💡往期推荐:

【机器学习基础】一元线性回归(适合初学者的保姆级文章)

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

【机器学习基础】决策树(Decision Tree)

【机器学习基础】K-Means聚类算法

【机器学习基础】DBSCAN

【机器学习基础】支持向量机

【机器学习基础】集成学习

【机器学习 & 深度学习】神经网络简述

【机器学习 & 深度学习】卷积神经网络简述

💡本期内容:R-CNN系列算法是经典的two-stage的目标检测算法,相较于one-stage精度更高,但是速度略有下降。从R-CNN到Fast R-CNN和Faster R-CNN,整个思路是:候选框选取——特征提取——对候选框进行分类(判定类别)和回归(修正候选框位置)。R-CNN系列算法在目标检测领域有着重要的影响和应用,是计算机视觉领域的重要算法之一。


文章目录

  • 0 前言
  • 1 R-CNN
    • 1.1 算法步骤
      • 1.1.1 候选区域的生成
      • 1.1.2 提取特征
      • 1.1.3 判定类别
      • 1.1.4 精细修正候选框的位置
      • 1.2 算法总结
      • 1.3 存在问题
      • 2 Fast R-CNN
        • 2.1 算法步骤
        • 2.2 与Fast R-CNN的区别
          • 2.2.1 共享卷积层
          • 2.2.2 ROI pooling
          • 2.2.3 分类器和边界框回归器
          • 2.2.4 损失函数
          • 2.3 算法总结
          • 3 Faster R-CNN
            • 3.1 算法步骤
            • 3.2 RPN
              • 3.2.1 anchor
              • 3.2.2 IOU
              • 3.2.3 损失函数
              • 3.3 Faster R-CNN的训练
              • 3.4 算法总结

                0 前言

                RCNN在2013年在目标检测领域首次使用深度学习和卷积神经网络,他与Alex net一起引爆了21世纪第二个十年计算机视觉领域的技术爆炸。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                后续所有基于深度学习的目标检测——特别是两阶段目标检测算法。如Fast RCNN Faster R-CNN,都是在R-CNN上进行的迭代升级。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                所以弄懂RCNN特别重要。甚至可以说,没弄懂RCN后边的算法根本就看不懂。


                1 R-CNN

                1.1 算法步骤

                1. 一张图像生成1K~2K个候选区域(使用Selective Search方法)
                2. 对每个候选区域,使用深度网络提取特征
                3. 特征送入每一类的SVM分类器,判别是否属于该类
                4. 使用回归器精细修正候选框位置

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                1.1.1 候选区域的生成

                利用selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                1.1.2 提取特征

                将2000候选区域缩放到227x227pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                1.1.3 判定类别

                将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                进行非极大值抑制处理

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                1.1.4 精细修正候选框的位置

                对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口 G ^ \hat{G} G^表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

                1.2 算法总结

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                R-CNN算法可以分为以下步骤:

                1. 候选区域生成:利用Selective Search算法在每张图像上生成约2000个候选区域。这些候选区域被认为是可能包含目标的区域。
                2. 特征提取:将每个候选区域缩放为227×227,然后输入到预训练的CNN网络中,提取出4096维的特征向量。这一步将每个候选区域转换为固定大小的向量。
                3. 分类和回归:对于每个候选区域,使用SVM分类器进行分类,判断是否属于该类。然后使用回归器精细修正候选框的位置。

                到后面我们会看到,这几个部分会不断融合,形成一个端到端的框架。

                1.3 存在问题

                1. 测试速度慢:

                  测试一张图片约53s (CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。

                2. 训练速度慢:

                  过程及其繁琐

                3. 训练所需空间大:

                  对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间。


                2 Fast R-CNN

                Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用vGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal voc数据集上)。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                2.1 算法步骤

                1. 一张图像生成1K~2K个候选区域(使用Selective Search方法)
                2. 将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵
                3. 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                2.2 与Fast R-CNN的区别

                2.2.1 共享卷积层

                一次性计算整张图像特征

                R-CNN依次将候选框区域输入卷积神经网络得到特征。

                Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                2.2.2 ROI pooling

                不限制输入图像的尺寸,便于计算

                统一缩放为7×7大小的特征图

                【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                2.2.3 分类器和边界框回归器

                该网络的框架是这样的:

                • 首先将图像输入到CNN网络得到feature map
                • 再根据共享卷积层的映射关系对应到相应的特征矩阵
                • 之后通过ROI pooling层缩放为7×7大小的矩阵
                • 然后进行展平处理,在经过两个全连接层之后,得到feature vector
                • 在feature vector的基础上,再并联两个全连接层
                • 一个是分类器用于分类概率的预测,另一个回归器用于边界框回归参数的预测

                  分类器输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点

                  【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                  边界框回归器输出对应N+1个类别的候选边界框回归参数(dx, dy, dw, dh),共(N+1)x4个节点

                  【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                  回归的具体计算如下图所示:

                  【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                  p x , p y , p w , p h p_x,p_y,p_w,p_h px​,py​,pw​,ph​分别为候选框的中心x,y坐标,以及宽高

                  G ^ x , G ^ y , G ^ w , G ^ h \hat{G}_x,\hat{G}_y,\hat{G}_w,\hat{G}_h G^x​,G^y​,G^w​,G^h​分别为最终预测的边界框中心x,y坐标,以及宽高

                  【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                  2.2.4 损失函数

                  它的损失函数分为分类损失和边界框回归损失

                  【深度学习 & 目标检测】R-CNN系列算法全面概述(一文搞懂R-CNN、Fast R-CNN、Faster R-CNN的来龙去脉)

                  • p是分类器预测的softmax概率分布 p = ( p 0 , … , p k ) p=(p_0,…,p_k) p=(p0​,…,pk​)
                  • u对应目标真实类别标签
                  • t u t^u tu对应边界框回归器预测的对应类别u的回归参数 t x u , t y u , t w u , t h u t^u_x,t^u_y,t^u_w,t^u_h txu​,tyu​,twu​,thu​
                  • v对应真实目标的边界框回归参数 v x , x y , v w , v h v_x,x_y,v_w,v_h vx​,xy​,vw​,vh​

                    其中,分类损失在原论文中说的是使用log损失 L c l s ( p , u ) = − log ⁡ p u L_{c l s}(p, u)=-\log p_{u} Lcls​(p,u)=−logpu​

                    边界框回归损失为:

                    L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } smooth ⁡ L 1 ( t i u − v i ) smooth ⁡ L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]