尧图精选

SCRFD 人脸检测实战手册:0.5M 参数模型 3.6ms 推理,从零跑通实时检测

🕒 发布时间:2026/9/3 13:22:33 📁 来源:尧图网络
SCRFD 人脸检测实战手册0.5M 参数模型 3.6ms 推理从零跑通实时检测【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightfaceSCRFD 人脸检测是 InsightFace 里专门解决精度和速度不能兼得这个死结的方案0.57M 参数的模型单张 VGA 分辨率推理 3.6ms在 WIDER Face Hard 子集上 68.51 mAP——比 29.5M 参数的 RetinaFace(ResNet50) 还高 4 个点。下面按「原理 → 跑通 → 调优」三步走。① 它解决什么问题你在做实时人脸检测时大概率遇到过这种情况业务要求画面里 30 张脸都要框出来单帧不能慢于 20ms可高配模型RetinaFace-ResNet50要 21.7ms而能跑快的 MobileNet0.25 版本精度只有 47.32小脸和遮挡脸基本漏检。SCRFD 的定位就是把参数压到 1M 以内同时把 Hard 集精度拉到 68 以上让 CPU、手机、边缘设备都能扛住真实视频流。这张图展示了人脸检测在定位、关键点、活体、属性分析等多个下游场景中的应用SCRFD 负责其中最前端的框出人脸这一步。② 核心原理速览核心配置都在 detection/scrfd/configs/scrfd/scrfd_2.5g.py 里拆开看是三个设计。2.1 压通道的小 PAFPN传统 FPN 会把每层特征升到 256 甚至 512 通道再融合计算量大头就在这。SCRFD 直接让整条金字塔只用 24 通道# scrfd_2.5g.py 中的 neck 配置 neckdict( typePAFPN, in_channels[24, 48, 48, 80], out_channels24, # 全网络最粗也只有 24 通道 start_level1, add_extra_convson_output, num_outs3),对比传统做法特征融合这一步的 FLOPs 被砍掉一大截2.5GF 版本全网络总共才 2.53G FLOPs。2.2 每点双锚框的动态分配每个特征点只放 2 个锚框scales[1,2]靠不同层级的 base_sizes 覆盖大小脸# scrfd_2.5g.py 中的 anchor 配置 anchor_generatordict( typeAnchorGenerator, ratios[1.0], scales[1, 2], # 每个采样点 2 个锚框 base_sizes[16, 64, 256], strides[8, 16, 32])锚框数量少了样本重新分配才能成立——少数锚框被更多有效正样本监督等效于用更少参数量覆盖同等密度的人脸。2.3 ATSS 自适应正样本选择正样本不再靠固定 IOU 阈值0.4/0.5 那类拍脑袋分配而是按特征图上的统计量自适应挑# scrfd_2.5g.py 中的 train_cfg train_cfgdict( assignerdict(typeATSSAssigner, topk9), # 动态选前 9 个最优候选 allowed_border-1, pos_weight-1)好处是正负样本比例随输入自动平衡同一套配置在不同输入尺度下都稳定省掉了反复手调阈值的时间。③ 从零跑通最小可复现路径克隆仓库并进入 SCRFD 目录推理脚本在 tools/ 下git clone https://gitcode.com/GitHub_Trending/in/insightface cd insightface/detection/scrfd pip install onnxruntime opencv-python numpy onnx准备一张图和预训练 ONNX 模型模型从 detection/scrfd/README.md 的 Pretrained-Models 表里下载如 SCRFD_2.5G 或 SCRFD_2.5G_KPSKPS 版带 5 点关键点。这一步为什么单独说仓库本身只放代码权重是外链托管的。跑推理核心调用就在 detection/scrfd/tools/scrfd.pyimport cv2 from tools.scrfd import SCRFD detector SCRFD(model_filedet.onnx) detector.prepare(-1) # -1 表示 CPU img cv2.imread(t3.jpg) bboxes, kpss detector.detect(img, 0.5, input_size(640, 640)) print(检测到, bboxes.shape[0], 张脸)可选自己训和评测4 卡训练与 WIDER Face 评测命令 README 里都给了# 训练 CUDA_VISIBLE_DEVICES0,1,2,3 PORT29701 \ bash ./tools/dist_train.sh ./configs/scrfd/scrfd_1g.py 4 # 评测 CUDA_VISIBLE_DEVICES0 python -u tools/test_widerface.py \ ./configs/scrfd/scrfd_2.5g.py ./work_dirs/scrfd_2.5g/model.pth --mode 0 --out wouts这张图展示的是模型从训练、导出到多端部署的完整链路SCRFD 的 ONNX 导出tools/scrfd2onnx.py就在这一环。⚠️ 常见报错运行detect时抛AssertionError: input_size is None。原因动态 shape 的 ONNX 没有固定输入尺寸。修复调用时显式传input_size(640, 640)。④ 效果怎么看关键指标速查以下数字全部来自仓库 README均在 VGA 分辨率下评测模型EasyHardParams(M)Infer(ms)RetinaFace (ResNet50)94.9264.1729.5021.7SCRFD-0.5GF90.5768.510.573.6SCRFD-2.5GF93.7877.870.674.2SCRFD-10GF95.1683.053.864.9SCRFD-34GF96.0685.299.8011.7✅ 最值得关注的是 2.5GF 这一行Hard 精度 77.87比 RetinaFace-ResNet50 高 13.7 个点参数量只有它的 1/44单帧 4.2ms 对 21.7ms。选型建议手机端/极轻场景选 0.5GFRyzen 9 3950X 单线程 CPU 下 320x240 输入 11.4ms通用场景选 2.5GF 或 10GF要极限精度再上 34GF。⑤ 调优与避坑坑 1推理时报 input_size 为空。动态导出的 ONNX 不带固定尺寸 → 每次detect传入input_size或导出时用--shape 640 640固定。坑 2打印warning: det_size is already set in scrfd model。固定 shape 模型不接受运行时改尺寸 → 需要多尺度推理就用默认动态 shape 导出别提前写死。坑 3mmcv 安装失败或算子报错。README 明确只测过 mmcv-full1.2.6 和 1.3.3 → 用 pip 锁死版本再装 mmdet不要装最新 mmcv。坑 4CPU 实测速度对不上 3.6ms。README 的推理时间是OMP_NUM_THREADS1单线程测的 → 压测前先固定线程数再比否则线程超配反而更慢。⑥ 延伸它和项目里谁配合SCRFD 在这个仓库里是上游检测、下游分析结构的中枢输出的人脸框 关键点喂给 ArcFace 识别和属性/换脸模型。最省事的入口是 python-package 的 FaceAnalysis一行app.get(img)就把检测、识别、属性串起来了生产形态可以看 server/ 下的人脸服务检测模块直接复用同一套 SCRFD 权重。这张图展示了基于该检测服务搭建的多人脸集合管理界面是 SCRFD 检测能力落到线上服务后的形态。⑦ 一句话总结 下一步SCRFD 用压通道金字塔 双锚框 ATSS 分配把人脸检测做成了 0.6M 参数、4ms 级推理的实时方案且精度反超大一个量级的传统模型。下一步动作下载 SCRFD_2.5G_KPS 的 ONNX把 tools/scrfd.py 的__main__段跑起来给你的业务图片框一次脸。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →