经典计算机视觉论文笔记——《Robust Real-Time Face Detection》

        第一次读这篇传奇之作大概是九年前了,也就是2007年,而那时距论文正式发表(2004年)也已经有四年之久了。现在读来,一些想法,在深度学习大行其道的今天仍然具有借鉴意义,让人敬佩不已。

        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。






你可能感兴趣的:(论文笔记)