InsightFace Model Zoo 全解析从 Python 模型包到识别、检测、对齐与属性模型选型指南【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightfaceInsightFace 是目前业界广泛使用的 2D/3D 人脸分析开源项目其核心资产之一就是庞大的Model Zoo模型仓库。本文以仓库中 model_zoo/README.md 为主体结合python-package下的真实加载与推理源码系统梳理 InsightFace 公开的 Python 模型包、人脸识别 / 检测 / 对齐 / 属性模型的配置、精度指标与选型依据。读完本文你将掌握如何安装并加载buffalo_l等模型包理解RetinaFace、SCRFD、ArcFace等模型在仓库中的组织方式与精度基准含义并能够结合自身算力与业务需求快速选择最合适的模型组合。注意根据仓库声明所有模型仅限非商业研究目的使用ALL models are available for non-commercial research purposes only.。文中所有精度数字均来自 model_zoo/README.md 的原始表格未做任何改动或推算。1. Model Zoo 在 InsightFace 中的定位Model Zoo 是整个 InsightFace 项目模型供给层的索引与目录。它覆盖了四条主任务线人脸识别Face Recognition以 ArcFace 为代表提供从 MobileFaceNet 到 ResNet-100 等不同骨干与多种训练集的 ONNX 模型人脸检测Face DetectionRetinaFace 与 SCRFD 系列覆盖从 500M FLOPs 到 34G FLOPs 的不同计算档位人脸对齐Face Alignment2D 106 点坐标回归、3D 68 点以及稠密对齐人脸属性Face Attribute性别与年龄GenderAge等。文档同时强调Model Zoo 中几乎所有的 ONNX 模型都可以被 Python 库直接调用almost all ONNX models in our model_zoo can be called by python library这意味着同一份 ONNX 资产既可用于独立推理也可被组装进FaceAnalysis这样的端到端管线。2. Python Package 模型包开箱即用的端到端方案2.1 安装与基础用法Model Zoo 文档给出的 Python 包使用方式非常简洁pip install -U insightfacemodel_pack_name buffalo_l app FaceAnalysis(namemodel_pack_name)FaceAnalysis是 python-package/insightface/app/face_analysis.py 中定义的端到端人脸分析入口它会在初始化时扫描模型包目录下全部*.onnx文件通过 model_zoo.py 中的ModelRouter自动识别每个模型的类型检测 / 识别 / 对齐 / 属性并组装成一套完整管线def __init__(self, nameDEFAULT_MP_NAME, root~/.insightface, allowed_modulesNone, **kwargs): self.model_dir ensure_available(models, name, rootroot) onnx_files glob.glob(osp.join(self.model_dir, *.onnx)) onnx_files sorted(onnx_files) for onnx_file in onnx_files: model model_zoo.get_model(onnx_file, **kwargs) ...2.2 五个官方模型包加粗名称表示最新版本中的默认模型包默认值可在 python-package/insightface/utils/constant.py 中看到DEFAULT_MP_NAME buffalo_l。各模型包的具体构成如下NameDetection ModelRecognition ModelAlignmentAttributesModel-Sizeantelopev2RetinaFace-10GFResNet100Glint360K2d106 3d68GenderAge407MBbuffalo_lRetinaFace-10GFResNet50WebFace600K2d106 3d68GenderAge326MBbuffalo_mRetinaFace-2.5GFResNet50WebFace600K2d106 3d68GenderAge313MBbuffalo_sRetinaFace-500MFMBFWebFace600K2d106 3d68GenderAge159MBbuffalo_scRetinaFace-500MFMBFWebFace600K--16MB可以看到buffalo_l是默认且能力最均衡的选择检测、识别ResNet50WebFace600K、2D/3D 对齐、性别年龄一应俱全buffalo_s面向轻量场景把检测降到 500MF、识别换成 MobileFaceNetMBFbuffalo_sc是裁剪版只保留检测与识别无对齐、无属性体积压缩到 16MB适合资源受限的嵌入式场景。2.3 Python 模型包的识别精度Model Zoo 文档给出了两个包在MR-ALLMasked Recognition戴口罩识别与多个人种子集、以及经典基准上的精度NameMR-ALLAfricanCaucasianSouth AsianEast AsianLFWCFP-FPAgeDB-30IJB-C(E4)buffalo_l91.2590.2994.7093.1674.9699.8399.3398.2397.25buffalo_s71.8769.4580.4573.3951.0399.7098.0096.5895.02文档同时给出两条重要注记buffalo_m与buffalo_l精度一致差异仅在检测模型档位与体积buffalo_sc与buffalo_s精度一致同为 MBFWebFace600K RetinaFace-500MF 组合仅裁剪了对齐与属性模块。2.4 源码级补充模型如何被识别与加载为什么一个目录下丢进几个 ONNX 文件FaceAnalysis就能自动知道谁是检测器、谁是识别器关键在于 model_zoo.py 中的ModelRouter.get_model()它通过输入张量形状和输出个数做路由输出个数 ≥ 5 → 判定为SCRFD检测器输入尺寸 192×192 →Landmark2D 106 点对齐输入尺寸 96×96 →Attribute性别年龄等属性输入为双输入且 128×128 →INSwapper换脸输入为正方形且边长 ≥112、能被 16 整除 →ArcFaceONNX识别。而get_model(name)本身支持两种形态传入目录名如buffalo_l时在~/.insightface/models下查找最新 ONNX 文件直接传入.onnx文件路径时按文件加载。默认推理提供者为[CUDAExecutionProvider, CPUExecutionProvider]CPU 环境可显式指定providers[CPUExecutionProvider]参考 examples/face_recognition/insightface_app.py。3. 人脸识别模型Face Recognition3.1 术语定义文档为后续所有表格给出了统一定义读懂这些缩写是正确理解精度表的前提MFNMobileFaceNetMS1MV2MS1M-ArcFace训练集MS1MV3MS1M-RetinaFace训练集MS1M_MegaFaceMS1MV2 MegaFace_train 的组合训练集_pfc使用 Partial FC分布式大规模分类头sample-ratio0.1MegaFaceMegaFace 识别测试gallery1e6IJBCIJBC 1:1 测试FAR ≤ 1e-4BDrive百度网盘BaiduDriveGDrive谷歌网盘GoogleDrive。未特别说明时默认训练损失为基于 margin 的 softmaxmargin-based softmax。3.2 MXNet 与 PaddlePaddle 模型BackboneDatasetMethodLFWCFP-FPAgeDB-30MegaFaceLinkR100 (mxnet)MS1MV2ArcFace99.7798.2798.2898.47BDrive / GDriveMFN (mxnet)MS1MV1ArcFace99.5088.9495.91-BDrive / GDriveMFN (paddle)MS1MV2ArcFace99.4593.4396.13-pretrained / inference modeliResNet50 (paddle)MS1MV2ArcFace99.7397.4397.88-pretrained / inference model各模型的百度网盘 / 谷歌网盘 / Paddle 官方下载地址详见 model_zoo/README.md 原文表格。3.3 不同深度 IResNet × 训练数据集这一组 ONNX 模型展示了骨干深度与训练数据规模共同决定精度的规律精度均为 MR-ALL 及四大人种子集BackboneDatasetMR-ALLAfricanCaucasianSouth AsianEast AsianR100Casia42.73539.66653.93347.80721.572R100MS1MV280.72579.11787.17685.50155.807R18MS1MV368.32662.61375.12570.21343.859R34MS1MV377.36571.64483.29180.08453.712R50MS1MV380.53375.48886.11584.30557.352R100MS1MV384.31281.08389.04088.08262.193R18Glint360K72.07468.23080.57575.85247.831R34Glint360K83.01579.90788.62086.81560.604R50Glint360K87.07785.27291.61790.54166.813R100Glint360K90.65989.48894.28593.43472.528对比同骨干R100在三代数据集上的 MR-ALLCasia 42.7 → MS1MV2 80.7 → 未列入此表但可参见下节的 Glint360K 90.7训练集规模的提升收益显著。同数据集Glint360K下从 R18 到 R100MR-ALL 从 72.1 提升到 90.7。3.4 IResNet-50 固定骨干 × 13 组训练数据集将骨干固定为 IResNet-50逐一对比训练数据集的影响同时给出经典基准 LFW / CFP-FP / AgeDB-30 / IJB-C(E4)DatasetMR-ALLAfricanCaucasianSouth AsianEast AsianLFWCFP-FPAgeDB-30IJB-C(E4)CISIA36.79442.55055.82549.61819.61199.45095.21494.90087.220CISIA_pfc37.10738.93453.82348.67419.92799.36795.42994.60084.970VGG238.57835.25954.30444.08124.09599.55097.41095.08091.220VGG2_pfc40.67336.76760.18049.03924.25599.68398.52995.40092.490GlintAsia62.66349.53164.82957.98461.74399.58393.18695.40091.500GlintAsia_pfc63.14950.36665.22757.93661.82099.65093.02995.23391.140MS1MV277.69674.59684.12682.04151.10599.83398.08398.08396.140MS1MV2_pfc77.73874.72884.88382.79852.50799.78398.07198.01796.080MS1M_MegaFace78.37274.13882.25177.22360.20399.75097.55797.40095.350MS1M_MegaFace_pfc78.77373.69082.94778.79357.56699.80097.87097.73395.400MS1MV382.52277.17287.02886.00660.62599.80098.52998.26796.580MS1MV3_pfc81.68378.12687.28685.54258.92599.80098.44398.16796.430Glint360k86.78984.74991.41490.08866.16899.81799.14398.45097.130Glint360k_pfc87.07785.27291.61690.54166.81399.81799.14398.45097.020WebFace600K90.56689.35594.17792.35873.85299.80099.20098.10097.120WebFace600K_pfc89.95189.30194.01692.38173.00799.81799.14398.11797.010Average69.24765.90877.12172.81952.01499.70697.37496.96293.925Average_pfc69.51965.89877.49773.21351.85399.71597.45796.96593.818这份表是数据决定上限最直观的证据同样是 IResNet-50WebFace600K 的 MR-ALL90.566比 CISIA36.794高出近 54 个百分点。而_pfcPartial FC, sample-ratio0.1版本在绝大多数指标上与全量 FC 持平甚至略优例如 Glint360k_pfc 的 MR-ALL 87.077 与 Glint360k 的 86.789说明在大规模训练集上 Partial FC 能以更低显存开销获得无损精度——这与仓库中 recognition/partial_fc 目录的定位一致。3.5 MobileFaceNet 模型DatasetMR-ALLAfricanCaucasianSouth AsianEast AsianLFWCFP-FPAgeDB-30IJB-C(E4)WebFace600K71.86569.44980.45473.39451.02699.7098.0096.5895.02MobileFaceNet 的工程指标FLOPS 约 450M模型体积约 13MB。这正是在buffalo_s/buffalo_sc中作为识别骨干的模型适合移动端与边缘设备。3.6 源码级补充ArcFaceONNX 如何做推理python-package/insightface/model_zoo/arcface_onnx.py 中的ArcFaceONNX类体现了几个关键实现细节输入预处理自适配通过检查 ONNX 图前 8 个节点是否包含Sub/Mul类节点自动判断模型来自 MXNetinput_mean0.0, input_std1.0还是 PyTorch/其他框架input_mean127.5, input_std127.5无需人工指定归一化参数对齐裁剪get()使用face_align.norm_crop依据检测到的 5 个关键点做标准化裁剪再提取 embedding相似度计算compute_sim()用余弦相似度np.dot(feat1, feat2) / (norm(feat1) * norm(feat2))比较两个人脸向量CPU 回退prepare(ctx_id-1)时将 provider 切换为纯 CPU。4. 人脸检测模型Face Detection4.1 RetinaFace文档说明RetinaFace 的 mAP 采用多尺度测试multi-scale testing评估m025表示 MobileNet-0.25 骨干。ImplementationEasy-SetMedium-SetHard-SetLinkRetinaFace-R5096.595.690.4BDrive / GDriveRetinaFace-m025 (yangfly)--82.5BDrive / GDriveBlazeFace-FPN-SSH (paddle)91.989.881.7%pretrained / inference model其中 BlazeFace-FPN-SSH 的 Paddle 实现同样由官方提供详见 detection/blazeface_paddleWIDER FACE 的 Hard-Set 达 81.7%。4.2 SCRFD文档说明SCRFD 的 mAP 采用单尺度测试single scale testing输入为 VGA640×480分辨率。关键定义2.5G表示当输入为 VGA 分辨率时模型开销约 2.5G FLOPs即模型名中的 G 是 VGA 输入下的 FLOPs 量级_KPS表示该模型可额外输出 5 个人脸关键点。NameEasyMediumHardFLOPsParams(M)Infer(ms)Link(pth)SCRFD_500M90.5788.1268.51500M0.573.6GDriveSCRFD_1G92.3890.5774.801G0.644.1GDriveSCRFD_2.5G93.7892.1677.872.5G0.674.2GDriveSCRFD_10G95.1693.8783.0510G3.864.9GDriveSCRFD_34G96.0694.9285.2934G9.8011.7GDriveSCRFD_500M_KPS90.9788.4469.49500M0.573.6GDriveSCRFD_2.5G_KPS93.8092.0277.132.5G0.824.3GDriveSCRFD_10G_KPS95.4094.0182.8010G4.235.0GDrive从 500M 到 34GWIDER FACE Easy-Set 从 90.57 提升到 96.06Hard-Set 从 68.51 提升到 85.29而 500M 档位的推理时间仅 3.6ms非常适合实时边缘部署。SCRFD 的完整训练配置可在 detection/scrfd/configs/scrfd 中找到如scrfd_500m.py、scrfd_2.5g.py、scrfd_10g.py等。4.3 源码级补充检测器如何被实例化python-package/insightface/model_zoo/scrfd.py 中SCRFD类的实现细节与 Model Zoo 表格一一对应按输出数量区分能力输出 6 个张量为无关键点版本输出更多如 15 个时启用关键点分支——这正是_KPS模型在运行时的判别依据默认阈值nms_thresh 0.4、det_thresh 0.5并缓存 anchor 中心center_cache加速推理动态输入尺寸当 ONNX 输入形状含字符串维度动态时默认使用DEFAULT_DET_SIZES [(128, 128), (640, 640)]两档尺寸bbox/kps 解码distance2bbox与distance2kps将网络输出的距离预测解码为边界框与关键点坐标。retinaface.py 中的RetinaFace类结构与 SCRFD 基本一致同样以taskname detection注册进模型管线。5. 人脸对齐模型Face Alignment5.1 2D 与 3D 对齐模型ImplementationPointsBackboneParams(M)Link(onnx)Coordinate-regression106MobileNet-0.51.2GDrive-68ResNet-5034.2GDrive2D 对齐坐标回归法Coordinate-regression输出 106 个 2D 关键点骨干 MobileNet-0.5仅 1.2M 参数对应buffalo_l等模型包中的2d106模块3D 对齐输出 68 个 3D 关键点骨干 ResNet-5034.2M 参数对应模型包中的3d68模块文档还列出了Dense Face Alignment稠密人脸对齐章节编号 2.3但当前表格未给出公开模型条目。5.2 源码级补充Landmark 如何区分 2D/3Dpython-package/insightface/model_zoo/landmark.py 中Landmark类的关键逻辑按输出张量形状判别当输出维度为 3309 68×3 姿态相关输出时判定为 3D 68 点模型lmk_dim3, lmk_num68并加载meanshape_68.pkl均值形状、启用姿态pose输出否则按output_shape[1] // 2推导 2D 关键点数量如 106 点任务名自动注册taskname landmark_%dd_%d % (lmk_dim, lmk_num)因此模型包中会同时出现landmark_2d_106与landmark_3d_68两个任务裁剪策略以检测框中心为基准、max(w, h) * 1.5为尺度进行仿射变换裁剪再送入网络。6. 人脸属性模型Face Attribute6.1 GenderAgeTraining-SetBackboneParams(M)Link(onnx)CelebAMobileNet-0.250.3GDrive性别年龄模型使用 CelebA 训练、MobileNet-0.25 骨干仅 0.3M 参数是模型包中体积最小的模块之一。文档还列出了Expression表情章节编号 4.2但当前表格未给出公开模型条目。6.2 源码级补充Attribute 任务名推导python-package/insightface/model_zoo/attribute.py 中Attribute类根据输出维度自动命名任务输出维度为 3 时注册为genderage性别年龄否则注册为attribute_NN 为属性数。推理时以检测框中心裁剪人脸后送入 96×96 输入输出结果由 face_analysis.py 中的draw_on()直接渲染为性别,年龄文本。7. 精度基准速查MR-ALL 与经典 Benchmark理解 Model Zoo 表格中的指标口径有助于横向对比MR-ALL 及其人种子集African / Caucasian / South Asian / East Asian戴口罩识别Masked Recognition场景下的整体与分人种精度是衡量真实世界鲁棒性的重要指标也是本文多数表格的主指标LFW / CFP-FP / AgeDB-30经典的人脸验证基准其中 CFP-FP 侧重正面-侧面Frontal-Profile跨姿态验证AgeDB-30 侧重跨年龄验证IJB-C(E4)IJB-C 1:1 验证FAR ≤ 1e-4 条件下的精度MegaFacegallery 达 1e6 规模的识别测试考验大规模底库下的检索能力。从整体数据看同骨干下WebFace600K 与 Glint360K 是当前精度最高的一档训练集R50WebFace600K 的 MR-ALL 90.566R100Glint360K 90.659这也是buffalo_l默认采用 ResNet50WebFace600K 的原因。8. 实战选型建议结合 Model Zoo 文档与仓库源码给出以下选型路径默认首选buffalo_l326MB 的体积换来检测RetinaFace-10GF 识别ResNet50WebFace600KMR-ALL 91.25 2D/3D 对齐 性别年龄的完整能力且是 constant.py 中定义的默认包追求轻量buffalo_s159MB或仅需检测/识别的buffalo_sc16MB识别精度与buffalo_l的差距主要体现在 MR-ALL71.87 vs 91.25与 East Asian 子集上极致精度可改用 antelopev2ResNet100Glint360K407MB单独加载单个 ONNX使用insightface.model_zoo.get_model(xxx.onnx, downloadTrue, download_zipTrue)即可自动下载到本地模型目录参考 examples/in_swapper/inswapper_main.py 与 examples/person_detection/scrfd_person.py边缘实时检测在 SCRFD 系列中优先考虑SCRFD_2.5GHard-Set 77.87、4.2ms或SCRFD_500M3.6ms模型目录结构所有模型默认落在~/.insightface/models/pack_name/下由 model_zoo.py 的root~/.insightface与 download.py 的校验下载逻辑共同决定可通过root参数自定义位置。结语InsightFace Model Zoo 的价值在于用一份统一目录覆盖检测、识别、对齐、属性四大任务并提供从 500M FLOPs 到 34G FLOPs、从 13MB 到 407MB 的完整算力-精度谱系。无论你是用FaceAnalysis(namebuffalo_l)快速搭建端到端人脸分析服务还是单独下载SCRFD_2.5G、ArcFaceGlint360K等 ONNX 模型嵌入自有推理管线都可以从 model_zoo/README.md 的模型清单出发再对照 python-package/insightface/model_zoo 目录下的各任务实现确认加载与预处理细节从而做出既贴合精度目标、又匹配算力约束的模型选型决策。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考