产看网站权重,wordpress变化,邯郸网站设计怎么注册,做网站可能遇到的困难版权声明#xff1a;本文为博主原创文章#xff0c;未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/88016151
一、目标检测常见算法
object detection#xff0c;就是在给定的图片中精确找到物体所在位置#xff0c;并标注出物体的类别。所以本文为博主原创文章未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/88016151
一、目标检测常见算法
object detection就是在给定的图片中精确找到物体所在位置并标注出物体的类别。所以object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
然而这个问题可不是那么容易解决的物体的尺寸变化范围很大摆放物体的角度姿态不定而且可以出现在图片的任何地方更何况物体还可以是多个类别。
目前学术和工业界出现的目标检测算法分成3类
1. 传统的目标检测算法Cascade HOG/DPM Haar/SVM以及上述方法的诸多改进、优化
2. 候选区域/框 深度学习分类通过提取候选区域并对相应区域进行以深度学习方法为主的分类的方案如
R-CNNSelective Search CNN SVM
SPP-netROI Pooling
Fast R-CNNSelective Search CNN ROI
Faster R-CNNRPN CNN ROI
R-FCN
等系列方法
3. 基于深度学习的回归方法YOLO/SSD/DenseBox 等方法以及最近出现的结合RNN算法的RRC detection结合DPM的Deformable CNN等 传统目标检测流程
1区域选择穷举策略采用滑动窗口且设置不同的大小不同的长宽比对图像进行遍历时间复杂度高
2特征提取SIFT、HOG等形态多样性、光照变化多样性、背景多样性使得特征鲁棒性差
3分类器分类主要有SVM、Adaboost等
二、传统的目标检测算法
2.1 从图像识别的任务说起
这里有一个图像任务既要把图中的物体识别出来又要用方框框出它的位置。 这个任务本质上就是这两个问题一图像识别二定位。
图像识别classification
输入图片
输出物体的类别
评估方法准确率 定位localization
输入图片
输出方框在图片中的位置x,y,w,h
评估方法检测评价函数intersection-over-union关于什么是IOU请参看本深度学习分类下第55题https://www.julyedu.com/question/big/kp_id/26/ques_id/2138 卷积神经网络CNN已经帮我们完成了图像识别判定是猫还是狗的任务了我们只需要添加一些额外的功能来完成定位任务即可。
定位的问题的解决思路有哪些
思路一看做回归问题
看做回归问题我们需要预测出x,y,w,h四个参数的值从而得出方框的位置。 步骤1:
*先解决简单问题 搭一个识别图像的神经网络
*在AlexNet VGG GoogleLenet上fine-tuning一下关于什么是微调fine-tuning请参看本深度学习分类下第54题https://www.julyedu.com/question/big/kp_id/26/ques_id/2137 步骤2:
*在上述神经网络的尾部展开也就说CNN前面保持不变我们对CNN的结尾处作出改进加了两个头“分类头”和“回归头”
*成为classification regression模式 步骤3:
*Regression那个部分用欧氏距离损失
*使用SGD训练
步骤4:
*预测阶段把2个头部拼上
*完成不同的功能
这里需要进行两次fine-tuning
第一次在ALexNet上做第二次将头部改成regression head前面不变做一次fine-tuning
Regression的部分加在哪
有两种处理方法
•加在最后一个卷积层后面如VGG
•加在最后一个全连接层后面如R-CNN
regression太难做了应想方设法转换为classification问题。
regression的训练参数收敛的时间要长得多所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。
思路二取图像窗口
•还是刚才的classification regression思路
•咱们取不同的大小的“框”
•让框出现在不同的位置得出这个框的判定得分
•取得分最高的那个框
左上角的黑框得分0.5 右上角的黑框得分0.75 左下角的黑框得分0.6 右下角的黑框得分0.8 根据得分的高低我们选择了右下角的黑框作为目标位置的预测。
注有的时候也会选择得分最高的两个框然后取两框的交集作为最终的位置预测。
疑惑框要取多大
取不同的框依次从左上角扫到右下角。非常粗暴啊。
总结一下思路
对一张图片用各种大小的框遍历整张图片将图片截取出来输入到CNN然后CNN会输出这个框的得分classification以及这个框图片对应的x,y,h,wregression。
这方法实在太耗时间了做个优化。
原来网络是这样的 优化成这样把全连接层改为卷积层这样可以提提速。 2.2 物体检测Object Detection
当图像有很多物体怎么办的难度可是一下暴增啊。
那任务就变成了多物体识别定位多个物体
那把这个任务看做分类问题 看成分类问题有何不妥
•你需要找很多位置 给很多个不同大小的框
•你还需要对框内的图像分类
•当然 如果你的GPU很强大 恩 那加油做吧…
所以传统目标检测的主要问题是
1基于滑动窗口的区域选择策略没有针对性时间复杂度高窗口冗余
2手工设计的特征对于多样性的变化没有很好的鲁棒性
看做classification 有没有办法优化下我可不想试那么多框那么多位置啊
三、候选区域/窗 深度学习分类
3.1 R-CNN横空出世
有人想到一个好方法预先找出图中目标可能出现的位置即候选区域Region Proposal。利用图像中的纹理、边缘、颜色等信息可以保证在选取较少窗口(几千甚至几百的情况下保持较高的召回率Recall。
所以问题就转变成找出可能含有物体的区域/框也就是候选区域/框比如选2000个候选框这些框之间是可以互相重叠互相包含的这样我们就可以避免暴力枚举所有框了。
大牛们发明好多选定候选框Region Proposal的方法比如Selective Search和EdgeBoxes。那提取候选框用到的算法“选择性搜索”到底怎么选出这些候选框的呢具体可以看一下PAMI2015的“What makes for effective detection proposals”
以下是各种选定候选框的方法的性能对比。 有了候选区域剩下的工作实际就是对候选区域进行图像分类的工作特征提取分类。
对于图像分类不得不提的是2012年ImageNet大规模视觉识别挑战赛ILSVRC上机器学习泰斗Geoffrey Hinton教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分类任务的Top-5 error降低到了15.3%而使用传统方法的第二名top-5 error高达 26.2%。此后卷积神经网络CNN占据了图像分类任务的绝对统治地位。
2014年RBGRoss B. Girshick使用Region Proposal CNN代替传统目标检测使用的滑动窗口手工设计特征设计了R-CNN框架使得目标检测取得巨大突破并开启了基于深度学习目标检测的热潮。 R-CNN的简要步骤如下
(1) 输入测试图像
(2) 利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal
(3) 因为取出的区域大小各自不同所以需要将每个Region Proposal缩放warp成统一的227x227的大小并输入到CNN将CNN的fc7层的输出作为特征
(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类
具体步骤则如下
步骤一训练或者下载一个分类模型比如AlexNet
步骤二对该模型做fine-tuning
•将分类数从1000改为21比如20个物体类别 1个背景
•去掉最后一个全连接层
步骤三特征提取
•提取图像的所有候选框选择性搜索Selective Search
•对于每一个区域修正区域大小以适合CNN的输入做一次前向运算将第五个池化层的输出就是对候选框提取到的特征存到硬盘
步骤四训练一个SVM分类器二分类来判断这个候选框里物体的类别
每个类别对应一个SVM判断是不是属于这个类别是就是positive反之nagative。
比如下图就是狗分类的SVM 步骤五使用回归器精细修正候选框位置对于每一个类训练一个线性回归模型去判定这个框是否框得完美。 细心的同学可能看出来了问题R-CNN虽然不再像传统方法那样穷举但R-CNN流程的第一步中对原始图片通过Selective Search提取的候选框region proposal多达2000个左右而这2000个候选框每个框都需要进行CNN提特征SVM分类计算量很大导致R-CNN检测速度很慢一张图都需要47s。 有没有方法提速呢答案是有的这2000个region proposal不都是图像的一部分吗那么我们完全可以对图像提一次卷积层特征然后只需要将region proposal在原图的位置映射到卷积层特征图上这样对于一张图像我们只需要提一次卷积层特征然后将每个region proposal的卷积层特征输入到全连接层做后续操作。
但现在的问题是每个region proposal的尺度不一样而全连接层输入必须是固定的长度所以直接这样输入全连接层肯定是不行的。SPP Net恰好可以解决这个问题。
3.2 SPP Net
SPPSpatial Pyramid Pooling空间金字塔池化
SPP-Net是出自2015年发表在IEEE上的论文-《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》。
众所周知CNN一般都含有卷积部分和全连接部分其中卷积层不需要固定尺寸的图像而全连接层是需要固定大小的输入。 所以当全连接层面对各种尺寸的输入数据时就需要对输入数据进行cropcrop就是从一个大图扣出网络输入大小的patch比如227×227或warp把一个边界框bounding box的内容resize成227×227等一系列操作以统一图片的尺寸大小比如224*224ImageNet、32*32(LenNet)、96*96等。
所以才如你在上文中看到的在R-CNN中“因为取出的区域大小各自不同所以需要将每个Region Proposal缩放warp成统一的227x227的大小并输入到CNN”。
但warp/crop这种预处理导致的问题要么被拉伸变形、要么物体不全限制了识别精确度。没太明白说句人话就是一张16:9比例的图片你硬是要Resize成1:1的图片你说图片失真不
SPP Net的作者Kaiming He等人逆向思考既然由于全连接FC层的存在普通的CNN需要通过固定输入图片的大小来使得全连接层的输入固定。那借鉴卷积层可以适应任何尺寸为何不能在卷积层的最后加入某种结构使得后面全连接层得到的输入变成固定的呢
这个“化腐朽为神奇”的结构就是spatial pyramid pooling layer。
下图便是R-CNN和SPP Net检测流程的比较
它的特点有两个:
1.结合空间金字塔方法实现CNNs的多尺度输入。
SPP Net的第一个贡献就是在最后一个卷积层后接入了金字塔池化层保证传到下一层全连接层的输入固定。
换句话说在普通的CNN机构中输入图像的尺寸往往是固定的比如224*224像素输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层ROI Pooling使得网络的输入图像可以是任意尺寸的输出则不变同样是一个固定维数的向量。
简言之CNN原本只能固定输入、固定输出CNN加上SSP之后便能任意输入、固定输出。神奇吧
ROI池化层一般跟在卷积层后面此时网络的输入可以是任意尺度的在SPP layer中每一个pooling的filter会根据输入调整大小而SPP的输出则是固定维数的向量然后给到全连接FC层。 2.只对原图提取一次卷积特征
在R-CNN中每个候选框先resize到统一大小然后分别作为CNN的输入这样是很低效的。
而SPP Net根据这个缺点做了优化只对原图进行一次卷积计算便得到整张图的卷积特征feature map然后找到每个候选框在feature map上的映射patch将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层完成特征提取工作。
如此这般R-CNN要对每个区域计算卷积而SPPNet只需要计算一次卷积从而节省了大量的计算时间比R-CNN有一百倍左右的提速。 3.3 Fast R-CNN
SPP Net真是个好方法R-CNN的进阶版Fast R-CNN就是在R-CNN的基础上采纳了SPP Net方法对R-CNN作了改进使得性能进一步提高。
R-CNN与Fast R-CNN的区别有哪些呢
先说R-CNN的缺点即使使用了Selective Search等预处理步骤来提取潜在的边界框bounding box作为输入但是R-CNN仍会有严重的速度瓶颈原因也很明显就是计算机对所有region进行特征提取时会有重复计算Fast-RCNN正是为了解决这个问题诞生的。 与R-CNN框架图对比可以发现主要有两处不同一是最后一个卷积层后加了一个ROI pooling layer二是损失函数使用了多任务损失函数(multi-task loss)将边框回归Bounding Box Regression直接加入到CNN网络中训练关于什么是边框回归请参看本深度学习分类下第56题https://www.julyedu.com/question/big/kp_id/26/ques_id/2139。
(1) ROI pooling layer实际上是SPP-NET的一个精简版SPP-NET对每个proposal使用了不同大小的金字塔映射而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。
换言之这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量而我们知道conv、pooling、relu等操作都不需要固定size的输入因此在原始图片上执行这些操作后虽然输入图片size不同导致得到的feature map尺寸也不同不能直接接到一个全连接层进行分类但是可以加入这个神奇的ROI Pooling层对每个region都提取一个固定维度的特征表示再通过正常的softmax进行类型识别。
(2) R-CNN训练过程分为了三个阶段而Fast R-CNN直接使用softmax替代SVM分类同时利用多任务损失函数边框回归也加入到了网络中这样整个的训练过程是端到端的(除去region proposal提取阶段)。
也就是说之前R-CNN的处理流程是先提proposal然后CNN提取特征之后用SVM分类器最后再做box regression而在Fast R-CNN中作者巧妙的把box regression放进了神经网络内部与region分类和并成为了一个multi-task模型实际实验也证明这两个任务能够共享卷积特征并相互促进。 所以Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal CNN这一框架实时检测的希望原来多类检测真的可以在保证准确率的同时提升处理速度也为后来的Faster R-CNN做下了铺垫。
画一画重点
R-CNN有一些相当大的缺点把这些缺点都改掉了就成了Fast R-CNN。
大缺点由于每一个候选框都要独自经过CNN这使得花费的时间非常多。
解决共享卷积层现在不是每一个候选框都当做输入进入CNN了而是输入一张完整的图片在第五个卷积层再得到每个候选框的特征
原来的方法许多候选框比如两千个--CNN--得到每个候选框的特征--分类回归
现在的方法一张完整图片--CNN--得到每张候选框的特征--分类回归
所以容易看见Fast R-CNN相对于R-CNN的提速原因就在于不过不像R-CNN把每个候选区域给深度网络提特征而是整张图提一次特征再把候选框映射到conv5上而SPP只需要计算一次特征剩下的只需要在conv5层上操作就可以了。
在性能上提升也是相当明显的 3.4 Faster R-CNN
Fast R-CNN存在的问题存在瓶颈选择性搜索找出所有的候选框这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢
解决加入一个提取边缘的神经网络也就说找到候选框的工作也交给神经网络来做了。
所以rgbd在Fast R-CNN中引入Region Proposal Network(RPN)替代Selective Search同时引入anchor box应对目标形状的变化问题anchor就是位置和大小固定的box可以理解成事先设置好的固定的proposal。
具体做法
•将RPN放在最后一个卷积层的后面
•RPN直接训练得到候选区域 RPN简介
•在feature map上滑动窗口
•建一个神经网络用于物体分类框位置的回归
•滑动窗口的位置提供了物体的大体位置信息
•框的回归提供了框更精确的位置 一种网络四个损失函数;
•RPN calssification(anchor good.bad)
•RPN regression(anchor-propoasal)
•Fast R-CNN classification(over classes)
•Fast R-CNN regression(proposal -box) 速度对比 Faster R-CNN的主要贡献就是设计了提取候选区域的网络RPN代替了费时的选择性搜索Selective Search使得检测速度大幅提高。
最后总结一下各大算法的步骤
RCNN
1.在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search)
2.每个候选框内图像块缩放至相同大小并输入到CNN内进行特征提取
3.对候选框中提取出的特征使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框用回归器进一步调整其位置
Fast R-CNN
1.在图像中确定约1000-2000个候选框 (使用选择性搜索)
2.对整张图片输进CNN得到feature map
3.找到每个候选框在feature map上的映射patch将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
4.对候选框中提取出的特征使用分类器判别是否属于一个特定类
5.对于属于某一类别的候选框用回归器进一步调整其位置
Faster R-CNN
1.对整张图片输进CNN得到feature map
2.卷积特征输入到RPN得到候选框的特征信息
3.对候选框中提取出的特征使用分类器判别是否属于一个特定类
4.对于属于某一类别的候选框用回归器进一步调整其位置
简言之即如本文开头所列
R-CNNSelective Search CNN SVM
SPP-netROI Pooling
Fast R-CNNSelective Search CNN ROI
Faster R-CNNRPN CNN ROI
总的来说从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来基于深度学习目标检测的流程变得越来越精简精度越来越高速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。
四、基于深度学习的回归方法
4.1 YOLO (CVPR2016, oral)
(You Only Look Once: Unified, Real-Time Object Detection)
Faster R-CNN的方法目前是主流的目标检测方法但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性这类方法使用了回归的思想利用整张图作为网络的输入直接在图像的多个位置上回归出这个位置的目标边框以及目标所属的类别。
我们直接看上面YOLO的目标检测的流程图 (1) 给个一个输入图像首先将图像划分成7*7的网格
(2) 对于每个网格我们都预测2个边框包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率
(3) 根据上一步可以预测出7*7*2个目标窗口然后根据阈值去除可能性比较低的目标窗口最后NMS去除冗余窗口即可关于什么是非极大值抑制NMS请参看本深度学习分类下第58题https://www.julyedu.com/question/big/kp_id/26/ques_id/2141。
可以看到整个过程非常简单不再需要中间的region proposal找目标直接回归便完成了位置和类别的判定。 小结YOLO将目标检测任务转换成一个回归问题大大加快了检测的速度使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息使得false positive比例大幅降低充分的上下文信息。
但是YOLO也存在问题没有了Region Proposal机制只使用7*7的网格回归会使得目标不能非常精准的定位这也导致了YOLO的检测精度并不是很高。
4.2 SSD
(SSD: Single Shot multibox Detector)
上面分析了YOLO存在的问题使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合region proposal的思想实现精准一些的定位SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了这点。 上图是SSD的一个框架图首先SSD获取目标位置和类别的方法跟YOLO一样都是使用回归但是YOLO预测某个位置使用的是全图的特征SSD预测某个位置使用的是这个位置周围的特征感觉更合理一些。
那么如何建立某个位置和其特征的对应关系呢可能你已经想到了使用Faster R-CNN的anchor机制。如SSD的框架图所示假如某一层特征图(图b)大小是8*8那么就使用3*3的滑窗提取每个位置的特征然后这个特征回归得到目标的坐标信息和类别信息(图c)。
不同于Faster R-CNN这个anchor是在多个feature map上这样可以利用多层的特征并且自然的达到多尺度不同层的feature map 3*3滑窗感受野不同。
小结SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制使用全图各个位置的多尺度区域特征进行回归既保持了YOLO速度快的特性也保证了窗口预测的跟Faster R-CNN一样比较精准。SSD在VOC2007上mAP可以达到72.1%速度在GPU上达到58帧每秒。 --------------------- 作者少林达摩祖师 来源CSDN 原文https://blog.csdn.net/special00/article/details/90237513 版权声明本文为作者原创文章转载请附上博文链接 内容解析ByCSDN,CNBLOG博客文章一键转载插件