行人检测 概述:
行人检测主要有两种:传统检测算法和基于深度学习检测算法。传统检测算法的典型代表有Haar算法+Adaboost算法,Hog特征+SVM算法,DPM算法。而基于深度学习的行人检测典型代表有RCNN系列,SDD系列,YOLO系列

上图是单目标检测和多目标检测的例子,单目标相对容易实现一些,但是多目标很容易出现遗漏,现在比较新的mask rcnn可以实现目标检测和语义分割,相比FCN来说取得了更好的进步。

简单对比:
RCN (Selective Search + CNN + SVM)
SPP-Net(Spatial Pyramid Pooling)
Fast R-CNN(Selective Search + CNN + ROI pooling)
Faster R-CNN(CNN + RPN + ROI pooling)
R-FCN

RCNN原理

论文:Rich feature hierarchies for accurate object detection and semantic segmentation

RCNN(Region with CNN feature)是卷积神经网络应用于目标检测问题的一个里程碑的飞跃。CNN具有良好的特征提取和分类性能,采用RegionProposal方法实现目标检测问题。算法可以分为三步(1)候选区域选择。(2)CNN特征提取。(3)分类与边界回归。

RCNN算法流程:

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

(1)候选区域选择:区域建议Region Proposal是一种传统的区域提取方法,基于启发式的区域提取方法,用的方法是ss(selective research),查看现有的小区域,合并两个最有可能的区域,重复此步骤,直到图像合并为一个区域,最后输出候选区域。然后将根据建议提取的目标图像标准化,作为CNN的标准输入可以看作窗口通过滑动获得潜在的目标图像,在RCNN中一般Candidate选项为1k-2k个即可,即可理解为将图片划分成1k~2k个网格,之后再对网格进行特征提取或卷积操作,这根据RCNN类算法下的分支来决定。然后基于就建议提取的目标图像将其标准化为CNN的标准输入。

(2)CNN特征提取:标准卷积神经网络根据输入执行诸如卷积或池化的操作以获得固定维度输出。也就是说,在特征提取之后,特征映射被卷积和汇集以获得输出。比如有VGG,ZF等。将图像缩放到227x227,通过AlexNet网络(进行展平处理)输出4096维特征得到2000x4096维向量。

(3)分类与边界回归:实际上有两个子步骤,一个是对前一步的输出向量进行分类(分类器需要根据特征进行训练); 第二种是通过边界回归框回归(缩写为bbox)获得精确的区域信息。其目的是准确定位和合并完成分类的预期目标,并避免多重检测。在分类器的选择中有支持向量机SVM,Softmax等等(文中选择SVM,附录给出了解释原因,但是目前多数还是以Softmax);边界回归有bbox回归,多任务损失函数边框回归等 (文中使用带正则化的交叉熵损失函数)。与上述通过4096*20的权值矩阵(SVM分类器)得到2000x20的输出概率矩阵,每一行表示每个候选框对目标的建议矩阵,而每一列代表对不同候选框对该类的预测值,进一步采用极大值抑制,得到一些得分较高的候选框。在此基础上,选择与GroundTrue边界框IOU阈值再进行删除。利用特征向量对边界框进行参数训练,包括x和y的偏移量和w和h的缩放量。


RCNN的缺点:

在RCNN刚刚被发明出来的2014年,RCNN在目标检测与行人检测上取得了巨大的成就,然而效率低下,花费时间长等一系列的问题的产生,还是导致了RCNN的运用并没有取得大范围的应用,其最大的问题有三:需要事先提取多个候选区域对应的图像。这一行为会占用大量的磁盘空间;针对传统的CNN来说,输入的map需要时固定尺寸的,而归一化过程中对图片产生的形变会导致图片大小改变,这对CNN的特征提取有致命的坏处;每个region proposal都需要进入CNN网络计算。进而会导致过多次的重复的相同的特征提取,这一举动会导致大大的计算浪费。在这之后,随之而来的Fast RCNN逐渐进入了人们的眼帘。

改进RCNN:

  • 提取候选框:Edge Boxes、RPN网络
  • 共享卷积运算:SPPNet、Fast RCNN
  • 兼容任意尺寸图像:SPP,ROI Pooling
  • 预设长宽比:Anchor
  • 网络结构:端对端
  • 融合各层特征:FPN

Fast RCNN

Fast RCNN较之前的RCNN相比,有四个方面得到了提升:

  1. 测试时的速度得到了提升。RCNN算法与图像内的大量候选帧重叠,导致提取特征操作中的大量冗余。而Fast RCNN则很好的解决了这一问题(先提取输入图像的特征向量,候选区域直接映射减少了重复提取相同的特征)。
  2. 训练时的速度得到了提升。
  3. 训练所需的空间大。RCNN中分类器和回归器需要大量特征作为训练样本。而Fast RCNN则不再需要额外储存。
  4. 实现了单阶段多任务损失函数,即端到端的训练。




ROI pooling详解

ROI pooling与SPPNet互联关系

Fast RCNN的工作流程:

1.选择性搜索Selective Search(SS)在图片中获得大约2k个候选框。

在第一步中所使用到的候选区域生成方法与RCNN无异,使用的方法都是Selective Search(SS)。以此方式来生成2k个候选框。其基本思路如下所述:使用过分割方法将图像分成小区域。在此之后,观察现有的区域。之后以最高概率合并这两个区域。重复此步骤,直到所有图像合并为一个区域位置。注意,在此处的合并规则与RCNN是相同的,优先合并以下四种区域: ==颜色(颜色直方图)相近的; 纹理(梯度直方图)==相近的; 合并后总面积小的。最后,所有已经存在的区域都被输出,并生成候选区域。

2.使用卷积网络提取图片特征。类似于RCNN,在获取特征映射之后,需要卷积神经网络来进行卷积操作。 在此处Fast RCNN使用的卷积神经网络为普通的fc7,但是有所改动,也有使用VGG16的神经网络。 前五个阶段是conv + relu + pooling的基本形式。

3.在第二步进行的卷积操作过后可以得到feature map,根据之前RoI框选择出对应的区域(可以理解为将feature map映射回原图像), 在最后一次卷积之前,使用 RoI池层来统一相同的比例(这里利用的是单层ssp)。

在RCNN中,在进行卷积操作之前一般都是先将图片分割与形变到固定尺寸,这也正是RCNN的劣势之处。不得不说,这对检测来说是十分不应该出现的,这会让图像产生形变,或者图像变得过小,使一些特征产生了损失,继而对之后的特征选择产生巨大影响。Fast RCNN与RCNN不同。其不同之处如下:Fast RCNN在数据的输入上并不对其有什么限制,而实现这一没有限制的关键所在正是ROI Pooling层。该层的作用是可以在任何大小的特征映射上为每个输入ROI区域提取固定的维度特征表示,然后确保每个区域的后续分类可以正常执行。

Faster R-CNN (RPN+Fast R-CNN)

从RCNN到Fast RCNN,再到Faster RCNN,一直都有效率上的提升 ,而对于Faster RCNN来讲,与RCNN和Fast RCNN最大的区别就是,目标检测所需要的四个步骤,即候选区域生成,特征提取,分类器分类,回归器回归,这四步全都交给深度神经网络来做,并且全部运行在 GPU上,这大大提高了操作的效率

Faster RCNN可以说是由两个模块组成的:区域生成网络RPN候选框提取模块+Fast RCNN检测模块

RPN是全卷积神经网络,其内部与普通卷积神经网络不同之处在于是将CNN中的全连接层变成卷积层。Faster RCNN是基于RPN提取的proposal检测并识别proposal中的目标。其具体流程大致可概括为:

1.输入图像。
2.通过区域生成网络RPN生成候选区域。
3.提取特征。
4.分类器分类。
5.回归器回归并进行位置调整。

详细讲解:
1.Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
2.Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
3.RoI Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
4.Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

借助大佬的图像进一步细节分析:

  • 首先缩放至固定大小MxN,然后将MxN图像送入网络;
  • 而Conv layers中包含了13个conv层+13个relu层+4个pooling层;
  • RPN网络首先经过3x3卷积,再分别生成positive anchors和对应bounding box regression偏移量,然后计算出proposals;
  • 而Roi Pooling层则利用proposals从feature maps中提取proposal feature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

区域代网络RPN的核心思想是直接使用卷积神经网络CNN生成候选区域region proposal区域提议。本节主要来对RPN的具体流程进行讲解。RPN使用的方法实际上是在最后一个卷积层上滑动窗口。

RPN的具体操作流程如下:使用小型网络在最后的卷积特征地图feature map上执行滑动扫描,每当滑动网络完全连接到特征地图上的 n* n窗口,然后将其映射到低维矢量,最后将这个低维矢量发送到两个完全连接的层。即 bbox回归层( reg)和 box分类层( cls)。 滑动窗口处理确保reg层和cls层与conv5-3的整个特征空间相关联。在其中,reg层的作用是预测proposal的anchor对应的proposal的(x,y,w,h),cls层的作用是判断该proposal是前景(object)还是背景(non-object)(注:这里作者使用的是多分类交叉熵损失函数,因为是2k Scores,如果是二分类交叉熵损失函数,则 应该结果为k Score)。详解区分

在候选区域(锚点anchor)部分,该特征可以被视为大小为51 * 39的256通道图像:三种面积{128128,256256,512512}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors即锚点。下图示出5139个anchor中心,以及3x3 = 9种anchor示例。

在RPN中,reg与cls层分别是进行了窗口分类与位置精修。分类层(cls_score)输出9个锚点属于每个位置的前景和背景的概率。在每个位置的bbox_pred输出中,9个锚点对应点应该是泛化的(x,y,w,h)。对于每个位置来说,分类层从256维特征输出属于前景和背景的概率。而回归图层则是从256维特征中输出4个平移和缩放参数。


Faster RCNN两步法:
右边的橘黄色是一步粗糙训练目标分类和位置预测,最后的预测也是一次分类和位置预测。从上图可以清楚的看到这个过程,当然整体来说,两步法主要还是以候提取候选框作为一步,分类和位置预测作为一步进行区分。

Faster RCNN算法流程可分为3个步骤

  1. 将图像输入网络得到相应的特征图
  2. 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  3. 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图战平通过一些列全连接层得到预测结果

注:

目前,是直接采用RPN Loss + Fast R-CNN Loss的联合训练方法训练Faster RCNN的

原论文中采用分别训练RPN及Fast R-CNN的方法
(1) 利用ImageNet预训练分类模型初始化前置卷积网络层参数,并开始单独训练RPN网络参数;
(2) 固定RPN网络独有的卷积层以及全连接层参数,再利用
lmageNet预训练分类模型初始化前置卷积网络参数,并利用RPN网络生成的目标建议框去训练Fast RCNN网络参数。
(3) 固定利用Fast RCNN训练好的前置卷积网络层参数,去微调RPN网络独有的卷积层以及全连接层参数。
(4) 同样保持固定前置卷积网络层参数,去微调Fast RCNN网络的全连接层参数。最后RPN网络与Fast RCNN网络共享前置卷积网络层参数,构成一个统一网络。

最后,给出一张三张网络的结构对比图,可以看到从各个模块的分散到集中,实现端到端,并且在空间和时间效率上都得到了很大的提升。

参考链接:https://blog.csdn.net/gentelyang/article/details/80469553
参考链接:https://zhuanlan.zhihu.com/p/31426458
知乎:https://zhuanlan.zhihu.com/p/31426458
B站:https://www.bilibili.com/video/BV1af4y1m7iL?from=search&seid=10038516019441925384&spm_id_from=333.337.0.0

R-CNN、Fast R-CNN、Faster R-CNN相关推荐

  1. ROTATED REGION BASED CNN FOR SHIP DETECTION 基于旋转区域的CNN舰船检测

    这篇文章是2017年ICIP(International Conference on Image Processing)会议的文章,由中国科学院大学作者团队撰写.下面我对文章进行解读,有不当之处,希望 ...

  2. CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN: 目标检测: RCNN SPPNet Fast RCN ...

  3. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  4. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  5. 深度学习目标检测之RCNN、SPP-net、Fast RCNN、Faster RCNN

    一.目标检测介绍 目标检测(目标提取)是一种基于目标几何和统计特征的图像分割,将目标的分割和识别合二为一,主要是明确从图中看到了什么物体.它们分别在什么位置.传统的目标检测方法一般分为三个阶段:首先在 ...

  6. 大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)

    目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤: 1.分类,识别物体是什么   2.定位,找出物体在哪里   除了对单个物体进行检测,还要 ...

  7. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    一. 从图像识别的任务说起   1.1 思路一:看做回归问题   1.2 思路二:取图像窗口 二. R-CNN横空出世 三. SPP Net 四.Fast R-CNN 五.Faster R-CNN 看 ...

  8. [转]一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/kwame211/article/details/88016151 一.目标检测常见算法 object ...

  9. 深度学习之目标检测:R-CNN、Fast R-CNN、Faster R-CNN

    object detection 就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection 要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题不是容 ...

  10. 《目标检测》R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN

    学习内容来自:https://www.bilibili.com/video/BV1m5411A7FD?p=2 类似的博文:https://blog.csdn.net/v_JULY_v/article/ ...

最新文章

  1. 叉乘(三)——线段与线段相交吗?
  2. String.format() 格式化字符串
  3. ffmpeg安装与配置
  4. 【数字图像处理】一.MFC详解显示BMP格式图片
  5. 达芬奇调色软件被曝两个远程代码执行缺陷
  6. Jupyter Notebook安装jupyter_contrib_nbextension扩展功能和安装后不显示Nbextensions标签的解决办法
  7. JavaScript-预解析(变量提升)
  8. 超好用的jQuery插件
  9. 21世纪青年人最该阅读的书籍清单
  10. vue xlsx.js获取单元格数据类型的hooks 单元格类型处理
  11. linux ipv6添加路由器,使用Linux搭建IPV6路由器(CentOS版)
  12. CAD随机多面体3D 多面体骨料 凸多面体颗粒
  13. 【Qt+FFmpeg】给视频添加时间水印
  14. 修改jar 注入_瑜伽经典体位新花样:15个传统姿势+变化 注入新活力 精细
  15. Spring MVC 教程,快速入门,深入分析
  16. vue+three.js加载本地stl模型无法显示的解决办法
  17. [BZOJ]4832 抵制克苏恩 期望dp
  18. A*算法(超级详细讲解,附有举例的详细手写步骤)
  19. 对Android中arm64-v8a、armeabi-v7a、armeabi、x86认识,看完这个就全明白了
  20. Web前端-Vue ElementUI el-input组件绑定点击事件

热门文章

  1. 【matplotlib库】利用matplotlib库绘制正余弦函数曲线的python程序,标注X、Y轴及标题|CSDN创作打卡
  2. 做的不好,真的不是因为时间少
  3. matlab 变量命名规则
  4. 阿里云ECS遭挖矿程序攻击解决方法(彻底清除挖矿程序,顺便下载了挖矿程序的脚本)
  5. java专业技能写什么_Java开发工程师专业技能范例列表
  6. 黑暗之魂(JZOJ)
  7. 小鱼大营救:上周小鸟上太空,本周小鱼下海底
  8. 《恒盛策略》沪深两市早盘放量上涨 北向资金净买入超124亿元
  9. Android AlarmManager闹钟的使用
  10. 【接口百宝箱】免费好用的API大全