SCRFD 实测4ms 一帧的 InsightFace 人脸检测从选模型到跑通推理【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface八路摄像头同时推流时单帧推理哪怕只慢 10ms第 4 路就开始掉帧。我遇到过用老一代 RetinaFace 跑这种场景的VGA 一帧 21.7ms八路合起来帧率直接跌到个位数只能咬牙砍路数。InsightFace 检测目录里有个更务实的选择SCRFD。它的 SCRFD_2.5G 档位2.5GFLOPs、0.67M参数在 VGA 分辨率下单帧4.2msWIDERFace Easy 档位 mAP93.78数据来自仓库 detection/scrfd/README.md下文表格都标注测试条件。10ms 预算内跑完一帧八路才刚起步。上面这张图来自仓库自带的 C 包测试资源同一张人脸能叠出检测框、关键点、眨眼/活体判断和年龄性别属性。SCRFD 是这条链路的第一棒后面所有任务都吃它吐出来的框。三个设计决策把 0.67M 参数花在刀刃上锚框砍到每个像素 2 个后处理压力跟着降传统检测器给每个特征点铺 3 种比例 × 3 种尺度共 9 个 anchorSCRFD 的 scrfd_2.5g.py 里写死了ratios[1.0], scales[1,2]——每个像素只留 2 个锚框。候选框数量直接砍到 1/4NMS 要排序、要比较的框少了后处理时间跟着省。三个特征层的 base size 是[16, 64, 256]对应小/中/大人脸各管一段不靠多堆锚框碰运气。PAFPN 压到 24 通道 共享卷积头backbone 用了 4 段 basic block(3,5,3,2)通道宽度[24, 48, 48, 80]故意压得很薄。neck 是PAFPNout_channels24、start_level1、add_extra_convson_output高层语义信息下沉、底层细节上提输出全部压到24 通道所以 SCRFDHead 用feat_channels64的薄头就够了。头部分享卷积cls_reg_shareTrue, strides_shareTrue三个尺度复用一套卷积权重省下的参数换成了精度。ATSSAssigner 动态挑正样本不靠拍脑袋定阈值训练时的样本分配用的是ATSSAssigner, topk9每个位置按 IoU 中位数动态挑 9 个正样本而不是 IoU 0.5 才算正样本这种一刀切。小人脸、偏中偏大的人脸都能拿到合理数量的正样本Hard 档位的差距主要就来自这里模型参数量Easy mAPHard mAP单帧耗时SCRFD-2.5GF0.67M93.7877.874.2msResNet-2.5GF同算力基线1.62M93.2174.475.4msRetinaFaceR5029.50M94.9264.1721.7ms同算力下 SCRFD 比基线少60% 参数Easy 还高 0.57 个点Hard 上拉了 3.4 个点。对照 RetinaFace-R50SCRFD 参数量只有它的 1/44Hard mAP 反超13.7 个点耗时从 21.7ms 压到 4.2ms。最短路径一条命令装好三行代码跑通推理SCRFD 的 ONNX 模型默认导出成动态输入见detection/scrfd/tools/scrfd2onnx.py这给了它一个自适应尺度的默认行为git clone https://gitcode.com/GitHub_Trending/in/insightface pip install -r detection/scrfd/requirements.txt推理入口在 detection/scrfd/tools/scrfd.py核心就三行detector SCRFD(model_filedet.onnx) # 传本地 onnx 路径 detector.prepare(-1) # -1 用 CPU 推理 bboxes, kpss detector.detect(img, 0.5) # 0.5 是置信度阈值detect不传input_size时动态输入的模型会先跑 128×128 粗筛、再跑 640×640 精检两路结果合并后做 NMS 去重。小图走粗筛很快大图两路加起来也就是一次 640 推理的开销这是它一帧 4ms的另一半来源。仓库 python 包自带的示例图片一次 detect 能把六张脸都框出来——阈值取 0.5 时误检已经很少。调优先改这两个参数再考虑换档位现象改input_size(480,480)无效耗时和检测框都不变。原因你下载的 ONNX 是固定 640×640 导出的prepare里直接忽略该参数并打印 warning。处理重新用--shape 480 480导出或干脆用动态输入的官方模型。现象漏检多把det_thresh从 0.5 调到 0.3 后墙上海报的脸也被框出来。原因阈值只是粗筛NMS 的nms_thresh0.4管的是重复框管不了误检两者各管一段。处理漏检严重先降 det_thresh 到 0.3~0.4误检多就往上抬同时看一眼 NMS 是不是把两张相邻真脸合并了。现象CPU 上 640×640 一帧 28ms八路顶不住。原因耗时和输入分辨率近似平方关系。处理官方实测AMD Ryzen 9 3950X单线程SCRFD-0.5GF320×240 只要 11.4msEasy mAP 90.57只比 640×480 低 0.04 个点OMP_NUM_THREADS开满核再快一截。动态输入模型建议配合 onnx-simplifier 固化形状推理更快。输入尺寸单帧耗时CPU 单线程Easy mAP640×48028.3ms90.57320×24011.4ms90.57数据来自 detection/scrfd/README.mdAMD Ryzen 9 3950X、SCRFD-0.5GF、OMP_NUM_THREADS1、无 mkldnn。它只是第一棒SCRFD 在 InsightFace 里是给后面供数据的底层组件检测框 5 点关键点吐给识别、属性、3D 重建这些下游任务。想复现训练配置在 detection/scrfd/configs/scrfd/想加自己的数据直接往data/retinaface/按 WIDERFace 标注格式放就行。把 2.5G 的 ONNX 拉下来跑一遍tools/scrfd.py的__main__——4ms 一帧八路流先跑起来再谈别的。性能数据均来自仓库 README 标注的测试环境VGA 分辨率、ONNX 推理实际耗时随硬件和线程数浮动。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考