图像处理 目标检测

2019-09-30 21:35:38 qq_41413256 阅读数 219

目标检测(object detection)

目标检测的目的

目标检测是找到图像中感兴趣的目标(物体),确定他们的位置和大小。我的理解就是将目标图中的物体用算法(传统算法或则是基于深度学习的算法)实现,用一个个的框框框出来,然后识别框框中的物体是什么,也是为下一的目标识别做准备。
机器视觉中的图像处理有四大任务:

  1. 分类(classification):假定给定一幅图像或者一段视频,要判断里面有什么类别的目标。
  2. 定位(location):定位出目标的位置,一般用边框将物体圈出来。
  3. 检测(detection):定位出目标的位置并检测出目标是什么。

传统的目标检测方法

  1. Viola-Jones(VJ):采用积分图特征+AdaBoost方法进行人脸检测等。
  2. HOG+SVM用于行人检测,通过对行人目标候选区域提取HOG特征,结合SVM分类器进行判定。
  3. DPM:基于HOG特征检测的一个变种,该方法是非深度学习方法中检测效果最好,性能最优的。

基于深度学习的目标检测

  1. One-stageYOLO和SSD系列):直接回归初目标框位置,不用产生候选框。
  2. Two-stageFaster RCNN系列):利用RPN网络对候选框进行推荐。
    上面写了一大堆,其实我也不是很清楚要做什么,这只是一个概述,方便我今后学习用的。就酱
2018-04-18 20:02:11 Gentleman_Qin 阅读数 9848

高光谱图像处理之目标检测技术

一、高光谱图像处理之目标检测


1、高光谱图像目标检测的发展趋势和研究现状:

   20世纪80年代末,美国的一些研究机构开始利用高光谱图像数据进行目标检测方面的研究。自上世纪九十年代,国外出现了进行高光谱图像目标检测算法理论研究的研究组。由Reed和Yu提出了基于广义似然比检验的恒虚警RX 检测器(RXD)。Chang课题组提出了基于正交子空间投影的OSP检测方法, Harsanyi提出了基于约束能量最小化的CEM算法。未来高光谱目标检测的发展将会越来越重视实用性,算法的性能将会进一步提高,同时更也加适合使用FPGA硬件对其进行加速从而具有更高的实际应用价值。

2、高光谱目标检测技术的应用范围:

   高光谱目标检测具有较强的实用性,可应用于公共安全、环境检测、城市规划、食品卫生、地质岩矿的识别等众多方面。


                         图1.1 高光谱图像数据结构

3、高光谱图像数据的特点:

   高光谱图像数据“图谱合一”,具有丰富的光谱维信息。高光谱图像数据共有三个维度,如图2.1所示,其中,图像空间维信息x、y用于表示物体的实际空间分布,而光谱波段L用于表示每个像素的光谱属性。

4、高光谱图像目标检测原理:

   高光谱图像的各波段在成像范围内都是连续成像,因此高光谱的光谱曲线一般是平滑的、连续的曲线。高光谱图像的波段L中涵盖了物质的光谱信息,而每种物质的光谱信息都不一样,我们可以利用图像像素的光谱波段L所包含的特定的光谱信息来判断该像素所代表的特定的物质种类。

5、高光谱图像目标检测流程:


                    图1.2 高光谱图像目标检测流程图

   如图所示,对于拍摄得到的原始高光谱图像数据,需要先对数据进行预处理,包括数据格式化、无用数据剔除以及亮度到反射率的转化等。同时,对于遥感仪拍摄的高光谱图像还需要进行辐射校正,在目标检测前,应对数据进行调整,包括数据归一化等。最后根据已知的先验信息选择相应的目标检测算法进行检测。

6、现场可编程门阵列(FPGA)在高光谱图像处理中的应用:

   一个FPGA可以大致定义为一系列互连的逻辑块。这些器件的主要优点之一是,为了实现不同的组合或时序逻辑功能,可以根据需要多次重新配置逻辑块及其互连。这一特性为FPGA提供了软件和硬件系统的优势。因为FPGA具有比专用集成电路(ASIC)更多的灵活性和更短的开发时间,更接近GPU提供的性能,但同时功耗要比GPU低得多。FPGA供应商通过改进FPGA体系结构(包括优化的硬件模块)并利用最新的硅技术不断提升FPGA的功耗和能效。可重构性、低功耗的特点以及FPGA对空间电离辐射耐受性的提高,这些因素已经使得FPGA成为目前板载高光谱遥感的最佳选择之一。


二、算法分类、比较和选择:


1、方法分类:

   高光谱目标检测方法按照先验信息是否已知分为监督方法和非监督方法。前者用于目标光谱已知的情况下,利用目标光谱与图像像元光谱进行匹配,从而完成目标检测,比如CEM算法、OSP算法;后者多用于异常目标检测,一般不需要目标和背景的先验信息,根据高光谱图像数据获取目标检测所需要的数据,然后根据数据的大小来判断是否为异常目标,比如RXD算法。

2、CEM、OSP、RXD算法的区别:

(1)CEM(Constrained Energy Minimization)算法:

   CEM算法主要思想是设计一个FIR线性滤波器,使得在满足约束条件式的情况下滤波器的输出能量最小。该算法不需要图像的背景信息,只需要知道要检测的先验光谱信息(目标向量)即可,具体方法是通过高光谱图像数据和先验已知的待检测目标确定一个滤波向量,让图像经过该滤波向量即可得到检测结果,其中滤波向量的作用是滤除图像中的非目标像素,让感兴趣的目标能够通过,同时抑制由其他信号带来的滤波器输出能量。

(2)OSP(Orthogonal Subspace Projection)算法:

   OSP算法与CEM算法相比,最大区别在于不仅需要目标的先验知识,还需要图像中背景的先验知识,但在实际中中这些先验信息很难全部得到。在高光谱检测中我们一般用其来检测异常。该算法需要前提条件:图像信息、目标像元、非目标像元(异常目标)信息。

(3)RXD(Reed-XiaoliDetector)算法:

   RXD算法是异常目标检测领域中最基础的算法,不需要目标光谱的先验知识,而是基于背景服从多元正态分布的假设,通过检测与背景分布中心相比属于异常像元,并在这些感兴趣区域进一步查找可能存在的目标。该算法主要针对的是小目标检测问题。

(4)确定所采用的目标检测算法:

   由于我们的应用场景多为有特定目标的目标检测,CEM正是针对未知场景中可能存在的特定目标的检测,只需要知道目标的光谱信息即可,而RXD算法适应于对特定场景的异常(未知目标)检测,而OSP算法除了需要已知目标光谱还需要背景信息。综上,我决定采用CEM算法进行高光谱目标检测的实现。


三、CEM算法分析:


1、算法步骤

(1)对高光谱图像进行预处理,得到二维化和归一化后的数据r(L*N);

(2)根据图像数据r,求得图像的自相关矩阵:

               

(3)确定目标光谱向量dd大小为L*1);

(4)根据公式:


                                   

   设计FIR线性滤波器:


(5)将归一化后的数据经过FIR滤波器,得到输出信号y

           

2、问题分解:

   CEM算法的实现可分为三部分:自相关矩阵、矩阵求逆、线性FIR滤波器。


图 1.3 CEM算法分解流程图

   如图所示,首先根据高光谱图像r求得自相关矩阵,再利用矩阵求逆模块求得自相关矩阵的逆矩阵,结合从光谱库获取到的目标向量的先验信息求得FIR滤波器的滤波向量,最后将高光谱图像r通过FIR滤波器即可得到最终的检测结果。


四、CEM算法实现:


1、算法流程:

   在MATLAB和C语言中实现CEM算法的具体流程如图所示,因为语言特性是串行执行命令,所以在编写程序时与硬件设计比较更加直接明了。

图1.4 CEM算法流程图

2、数据预处理:

   对前期得到的高光谱图像在MATLAB平台上进行预处理。这一过程主要对原始的200*200*189大小的高光谱图像进行操作:

(1)二维化:通过调用MATLAB里面的reshape()函数实现。

(2)归一化:采用“min-max”方法。 具体步骤是先找到数据的最大值
(maxA)和最小值(minA), 通过 y = (x-minA) /(maxA-minA) 计算的 y 即为归一化后的数据。高光谱数据量大,也造成了数据的存储比较困难,数据在程序中的存储等处理

3、CEM算法的MATLAB实现:

   首先,根据 2 对高光谱图像数据进行预处理,而后求其自相关矩阵。高光谱图像数据的大小为200*200*189,其中200*200为像素数,189为波段数。

              

   首先用reshape()函数和transpose()函数将200*200*189的三维高光谱图像数据转为189*40000的二维矩阵,再用自己写的Normalize()函数对矩阵数据用“min-max”方法进行归一化,然后根据公式式利用MATLAB中的矩阵求转置函数transpose()和矩阵相乘操作得到一个189*189的矩阵,最后对189*189的矩阵除以像素数N即可得到自相关矩阵。

最后,根据先验已知的目标向量和自相关矩阵R的逆矩阵(在MATLAB中矩阵R求逆即为(1/R))求得FIR滤波器,将高光谱图像模拟数据通过FIR滤波器,即可得到最终的检测结果。(本次测试中选取的目标向量 d 是模拟图像中的 C 物质)

4、CEM算法的C语言实现:

   在Visual Studio平台上完成CEM算法C程序的编写。相比于MATLAB实现,CEM算法的C语言实现主要难点在于矩阵运算。因为在C语言中,矩阵的转置、相乘、求逆等操作均没有现有的函数,需要编写相应的函数。在实现矩阵基本运算过程中,通过动态分配内存运用二维指针传递参数,完成矩阵加减法运算、矩阵转置运算、矩阵相乘运算以及矩阵求逆运算,这样可以节省存储空间,使用完后释放空间即可。

CEM算法的C语言实现主要包括如下步骤:

(1)在MATLAB中,将归一化后的高光谱图像数据转为189*40000的二维形式,保存为CEM.mat;

(2)编写矩阵初始化、矩阵转置、矩阵相乘、矩阵求逆、内存释放函数;

(3)编写main函数,读CEM.mat,调用上述函数,求得FIR滤波器,进而获得输出信号y,将其写入CEM.txt;

(4)在MATLAB中显示CEM.txt中数据所代表的图像。

5、难点解决:

(1)矩阵转置

   矩阵转置函数的输入是大小为m*n的矩阵A,输出是大小n*m为的矩阵B。采用嵌套的for循环分别遍历矩阵的行和列,将输入的二维矩阵A按列读出,重新按行写入新矩阵B中,即可实现矩阵的转置。

(2)矩阵相乘

   矩阵相乘函数的输入是大小m*n为的矩阵A和n*k的矩阵B,输出是大小为m*k的矩阵C。采用嵌套的for循环分别遍历矩阵的行和列,首先将矩阵A按行读出,矩阵B按列读出,然后将读出的矩阵A的第i行和矩阵B的第j列对应位相乘求和,将计算的结果写入矩阵C第i行第j列元素中。

(3)矩阵求逆——QR分解求逆

   QR分解求逆的原理是:对于可逆矩阵A,首先利用QR分解将A矩阵分解为Q矩阵和R矩阵。即A=QR,其中Q是正交矩阵,R是上三角矩阵。然后将公式左右同时求逆,可以求得A的逆矩阵,其中Q矩阵的逆矩阵和转置矩阵相同,R求逆有特定的公式。QR分解求逆的运算较为简单,且数据稳定度较高,可以得到误差较小的求逆结果。

6、算法实现结果和对比分析:

1)MATLAB和C语言实现CEM算法的检测结果如图所示:

       

      (a)               (b)            (c)

图1.6 原图CEM算法检测结果:(a)原图(每一行是一种物质)(b)MATLAB检测C物质(c)C语言检测C物质

 

通过对MATLAB和C语言实现结果进行对比,发现二者均成功实现了CEM算法并完成了对目标的检测,观察检测结果基本无差异。

######### 转载请注明出处:https://blog.csdn.net/Gentleman_Qin/article/details/79992314 #########


2018-04-17 11:11:07 qq_38906523 阅读数 18436

目标检测是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智慧到当今RCNN、YOLO等深度学习土壤孕育下的GPU暴力美学,整个目标检测的发展可谓是计算机视觉领域的一部浓缩史。本文简要回顾了从1994到2017一共二十余年间目标检测的发展历程。

01

A Road Map

从过去的十多年来看,自然图像的目标检测算法大体上可以分为基于传统手工特征的时期(2013之前)以及基于深度学习的目标检测时期(2013~今),如下图所示。从技术发展上来讲,目标检测的发展则分别经历了“包围框回归”、“深度神经网络兴起”、“多参考窗口(Multi-References,又称Anchors)”、“难样本挖掘与聚焦”以及“多尺度多端口检测”几个里程碑式的技术进步。下面将分别对这些算法和其中采用的技术逐一进行介绍。


自然图像目标检测算法发展历程图

02

基于经典手工特征的目标检测算法


早期的目标检测算法大多是基于手工特征所构建的。由于在深度学习诞生之前缺乏有效的图像特征表达方法,人们不得不尽其所能设计更加多元化的检测算法以弥补手工特征表达能力上的缺陷。同时,由于计算资源的缺乏,人们不得不同时寻找更加精巧的计算方法对模型进行加速。


【代表算法1】Viola-Jones 检测器[1]-[2]

【代表算法2】HOG行人检测器[3]

【代表算法3】可变形部件模型[8]-[12]


Viola-Jones 检测器:


2001年Paul Viola和MichaelJones在CVPR上发表了一篇跨时代意义的文章[1],后人将文章中的人脸检测算法称之为Viola-Jones(VJ)检测器。VJ检测器在17年前极为有限的计算资源下第一次实现了人脸的实时检测,速度是同期检测算法的几十甚至上百倍,极大程度地推动了人脸检测应用商业化的进程。VJ检测器的思想深刻地影响了目标检测领域至少10年的发展。


VJ检测器采用了最传统也是最保守的目标检测手段——滑动窗口检测,即在图像中的每一个尺度和每一个像素位置进行遍历,逐一判断当前窗口是否为人脸目标。这种思路看似简单,实则计算开销巨大。VJ人脸检测之所以器能够在有限的计算资源下实现实时检测,其中有三个关键要素:多尺度Haar特征的快速计算,有效的特征选择算法以及高效的多阶段处理策略。


在多尺度Harr特征快速计算方面,VJ检测器使用积分图对特征提取进行加速。积分图可以使特征计算量与窗口的尺寸无关,同时也避免了处理多尺度问题时建图像金字塔这一耗时的过程。


在特征选择算法方面,与传统意义上的手工特征不同的是,VJ检测器中使用的Harr特征并非是人为事先设计好的。VJ检测器使用了过完备的随机Haar特征,并通过Adaboost算法从一个巨大的特征池(约180k维)中进行特征选择,选取出对于人脸检测最有用的极少数几种特征从而降低不必要的计算开销。


在多阶段处理方面,作者提出了级联决策结构,并将其形象地称之为“瀑布”(Cascades)。整个检测器由多级Adaboost决策器组成,每一级决策器又由若干个弱分类决策桩(Decision Stump)组成。瀑布的核心思想是将较少的计算资源分配在背景窗口,而将较多的计算资源分配在目标窗口:如果某一级决策器将当前窗口判定为背景,则无需后续决策就可继续开始下一个窗口的判断。


HOG行人检测器:


HOG特征最早是为解决行人检测问题所提出。HOG特征可以认为是在梯度方向直方图特征基础上的又一次重要改进,是所有基于梯度特征的目标检测器的基础。HOG检测器是沿用了最原始的多尺度金字塔+滑窗的思路进行检测。为了检测不同大小的目标,通常会固定检测器窗口的大小,并逐次对图像进行缩放构建多尺度图像金字塔。为了兼顾速度和性能,HOG检测器采用的分类器通常为线性分类器[3]或级联决策分类器[7]等。


在图像的特征提取过程中,最重要的两个概念是不变性(包括平移不变性、旋转不变性、尺度不变性以及光照不变性等)和区分性(特征的表达能力)。为了兼顾二者的特点,HOG特征采用了如下的策略:将图像所在区域划分为不同的细胞单元(Cell),并在每个细胞内统计梯度方向直方图信息。除此之外,为了进一步增强其光照不变性以及非线性表达能力,HOG特征还首次引入了区块(Block)的概念,将相邻的Cell归并为一个Block,并在Block内对Cell特征进行局部归一化。


可变形部件模型:


可变形部件模型(Deformable Part based Model,DPM)是基于经典手工特征的检测算法发展的顶峰,连续获得VOC07、08、09三年的检测冠军。DPM最早由芝加哥大学的P. Felzenszwalb等人提出[8],后由其博士生R.Girshick改进[9]-[12]。2010年,P.Felzenszwalb和R. Girshick被VOC授予“终身成就奖”。DPM的主要思想可简单理解为将传统目标检测算法中对目标整体的检测问题拆分并转化为对模型各个部件的检测问题,然后将各个部件的检测结果进行聚合得到最终的检测结果,即“从整体到部分,再从部分到整体”的一个过程。例如,对汽车目标的检测问题可以在DPM的思想下分解为分别对车窗、车轮、车身等部件的检测问题,对行人的检测问题也可以类似地被分解为对人头、四肢、躯干等部件的检测问题。


在模型结构方面,DPM可视为HOG检测器在其结构上进行了拓展。整个DPM检测器由基滤波器(Root-filter)和一系列部件滤波器(Part-filter)构成。这一部分工作由Felzenszwalb等人在07年提出[8],并称其为星型模型(Star-model)。后来Girshick又在星型模型的基础上进一步将其拓展为混合模型(Mixture Model)[9]-[12],用于解决真实世界中三维物体不同视角下的检测问题。


在模型优化方面,由于DPM模型在训练过程中并未要求详细标注出各个部件的位置,所以采用了一种弱监督学习的策略。由于部件滤波器可以视为模型中的隐含变量,故Girshick进一步将其转化为隐含变量结构SVM的优化问题,并结合难样本挖掘和随机梯度优化策略对该问题进行求解。


在模型加速方面,Girshick还曾将DPM中的线性SVM分类器“编译”为一系列的级联决策桩(Decision Stump)分类器,在不牺牲精度的前提下,将DPM加速了10倍。值得一提的是,这种加速策略本质上是借鉴了VJ检测器快速检测人脸的技术思路。


在算法的后处理方面,DPM算法采用包围框回归和上下文信息集成这两个方法[10]-[12]进一步提升检测准确率。其中,包围框回归的主要作用是将检测得到的基滤波器以及部件滤波器所对应的包围框进行整合并利用线性最小二乘回归来得到最终精确的包围框坐标。上下文信息集成的作用在于利用全局信息对检测结果进行重新调整。从本质上来讲,上下文信息反映了各个类别的目标在图像中的联合先验概率密度分布,即哪些类别的目标可能同时出现,哪些类别的目标则不太可能同时出现。


虽然近几年基于深度学习的检测模型从精度上已远远超越了DPM,但DPM中的很多思想直到今天依然重要,例如混合模型、难样本挖掘、包围框回归、上下文信息的利用等。时至今日,这些方法还都深深影响着目标检测领域的发展。


03

基于深度学习的目标检测算法(上)

——基于Object Proposals的检测算法


Girshick曾提到[14]:“在过去的几年中(2011-2013),目标检测算法的发展几乎是停滞的,人们大多在低层特征表达基础上构建复杂的模型以及更加复杂的多模型集成来缓慢地提升检测精度”。既然深度卷积网络能够学习到非常鲁棒且具有表达能力的特征表示,那么为何不将其引入目标检测流程中用来提取特征呢?当卷积神经网络在2012年ImageNet分类任务[19]中取得了巨大成功后,Girshick等人抓住了机会打破僵局,于2014年率先提出了区域卷积网络目标检测框架(Regionswith CNN features,R-CNN)[14]。自此目标检测领域开始以前所未有的速度发展。


随着卷积神经网络层数的不断加深,网络的抽象能力、抗平移能力和抗尺度变化能力越来越强。对于图像分类任务来说这诚然是一件好事,然而对于检测任务来说却带来了另一个问题:目标包围框精准的位置越来越难以获得。由此便出现了一个矛盾:如果想让检测算法获得更强的平移不变性和尺度不变性,那就必须一定程度地牺牲特征在目标包围框位置和尺度变化上的敏感性,即协变性;相反,如果想要获得更精确的目标包围框定位结果,就必须在平移不变性和尺度不变性上做一些妥协。所以,如果想要将卷积网络有效应用于目标检测问题中,关键是如何有效解决深度网络的平移/尺度不变性和目标检测问题中平移/尺度协变性要求的矛盾[20]。这迫使人们不得不放弃基于特征图+滑动窗口这一套检测方案,从而将关注点转向寻找更加定位精准的目标候选框检测(Object Proposal Detection)算法上来。


在过去的几年里,伴随着深度学习目标检测算法的发展,有非常多的Object ProposalDetection算法被提出,例如Selective Search[22]、Edge Boxes[23]、BING[24]等等。需要注意的是,基于Object Proposal并非是深度学习检测算法的专属,早在传统的手工特征时期,Uijlings等人[22]就尝试过使用Selective Search + 词袋(Bag of Words)特征进行目标检测。


下面将分别介绍几种基于Object Proposal的深度学习目标检测算法。


【代表算法1】Regions with CNN Features (R-CNN)[14]

【代表算法2】Spatial Pyramid Pooling Networks (SPPNet)[15]

【代表算法3】Fast-RCNN[16]

【代表算法4】Faster-RCNN[17]

【代表算法5】Feature Pyramid Networks


R-CNN:


R-CNN[14]使用了一种非常简单的检测策略,首先在图像中提取Object Proposals,接下来把每个Proposal缩放到相同的大小后使用在ImageNet上训练好的Alexnet网络[19]提取特征,最后再使用SVM分类器进行虚警排除和类别判断。R-CNN在VOC07数据集上取得了惊艳的效果,mAP由33.7%(DPM-v5[25])提升至58.5%。虽然R-CNN取得了很大的进步,但其缺陷也很明显:首先,其训练是多阶段的,较为繁琐和耗时;其次,由于在高密度的候选区域上反复进行特征提取,其检测速度很慢(GPU下每张图40秒,640×480像素)。后来Kaiming He等人提出了SPPNet[15],很好地解决这个问题。


SPPNet:


Kaiming He等人在2014年提出了SPPNet[15],用来解决CNN网络提取特征时要求输入图像尺寸固定的问题。与传统的CNN网络模型相比,其创新点是,在卷积层和全连接层之间添加了一个空间金字塔池化(Spatial Pyramid Pooling, SPP)层。SPPNet可做到不经过候选区域的缩放操作就能实现任意大小、任意长宽比区域的特征提取。在不损失精度的前提下,SPPNet是R-CNN的检测速度的38倍。SPPNet有效解决了候选区域计算冗余的问题,但是依然存在一些缺陷:首先,其训练是仍然是多阶段的;其次,SPPNet在微调网络时,只对其全连接层进行了微调,影响了特征的准确性。后续提出的Fast R-CNN检测器进一步地解决了这些问题。


Fast-RCNN:


2015年,Girshick等人在R-CNN和SPPNet的基础上又提出了FastR-CNN检测器[16]。Fast-RCNN最大的特点在于实现了一种多任务学习方式,实现了在网络微调的同时,对目标分类和包围框回归的同步训练,且训练速度是R-CNN的9倍,检测速度是R-CNN的200倍。在VOC2007数据集上,Fast-RCNN将mAP由RCNN的58.5%提升至70.0%。Fast-RCNN成功地结合了R-CNN和SPPNet两者的优点,但还是需要事先使用外部算法来提取目标后选框,不能够实现端到端的处理。那能不能将候选区域检测这一操作同样也交给网络去做呢?后来的Faster R-CNN解决了这个问题。


Faster-RCNN:


同样是在2015年,在Fast-RCNN被提出后不久,Shaoqing Ren、Kaiming He以及Girshick等人又很快提出了Faster-RCNN算法[17]。Faster-RCNN是第一个真正意义上的端到端的深度学习检测算法,也是第一个准实时(17帧/秒,640×480像素)的深度学习目标检测算法。Faster-RCNN在VOC07上在此将mAP由70.0%提升至78.8%。Faster-RCNN最大的创新点在于设计了候选区域生成网络(RegionProposal Network,RPN),并在其中设计了“多参考窗口”的机制,将Selective Search或Edge Boxes等外部Objectproposal检测算法融合到同一个深度网络中实现。从R-CNN到Fast RCNN再到Faster-RCNN,候选区域生成,特征提取,候选目标确认和包围框坐标回归逐渐被统一到同一个网络框架之中。检测精度由R-CNN的58.8%提升至Faster-RCNN的78.8%,检测速度也由每帧几十秒[14]提升至准实时检测[17]速度。


Feature Pyramid Networks:


在2017年,Tsung-Yi Lin、Piotr Dollar、Ross Girshick和Kaiming He等人又在Faster RCNN的基础上提出了Feature Pyramid Networks(FPN)检测算法。原有的目标检测算法通常都是只采用顶层特征做检测,原因是网络顶层特征的语义信息比较丰富。然而,虽顶层特征的语义信息丰富,但其中的目标位置信息却比较粗略,不利于目标包围框的准确定位;相反,虽然底层特征的语义信息比较少,但其中目标的位置信息却非常准确。因此,FPN的主要思想就是在网络前馈结束后,又将网络中最顶层的特征图像逐层地反馈并与前层的特征图进行融合,在此基础上,再从网络中不同深度的位置引出多个检测端口对其中的不同尺度的目标进行检测。由于网络在前馈过程中天然形成了金字塔形状的特征图,所以FPN对小目标以及尺度分布较大的目标具有天然的检测优势。FPN选择在比VOC规模和难度更大的MSCOCO数据集上进行了测试,取得了当时最佳的检测效果。


04

基于深度学习的目标检测算法(下)

——基于一体化卷积网络的检测算法


最近两年基于深度学习的目标检测算法的发展有两条主线,第一条是基于Object Proposal的检测主线,这条主线基本是按照R-CNN >> SPPNet >> Fast-RCNN >> Faster-RCNN >> FPN发展的;另一条是最近一年提出的一体化卷积网络的检测主线,这条主线基本是按照YOLO >> SSD >> Retina-Net发展的。在第二条主线中,人们抛弃了传统的粗检测+精检测的检测流程,经过单次检测即可直接得到最终的检测结果,因此有着更快的检测速度。


一体化卷积网络检测算法最早可以追溯到上世纪九十年代[30]-[31],当时Yann Lecun等人将其命名为“空间位移神经网络(Space Displacement Neural Network)”。最近两年,一体化卷积网络检测算法受到了更多人的关注,在未来也会有更大的发展空间。下面将分别对这条主线下的YOLO、SSD、Retina-Net三种典型算法进行介绍。


【代表算法1】You Only Look Once (YOLO) [18]

【代表算法2】Single Shot MultiBox Detector (SSD) [28]

【代表算法3】Retina-Net[29]


YOLO:


YOLO[18]是第一个一体化卷积网络检测算法,由Joseph和Girshick等人在2015年提出。该算法最大的优势是速度快,彻底解决了基于深度学习速度上的痛点。该算法的增强版本在GPU上速度为45帧/秒,快速版本速度为155帧/秒(640×480像素)。YOLO是“You Only LookOnce”的缩写,从算法的名字就能够看出来作者彻底放弃了Proposal这一概念,直接将整张图像作为网络的输入,并仅通过一次前向传播直接得到目标包围框的位置和目标的类别。YOLO虽然有着非常快的检测速度,但其精度与Faster-RCNN相比有所下降,尤其是小目标检测效果较差,其定位的准确度也稍有不足。这主要是由于YOLO没有采用类似FasterRCNN中的“多参考窗口”的机制处理多尺度窗口问题。后来提出的SSD算法改善了这些问题。


SSD:


SSD[28]算法由Wei Liu等人于2015年提出。SSD算法吸收了YOLO速度快和RPN定位精准的优点,采用了RPN中的多参考窗口技术,并进一步提出在多个分辨率的特征图上进行检测。SSD在VOC07上取得了接近Faster-RCNN的准确率(mAP=72%),同时保持了极快的检测速度(58帧/秒,640×480像素)。SSD与Faster-RCNN中不同之处有两点:首先,SSD是在多个尺度下的特征图上设置多个参考窗口进行后选框的检测,而Faster-RCNN仅仅是在一个尺度上进行处理;其次,Faster-RCNN是先利用提取目标后选框,然后再在后选框基础上利用检测网络和ROI Pooling进行后续判断,SSD则直接分别在多个尺度的特征图上进行多尺度检测和包围框坐标回归。此外,SSD在训练过程中,还采用了难样本挖掘操作来对图像中难样本进行聚焦。


Retina-Net:


一直以来,虽然基于一体化卷积网络的检测模型的检测速度都明显快于基于Object Proposals的检测算法,其检测精度却一直略逊于后者。Tsung-Yi Lin、 Priya Goyal、Ross Girshick以及Kaiming He等人对其背后的原因进行了研究,并与2017年提出了Retina-Net[29]检测模型。Tsung-Yi Lin等人认为图像中极为不均衡的目标-背景数据分布才是导致一体化卷积网络检测精度较低的主要原因。Retina-Net对传统的交叉熵损失函数进行修正,提出了“聚焦损失函数(Focal Loss)”。通过降低网络训练过程中简单背景样本的学习权重,Retina-Net可以做到对难样本的“聚焦”和对网络学习能力的重新分配,从而使一体化卷积网络检测模型的检测速度和精度全面超越基于Object Proposals的检测模型。事实上,SSD中的难样本挖掘操作也与Focal Loss有着类似思想和效果。


05

目标检测中的关键技术


近年来,尤其是深度学习出现之后,自然图像目标检测领域取得了一系列突破性的进展。早期的目标检测算法[3],[1]-[2],[8]-[12]通常将检测视为一个在图像多个尺度上“滑动窗口遍历+目标背景二分类”的问题。因此,人们常常重点解决特征的表达能力、特征提取的时间效率、多尺度问题的加速方法等问题。最近几年提出的基于深度学习的检测算法[12]-[15],[25]则通常是在以下几个问题上寻求技术突破:


【关键技术1】 多尺度检测方法

【关键技术2】 包围框坐标回归

【关键技术3】 加速策略


多尺度检测方法:


目标检测中的“多尺度”问题包含了“不同大小”和“不同长宽比”两方面的内容。早期的目标检测算法,如VJ检测器检测人脸、HOG检测器检测行人都是针对特定长宽比目标所设计的检测算法,所以并没有考虑“不同长宽比”这一层面的问题;而中后期的目标检测算法开始更多关注于一般性目标的通用检测算法,即开始关注检测“不同长宽比”的目标。下图显示了自然图像目标检测的多尺度检测方式发展流程。


目标检测的多尺度检测方式发展流程


从近20年的目标检测工作来看,处理多尺度的问题采用的方法经历了从最早的“多尺度积分图特征”,到之后的“特征/滤波器金字塔遍历”,再到后来的“Object Proposals”,最后到如今的依靠“深度网络暴力回归”四个阶段的发展历程。


早期检测算法如VJ检测器在处理多尺度问题时,并没有采用“建塔”这一最直观的思路。这是因为这种做法在计算能力有限的时代无法承受如此大的计算量。所以,VJ检测器不得不采取积分图这一种巧妙的方法来解决该问题。在VJ检测器出现之后的几年里,随着硬件计算能力不断提升,更多的人尝试使用更加复杂且表达能力更强的特征进行目标检测。但遗憾的是,高度非线性的特征表示如HOG、LBP等并不具有积分图特征类似的性质,所以人们开始把思路转向了“构建金字塔+滑窗遍历”这一最直观的处理方式。从HOG检测器到DPM,甚至后来的深度学习检测算法Overfeat[32]都是通过这种方式构建的。


需要强调的是,通过建塔的方式只能处理特定长宽比目标的检测问题,例如人脸检测、行人检测等。对于如VOC、MSCOCO等一般性目标检测问题,如果构建不同长宽比、不同尺度的特征金字塔,其计算量直到今天也是难以接受的。不过,DPM虽然没有构建不同长宽比的金字塔,但却可以处理一般性目标检测问题。这是因为DPM采用了Mixture Model这种特殊的处理策略。


随着人们需要检测的目标类别越来越多,目标形态越来越多样化,人们开始思考,是否能够利用一种统一的“粗检测”模型来处理不同长宽比和不同类别的目标?Object Proposals提供了一种很好的解决思路。Object Proposal的检测指的是利用较低的计算量实现对图像中所包含的一般性目标的包围框进行准确定位(不局限与具体的目标类别,也不局限于固定的长宽比)。Object Proposals在近两年基于深度学习的目标检测算法中起到了非常重要的作用。从R-CNN到Fast-RCNN再到Faster-RCNN,Object Proposals从最开始独立的算法模块逐渐演变到最后与网络融为一体。


随着GPU计算性能的提升,人们处理多尺度问题的方法变得越来越直接越来越暴力,而这种暴力在基于一体化卷积网络的检测方法(如YOLO)中达到了顶峰。采用深度网络暴力回归解决多尺度问题的思想非常简单,即直接利用深度网络在目标对应位置提取的特征对其包围框的长宽进行回归。这种做法的优点是设计简单,计算量小,先提条件是图像感受野足够大且深度特征表达能力足够强,缺点是对小目标的包围框定位不够准确。


包围框坐标的回归:


特征的平移、尺度不变性以及定位的准确性一直以来都存在着矛盾。早期的检测算法大多采用低层手工特征,更多关注于图像的边缘、轮廓等信息。这类特征的平移、尺度不变性较差,但对目标进行精确定位时有着天然的敏感性,可对目标边界进行准确的定位。而基于深度学习的检测算法中采用的深度特征由于其具有更强的平移不变性和尺度不变性,随之带来的问题是对目标包围框定位的先天能力不足。下图显示了目标检测中包围框回归技术的发展过程。


对于早期基于手工特征的检测算法以及后来基于Object Proposals的检测算法(如DPM、R-CNN、Fast-RCNN)而言,包围框坐标回归仅仅是作为一种刷榜时提分的手段,这种操作对于检测问题仅仅起到了锦上添花的作用,可有亦可无。然而从Faster-CNN开始,情况发生了转变,这是由于包围框回归不再是一个单独的后处理模块,而是集成在了网络中,并采用多任务损失函数同分类任务一同进行训练。现如今包围框回归已经是算法流程中不可替代的一个标准环节。最近的一些算法在包围框回归精度的提升方面取得了一些成果,比如多次包围框坐标修正[40]、以及概率推断在包围框坐标预测中的应用[41]等。



目标检测的包围框回归技术发展流程

 

加速策略:


目标检测算法的加速一直以来都是该领域一个非常重要的问题。一般来讲,人们对算法的加速通常体现在两个层面,第一个层面是从算法原理角度出发,设计低计算复杂度的算法,并尽可能减少重复计算的开销;第二个层面是从硬件实现层面出发,采用更高并行粒度的算法,并通过多核并行计算提升计算速度,如利用GPU加速。早期的检测算法在目标检测的计算原理方面做了很多加速工作,而后期的深度学习的检测算法的计算量虽然比早期算法要大,但依靠硬件计算能力的提升已经可以轻松实现实时检测的速度。下图显示了自然图像目标检测算法的常见加速策略。



目标检测算法的加速策略一览

 

通常在目标检测算法当中,特征提取部分的计算开销较其他环节的比重最大,所以近年来人们在特征提取层面的加速工作最多,加速效果也最为显著。传统的基于滑动窗口的检测器会在每个尺度的图像上以一定步长移动,并在每个窗口上做特征提取操作。由于相邻滑窗之间通常有很大面积的交叠,因此交叠部分的特征就会存在大量的计算重复。为了解决这个问题,通常在滑窗之前,都会在图像上只整体计算一次特征图(Feature Map),以避免后面滑窗时对特征进行重复提取。事实上,传统目标检测算法中的“图像金字塔”也可以理解为“特征金字塔”,HOG检测器和DPM都是在特征金字塔上进行检测的。值得一提的是,最近几年基于深度学习的目标检测算法,除了R-CNN之外,其余的也都利用了该加速思想。


除了特征图之外,积分图也是早期目标检测算法中常见的加速策略。利用积分图特征进行加速的思想前面在介绍VJ检测器已经介绍过,这里再进行一些更加深入的探讨。利用积分图进行算法加速的本质是利用了卷积操作的积分微分的可分离性[1]-[2]:


如果个g(x)'是稀疏的,那么利用该性质就可以加速计算。事实上,早在VJ检测器之前(1998年),LeCun等人就深入探讨过利用该性质对CNN进行过加速[39],并取得了10倍以上的加速效果。积分图后来也有被用于加速行人检测算法的HOG特征提取过程,在不损失精度的前提下取得了几十倍的加速效果[7][33]。


未完待续……


参考文献


[1]  Viola P, Jones M. Rapid Object Detection Using a Boosted Cascade of SimpleFeatures [C]. IEEE Conference on Computer Vision and Pattern Recognitino, 2001,1:511.


[2] Viola P, Jones M J. Robust Real-Time Face Detection [J]. IEEEInternational Conference on Computer Vision 2004:747-747.


[3] Dalal N, Triggs B. Histograms of Oriented Gradients for Human Detection [C].IEEE Computer Society Conference on Computer Vision & Pattern Recognition.IEEE Computer Society, 2005:886-893.


[4] Turk M, Pentland A. Eigenfaces for recognition [J]. Journal of CognitiveNeuroscience, 1991, 3(1):71-86.


[5] Shotton J, Blake A, Cipolla R. Multiscale Categorical Object RecognitionUsing Contour Fragments [J]. IEEE Transactions on Pattern Analysis and MachineIntelligence, 2008, 30(7):1270-81.


[6] Opelt A, Pinz A, Zisserman A. A Boundary-Fragment-Model for ObjectDetection [C]. European Conference on Computer Vision 2006. Springer BerlinHeidelberg, 2006:575-588.


[7] Zhu Q, Yeh M C, Cheng K T, et al. Fast Human Detection Using a Cascadeof Histograms of Oriented Gradients [C]. IEEE Computer Society Conference onComputer Vision & Pattern Recognition. IEEE, 2006:1491-1498.


[8] Felzenszwalb P, Mcallester D, Ramanan D. A Discriminatively Trained, Multiscale,Deformable Part Model [C]. IEEE Computer Society Conference on Computer Vision &Pattern Recognition. 2008, 8::1-8.


[9] Felzenszwalb P F, Girshick R B, Mcallester D. Cascade Object Detection withDeformable Part Models [C]. IEEE Conference on Computer Vision & PatternRecognition. IEEE Computer Society, 2010:2241-2248.


[10] Forsyth D. Object Detection with Discriminatively Trained Part-BasedModels [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence,2010, 32(9):1627-45.


[11] Girshick R B, Felzenszwalb P F, Mcallester D. Object Detection withGrammar Models[J]. Nips, 2010, 33:442-450.


[12] Girshick R B. From Rigid Templates to Grammars: Object Detection with StructuredModels [J].A Dissertation Submitted to the Faculty of the Division of the PhysicalSciences, 2012.


[13] Girshick R, Iandola F, Darrell T, et al. Deformable Part Models Are ConvolutionalNeural Networks [J]. IEEE Conference on Computer Vision & PatternRecognition, 2015:437-446.


[14] Girshick R, Donahue J, Darrell T, et al. Rich Feature Hierarchies forAccurate Object Detection and Semantic Segmentation [C]. Computer Vision andPattern Recognition. IEEE, 2013:580-587.


[15] He K, Zhang X, Ren S, et al. Spatial Pyramid Pooling in DeepConvolutional Networks for Visual Recognition [J]. IEEE Transactions on PatternAnalysis and Machine Intelligence, 2015, 37(9):1904-16.


[16] Girshick R. Fast R-CNN [OL]. arXiv:1504.08083, 2015.


[17] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks [OL]. arXiv:1506.01497, 2015.


[18] Redmon J, Divvala S, Girshick R, et al. You Only Look Once: Unified,Real-Time Object Detection [OL]. arXiv: 1506.02640, 2016.


[19] Krizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with DeepConvolutional Neural Networks [J]. Advances in Neural Information ProcessingSystems, 25(2):2012.


[20] Dai J, Li Y, He K, et al. R-FCN: Object Detection via Region-based FullyConvolutional Networks [OL]. arXiv: 1605.06409, 2016.


[21] Hosang J, Benenson R, Dollar P, et al. What Makes for EffectiveDetection Proposals? [J]. IEEE Transactions on Pattern Analysis and MachineIntelligence, 2016, 38(4):814-830.


[22] Van d S K E A, Uijlings J R R, Gevers T, et al. Segmentation as SelectiveSearch for Object Recognition [C]. Proceedings IEEE International Conference onComputer Vision. 2011:1879-1886.


[23] Zitnick C L, Dollár P. Edge Boxes: Locating Object Proposals from Edges[C]. European Conference on Computer Vision, 2014:391-405.


[24] Cheng M M, Zhang Z, Lin W Y, et al. BING: Binarized Normed Gradients forObjectness Estimation at 300fps [J]. IEEE International Conference on ComputerVision 2014:3286-3293.


[25] Girshick R., Felzenszwalb P., and McAllester D. Discriminatively TrainedDeformable Part Models, release 5 [OL].http://www.cs.berkeley.edu/˜rbg/latent-v5/.


[26] Zeiler M D, Fergus R. Visualizing and Understanding ConvolutionalNetworks [J]. 2014, 8689:818-833.


[27] Simonyan K, Zisserman A. Very Deep Convolutional Networks forLarge-Scale Image Recognition [J]. Computer Science, 2014.


[28] Liu W, Anguelov D, Erhan D, et al. SSD: Single Shot MultiBox Detector [OL].arXiv: 1512.02325, 2016.


[29] Lin T Y, Goyal P, Girshick R, et al. Focal Loss for Dense ObjectDetection [OL]. arXiv: 1708.02002, 2017.


[30] Vaillant R, Monrocq C, Cun Y L. An Original Approach for the Localizationof Objects in Images [C]. International Conference on Artificial NeuralNetworks. 1993:26-30.


[31] Lecun Y, Bottou L, Bengio Y, et al. Gradient-based Learning Applied to DocumentRecognition [J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.


[32] Sermanet P, Eigen D, Zhang X, et al. OverFeat: Integrated Recognition,Localization and Detection using Convolutional Networks [C]. InternationalConference on Learning Representations, 2013.


[33] Benenson R, Mathias M, Timofte R, et al. Pedestrian Detection at 100 Framesper Second [C]. IEEE International Conference on Computer Vision2012:2903-2910.


[34] Alexe B, Deselaers T, Ferrari V. What is an Object? [C]. IEEEInternational Conference on Computer Vision and Pattern Recognition,2010:73-80.


[35] Ponttuset J, Arbelaez P, Barron J, et al. Multiscale CombinatorialGrouping for Image Segmentation and Object Proposal Generation [J]. IEEETransactions on Pattern Analysis and Machine Intelligence, 2015:1-1.


[36] Kong T, Yao A, Chen Y, et al. HyperNet: Towards Accurate Region ProposalGeneration and Joint Object Detection [C]. IEEE International Conference on ComputerVision and Pattern Recognition. 2016:845-853.


[37] Ghodrati A, Diba A, Pedersoli M, et al. DeepProposal: Hunting Objects byCascading Deep Convolutional Layers [C]. IEEE International Conference on ComputerVision and Pattern Recognition. 2015:2578-2586.


[38] Dollar P, Appel R, Belongie S, et al. Fast Feature Pyramids for ObjectDetection [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence,2014, 36(8):1532-45.


[39] Simard P Y, Bottou L, Haffner P, et al. Boxlets: A Fast Convolution Algorithmfor Signal Processing and Neural Networks [C]. Conference on Advances in NeuralInformation Processing Systems II. MIT Press, 1999:571-577.


[40] Yoo D, Park S, Lee J Y, et al. AttentionNet: Aggregating Weak Directionsfor Accurate Object Detection [J]. IEEE International Conference on ComputerVision. 2015:2659-2667.


[41] Gidaris S, Komodakis N. LocNet: Improving Localization Accuracy forObject Detection [C]. IEEE Conference on Computer Vision and PatternRecognition. 2016:789-798.


2017-11-20 09:22:10 qq_24473903 阅读数 11683

一. 讲座心得

     

        刘洋师兄的讲座深入浅出,用通俗的语言给我们介绍了Computer Vision这个领域的相关知识。

        开篇先介绍了几个很有意思的应用,印象最深刻的是速度与激情的视频,能够在如此快的速度下精确地识别到各个特征目标,很强势!接着向我们解释了一些基本的概念:监督学习&非监督学习、欠拟合&过拟合等等,之前有看过一点机器学习的入门视频,对这些概念有了一些基本的认识,要进一步理解的话还需要更多的应用实践。

        对于如何学好Computer Vision,师兄给了很系统的建议,不管是技能要求还是学习资料都很详细的列举了出来。看着这么多东西有点鸭梨山大,感觉前路漫漫,要学的东西好多,不过有这么多小伙伴一起学习,也有了前进的动力。


How to learn CV(入门):

编程要求:matlab、python、C/C++

数学基础:微积分、矩阵、数理统计、优化理论

技能储备:C++教程(http://www.chinesemooc.org/mooc/4387)

                  python教程(https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000)

                  git教程(https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)

学习资料:CS231N、CS229 阅读中文讲义,完成编程作业(http://blog.csdn.net/ccq976586618/article/details/52159655?locationNum=2&fps=1)

                 机器学习工程师——吴恩达(http://mooc.study.163.com/smartSpec/detail/1001319001.htm)


二. 作业小结

 题目:


 课后的编程小作业,让我对梯度下降算法有了更进一步的理解。对于凸函数f(xy),求解minf,可利用:

                        x-= a*df/dx

                        y-= a*df/dy

分别用matlab和c语言进行了编程:

1. matlab拥有便捷的画图功能,结果直观可见,先画出函数在题目制定区间的三维图形,Hold  on

clear all;
clc;
xa = -5:0.1:0;
ya = -5:0.1:0;
[x,y] = meshgrid(xa,ya);
z = func(x,y);
mesh(x,y,z)
hold on;
 其中func为定义的函数:

function [ Fc ] = func(x,y)
a = 1-cos(x);
b = 1-sin(y);
c = x-y;
Fc = sin(y).* exp(a.*a)+cos(x).*exp(b.*b)+c.*c;
end

输入指定点(x0,y0)以及解算的步长a=0.0001,求解在这一点的两个偏导值,然后代入上面的梯度下降公式,运行次数一万次:

x0 = -3;
y0 = -4;
a = 0.0001;
i = 0;
while i <= 1000
   i = i+1; 
   x0 = x0 + a*fnc_dzdx(x0,y0);
   y0 = y0 + a*fnc_dzdy(x0,y0);
   z0 = func(x0,y0);
   plot3(x0,y0,z0,'.r');
end
其中求函数偏导直接利用matlab中的diff功能,然后带入(x0,y0)求解:

function [ dzdy_num1 ] = fnc_dzdy( x_num,y_num )
syms x y
z = func(x,y);
dzdy = diff(z,y);
dzdy_num = subs (dzdy,'x',x_num); 
dzdy_num = subs(dzdy_num,'y',y_num);
dzdy_num1 = eval(dzdy_num);
end

运行结果如下:


可见,算法能够在一万次内求解到(x0,y0)附近的局部极大值。

2. c语言程序与matlab程序原理相同,代码如下:

#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;

double Func(double x, double y)
{
	double cosx = cos(x), siny = sin(y);
	double a = 1 - cosx, b = 1 - siny, c = x - y;
	return siny*exp(a*a) + cosx*exp(b*b) + c*c;
}

double Dfx(double x, double y)
{
	double dfx;
	dfx = 2 * x - 2 * y - exp((sin(y) - 1)*(sin(y) - 1))*sin(x) - 2 * exp((cos(x) - 1)*(cos(x) - 1))*sin(x)*sin(y)*(cos(x) - 1);
	return dfx;
}

double Dfy(double x, double y)
{
	double dfy;
	dfy = 2 * y - 2 * x + exp((cos(x) - 1)*(cos(x) - 1))*cos(y) + 2 * exp((sin(y) - 1)*(sin(y) - 1))*cos(x)*cos(y)*(sin(y) - 1);
	return dfy;
}

double Constrain(double x )
{	
		if (x > 0)
			x = 0;
		else if (x < -5)
			x = -5;
	return x;
}

void main()
{
	double x, y, i,f, step = 0.0001;
	double dfx, dfy;
	cout << "请输入x y\n";
	cin >> x >> y;
	cout << "\n输入的坐标为:x=" << x << " y=" << y << "\n\n";

	x = Constrain(x);
	y = Constrain(y);
	for (i = 0;i < 10000;i++)
	{
			dfx = Dfx(x, y);
			dfy = Dfy(x, y);

			if (abs(dfx) < 0.001&&abs(dfy) < 0.001)
				break;
			x = x + step*Dfx(x, y);
			y = y + step*Dfy(x, y);
			x = Constrain(x);
			y = Constrain(y);
			f = Func(x, y);
	}
	cout << "极大值点的坐标为:" << "x =" << x << " y=" << y << "\n\n极大值点函数值为:f=" << f <<"\n";	
}

运行界面如下:


2016-01-27 19:58:23 u010402786 阅读数 37871

前提

    运动目标的检测是计算机图像处理与图像理解领域里一个重要课题,在机器人导航、智能监控、医学图像分析、视频图像编码及传输等领域有着广泛的应用。
                                      这里写图片描述

目标检测方法分类

  第一,已知目标的先验知识。在这种情况下检测目标有两类方法,第一类方法是用目标的先验知识训练一堆弱分类器,然后这些弱分类器一起投票来检测目标,如boosting, random forest 都是这个思路,大家熟知的adaboost人脸检测也是如此。第二类方法是根据先验知识找到目标和非目标的最佳划分线,如SVM.这两类方法各成一家,各有所长,都有着不错的表现。

  第二,未知目标的先验知识。此时不知道要检测的目标是什么,于是什么是目标就有了不同的定义。一种方法是检测场景中的显著目标,如通过一些特征表达出场景中每个像素的显著性概率,然后找到显著目标。另一种方法就是检测场景当中的运动目标了。

经典目标检测方法

1、背景差分法
  在检测运动目标时,如果背景是静止的,利用当前图像与预存的背景图像作差分,再利用阈值来检测运动区域的一种动态目标识别技术。
  背景差分算法适用于背景已知的情况,但难点是如何自动获得长久的静态背景模型。
  matlab中单纯的背景差分直接是函数imabsdiff(X,Y)就可以。
2、帧差分法
  利用视频序列中连续的两帧或几帧图像的差来进行目标检测和提取。在运动的检测过程中,该方法利用时间信息,通过比较图像中若干连续帧获得对应像素点的灰度差值,如果均大于一定的阈值T2,则可以判断该位置存在运动的目标。
  较适合于动态变化场景。
3、光流场法
  利用相邻两帧中对应像素的灰度保持原理来评估二维图像的变化。能够较好的从背景中检测到相关前景目标,甚至是运动屋里中的部分运动目标,适用于摄像机运动过程中相对运动目标的检测。
  开口问题、光流场约束方程的解的不唯一性问题。不能正确的表示实际的运动场。
        例子如下:
       1.首先在一帧图像内随机均匀选取k个点,并滤除那些邻域纹理太光滑的点,因为这些点不利于计算光流。
这里写图片描述
       2.计算这些点与上一帧图像的光流矢量,如上右图,此时已经可以看出背景运动的大概方向了。
       这里写图片描述
       3.接下来的这一步方法因人而异了。
       2007年cvpr的一篇文章Detection and segmentation of moving objects in highly dynamic scenes的方法是把这些光流点的(x,y,dx,dy,Y,U,V)7个特征通过meanshift聚类来聚合到一起,最后形成运动目标轮廓。

新目标检测方法

       其实写到这里想了想到底能不能叫目标检测,博主认为图像的前背景分离也是目标检测的一种(博主才疏学浅,求赐教)

1、像素点操作
  对每个像素点进行操作,判别为前景或者背景两类。如下面的图片所示:
  这里写图片描述
2、低秩矩阵应用
  背景建模是从拍摄的视频中分离出背景和前景。下面的例子就是将背景与前景分离开。使用的方法是RPCA的方法。
  其网址以及效果如下:
  http://perception.csl.illinois.edu/matrix-rank/introduction.html
  这里写图片描述
3、深度学习
  FCN + denseCRF 精确分割+语义标签。图像中的前景目标检测分割做的很好,下面还能做出语义检测,判断出图中的东西属于什么。This demo is based on our ICCV 2015 paper :Conditional Random Fields as Recurrent Neural Networks,
  测试网址以及测试图像如下:
  http://www.robots.ox.ac.uk/~szheng/crfasrnndemo
  这里写图片描述


推荐另外一篇关于神经网络改进方法的上篇内容:
http://blog.csdn.net/u010402786/article/details/49272757
       另外附上一个深度学习未来发展趋势之一:
       “注意力模型” 在未来的发展,注意力模型的升温。一些系统,但不是全部,开始放到“注意力模型”的背景中,或者说让神经网络在完成任务的过程中试图学习在哪里放置其“注意力”。这些还不是一个正规神经网络流水线中的一部分,但是已经时不时的出现在模型中了。