针对小脸的 Dlib 正面人脸检测

Dlib frontal face detection for small faces

我正在使用 Dlib 的正面面部检测器来检测图像中的面部;但是,它无法检测小于 80 x 80 像素的人脸。

Dlib 在 face_detection_ex.cpp 中的示例使用 pyramid_up() 对输入图像进行上采样以增加面部大小。但是,这会使算法变慢,因为它必须在更大的图像中搜索。

不知道有没有人知道这个问题的解决方法。

Dlib 的人脸检测器经过训练可以处理 80x80 的人脸。如果你想检测小脸,你有两种方法:

  1. 提高分辨率使脸变大。你可以使用 pyramid_up 或任何其他方式 lice cv::resize。你可以增加结果而不是 2 倍,但可能 1.5 倍就足够了——由你决定
  2. 训练适用于小脸的新人脸检测器 - dlib 有用于训练过程的样本

下一个问题是面部检测器的性能。是的,这取决于分辨率,如果您想在 13 MP 图像上检测 20x20 面孔 - 它会很慢。为了使其快速运行,您可以选择以下选项:

  1. 减少检测器应处理的像素数量 - 使用正确的尺度和感兴趣区域
  2. 使用灰度图像
  3. reduce the amount of scale changes at scanning process
  4. 使用 FAQ 中的建议。我只能补充说 MinGW/GCC 代码比 MSVC 快 20% 并且 Android/ARM 代码没有使用 SIMD 指令
  5. 对于视频:apply motion detection 并仅检测更改的区域(手动裁剪并在裁剪区域中检测)以及单独线程中的 运行 帧以消耗所有 CPU 核心