object detection--Decision Tree



VJ



VJ算法是object detection中提出较早的方法了,将它归类于DF (decision forests 决策森林)方法的范畴。

References中的[1],提出了 VJ 算法来进行人脸识别:

采用的特征、分类器、算法的结构

1) 采用的特征为rectangle features,种类有3种: two-rectangle feature、three-rectangle feature、four-rectangle feature

论文原图如下:

这三种特征都有一横一竖两种情况,且由于矩形的高宽可变,所以事实上,一张图里边的特征数量是非常多的。这几种特征怎么计算在图示里都有说明。

2) 分类器

  原始版本的Adaboost是用来把弱分类器激发成强分类器来提升算法性能的。通过对Adaboost算法的改变,新算法可以从图像的大量特征中选取一个小集合的特征,并训练对应的分类器。

3) 算法的结构

  算法的结构是由一个个由变种的Adaboost算法训练出来的分类器级联得到的。输入一个子图,如果它在途中的一个分类器的识别中判断为负,那么它就被认定不含目标(这里是人脸),不再接受后续的分类。像下面这样:

  

  “瀑布结构”中的每一个阶段就是一个分类器。构造过程: 通过Adaboost训练,得到一个naive的分类器。然后,使用validation set 通过最小化 false negatives 来调整这个分类器的阀值。(降低分类器阀值的同时会提升成功检测的概率,但同时也会提升 false positive 的概率) 。循环往复,就得到了结构中的每一个分类器。

  另外,在分类器的级联结构中,越靠前的分类器使用的特征越简单。算法利用前面较简单的分类器来筛选掉绝大多数不可能包含目标的子图,从而提高检测的速度。越往后的分类器由于需要负责更精细的甄别任务,使用的特征会更复杂,当然消耗的计算时间也会更多。另外,由于这个瀑布结构分类器群的筛选能力较强,在训练的过程中,越往后面的分类器能用于学习的数据越少,检测结果为“false positive”的概率也更高。

例:文章里级联结构的第一个分类器使用了两种特征。这两种特征的是由Adaboost算法的执行过程中选取的,意义也比较直观,详情请看下面的图示。

把每个分类器当成一个节点,这个级联结构相当于把n个节点用n-1条边连起来,就像退化的树,所以也说这种分类器的级联结构是决策树的弱化 (degenerate decision tree),将此方法归入decision forests的阵营中。

  最后,由于训练的样本和实际测试的数据都是原始图片上的子图,不免会出现一些干扰。比如,针对同一个目标出现在多张子图的情况,论文中采取了计算覆盖的方法减小误差。

  朴素的VJ算法只需要输入灰度图,就能进行快速的计算。论文实验表明,使用一些额外的信息能提升算法的性能,但是数据显示非常有限。在object detection的发展过程中,它是很早的一种算法,在难度比较大的现代数据库比如 INRIA、Caltech中的表现基本就是垫底的。不过由于这种算法的结构相对简单,直接,还是有学习的意义的。

References:

[1] A decision-theoretic generalization of on-line learning and an application to boosting. In Computational Learning Theory 1995

[2] Rapid Object Detection using a Boosted Cascade of Simple Features. Paul Viola, Michael Jones. In CVPR 2001

时间: 2024-10-11 05:05:44

object detection--Decision Tree的相关文章

(转)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks(更快的RCNN:通过区域提议网络实现实时)

原文出处 感谢作者~ Faster R-CNN: Towards Real-Time Object Detection with Region ProposalNetworks Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun 摘要 目前最先进的目标检测网络需要先用区域建议算法推测目标位置,像SPPnet[7]和Fast R-CNN[5]这些网络已经减少了检测网络的运行时间,这时计算区域建议就成了瓶颈问题.本文中,我们介绍一种区域建议网络(Reg

[Spring MVC]学习笔记--@RequestMapping支持的返回类型

下面针对官方文档列出的支持类型进行举例. (本篇例子存于github上, https://github.com/lemonbar/spring-mvc-resolvingview) 可以直接下载, 也可以在浏览器中打开进行查看(强烈建议看这个, 里面有详细的解释). git clone https://github.com/lemonbar/spring-mvc-resolvingview 准备工作 1. 在WEB-INF下增加一个jsp文件夹, 里面增加两个jsp文件, 为login.jsp和

CV:object detection(Haar)

一. Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来. 目前的人脸检测方法主要有两大类:基于知识和基于统计. "基于知识的方法主要利用先验知识将人脸看作器官特征的组合,根据眼睛.眉毛.嘴巴.鼻子等器官的特征以及相互之间的几何位置关系来检测人脸.基于统计的方法则将人脸看作一个整体的模式--二维像素矩阵,从统计的观点通过大量人脸图像样本构造人脸模

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成. 参考Leb128数据类型 Android学习心得(5) --- dex数据类型LEB128 参考实例分析学习理解dex文件结构Android学习心得(15) --- Dex文件结构解析(1) 参考baksmali工具使用Android学习心得(4) --- MAC下smali文件编写与运行 1.编译 我们通过一个例子来分析dex文件的构成 创建一个Hello.java文

Titanium系列--利用Titanium开发android App实战总结

1. Titanium中,通过ImageView Controller 显示图片,图片地址要放在app/assets下,然后自己建一个文件夹,把图片放在这里.如下图,然后alloy代码:<ImageView image="/lib/welcome.png" /> 完事. 2. 图片没有占满整个屏幕?--没关系,在tss文件中, width: Ti.UI.FILL 即可. 3.弄登陆窗口 --第一次尝试,说不让在<window>中嵌套<window>

WPF Toolkit Chart--多Y轴显示

效果: <Window x:Class="Chart.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width=&quo

微信支付--入门篇

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.  Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需

单例模式--反射--防止序列化破坏单例模式

本文牵涉到的概念: 1.单例模式------唯一最佳实现方式,使用枚举类实现 2.单例模式的几种实现,各自的缺点 3.反射;反射是如何破坏单例模式 4.序列化:序列化如何破坏单例模式 单例模式 单例模式,是指在任何时候,该类只能被实例化一次,在任何时候,访问该类的对象,对象都是同一的,只有一个. 单例模式的实现方式: a.使用类公有的静态成员来保存该唯一对象 public class EagerSingleton { // jvm保证在任何线程访问uniqueInstance静态变量之前一定先创

iOS多线程开发(三)---Run Loop(四)

四,配置Run Loop源---配置源的过程就是源的创建调用过程 配置过程分为以下几个阶段---定义/创建(一个源)---安装(将输入源安装到所在Run Loop中)---注册(将输入源注册到客户端,协调输入源的客户端)---调用(通知输入源,开始工作) 4-1,定义自定义输入源 创建自定义输入源需要定义以下内容 1)输入源要处理的信息 2)使感兴趣的客户端知道如何和输入源交互的调度例程 3)处理其他任何客户发送请求的例程 4)使输入源失效的取消例程 Figure 3-2 Operating a