AI-深度学习

口鼻遮挡工程实录:02 方案探索与演进

展开合集目录
  1. 口鼻遮挡工程实录:01 需求与判断边界
  2. 口鼻遮挡工程实录:02 方案探索与演进
  3. 口鼻遮挡工程实录:03 总体架构与完整时序
  4. 口鼻遮挡工程实录:04 图像预处理与坐标转换
  5. 口鼻遮挡工程实录:05 头部检测与YuNet
  6. 口鼻遮挡工程实录:06 PIPNet98关键点与响应
  7. 口鼻遮挡工程实录:07 FaceOcc分割与口鼻覆盖率
  8. 口鼻遮挡工程实录:08 姿态与几何分析
  9. 口鼻遮挡工程实录:09 多证据融合规则
  10. 口鼻遮挡工程实录:10 跟踪与持续确认
  11. 口鼻遮挡工程实录:11 YOLO-World物体复核
  12. 口鼻遮挡工程实录:12 模型转换与海思部署
  13. 口鼻遮挡工程实录:13 板端运行与调试闭环
  14. 口鼻遮挡工程实录:14 测试评估与问题复盘
  15. 口鼻遮挡工程实录:A 附录A-参数字典
  16. 口鼻遮挡工程实录:B 附录B-状态与结果字段
  17. 口鼻遮挡工程实录:C 附录C-模型与代码索引
  18. 口鼻遮挡工程实录:D 附录D-完整教学样例
口鼻遮挡工程实录:02 方案探索与演进的封面

系列编排日期为 2026 年 8 月;正文依据 2026-10-12 核对的实现整理。历史实测保留真实日期,教学数字不代表实测;本次未重新执行板端推理。

返回系列目录 · 本篇为 14 章+4 份附录中的一篇。

为什么不能直接选择一个“遮挡模型”

项目的探索从人脸检测、坐标回归和局部响应开始,之后加入可见脸部分割、头部检测与物体复核。应当保留每次试验真正回答的问题,而不是只留下“通过/失败”两个结论。

探索路线 当时试图解决的问题 记录支持的限制
InsightFace 106 点 定位五官,再观察遮挡 裁剪方式先有偏差;改正后坐标仍不能直接提供可见性
PFLD 106 点 用轻量坐标回归替代复杂模型 所测试模型没有逐点可见性输出,被遮区域仍会预测点位
MiniFASNet 尝试借用活体分类输出 本地摄像头试验无法有效区分遮挡与正常,任务标签不匹配
YuNet 单模型 建立稳定的人脸检测与预览入口 检测分数不是遮挡概率,检测成功不保证鼻嘴可见
YuNet+PIPNet 利用局部响应观察遮挡影响 暗光、小脸、姿态和纹理也会改变响应,不能单独证明遮挡
头部+YuNet+LUVLi 引入位置不确定性与可见性相关输出 本地转换试验存在侧脸及不确定性数值偏差
头部+YuNet+PIPNet+U-Net 将位置、响应和可见像素结合 ROI 漂移和非遮挡低覆盖仍是关键问题
上述四模型+World 给低覆盖或疑似遮挡补充物体证据 词表、漏检、量化分数漂移和二维重叠限制仍存在

这些记录不能推出“所有坐标模型都没用”或“市场上不存在可用模型”。它们说明的是:本地试过的模型输出,不能未经验证地替代所需的口鼻遮挡标签。

关键点为什么会在遮挡物上继续出现

坐标回归模型学习了五官相对结构。嘴被手遮住后,模型仍可能根据眼睛、轮廓及训练先验预测一组看起来合理的嘴部坐标。预测存在只是网络完成了前向计算,不意味着网络看到了嘴。

PIPNet 增加了可观察的响应图和邻居回归输出,但项目提取的 peak、gap 与分散度仍是工程证据。它们没有通过本项目的逐点可见性标注集校准为概率。

LUVLi 试验留下的经验

LUVLi 的研究目标包含关键点位置、不确定性及可见性估计,原始项目和论文可见 LUVLi 官方仓库。本项目考察的是已有权重在 Hi3516 转换后的输出一致性,不是重新训练该方法。

2026-09-17 的 REPAIR_NOTRAIN.md 记录:原始 IFMR 版本相对 PC ONNX 的正常脸平均点差约 1.089 px、侧脸约 13.932 px;等价池化且关闭层融合的版本约为 0.461 px、12.052 px,推理耗时由约 642 ms 增到约 912 ms。距离均在 256×256 裁剪坐标系中计算,参考是浮点网络,不是真实关键点标注。

用固定权重卷积与 ReLU 表达 MaxPool 的试验改善了部分数字,却没有消除侧脸偏差。另一个线性量化版本同时改变校准集和量化算法,效果更差也不能单独归因于“增加校准样本”。没有完成转换的混合精度候选,更不能写成已经测过准确率。

这段经历说明:转换器接受一个网络,与该网络关键输出保持可用数值,是两个需要分别验证的目标。

当前规则发生了什么变化

较早规则对姿态、整脸轮廓和局部点分散度具有较强依赖。当前 unet_first_then_response 优先计算鼻嘴 ROI,只要两者有效且覆盖均达标,就直接放行。

项目 当前含义
legacy_state 同一帧输入经过旧规则得到的对照值,没有旧规则独立时序确认
state 当前规则的结果,之后可能被时序层升级为侧向持续状态
unstable_landmarks 局部分散度超过参考值,仍保留真实覆盖率
response_checked 当前区域有效且覆盖不足,响应参与该区域判定
World 的 final_state 保留原始状态,不是物体模型重新分类后的遮挡结论

新规则不是无条件更准确。它解决一类误报,也暴露出“关键点漂到其他皮肤区域仍获高覆盖”的风险。因此旧规则对照字段值得保留,用于找出状态变化发生在哪一步。

阅读历史文档时需要纠正的表述

早期测试记录将 PIPNet 输入写成 BGR,将响应峰值直接称为置信度,还把 8×8 响应图解释为量化造成的低分辨率。当前执行代码明确使用 RGB 与 ImageNet 归一化;8×8 来自本地模型的 256 输入和 stride 32,不能由此推断量化改变了空间尺寸。

FaceOcc 单模型资源文档曾建议常驻以减少加载开销,而后续完整链路为控制板端内存峰值采用串行加载卸载。两者对应不同实验范围,部署章节以当前 infer() 与 BoardNpu 实现为准。

历史文档称平台模型会进入安装目录;当前 PackApps.sh 又明确排除 Module。安装产物与 NAND 应用镜像并不相同,实际部署需准备 SD 卡模型目录。

如何固定文章对应版本

本次不虚构 Git 提交号,附录 C 用相对路径、字节数、SHA-256 保存关键源码、配置和模型基线。后续代码变化时,首先比较这些指纹,再核对阈值、输出结构和模型文件。只有文章日期而没有实现基线,几个月后很难重现一次判定。

历史入口:yunet_occlusion/遮挡检测模型测试记录.md、head_yunet_luvli/hi3516/REPAIR_NOTRAIN.md、head_pipnet_unet/README.md、GenerateTestTools/npu/CASCADE.md。其中未标明具体测试日期的早期观察,本系列不补造日期。


上一篇:需求与判断边界 · 系列目录 · 下一篇:总体架构与完整时序