经典计算机视觉论文笔记——《Robust Real-Time Face Detection》
2016-06-01 20:40
316 查看
第一次读这篇传奇之作大概是九年前了,也就是2007年,而那时距论文正式发表(2004年)也已经有四年之久了。现在读来,一些想法,在深度学习大行其道的今天仍然具有借鉴意义,让人敬佩不已。
VJ人脸检测器应该是历史上第一个成功商业应用的实时人脸检测器。我估计现在相机和手机上的人脸检测算法绝大部分还是VJ或VJ算法的徒子徒孙。OpenCV当年也是凭借VJ算法的集成而一炮走红,到现在还是最主流的计算机视觉算法库。本人在真实环境下亲测,2010年后的许多能在FDDB测评主页上露个脸的开源算法,其实效果都不见得会比VJ算法好多少。
算法创新点
实验环境:384*288分辨率,700MHz Pentium3,15帧每秒。现在主流摄像头分辨率是640*480,但硬件计算能力要远远超越当时,24帧每秒毫无压力。
一幅图像上非人脸窗口占绝大多数,自然会想到先快速把大量非人脸干掉的cascade的策略。
Haar特征只是三种特征(左右和上下矩形相减算一种),表达能力有限。但由于多比例伸缩、平移,构成了一个庞大的特征集合,表达能力爆表。
在检测不同大小的人脸时,没有采用金字塔策略,而是直接用不同尺度的人脸检测器在同一幅图像上扫。作者认为生成金字塔太慢。但除了24*24尺度的,其它尺度的检测器的cascade细节几乎没有介绍。不知道是不是我搞错了?
24*24的图像上,全部的Haar特征有160000个!最后cascade选择出来的一共有6060个特征。
积分图的计算也是非常快的,从左上角开始递归计算,没有冗余。
AdaBoost算法的目标是拟合训练集。因为单个弱分类器的拟合太差了。但是,如果一个算法本身对训练集拟合的就很好了,比如深度学习,就不能看作是一个弱分类器,不适合用于AdaBoost框架。
在分类器类型一致的情况下,不同的特征就代表了不同的分类器。特征组合和分类器组合就是一回事。
AdaBoost的每次迭代,只和前一次的迭代结果有关。
cascade共包含38个AdaBoost分类器,复杂度逐渐递增。复杂度的递增是通过采用的样本越来越难分、特征数量越来越多实现的。
检测出有重叠的人脸时,没有用目前主流的IOU去重。毕竟年代太古老了。
想想算法中有没有冗余计算之处,并加以优化。
AdaBoost的生命力长青。参考迁移学习中的TrAdaBoost。
某些情况下,特征就代表分类器,不需要分得太清。
梯度类型的特征就是牛逼!参考SIFT,HOG,LBP。
VJ人脸检测器应该是历史上第一个成功商业应用的实时人脸检测器。我估计现在相机和手机上的人脸检测算法绝大部分还是VJ或VJ算法的徒子徒孙。OpenCV当年也是凭借VJ算法的集成而一炮走红,到现在还是最主流的计算机视觉算法库。本人在真实环境下亲测,2010年后的许多能在FDDB测评主页上露个脸的开源算法,其实效果都不见得会比VJ算法好多少。
创新点 | 作用 |
积分图 | 加速haar特征计算的巧妙点子。一劳永逸,去掉特征计算中的冗余。 |
AdaBoost人脸检测器 | 特征选择+分类器融合。对adaboost的思想进行合理改造,一个haar特征对应一个弱分类器,弱特征组合成强特征,弱分类器组合成强分类器。 |
级联结构 | 由粗到精的检测策略,加速的同时又能保证精度。先在前期用快速算法把大量非人脸去掉,平衡后期慢速的更精细分类开销。 |
一些值得反思的细节
AdaBoost算法是1995年提出的,这篇论文正式发表是在2004年。如此经典的boosting思想怎么没早一点被人发扬?实验环境:384*288分辨率,700MHz Pentium3,15帧每秒。现在主流摄像头分辨率是640*480,但硬件计算能力要远远超越当时,24帧每秒毫无压力。
一幅图像上非人脸窗口占绝大多数,自然会想到先快速把大量非人脸干掉的cascade的策略。
Haar特征只是三种特征(左右和上下矩形相减算一种),表达能力有限。但由于多比例伸缩、平移,构成了一个庞大的特征集合,表达能力爆表。
在检测不同大小的人脸时,没有采用金字塔策略,而是直接用不同尺度的人脸检测器在同一幅图像上扫。作者认为生成金字塔太慢。但除了24*24尺度的,其它尺度的检测器的cascade细节几乎没有介绍。不知道是不是我搞错了?
24*24的图像上,全部的Haar特征有160000个!最后cascade选择出来的一共有6060个特征。
积分图的计算也是非常快的,从左上角开始递归计算,没有冗余。
AdaBoost算法的目标是拟合训练集。因为单个弱分类器的拟合太差了。但是,如果一个算法本身对训练集拟合的就很好了,比如深度学习,就不能看作是一个弱分类器,不适合用于AdaBoost框架。
在分类器类型一致的情况下,不同的特征就代表了不同的分类器。特征组合和分类器组合就是一回事。
AdaBoost的每次迭代,只和前一次的迭代结果有关。
cascade共包含38个AdaBoost分类器,复杂度逐渐递增。复杂度的递增是通过采用的样本越来越难分、特征数量越来越多实现的。
检测出有重叠的人脸时,没有用目前主流的IOU去重。毕竟年代太古老了。
借鉴之处
cascade的思想。许多检测问题,负类会在样本中占绝大多数比重,可以先在保证正类检测率近100%的情况下,去掉大量负类。再通过更精细的算法继续精准分类。想想算法中有没有冗余计算之处,并加以优化。
AdaBoost的生命力长青。参考迁移学习中的TrAdaBoost。
某些情况下,特征就代表分类器,不需要分得太清。
梯度类型的特征就是牛逼!参考SIFT,HOG,LBP。
相关文章推荐
- 计算机视觉领域的牛人博客和有实力的研究机构
- 科研工作的关注点
- 最小外接矩形(MBR)
- 色彩量化评价指标 Quantitative measure methods for color quantization
- 图像处理的网址(转载)
- OpenCV学习笔记 第一篇 显示图像
- 图铭Android平台银行卡号识别系统
- 学习OpenCV第一课——认识、安装配置OpenCV(CodeBlocks)
- Kalman滤波
- 图像处理特征不变算子系列之KLT算子--GoodFeaturesToTrack(七)
- 《计算机视觉中的数学方法》笔记1 向量叉积的反对称矩阵表示
- Selective Search for Object Recognition
- 摄像测量相关
- Learning OpenCV Chapter3 初探OpenCV上
- 开通博客--for interest
- 计算机视觉投稿
- 摄像机几何概念
- R. Wang-Manifold-Manifold Distance with Application to Face Recognition based on Image Set读后记
- 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新
- 计算机视觉、模式识别大牛资料搜集