目标检测算法的历史及分类

摘要:
目标检测算法在各个行业中发挥着越来越重要的作用。Haar/LBP/积分HOG/ACFeature+Adaboost级联分类器由Paul Viola和Michael J.Jones在CVPR2001中首次提出。事实上,这是一个从简单的弱分类到组装强分类器的过程,但这种算法首次使目标检测成为现实!OpenCV具有级联分类器的经典实现:

  随着人工智能的兴起,目标检测算法在各行业中起的作用越来越大,怎么落地,这是一个非常严峻的话题。今天看到一位大牛的分享,学习了。

把该领域的算法和历史做个梳理。方便后续研究。

  按照时间分类,可以把该算法分成两类:传统算法和CCN算法。

 传统算法:

  • 级联分类器框架:Haar/LBP/积分HOG/ACF feature+Adaboost

级联分类器最先由Paul Viola and Michael J. Jones在CVPR 2001中提出来。

其实这就是boosting由简单弱分类拼装强分类器的过程,现在看起来很low,但是这个算法第一次使目标检测成为现实!

目标检测算法的历史及分类第2张

OpenCV有对级联分类器的经典实现:https://docs.opencv.org/2.4.11/modules/objdetect/doc/cascade_classification.html?highlight=haar

至于使用的特征,Haar简单也够用了,LBP实在是没必要去扒了。。。

至于HoG/ACF,下面说。

  • HoG+SVM

Histograms of oriented gradients for human detection,2005,CVPR

由于原始的Haar特征太简单,只适合做刚性物体检测,无法检测行人等非刚性目标,所以又提出了HOG+SVM结构。

在OpenCV中也有实现:https://docs.opencv.org/2.4.11/modules/gpu/doc/object_detection.html?highlight=hog

目标检测算法的历史及分类第4张

之后又有人魔改出LoG/DoG/RoG等一系列特征,没啥意思就不多说了。

值得一提的是,有人把SVM中的HoG改为Integral HoG,用于级联分类器。这也就是目前OpenCV级联分类器的积分HOG的原型:

Integral Histogram: A Fast Way to Extract Histograms in Cartesian Spaces

后续又有人发展出了Aggregate Channel Feature(ACF)等特征,论文主要是下面2个:

Aggregate Channel Features for Multi-view Face Detection,2014,IJCB

Fast Feature Pyramids for Object Detection,2014,PAMI

亮点就是这个Fast,加速了Integral HoG的计算,效果好而且快,依然活跃在嵌入式领域。

  • Discriminatively trained deformable part models(DPM)

项目主页:http://www.rossgirshick.info/latent/

目标检测算法的历史及分类第6张

DPM是使用弹簧模型进行目标检测,如下图。即进行了多尺度+多部位检测,底层图像特征抽取采用的是fHoG。反正也是轰动一时了。

后续又有DPM+/DPM++,没啥意思不提也罢。

目标检测算法的历史及分类第8张

CNN方法:

  • 基于region proposal(two stage):R-CNN家族,包括Faster R-CNN/Mask R-CNN/RFCN

然而DPM火了没到2年,R-CNN家族出现了,终于不再用各种魔改版HoG特征搞检测了!

其中R-CNN家族最有代表性的就是Faster R-CNN。Faster R-CNN由RPN网络先产生region proposal,再对region proposals进行classification,就是所谓的two stage。

目标检测算法的历史及分类第10张

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

Mask R-CNN

其实R-CNN系列检测关注他:Kaiming He - FAIR,完全足够了。

  • 基于回归(one-shot):YOLO/YOLO2/SSD/DSSD

YOLO和SSD都是产生proposal的同时进行classification+regression,一次性完成,即所谓的one-shot。相比two stage速度占优,Precision/Recall略低。

目标检测算法的历史及分类第12张

SSD:SSD: Single Shot MultiBox Detector

至于YOLO,目前有YOLO v1,YOLO 9000(v2),YOLO v3

YOLO项目主页(含Paper)

另外我觉得,后续版本DSSD和YOLO v2/v3之间真的没啥差距了,感觉都一样。

这也说明检测已经趋于瓶颈,没有算法突破很难像以前,一下提高几十个点。

  • 特殊的文字序列检测:CTPN(LSTM + R-CNN)/Seglink(SSD魔改)

除了一般意义上的检测,还有一类文字检测,用于OCR前的文字定位。这类检测和一般的检测还有一点点不一样。目前效果比较好的2种:CTPN和Seglink

目标检测算法的历史及分类第14张

Faster R-CNN的继承:CTPN水平or竖直文字检测

Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016.

代码 tianzhi0549/CTPN

SSD的继承:Seglink倾斜文字检测

Detecting Oriented Text in Natural Images by Linking Segments,CVPR,2017

代码 https://github.com/dengdan/seglink

当然文字检测算法也有传统的,比如这个OpenCV自带:

Real-Time Scene Text Localization and Recognition, CVPR 2012

不过不建议去折腾了,没必要。

  总结:

  传统方法的优势就是速度快,即使在嵌入式平台也可以做到高速实时;缺点就是Precision/Recall都不是很理想,简单说就是效果差;

CNN方法优势就是Precision/Recall都好很多;缺点对应的,速度慢。

目前在嵌入式中,传统算法还有一些空间,但是被Mobilenet等轻量化网络挤压;在服务器端,完全是深度网络的天下了。

参考文档:

https://www.zhihu.com/question/53438706 

https://zhuanlan.zhihu.com/ML-Algorithm

免责声明:文章转载自《目标检测算法的历史及分类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇为什么使用C#开发软件的公司和程序员都很少?Django Rest_Framework(drf)介绍,以及安装和配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

相似图片搜索的三种哈希算法

想必大家都用google或baidu的识图功能,上面就是我搜索冠希哥一幅图片的结果,达到图片比较目的且利用信息指纹比较有三种算法,这些算法都很易懂,下面分别介绍一下: 一、平均哈希算法(aHash) 此算法是基于比较灰度图每个像素与平均值来实现的,最适用于缩略图,放大图搜索。 步骤: 1.缩放图片:为了保留结构去掉细节,去除大小、横纵比的差异,把图片统一...

mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalConfiguration(new LogicSqlInjector()); conf.setIdType(5); 这样生成的是long类型的,如果想把这个i...

大话数据结构之一(绪论、算法)

数据结构绪论 数据结构是相互之间存在一种或多种特定关系的数据元素的集合 程序设计=数据结构+算法 数据结构事实上就是一门研究非数值计算的程序设计问题的操作对象,以及它们之间的关系和操作等相关问题的学科。 数据是描述客观事件的符号,是计算机中可以操作的对象,是能被计算机识别,并输入能计算机处理的符号集合,也就是说数据必须具备两个前提: 可以输入到计...

GJK碰撞检测算法

https://blog.lufei.so/#/collisionDetection/GJK/1 https://blog.lufei.so/#/collisionDetection/GJK/2 现实世界里我们对于是否碰撞的判断可以说极其容易而且准确,比如下图。在二进制的世界里,一切就没这么直观了。 GJK(Gilbert-Johnson-Keerthi...

麻省理工公开课《算法导论》学习笔记:第一讲

主题:简介课程,渐近概念的大局观,插入排序和归并排序,递归式函数时间分析(递归树方法) 教材:《算法导论》 收获:很感动地看到算法分析那个log(n)是为什么出现了,更深层还要听第二讲,若不是因为要准备SAS,恨不得马上看。 内容: 1 何为算法分析? 计算机程序运行性能和存储空间的理论分析,叫算法分析。也就是关注2点:1 性能,就是程序跑得快不快; 2...

七大查找算法

顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 查找是在大量的信息中寻找一个特定的信息元素。在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类: 1)静态查找和动态查找: 注:静态或者动态都是针对查找表而言的...