大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
行人检测 概述:
行人检测有两种方向,传统算法和基于深度学习算法。传统算法的典型代表有Haar特征+Adaboost算法,Hog特征+Svm算法,DPM算法。而基于深度学习的行人检测典型代表有RCNN系列,YOLO系列和SSD系列。其中RCNN系列算法是现在使用的最广泛的基于深度学习的行人检测算法。
在说行人检测之前不得不说一下目标检测。行人检测是目标检测下的一个分支,其检测的标签是行人。我理解的目标检测是准确地找到给定图片中对象的位置,并标出对象的类别。目标检测所要解决的问题是目标在哪里以及其状态的问题。但是,这个问题并不是很容易解决。姿势不合理,对象出现的区域不确定,更不用说对象也可以是多个类别。基于传统算法的目标检测有 Haar特征+ Adaboost算法,Hog特征+ Svm算法和 DPM算法,此类由于效率不高或效果不好,它现在没有被广泛使用。用的比较多的主要是RCNN,spp- net,fast- rcnn,faster- rcnn;YOLO系列,如YOLO和YOLO9000;除此之外还有SSD,ResNet等。
上图是单目标检测和多目标检测的例子,单目标相对容易实现一些,但是多目标很容易出现遗漏,现在比较新的mask rcnn可以实现目标检测和语义分割,相比FCN来说取得了更好的进步。
RCNN原理
RCNN(Region with CNN feature)是卷积神经网络应用于目标检测问题的一个里程碑的飞跃。CNN具有良好的特征提取和分类性能,采用RegionProposal方法实现目标检测问题。算法可以分为三步(1)候选区域选择。(2)CNN特征提取。(3)分类与边界回归。
接下来我将详细的介绍一下每一过程如何实现,及其里面的一些tricks。
(1)候选区域选择:区域建议Region Proposal是一种传统的区域提取方法,基于启发式的区域提取方法,用的方法是ss,查看现有的小区域,合并两个最有可能的区域,重复此步骤,直到图像合并为一个区域,最后输出候选区域。然后将根据建议提取的目标图像标准化,作为CNN的标准输入可以看作窗口通过滑动获得潜在的目标图像,在RCNN中一般Candidate选项为1k~2k个即可,即可理解为将图片划分成1k~2k个网格,之后再对网格进行特征提取或卷积操作,这根据RCNN类算法下的分支来决定。然后基于就建议提取的目标图像将其标准化为CNN的标准输入。
(2)CNN特征提取:标准卷积神经网络根据输入执行诸如卷积或池化的操作以获得固定维度输出。也就是说,在特征提取之后,特征映射被卷积和汇集以获得输出。
(3)分类与边界回归:实际上有两个子步骤,一个是对前一步的输出向量进行分类(分类器需要根据特征进行训练); 第二种是通过边界回归框回归(缩写为bbox)获得精确的区域信息。其目的是准确定位和合并完成分类的预期目标,并避免多重检测。在分类器的选择中有支持向量机SVM,Softmax等等;边界回归有bbox回归,多任务损失函数边框回归等 。
RCNN的缺点:
在RCNN刚刚被发明出来的2014年,RCNN在目标检测与行人检测上取得了巨大的成就,然而效率低下,花费时间长等一系列的问题的产生,还是导致了RCNN的运用并没有取得大范围的应用,其最大的问题有三:需要事先提取多个候选区域对应的图像。这一行为会占用大量的磁盘空间;针对传统的CNN来说,输入的map需要时固定尺寸的,而归一化过程中对图片产生的形变会导致图片大小改变,这对CNN的特征提取有致命的坏处;每个region proposal都需要进入CNN网络计算。进而会导致过多次的重复的相同的特征提取,这一举动会导致大大的计算浪费。在这之后,随之而来的Fast RCNN逐渐进入了人们的眼帘。
Fast RCNN
Fast RCNN较之前的RCNN相比,有三个方面得到了提升:
1. 测试时的速度得到了提升。 RCNN算法与图像内的大量候选帧重叠,导致提取特征操作中的大量冗余。 而Fast RCNN则很好的解决了这一问题。
2. 训练时的速度得到了提升。
3. 训练所需的空间大。RCNN中分类器和回归器需要大量特征作为训练样本。而Fast RCNN则不再需要额外储存。
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区域提取固定的维度特征表示,然后确保每个区域的后续分类可以正常执行。
ROI pooling层详解
ROI是指的在SS完成后得到的“候选框”在特征图上的映射;
在Faster RCNN中,候选框是经过RPN产生的,然后再把各个“候选框”映射到特征图上,得到ROIs特征图:在Fast RCNN中,它位于RoI Pooling之前,在Faster RCNN中,它是与RPN共享那个特征图,通常我们常常称之为“share_conv”;
RoI Pooling层将每个候选区域分为m * n个块。 针对每个块执行最大池操作,使得特征映射上不同大小的候选区域被变换为均匀大小的特征向量。 然后送入下一层。 举例来说,某个 ROI区域坐标为( x1, y1, x2, y2), 那么输入尺寸大小为( y2− y1)∗( x2− x1); 如果合并输出的大小为池高乘池宽,即pooledheight∗pooledwidth,则每个网格的大小都是为
虽然ROI Pooling可以看做是针对ROI区域的特征图像的池化操作,但有个问题。那就是因为不是固定大小的输入,会导致每次池化网格的大小都必须手动计算。这也将是在以后会得到改进的地方之一 。
因此先用Selective Search等proposal提取算法得到了候选框坐标, 然后输入到卷积神经网络中。其目的是预测每个候选框中包含的对象。但是在以上步骤中神经网络只是起到了在ROI区域的分类作用,并没有起到对整个图片进行分类。
在RCNN中,在进行卷积操作之前一般都是先将图片分割与形变到固定尺寸,这也正是RCNN的劣势之处。不得不说,这对检测来说是十分不应该出现的,这会让图像产生形变,或者图像变得过小,使一些特征产生了损失,继而对之后的特征选择产生巨大影响。
Fast RCNN与RCNN不同。其不同之处如下:Fast RCNN在数据的输入上并不对其有什么限制,而实现这一没有限制的关键所在正是ROI Pooling层。该层的作用是可以在任何大小的特征映射上为每个输入ROI区域提取固定的维度特征表示,然后确保每个区域的后续分类可以正常执行。经过Fast RCNN的作者的努力,回归层完成了,起作用为输出为4*K维数组t,表示属于 K- class时应该进行全景变换的参数,该参数进行了优化,针对每个ROI区域坐标的便宜都需要进行优化。tk=(tkx,tky,tkw,tkh),0≤k≤K是多类检测的类别序号。假设对于类别k∗,地面真值ground truth坐标在图中被标注:
t*=(tx*,ty*,tw*,th*) 真实的坐标值
t=(tx,ty,tw,th) 预测的坐标值
损失函数
这里中的x即−,即对应坐标的差距。函数是(-1,1)之间的二次函数,其他区域是线性函数。此处的回归操作与RCNN中的回归操作相同。但是有一点,其仅针对特定候选框(即Ground Truth的IoU大于特定阈值)。
纵使Fast RCNN与RCNN相比提升了不少,但是Fast RCNN仍旧有许多不足之处:因为Fast RCNN使用的是selective search选择性搜索,这一过程十分耗费时间,其进行候选区域提取所花费的时间约为2~3秒,而提取特征分类仅需要0.32秒[19],这会造成无法满足实时应用需求,而且因为使用selective search来预先提取候选区域,Fast RCNN并没有实现真正意义上的端到端训练模式,因此在众人的努力下,Faster RCNN应运而生。
Faster RCNN
从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.回归器回归并进行位置调整。
区域代网络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)。
在候选区域(锚点anchor)部分,该特征可以被视为大小为51 * 39的256通道图像:三种面积{128*128,256*256,512*512}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors即锚点。下图示出51*39个anchor中心,以及9种anchor示例。
在RPN中,reg与cls层分别是进行窗口分类与位置精修的[21]。分类层(cls_score)输出9个锚点属于每个位置的前景和背景的概率。在每个位置的bbox_pred输出中,9个锚点对应点应该是泛化的(x,y,w,h)。对于每个位置来说,分类层从256维特征输出属于前景和背景的概率。而回归图层则是从256维特征中输出4个平移和缩放参数。
RPN网络有两个同级输出层,cls_score和 bbox_prdict层,都是全连接层。
其具体操作为输出k+1维数组p,表示属于k类和背景的概率。对每个RoI(Region of Interesting)输出离散型概率分布
p=(p0,p1,p2…pk)
通常,p由来自k + 1级完全连接层的softmax激活函数计算。
bbox_prdict层的作用是调整候选区域的位置并输出边界框的回归位移。
其具体操作为输出一个4 * K维数组t,它表示当它们属于k-class时应该被泛化的参数。
tk =(tkx,tky,tkw ,tkh)
k表示类别索引,它是指相对于对象建议尺度的常量平移,它是指对数空间中对象建议的高度和宽度。loss_cls层评估分类损失函数,由真实分类的概率决定:
loss_bbox评估检测框定位的损失函数。比较真实分类对应的预测平移缩放参数和tu=(tux,tuy,tuw ,tuh)和真实平移缩放参数之间的差异:
其中,smooth L1损失函数为:
smooth L1损失函数曲线如下图2.11所示,与L2损失函数相比,它对异常值不敏感。 可以控制梯度的大小,这方便在训练过程中不易失控。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185861.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...