OpenCV 附带了一个名为列车级联训练 LBP、Haar 和 HOG。特别是对于人脸检测,他们甚至以 24x24 像素人脸所需的格式提供 3000 个图像数据集列车级联.
根据我的经验,这三种类型中列车级联支持,LBP 的训练时间最少,对于 Haar 来说只需要几小时而不是几天。
对其训练过程的快速概述是,对于给定的阶段数(合适的选择是 20),它尝试找到拒绝尽可能多的非面部而不拒绝面部的特征。拒绝非面孔和保留面孔之间的平衡由最低命中率(OpenCV 选择了 99.5%)并且误报率(OpenCV 选择了 50%)。用于构建 OpenCV 自己的 LBP 级联的特定元算法是 Gentle AdaBoost (GAB)。
OpenCV 中实现的 LBP 变体描述如下:
廖胜才、朱祥鑫、雷震、张伦、李斯坦。学习用于人脸识别的多尺度块局部二进制模式。国际生物识别会议 (ICB),2007 年,第 828-837 页。
在 OpenCV 中使用默认参数实际相当于:
OpenCV LBP 级联运行时概述
检测器检查图像中的 24x24 窗口,寻找面部。从级联分类器的第 1 阶段到第 20 阶段,如果它可以显示当前 24x24 窗口可能不是人脸,它会拒绝它并在窗口上移动一个或两个像素到下一个位置;否则进入下一阶段。
在每个阶段,检查 3-10 个左右的 LBP 特征。每个 LBP 特征在窗口内都有一个偏移量和一个大小,并且它覆盖的区域完全包含在当前窗口内。在给定位置评估 LBP 特征可能会导致通过或失败。根据 LBP 特征是成功还是失败,将该特征特有的正权重或负权重添加到累加器中。
一旦阶段的所有 LBP 特征都被评估,累加器的值就会与阶段阈值进行比较。如果累加器低于阈值,则阶段失败;如果累加器高于阈值,则阶段通过。同样,如果某个阶段失败,则退出级联并且窗口移动到下一个位置。
LBP特征评估比较简单。在该特征在窗口内的偏移处,九个矩形以 3x3 配置布局。对于特定的 LBP 特征,这九个矩形的大小都是相同的,范围从 1x1 到 8x8。
计算九个矩形中所有像素的总和,即它们的积分。然后,将中心矩形的积分与其八个相邻矩形的积分进行比较。这八次比较的结果是八位(1或0),它们被组装在8位LBP中。
此 8 位位向量用作 2^8 == 256 位 LUT 的索引,由训练过程计算并特定于每个 LBP 特征,用于确定 LBP 特征是否通过。
这就是全部内容了。