
SCRFD 实战指南3 步在 InsightFace 中跑通实时人脸检测【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface在 InsightFace 项目中SCRFD 是主打小而准的人脸检测模型。它用不到 1M 的参数在普通 CPU 上也能做到毫秒级推理是实时人脸检测场景里最常用的选择之一。本文带你看懂它的原理并给出一份可直接运行的上手路径。一个场景为什么刷脸支付在手机上不卡想象你在便利店刷脸支付。手机摄像头画面不停刷新模型每一帧都要把人脸找出来还不能有明显延迟。这对检测模型有两个硬要求体积要小速度要快。传统的 RetinaFace 配 ResNet50 骨干要 29.5M 参数、37.6G FLOPs而 SCRFD-2.5G 只有 0.67M 参数、2.5G FLOPs推理耗时约 4.2msVGA 分辨率评测。差不多 40 倍的计算量差距这是流畅刷脸背后的直接原因。上面这种多人、多姿态的合影正是 SCRFD 要应对的典型输入。原理通俗化像找人群里的人一样工作把人脸检测想象成在一群人里找目标。SCRFD 的分工可以拆成三步第一层粗看 细看结合。骨干网络一个轻量 ResNet从低到高提取 4 级特征。低层特征保留细节适合小脸高层特征带语义适合大脸。中间的 PAFPN Neckin_channels[24, 48, 48, 80]输出 24 通道把这些层的信息对齐再融合让小脸不被大脸挤掉。第二层不同放大镜找不同尺寸。检测头在 3 个尺度上出结果步长是 8、16、32基础框尺寸 16、64、256。小脸用最细的放大镜stride 8最小参考框 16px大脸用粗的。固定尺度的检测框很难同时照顾大脸和小脸这套多尺度配置就是为了解决这个问题。相关参数可以在 SCRFD 配置文件 里看到。第三层训练时自己挑好学生。老派做法用固定 IoU 阈值给每个锚框定正负样本容易样本失衡。SCRFD 改用 ATSSAssigner对每个预测位置看它周围同类框的中心和大小分布按统计结果动态选出 topk9 个正样本。哪个位置该当正例让数据自己说话。回归用 DIoU Loss分类用 Quality Focal Loss。一句话总结多级特征负责看得全动态选样本负责学得快轻量骨干负责跑得动。快速上手3 步出结果第 1 步装依赖安装 InsightFace 的 Python 包pip install -U insightface它内置了 onnxruntime 推理能力。需要源码时仓库地址是 https://gitcode.com/GitHub_Trending/in/insightface 。第 2 步加载模型并检测Python 包里已封装好 SCRFD 的推理逻辑见 Python 推理实现带关键点版本可自动下载import cv2 from insightface.model_zoo import scrfd_2p5gkps detector scrfd_2p5gkps() # 自动下载 2.5G KPS 模型 detector.prepare(ctx_id-1) # -1 表示 CPU img cv2.imread(python-package/insightface/data/images/t1.jpg) bboxes, kpss detector.detect(img, input_size(640, 640)) print(bboxes.shape, kpss.shape)第 3 步接入完整人脸分析可选如果后面还要做识别、属性直接用 FaceAnalysis检测模块即 SCRFD 同款from insightface.app import FaceAnalysis app FaceAnalysis(namebuffalo_l) app.prepare(ctx_id-1, det_thresh0.5) faces app.get(img)SCRFD 模型选型建议使用场景推荐变体理由手机、嵌入式、批量路数SCRFD-500M0.57M 参数3.6msHard 68.51通用平衡推荐默认SCRFD-2.5G / 2.5G_KPS0.67M 参数精度到 77.87服务端、精度优先SCRFD-10G / 34G10G 版 3.86M 参数仍仅 4.9ms关键数据各变体的效率与精度对比官方在VGA640x480分辨率下评测数据来自 detection/scrfd/README.md变体EasyMediumHard参数量(M)FLOPs推理耗时(ms)SCRFD-500M90.5788.1268.510.570.5G3.6SCRFD-1G92.3890.5774.800.641G4.1SCRFD-2.5G93.7892.1677.870.672.5G4.2SCRFD-10G95.1693.8783.053.8610G4.9SCRFD-34G96.0694.9285.299.8034G11.7对比一下同量级的 RetinaFace(ResNet50) 是 29.5M 参数、21.7msResNet-2.5GF 只有 74.47 的 Hard 精度而 SCRFD-2.5G 是 77.87。另外CPU 单线程AMD Ryzen 9 3950XOMP_NUM_THREADS1实测640x480 输入约 28.3ms320x240 约 11.4ms。带_KPS后缀的版本额外输出 5 个人脸关键点耗时基本不变如 2.5G_KPS 为 4.3ms。常见坑位5 个实战注意事项1. 静态输入模型不能换 input_size。用 scrfd2onnx.py 加--shape 640 640导出的 onnx 是固定输入再调prepare(input_size...)不会生效。默认导出的动态输入模型支持多尺度默认会按(128,128)(640,640)两级检测后合并去重。2. 阈值别乱调。检测默认det_thresh0.5、NMS 阈值 0.4。密集场景漏检时可以把 det_thresh 降到 0.3 左右但重复框靠 NMS 清理降得太低画面会乱。3. 精度对比要对齐分辨率。上表全是 VGA 评测。把输入从 640x640 换到 320x320精度数字会明显变化不能拿不同分辨率的结果互比。4. 需要关键点就选 _KPS 变体。普通版本kpss返回 None。做对齐比如接 ArcFace 识别时直接用带关键点的版本能少一步 landmark 模型。5. 小脸优先加输入分辨率。最小参考框 16px 意味着原图中 16~32px 级别的脸才进得来 stride 8 层。远监控场景里与其换更大模型不如先把 input_size 调高再考虑精度换速度的平衡。写在最后SCRFD 的价值很朴素用 0.67M 参数换到 77.87 的 Hard 精度和 4.2ms 的 CPU 级耗时让实时人脸检测在普通硬件上落地不费劲。想继续深入的话可以看看 训练脚本 了解多卡训练流程或到 模型仓库 了解 SCRFD 与 ArcFace 识别模型如何组合成完整的人脸分析管线。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考