ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SCRFD 人脸检测:InsightFace 里 0.5GF 到 34GF 的选型与落地

SCRFD 人脸检测:InsightFace 里 0.5GF 到 34GF 的选型与落地 SCRFD 人脸检测InsightFace 里 0.5GF 到 34GF 的选型与落地【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface监控画面里近处半张脸和远处十几个像素的小脸同时出现实时检测器要在几十毫秒内把每张脸都框出来。InsightFace 的 SCRFD 检测模块给出 5 个规格档位参数 0.57M–9.80M单帧延迟 3.6–11.7msWIDERFace Hard mAP 从 68.51 到 85.29。 算力与样本的两本账怎么分传统检测器在每个特征位置花同样的算力但脸出现的规律不是均匀的小脸在浅层特征图里才显得大大脸在深层特征图里才有足够上下文。SCRFD 的做法是按统计规律重新分配两笔预算把算力花在定位贡献最大的位置。计算再分配骨干浅层通道多、算得密深层通道少、算得省因为大脸定位靠深层语义而小脸靠浅层分辨率省下的 FLOPs 补给浅层。样本再分配训练时不用固定 IoU 阈值挑正样本而由 ATSS 分配器按 anchor 邻域的统计量自动判定每个 anchor 算正、算负还是不算省去了固定阈值对密集小脸的误杀。共享头分类和回归共用卷积因为两个头消费的是同一份特征砍掉的头部 FLOPs 直接体现在 0.5GF 档位的存在上。 三个配置值共享开关、anchor 尺度、ATSS topkdetection/scrfd/configs/scrfd/scrfd_2.5g.py 里最值得看的是三个值cls_reg_share管共享头开关scales与base_sizes决定每个特征位置挂几个不同尺度的 anchorATSS 的topk决定正样本的筛选力度。bbox_headdict( typeSCRFDHead, cls_reg_shareTrue, anchor_generatordict(typeAnchorGenerator, ratios[1.0], scales[1, 2], base_sizes[16, 64, 256], strides[8, 16, 32]), train_cfgdict(assignerdict(typeATSSAssigner, topk9)))配置项仓库默认值调大的后果调小的后果cls_reg_shareTrue共享头 FLOPs 固定无法进一步压缩分类/回归各建一套卷积头部 FLOPs 翻倍scales/base_sizes[1, 2]/[16, 64, 256]每层 anchor 更多小脸覆盖更密推理 FLOPs 上升stride8 层失去 scale2 候选小脸漏检风险上升ATSStopk9邻域内正样本更多密集小脸漏检减少噪声样本增加正样本过少密集小脸被压成负样本 5 个规格怎么选下表来自 detection/scrfd/README.md 的 Pretrained-Models 表mAP 为 WIDERFace 单尺度、VGA 分辨率评测Infer 为单帧延迟规格参数量(M)Infer(ms)EasyMediumHardSCRFD_500M0.573.690.5788.1268.51SCRFD_1G0.644.192.3890.5774.80SCRFD_2.5G0.674.293.7892.1677.87SCRFD_10G3.864.995.1693.8783.05SCRFD_34G9.8011.796.0694.9285.29对号入座你的场景建议理由手机 App、嵌入式端侧SCRFD_500M0.57M 参数3.6ms 档延迟服务器单路实时、精度预算中等SCRFD_2.5GHard 77.87比 500M 高 9.36 个点延迟只多 0.6ms安防/支付等高精度离线服务SCRFD_10G3.86M 参数换 Hard 83.054.9ms 仍处实时区间端侧 CPU 实测AMD Ryzen 9 3950X、OMP_NUM_THREADS1500M 规格在 640x480 输入下单线程 28.3ms降到 320x240 只要 11.4ms先降输入尺寸再换更小模型 detection/scrfd/README.md。同硬件条件下 RetinaFace MobileNet-0.25 延迟 7.9msHard 只有 47.32小档位上 SCRFD 的精度差在算法而非模型大小 detection/scrfd/README.md。带关键点的 SCRFD_2.5G_KPSEasy 93.80、Hard 77.13延迟 4.3ms比同档非关键点版Hard 77.87只多 0.15ms detection/scrfd/README.md。 克隆到出图前置条件Python 环境装 onnxruntime、opencv-python、numpy 三个包det.onnx权重从 detection/scrfd/README.md 的 Pretrained-Models 表下载放到detection/scrfd目录。git clone https://gitcode.com/GitHub_Trending/in/insightface cd insightface/detection/scrfd pip install onnxruntime opencv-python numpy # 下载 det.onnx 放到当前目录后 python tools/scrfd.py固定 shape 导出的模型detect()内部断言要求输入尺寸已知现象是断言失败解法是显式传input_size(640, 640)见 detection/scrfd/tools/scrfd.py。关键点不是所有权重都有use_kps由输出头数量自动推断6/10 头无关键点、9/15 头带 5 点现象是kpss返回None解法是选带_KPS后缀的权重。坐标不要二次缩放detect()返回的框已按det_scale映射回原图坐标系现象是框位置和原图对不上解法是直接使用返回值不要再除以缩放系数。 在 InsightFace 链路里的位置SCRFD 输出人脸框和 5 个关键点下游 ArcFace 识别器用这 5 点做仿射对齐3D 重建模块直接消费检测框。python-package/insightface/app/face_analysis.py 是检测 → 对齐 → 识别/属性的标准组装examples/demo_analysis.py 可直接跑通整条链路。⚠️ 小脸不准先查 Hard 账Hard 子集基本就是密集小脸的精度账本500M 规格只有 68.51先升到 2.5G 或 10G再把推理输入尺寸调高让浅层特征图对小脸更稠密代价是延迟随分辨率近似平方增长。需要自定义 FLOPs 档位时从 detection/scrfd/search_tools/ 的网络结构搜索入手导出细节在 detection/scrfd/tools/scrfd2onnx.py。_KPS权重精度略低但延迟只多 0.15ms需要关键点时这个代价基本无成本。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进