人脸检测中滑动窗口与候选框筛选机制

先固定检测目标:步长决定“漏不漏位置”

人脸打码的第一步不是模糊,而是得到足够完整的人脸框。传统滑动窗口会在图像上逐点取出固定大小的区域,再交给分类器判断;后续的置信度筛选和非极大值抑制(NMS)则负责减少误检与重复框。

窗口位置由左上角坐标、宽度和高度决定。假设窗口宽度为 w、高度为 h,水平方向步长为 s,那么相邻窗口的左边界相差 s 个像素。s=4 比 s=12 扫描得更密,但候选位置也会增加;步长本身不能解决人脸尺寸不匹配的问题。

  • 小步长:适合小脸、边缘脸或漏检代价较高的打码任务。代价是扫描次数上升。
  • 大步长:适合实时性优先的场景,但窗口间空隙可能让边界位置的人脸没有被充分覆盖。
  • 扫描结果:每个窗口只是候选区域,不等于已经确认的人脸。
  • 打码方式:OpenCV 可用 GaussianBlur 做高斯模糊,也可缩小区域后放大实现像素化。

只用一个窗口尺寸时,近处的大脸可能超出分类器的有效范围,远处的小脸又可能只占窗口的一小部分。因此要在多个尺度重复扫描:步长回答“这一层在哪些位置找”,尺度参数回答“这一层寻找多大的脸”。

用尺度因子覆盖大小变化,再用 minSize 排除过小目标

多尺度搜索通常有两条路径:缩放输入图像,或改变检测窗口的相对尺寸。OpenCV 的 Haar 级联检测会结合图像缩放与窗口扫描,实际搜索层数和可检测范围取决于 OpenCV 版本、分类器文件以及输入分辨率。

在 cv2.CascadeClassifier.detectMultiScale 中,scaleFactor=1.1 表示相邻尺度按约 1.1 倍递进,也就是尺度间隔约 10%。改成 1.2 后层数通常会减少,但两个尺度之间的空档更大;这不是“准确率固定下降 10%”,结果仍取决于分类器和图像内容。

  • 尺度因子 1.05~1.1:适合漏检代价高、允许增加计算量的离线处理。
  • 尺度因子 1.15~1.2:适合先做速度测试的实时或批处理场景,发现小脸漏检时再缩小该值。
  • minSize:设定候选人脸的最小宽、高。例如 minSize=(24,24) 会排除更小的候选,但不应把它当作通用的人脸尺寸下限。
  • 输入分辨率:如果视频帧被缩到 320×180,小脸可能在进入检测器前就只剩十几个像素;此时单纯调阈值通常无济于事。

一个可执行的调参顺序是:先查看目标人脸在输入帧中的像素宽度,再设置 minSize。若最小目标约为 30 像素,可先把 minSize 设在 20~24 像素范围,保留一定余量;如果误检太多,再逐步提高,而不是一开始就设成 40 或 50。

先筛低分候选,再区分 NMS 与 minNeighbors

检测器输出的“分数”不是统一单位。神经网络模型常用概率或分类得分,Haar 级联常通过邻近检测结果数量辅助判断;因此不能把某个模型里的 0.8 当成所有检测器的通用阈值。

OpenCV Haar 级联中的 minNeighbors 要求候选附近存在一定数量的支持结果。它通常用于抑制孤立误检,不等同于神经网络中的置信度阈值。数值增大,结果往往更保守;数值减小,可能保留更多侧脸、遮挡脸,也会带来更多误检。

  • 漏检侧脸或低清晰度人脸:先尝试降低 minNeighbors,例如从 5 调到 3,再检查误检是否可接受。
  • 误检明显:可从 5 调到 6~8,但这些范围只是起始实验值,不能替代验证集测试。
  • 误把背景当脸:检查图像对比度、分类器文件和输入尺寸,不要只提高一个阈值。

筛选和 NMS 处理的是两件事。前者删除“分数或支持不足”的候选,后者删除“与高分框重叠过多”的候选;一个高分框仍可能只是同一张脸的多个重复结果之一。

用 IoU 阈值去重,并为打码框留出边距

非极大值抑制(Non-Maximum Suppression,NMS)会按分数排序,保留最高分框,再删除与它重叠过多的框。重叠程度用交并比(IoU)表示:IoU = 交集面积 ÷ 并集面积,取值范围为 0 到 1。

  1. 按分数从高到低排列候选框。
  2. 保留当前最高分框。
  3. 计算它与剩余框的 IoU。
  4. 删除 IoU 高于设定阈值的框。
  5. 重复处理,直到候选框为空。

例如两个框的 IoU 为 0.7,NMS 阈值设为 0.5 时,低分框会被删除;阈值设为 0.8 时,它可能继续保留。阈值没有脱离数据集的固定答案:相邻人脸很近时,过低的阈值可能误删其中一张;同一张脸重复框很多时,过高的阈值又会留下多个框。

打码任务可以按下面的流程落地:

  1. 将输入帧缩放到检测器可承受的尺寸,记录缩放比例,避免把小脸压到十几个像素。
  2. 先用 scaleFactor=1.1、minNeighbors=5 做基线,再根据漏检或误检调整一个参数。
  3. 设置 minSize 时,取目标最小脸宽的约 70%~80% 作为起始参考,并用实际画面验证。
  4. 对候选框执行 NMS;若相邻人脸经常被合并,降低 NMS 的重叠判定强度,或改用按中心距离辅助分组。
  5. 最终打码框按宽度、高度各扩展约 5%~15%,同时裁剪到图像边界内,再执行模糊或像素化。

排查时可按现象定位:重复框先查 NMS,过小人脸先查输入分辨率和 minSize,侧脸漏检先查 minNeighbors 与分类器类型,边缘未覆盖则检查最终框是否留出边距。这样调参有明确方向,避免把步长、尺度因子和 NMS 阈值混成一个“准确率开关”。

更多推荐

两种“补色”算法为何结果不同 “补色”在图像处理中可能指两套不同规则:一套是对 RGB 通道做数值反转,另一套是沿 HSL 色轮把色相移动 180°。它们对纯红等高饱和颜色可能得到相同或相近结果,但面对灰色、低饱和色和不同明度的颜色,视觉结

了解更多 >

卷积核如何改变图像局部结构 图像模糊和锐化,本质上都可以通过卷积核处理局部像素。卷积核在图像上逐点滑动,用邻域像素与核中的权重相乘并求和,从而重新计算每个输出像素。 以 3×3 卷积核为例,它包含 9 个权重,并且奇数尺寸能提供明确的中

了解更多 >

从像素块到频率系数 JPEG 压缩的关键,不是把整张图片一次性“变小”,而是把图像拆成许多 8×8 像素块,再分别处理每个块中的明暗变化。二维离散余弦变换(DCT)负责重新表达这些变化,量化表则决定哪些频率信息保留得细、哪些信息更容易被舍

了解更多 >

PNG、JPEG与WebP转换:体积、画质与兼容性的测试方法 照片通常应比较JPEG与WebP有损编码;截图、文字和透明图标通常应比较PNG与WebP无损编码。但不能仅凭格式判断体积,必须固定编码器和参数后,实测文件大小、画质与兼容性。

了解更多 >

说明主色提取要解决的实际问题 图片主色提取的目标,是从一张图的像素中找出 3~8 个代表颜色,生成可用于配色、设计参考或图片取色工具的主色板。输出不应只有几个色块,还应包含每种颜色的 HEX、RGB、像素占比,以及明确的排序依据。 直接按

了解更多 >