图像处理目标定位

2018-12-28 15:12:21 qq_36251561 阅读数 726

粗定位,又称简单模板匹配,是一种在工业图像处理上最常见的方法。该方法精确度高,识别时间短。

他的一个最大的好处就是能够在目标位置不确定的情况下,粗略的定位目标。因此该方法多使用于背景复杂、目标位置不固定、但检测目标清晰的情况下。

在这里主要以Opencv的方式(cvMatchTemplate)说明。

1.创建模板图像

     一般情况下,采用ROI的方式从原图上将模板图像抠出。存成文件的形式,这样在软件下次打开的时候就不需要再去学习。

2.确定定位区域

cvMatchTemplate

Cvnormalize

CvminMaxLoc

具体的代码如下(随手Copy来的,具体的函数定义和使用方法其他人博客里有,我就不多说了)

    Mat SrcImg;//原图像
    Mat MdoImag;//模板图像
    Mat result;//结果
   
    //这部分是有个公式固定好的
    int result_cols = img.cols - templ.cols + 1;
    int result_rows = img.rows - templ.rows + 1;
    result.create(result_cols, result_rows, CV_32FC1);
   
    matchTemplate(img, templ, result, CV_TM_SQDIFF_NORMED);
    normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
    double minVal = -1;
    double maxVal;
    Point minLoc;
    Point maxLoc;
    Point matchLoc;
    minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
    matchLoc = minLoc;
    
    rectangle(img, matchLoc, Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows), Scalar(0, 255, 0), 2, 8, 0);

在这里,我们最终能够得到匹配度和匹配矩形区域,一般情况下可以选取匹配矩形区域的中心点作为一个最佳匹配点。然后控制匹配度的大小用来返回匹配成功还是失败。
3.安装最佳匹配点从新生成检测区域

在得到最佳匹配点之后,我们可以用这个点去做二次ROI,然后就能更加精确的去做精确定位。

2019-07-29 22:47:05 qq_33668060 阅读数 773

傅立叶变换中的目标定位 and 卷积应用中的目标特征识别
写这篇文章的感觉就是一句话:我想验证:**时域中的卷积操作等于频域中的乘积,也就是这个公式:f*g(x) = F(x)*G(x),**这句话。
直接上代码:每一行代码都有注释,有兴趣的小伙伴,可以仔细瞧一瞧。

clear all; clc; close all
bw = imread('text.png');
a = bw(32:45, 88:98); %从bw图像中提取一个a字符;
figure;imshow(bw);title('原图')
figure;imshow(a);title('识别的字母a')
%利用傅立叶变换定位text.png中a的位置
bwf = fftshift(fft2(bw));  %对bw进行二维离散傅立叶比变换,并中心化
figure;imshow(uint8(bwf))
%计算相关系数  ,,, 该处的目的与时域中的卷积性质一样
C1 = real(ifft2(fft2(bw) .* fft2(rot90(a,3), 256, 256))); %将bw的傅立叶变换与a旋转270度后的傅里叶变换相乘,检测竖直方向上a的位置
C2 = real(ifft2(fft2(bw) .* fft2(rot90(a,2), 256, 256))); %将bw的傅立叶变换与a旋转180度后的傅里叶变换相乘,检测水平方向上a的位置
figure;
subplot(121);imshow(C1,[]);title('检测竖直方向上a的位置处理后的图片')
subplot(122);imshow(C2,[]);title('检测水平方向上a的位置处理后的图片')
max(C1(:)) %计算C1的最大值
max(C1(:)) %计算C2的最大值
thresh = 60; %设定阈值,该阈值属于经验值,是根据max(C1(:))和max(C2(:))的值设定的
C1 = C1>thresh;
C2 = C2>thresh;
figure;
subplot(121);imshow(C1,[]);title('设定阈值为60处理后检测竖直方向上a的图片')
subplot(122);imshow(C2,[]);title('设定阈值为60处理后检测水平方向上a的图片')
C = C1+C2; %将处理后的C1和C2相加,得到竖直和水平方向的a的位置
figure;imshow(C,[]);title('采用傅立叶变换定位到图片中所有a的位置')
[m,n] = size(C);

%输出a点的个数,以及位置
b=0
for i=1:m
    for j=1:n
        if C(i,j) == 1
            i,j,C(i,j)
            b = b+1;
        end
    end
end


%使用时域中的卷积,验证:时域中的卷积等于频域中的乘积
a = double(a);
bw = double(bw);
D1 = conv2(bw, rot90(a, 2), 'same');
D2 = conv2(bw, rot90(a, 3), 'same');
D = D1+D2;
max(D1(:))
max(D2(:))
figure;
subplot(121);imshow(D1,[]);title('检测竖直方向上a的位置处理后的图片')
subplot(122);imshow(D2,[]);title('检测水平方向上a的位置处理后的图片')

thresh = 60;
D1 = D1>thresh;
D2 = D2>thresh;
D = D1+D2;
figure;
subplot(121);imshow(D1,[]);title('设定阈值为60处理后检测竖直方向上a的图片')
subplot(122);imshow(D2,[]);title('设定阈值为60处理后检测水平方向上a的图片')

figure;
subplot(121);imshow(C,[]);title('采用傅立叶变换定位到图片中所有a的位置')
subplot(122);imshow(D,[]);title('采用卷积操作定位到图片中所有a的位置')

注:‘text.png’是MATLAB自带的一张图片,目的是识别图片中的字母‘a’。
结果:
原图:
在这里插入图片描述
截取的a的图片:
在这里插入图片描述
傅立叶变换:
在水平和竖直方向上进行傅立叶变换后的图片:
在这里插入图片描述
阈值为60滤波之后的图片:
在这里插入图片描述
a定位的结果:
在这里插入图片描述
卷积操作:
在水平和竖直方向上进行卷积操作后的图片:
在这里插入图片描述
阈值为60滤波之后的图片:
在这里插入图片描述
a定位的结果:与傅立叶变换的对比
在这里插入图片描述
从上面的操作结果来看,两种实现过程得到的结果一致。调皮一下:证明书上没有骗人,嘿嘿,,,。。。

2018-06-28 16:56:42 u011752195 阅读数 781
数字图像处理 第12章 目标识别
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.


2018-07-18 00:05:00 weixin_30407613 阅读数 718

  目标检测的发展历程可以分为3个阶段:

  1.传统的目标检测方法

   传统的目标检测方法通常可以分为三个阶段:首先在给定的图像上选择一些候选区域,然后对这些区域进行特征提取,最后使用训练的分类器进行分类,其中人工提取特征的好坏直接影响到分类及检测的准确性,由于实际图像受光照及背景影响较大,人工特征提取往往存在一定局限性.

   传统的目标检测算法中比较好的模型为DFM,其将物体视为由多个物件组成,用物件间的关系来描述物体,可看作为HOG+SVM的扩展,很好的继承了两者的优点,同时在人脸检测,行人检测等任务上取得了不错的效果.

  • SIFT

   Paper: SUMMARY: DISTINCTIVE IMAGE FEATURES FROM SCALE-INVARIANT KEYPOINTS

   SIFT算法于1999年被David Lowe提出,并于2004年进行了补充和完善,此后广泛应用于目标识别,自动导航,图像拼接,三维建模,手势识别,视频跟踪等.

   SIFT全称Scale-Invariant Featuure Transform,即对图像的尺度和旋转能够保持不变性,同时对于亮度变化具有很强的鲁棒性,对于噪声和视角的微小变化也能保持一定的稳定性.

   SIFT算法可以分为4个阶段[1]: 

  1).尺度空间极值检测:该阶段是在图像的全部尺度和全部位置上进行搜索,并通过应用高斯差分函数可以有效地识别出尺度不变性和旋转不变性的潜在特征点来; 
  2).特征点的定位:在每个候选特征点上,一个精细的模型被拟合出来用于确定特性点的位置和尺度。而特征点的最后选取依赖的是它们的稳定程度; 
  3).方向角度的确定:基于图像的局部梯度方向,为每个特性点分配一个或多个方向角度。所有后续的操作都是相对于所确定下来的特征点的角度、尺度和位置的基础上进行的,因此特征点具有这些角度、尺度和位置的不变性; 
  4).特征点的描述符:在所选定的尺度空间内,测量特征点邻域区域的局部图像梯度,将这些梯度转换成一种允许局部较大程度的形状变形和亮度变化的描述符形式。
  • SURF

   Paper: SURF:Speeded Up Robust Features 

   SURF算法于2006年被Herbert Bay等人提出,并于2008年进行了完善,该算法的部分灵感来自于SIFT算法,具有重复性高的检测器和可区分性好的描述特点外,还有很强的鲁棒性以及更高的执行速度.

   SURF全称Speeded Up Robust Features,在保证正确性的前提下进行了简化和近似,并且多次运用积分图像的概念,因此在效率上比SIFT快3倍以上.

   SURF算法可以分为几个阶段[2]:    

  特征点检测
   1).基于Hessian矩阵的特征点检测
   2).尺度空间表示
   3).特征点定位
  特征点描述
   1).方向角度分配
   2).基于Haar小波的特征点描述符
  • FAST

     Paper: Machine learning for high-speed corner detection

   FAST 算法可以分为几个阶段:

  1).在图像中任选一点p,假定其像素(亮度)值为 Ip.
  2).以3为半径画圆,覆盖p点周围的16个像素.
  3).设定阈值t,如果这周围的16个像素中有连续的n个像素的像素值都小于Ip−t或者有连续的n个像素都大于Ip+t,那么这个点就被判断为角点。在OpenCV的实现中n取值为12(16个像素周长的 3/4),也称
  4).一种更加快的改进是:首先检测p点周围的四个点,即1,5,9,12四个点中是否有三个点满足超过Ip+t,如果不满足,则直接跳过,如果满足,则继续使用前面的算法,全部判断16个点中是否有12个满足条件.
  

   FAST的特点是:

  1).在速度上要比其他算法速度快很多
  2).受图像噪声以及设定的阈值影响很大
  3).FAST不产生多尺度特征而且FAST特征点没有方向信息,这样就会失去旋转不变性
  4).存在的缺点:可能大部分检测出来的点彼此相邻,需要使用非极大值抑制方法
  • ORB

   Paper: ORB: An efficient alternative to SIFT or SURF

   ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,由Ethan Rublee,Vincent Rabaud,Kurt Konolige及Gary R.Bradski提出.

   ORB特征是将FAST特征点的检测方法与BRIEF特征描述子结合起来,并在它们原来的基础上作了改进和优化,ORB运行速度是SIFT的100倍,是SURF的10倍.

   ORB算法分为两部分,分别是特征点提取和特征点描述,特征提取由FAST算法发展而来,特征点描述根据BRIEF算法改进而来.

  1).oFAST特征提取
    由FAST算法改进而来,在使用FAST算法提取特征点之后,给定一个特征点反向,以实现特征点的旋转不变性
  2).rBRIEF特征描述
    rBRIEF是在BRIEF特征描述的基础上加入旋转因子改进的

  2.以R-CNN为代表的结合region proposal和CNN分类的目标检测框架

   目标检测通常可以看作一个分类任务和回归任务,即解决物体属于"哪一类"以及"在哪里"的问题,通常的思路是:

  1).搭建一个识别图像的神经网络,例如以AlexNet,VGGNet以及GoogLeNet为baseline并进一步fine-tune
  2).在调试好的神经网络的尾部展开(加上"分类头"和"回归头"),成为classification+regression模式
  3).regression部门使用欧式距离计算损失,使用SGD进行训练
  4).在预测阶段将2个头接上
  • R-CNN

   Paper: Rich feature hierarchies for accurate object detection and semantic segmentation

  1).输入测试图像; 
  2).利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
  3).将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征;
  4).将每个Region Proposal提取的CNN特征输入到SVM进行分类; 
  5).对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标. 

   缺陷 

  1).训练分为多个阶段,步骤繁琐:微调网络+训练SVM+训练边框回归器;
  2).训练耗时,占用磁盘空间大;5000张图像产生几百G的特征文件;
  3).速度慢:使用GPU,VGG16模型处理一张图像需要47s;
  4).测试速度慢:每个候选区域需要运行整个前向CNN计算;
  5).SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新.
  • SPP-Net

   Paper: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

  • Fast R-CNN  

   Paper: Fast R-CNN

  1).输入测试图像;
  2).利用selective search 算法在图像中从上到下提取2000个左右的建议窗口(Region Proposal);
  3).将整张图片输入CNN,进行特征提取;
  4).把建议窗口映射到CNN的最后一层卷积feature map上;
  5).通过RoI pooling层使每个建议窗口生成固定尺寸的feature map;
  6).利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.

   相比R-CNN的改进 

  1).测试速度:
    R-CNN把一张图像分解成大量的建议框,每个建议框拉伸形成的图像都会单独通过CNN提取特征.实际上这些建议框之间大量重叠,特征值之间完全可以共享,造成了运算能力的浪费.
    Fast R-CNN将整张图像归一化后直接送入CNN,在最后的卷积层输出的feature map上,加入建议框信息,使得在此之前的CNN运算得以共享.

  2).训练速度:
    R-CNN在训练时,是在采用SVM分类之前,把通过CNN提取的特征存储在硬盘上.这种方法造成了训练性能低下,因为在硬盘上大量的读写数据会造成训练速度缓慢.
    Fast R-CNN在训练时,只需要将一张图像送入网络,每张图像一次性地提取CNN特征和建议区域,训练数据在GPU内存里直接进Loss层,这样候选区域的前几层特征不需要再重复计算且不再需要把大量数据存储在硬盘上.

  3).训练空间:
    R-CNN中独立的SVM分类器和回归器需要大量特征作为训练样本,需要大量的硬盘空间.
    Fast R-CNN把类别判断和位置回归统一用深度网络实现,不再需要额外存储.
  • Faster R-CNN

   Paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

  1).输入测试图像;
  2).将整张图片输入CNN,进行特征提取;
  3).用RPN生成建议窗口(proposals),每张图片生成300个建议窗口;
  4).把建议窗口映射到CNN的最后一层卷积feature map上;
  5).通过RoI pooling层使每个RoI生成固定尺寸的feature map;
  6).利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练. 

   相比Fast R-CNN的改进 

  1).建议框的产生
    Faster R-CNN创造性地采用卷积网络自行产生建议框,并且和目标检测网络共享卷积网络,使得建议框数目从原有的约2000个减少为300个,且建议框的质量也有本质的提高.
  • R-FCN

   Paper: R-FCN: Object Detection via Region-based Fully Convolutional Networks

  • Mask R-CNN

   Paper: Mask R-CNN

  3.以YOLO为代表的将目标检测转换为端到端的目标检测框架

  • YOLO

   Website: https://pjreddie.com/darknet/yolov1/

   Paper: You Only Look Once: Unified, Real-Time Object Detection

  • YOLO v2

   Website: https://pjreddie.com/darknet/yolov2/

   Paper: YOLO9000: Better, Faster, Stronger 

  • YOLO v3

   Website: https://pjreddie.com/darknet/yolo/

   Paper: YOLOv3: An Incremental Improvement

   Code: https://github.com/pjreddie/darknet

  • SSD

   Paper: SSD: Single Shot MultiBox Detector

 

转载于:https://www.cnblogs.com/WaitingForU/p/9064338.html

图像处理入门教程

阅读数 32633