ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

InsightFace 中 IJB-B/IJB-C 评估指南:1:1 与 1:N 协议的人脸识别评测全流程

InsightFace 中 IJB-B/IJB-C 评估指南:1:1 与 1:N 协议的人脸识别评测全流程 InsightFace 中 IJB-B/IJB-C 评估指南1:1 与 1:N 协议的人脸识别评测全流程【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface本篇技术指南聚焦 InsightFace 人脸识别项目中的权威评测基准——IARPA Janus Benchmark-BIJB-B与 Benchmark-CIJB-C。它面向需要复现论文图表、验证自研模型泛化能力的开发者读完本文你将掌握从申请数据集、准备 meta 信息到运行 1:1 模板对验证template-to-template verification与 1:N 检索识别identification两个协议再到输出 ROC 曲线、TPRFPR 表格与 CMC 曲线的完整实操流程并理解这套评测脚本的底层实现原理。IJB-B / IJB-C 是 ArcFace 等主流人脸识别算法论文中必备的评测基准用于衡量模型在跨姿态、跨年龄、多图像/视频模板场景下的真实泛化能力。本文以仓库中 recognition/evaluation/ijb/README.md 为主线结合同目录下的 example.sh、ijb_11.py、ijb_1n.py、ijb_evals.py 与 ijb_onnx.py 逐层展开。一、评测背景IJB-B / IJB-C 是什么IJB-B 与 IJB-C 由 IARPAIntelligence Advanced Research Projects Activity发起构建分别发表于 CVPR Workshops 2017Whitelam 等[6]与 ICB 2018Maze 等[7]。与 LFW、MegaFace 等以“单张正脸照”为主的评测集不同IJB 系列的特点是模板Template与媒体Media层级一个人物subject的多个图像/视频片段被组织为一个模板评测以模板为单位进行相似度计算更加贴近真实安防场景中“多帧融合”的识别方式跨姿态、跨年龄数据来源包含网络照片、视频抽帧等姿态、光照、年龄跨度大难度显著高于传统静态人脸评测两套官方协议1:1 验证Verification给定模板对template pair与标签计算模板间相似度输出 ROC 曲线与 TPRFPR1:N 识别Identification给定 probe查询模板与 gallery注册库模板输出 Top-1/5/10 准确率以及 FAR/TPR或称 DIR/FAR曲线。仓库中 recognition/evaluation/ijb/README.md 明确指出IJB-B 与 IJB-C 数据集需要自行向 IARPA 申请并严格遵守其分发许可协议。评测所需的模型、代码、数据与 meta 信息则通过网盘统一提供文中给出了 GDrive 与百度网盘两种渠道其中更新后的 1:1 与 1:N meta 数据单独发布百度网盘提取码为7g8o。注意本仓库只提供评测脚本与流程说明不包含 IJB 数据本体。申请到原始数据集后需按脚本约定的目录结构摆放loose_crop图片与meta目录详见下文。二、目录结构与脚本家族recognition/_evaluation_/ijb/目录下共包含 6 个文件构成两代评测工具链文件角色说明README.md指南数据/模型获取方式、致谢与参考文献example.sh启动示例同时后台运行 1:1IJBC与 1:NIJBB评测ijb_11.py1:1 验证脚本MXNet 模型版输出 ROC 与 TPRFPR 表格ijb_1n.py1:N 识别脚本MXNet 模型版输出 Top-1/5/10 与 FAR/TPRijb_evals.py统一评测框架支持 MXNet / PyTorch / ONNX / Keras 四种后端封装 1:1、1:N 与批量模式ijb_onnx.pyONNX 专用脚本基于insightfacePython 包与ArcFaceONNX模型类DataLoader 批量化抽取特征其中ijb_evals.py是功能最完整的统一入口新代码优先推荐ijb_11.py/ijb_1n.py是面向 MXNet 训练产物的经典脚本ijb_onnx.py则适合已有 ONNX 导出模型的场景。下文逐一讲解。三、数据与目录准备3.1 数据集申请与元数据按照 README.md 的说明自行向 IARPA 申请IJB-B与IJB-C原始数据集遵守分发许可下载评测所需的模型、代码、数据与 meta 信息压缩包GDrive 或百度网盘若有需要下载更新后的 1:1 与 1:N meta 数据README 中单独列出了百度网盘与 GDrive 两份更新链接。脚本运行所依赖的目录结构相对当前工作目录如下IJBC/ ├── loose_crop/ # 按 meta 中图片名对应的裁剪人脸图 └── meta/ ├── ijbc_face_tid_mid.txt # 图片名 模板id(tid) 媒体id(mid) ├── ijbc_template_pair_label.txt # 模板1 模板2 标签(1/0) ├── ijbc_name_5pts_score.txt # 图片名 5点关键点(10个数) 人脸得分 ├── ijbc_1N_gallery_G1.csv # 1:N gallery 第一组 ├── ijbc_1N_gallery_G2.csv # 1:N gallery 第二组 └── ijbc_1N_probe_mixed.csv # 1:N probeIJBB 对应文件名为ijbb_*。其中 gallery 文件在 IJB-B 中名为ijbb_1N_gallery_S1.csv/S2.csv在 IJB-C 中名为G1.csv/G2.csv——这一差异在 ijb_1n.py 和 ijb_evals.py 中通过条件分支显式处理。3.2 元数据格式说明各 meta 文件的解析方式可以从源码直接确认ijb_11.py*_face_tid_mid.txt以空格分隔第 2 列为模板 idtid、第 3 列为媒体 idmid用于把图像特征聚合为模板特征*_template_pair_label.txt以空格分隔前两列为模板 id 对第三列为标签1 表示同一人、0 表示不同人用于 1:1 验证*_name_5pts_score.txt每行格式为图片名 x1 y1 x2 y2 ... x5 y5 人脸得分前 10 个数为 5 个关键点的 (x, y) 坐标最后一个数为检测器给出的人脸得分faceness score1:N 的*.csv首行表头之后每行为模板id, 主体id(subject id)。3.3 数据规模参考从 ijb_evals.py 中保留的注释可以看到 IJBC 的规模细节供读者核对数据完整性图像总数约227,630张唯一模板12,115个1:1 模板对约8,010,270个其中正样本对 10,270、负样本对 800 万1:N 协议中 gallery G1/G2 特征矩阵形状为(1772, 512)与(1759, 512)probe 特征矩阵为(19593, 512)人脸得分分布高度集中约 22.4 万张图得分在 0.9 附近少量噪声样本得分低至 0.1。四、快速开始example.sh 一键评测example.sh 给出了最直接的用法同时后台启动 1:1 与 1:N 两个评测任务#!/usr/bin/env bash python -u ijb_11.py --model-prefix ./pretrained_models/r100-arcface/model --model-epoch 1 --gpu 0 --target IJBC --job arcface ijbc_11.log 21 python -u ijb_1n.py --model-prefix ./pretrained_models/r100-arcface/model --model-epoch 1 --gpu 0 --target IJBB --job arcface ijbb_1n.log 21 该示例的含义评测模型为r100-arcfaceResNet100 ArcFace模型前缀指向./pretrained_models/r100-arcface/model--model-epoch 1指定加载第 1 个 epoch 的 checkpointMXNet 的model-symbol.jsonmodel-0001.params形式1:1 评测在IJBC上执行1:N 评测在IJBB上执行输出分别重定向到ijbc_11.log与ijbb_1n.log便于后台观察进度。需要说明的是脚本通过sys.path.append(./recognition)导入Embedding类见 ijb_11.py因此需要在仓库根目录或包含recognition包的环境中运行。五、1:1 模板验证协议ijb_11.py5.1 命令行参数i jb_11.py 定义的参数如下参数默认值说明--model-prefixMXNet 模型前缀路径--model-epoch1加载的模型 epochint--gpu7GPU id--batch-size32推理 batch size--jobinsightface任务名用于命名输出文件--targetIJBC评测目标只能是IJBC或IJBB脚本内部还固定开启了三种评测模式对应 IJB 评测常见的 N1/D1/F1 组合见 ijb_11.pyuse_norm_score True # if True, TestMode(N1)保留特征范数信息 use_detector_score True # if True, TestMode(D1)用人脸得分加权 use_flip_test True # if True, TestMode(F1)水平翻转测试注意use_flip_test实际采用的是F2相加模式而非 F1拼接模式——特征由网络直接输出原图与翻转图拼接后的2×feat_dim向量代码将前半与后半相加img_input_feats img_feats[:, 0:d//2] img_feats[:, d//2:]见 ijb_11.py。5.2 五步评测流水线ijb_11.py的主流程分为五个步骤Step 1加载元数据。读取{target}/meta/{target}_face_tid_mid.txt与{target}_template_pair_label.txt得到模板-媒体映射和模板对标签。Step 2抽取图像特征。遍历{target}/meta/{target}_name_5pts_score.txt对每张图读取裁剪人脸loose_crop、按 5 点关键点对齐后送入Embedding模型得到特征同时记录每张图的人脸得分ijb_11.py。Step 3聚合模板特征。核心函数image2template_featureijb_11.py实现了两级聚合媒体级同一媒体如同一视频片段内的多张图像特征先取均值得到单条媒体特征模板级模板内所有媒体特征求和再经sklearn.preprocessing.normalize做 L2 归一化。该聚合方式正是 IJB 协议的精髓——人脸得分与特征范数可用于降低噪声样本非人脸的权重。Step 4计算模板对相似度。verification函数ijb_11.py通过template2id查表将模板 id 映射到索引按100,000 对一批的方式分批计算余弦相似度np.sum(feat1 * feat2, -1)避免一次性加载全部对的内存压力。Step 5输出 ROC 与 TPRFPR 表格。使用sklearn.metrics.roc_curve与auc在 FPR 取[1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1]六个档位处报告 TPR百分比保留两位小数结果通过PrettyTable打印并以 PDF 形式保存 ROC 曲线见 ijb_11.py。分数矩阵以{job}.npy保存至{target}_result/目录方便后续复用。六、1:N 检索识别协议ijb_1n.py6.1 流程概览1:N 协议的目标是给定 probe 模板集合在 gallery 模板库中检索出对应的主体。ijb_1n.py的关键差异点读取 gallery 与 probe 的模板-主体映射read_template_subject_id_listijb_1n.py将 gallery 的 G1/G2或 S1/S2两组模板合并与 probe 一起通过image2template_feature聚合出模板特征gen_mask建立 probe 主体与 gallery 主体的对应关系ijb_1n.pyevaluation函数ijb_1n.py计算完整相似度矩阵np.dot(query_feats, gallery_feats.T)然后按 Top-1 / Top-5 / Top-10 统计检索准确率对 FAR ∈ {0.01, 0.1} 两个档位利用heapq.nlargest高效找出负样本相似度阈值计算对应的 TPR召回率。6.2 与 1:1 的共性无论是 1:1 还是 1:N图像特征抽取、翻转相加、范数/人脸得分处理、媒体-模板两级聚合这四步是完全一致的可以复用到不同脚本中这也为ijb_evals.py统一框架的诞生埋下伏笔。七、统一评测框架ijb_evals.py一脚本支持四种后端ijb_evals.py是对上述两套脚本的现代化重构用统一的IJB_test类覆盖 1:1、1:N 及批量测试并支持MXNet / PyTorch / ONNX / Keras四种模型格式。7.1 模型后端适配框架通过四个接口类实现后端无关的模型调用ijb_evals.pyMxnet_model_interfload_checkpoint加载 MXNet 符号模型取fc1_output为嵌入层Torch_model_interf要求模型为TorchScripttorch.jit.load权重输入统一做(img - 127.5) * 0.0078125归一化ONNX_model_interf基于onnxruntime.InferenceSession同样做 127.5 均值归一化keras_model_interf加载.h5模型输入归一化同上。IJB_test.__init__会根据model_file的后缀.h5/.pth/.pt/.onnx/ 其他自动选择对应接口ijb_evals.py因此切换模型框架时无需修改任何评测逻辑。7.2 特征抽取与缓存get_embeddingsijb_evals.py按 batch 抽取原图与水平翻转图特征extract_IJB_data_11/extract_gallery_prob_data在首次解析 meta 后自动缓存为.npz备份二次运行直接加载--force_reload可强制重解析支持--save_embeddings与-P/--plot_only可将特征或打分结果落盘之后无需模型即可复现 ROC 与曲线图。7.3 命令行参数总览参数默认值说明-m, --model_fileNone模型文件kerash5/ torch jitpth/onnx/ mxnet前缀,epoch-d, --data_path./包含IJBB、IJBC子目录的数据集根路径-s, --subsetIJBC评测目标IJBB或IJBC-b, --batch_size128特征抽取 batch size-R, --save_resultIJB_result/{model}_{subset}_{type}.npz结果保存/恢复文件-L, --save_label关额外保存标签数据仅绘图用-E, --save_embeddings关保存嵌入特征-B, --is_bunch关批量运行 N{0,1}D{0,1}F{0,1} 全部 8 种组合-N, --is_one_2_N关运行 1:N 而非 1:1-F, --force_reload关强制重新解析数据不使用缓存-P, --plot_only无仅绘图模式传入保存的结果文件7.4 典型用法# 1:1 验证IJBCONNX 模型 python ijb_evals.py -m ./models/w600k_r50.onnx -d /path/to/ijb_data -s IJBC # 批量运行 8 种 N/D/F 组合对照实验验证各模式影响 python ijb_evals.py -m ./models/w600k_r50.onnx -d /path/to/ijb_data -s IJBB -B # 1:N 检索识别 python ijb_evals.py -m ./models/w600k_r50.onnx -d /path/to/ijb_data -s IJBC -N # 仅基于已保存结果绘图 python ijb_evals.py -P IJB_result/*.npz -s IJBC8 种组合由itertools.product([True, False], repeat3)生成命名规则为N{use_norm_score}D{use_detector_score}F{use_flip_test}ijb_evals.py。run_model_test_1N则会在 1:N 模式下输出 G1、G2 两组 gallery 的 TPR并计算两者均值ijb_evals.py。八、ONNX 专用评测脚本ijb_onnx.pyijb_onnx.py是另一条轻量路径直接基于insightfacePython 包中的ArcFaceONNX模型类对应python-package/insightface/model_zoo/arcface_onnx.py完成特征抽取。它与ijb_evals.py的关键差异使用mx.gluon.data.DataLoaderbatch128、num_workers4、prefetch16并行加载并对齐图片输入是原图 水平翻转图拼接后的 batch模型一次前向输出2×feat_dim维特征ijb_onnx.py对齐采用相似变换目标关键点SRC在标准 112×112 五点上统一加 8.0 像素偏移ijb_onnx.py这对应 InsightFace 推理管线中常见的“扩展裁剪”策略命令行参数为--model-file、--image-path、--result-dir、--target输出同样为{target}_result/{model_name}.npy分数文件与 TPRFPR 表格ijb_onnx.py。九、评测结果的解读与使用建议9.1 指标口径1:1 验证核心指标为TPRFPR如 FPR1e-4 时的 TPR与AUC。FPR 越低、TPR 越高说明模型在低误报约束下的识别能力越强1:N 识别核心指标为Top-1/5/10 准确率与FAR/TPR 曲线在ijb_evals.py中称为 DIR/FAR。注意 1:N 的 TPR 计算只统计“gallery 中存在对应主体”的 probeevaluation_1N会把无对应主体的 probe 单独归入non_gallery_sims用于阈值估计ijb_evals.py。9.2 模式开关对结果的影响通过-B批量运行 8 种组合可以系统观察三个因素对最终指标的影响use_norm_scoreN是否保留特征范数人脸质量信号参与聚合use_detector_scoreD是否用人脸得分给特征加权抑制低质量/非人脸样本use_flip_testF是否启用水平翻转融合F2 相加模式。一般经验上 D1 与 F1即代码默认的use_detector_scoreTrue, use_flip_testTrue组合能带来更稳定的结果但具体收益应以实测为准——脚本保留这些开关正是为了做这类消融分析。9.3 与其他评测的衔接在 InsightFace 项目中recognition/evaluation/ 目录还包含 MegaFace 评测megaface/子目录其 README.md 所述的 IJB 评测与 MegaFace 的“1:N 大规模检索”互为补充前者侧重模板级跨模态难度后者侧重百万级噪声库下的检索鲁棒性。训练与验证的更多细节可参考 recognition/README.md 与 recognition/datasets/README.md。十、致谢与参考文献IJB 评测工具链的建立离不开以下工作的启发这也是 README.md 的致谢部分所明确声明的1:1 协议感谢 Weidi Xie 的指导VGGFace2 人脸对齐/评测思路、Multicolumn Networks、Comparator Networks 相关工作使 ArcFace 得以在 IJB-B / IJB-C 上完成 1:1 协议评测1:N 协议感谢 Yuge Huang 的代码来自 Distribution Distillation Loss 工作支持 1:N 协议评测。完整文献清单编号沿用原文档[1] Jiankang Deng, Jia Guo, Niannan Xue, Stefanos Zafeiriou.Arcface: Additive angular margin loss for deep face recognition. arXiv:1801.07698, 2018.[3] Qiong Cao, Li Shen, Weidi Xie, Omkar M Parkhi, Andrew Zisserman.VGGFace2: A dataset for recognising faces across pose and age. FG, 2018.[4] Weidi Xie, Andrew Zisserman.Multicolumn Networks for Face Recognition. BMVC 2018.[5] Weidi Xie, Li Shen, Andrew Zisserman.Comparator Networks. ECCV, 2018.[6] Whitelam, Cameron, et al.IARPA Janus Benchmark-B Face Dataset. CVPR Workshops, 2017.[7] Maze, Brianna, et al.IARPA Janus Benchmark–C: Face Dataset and Protocol. ICB, 2018.[8] Yuge Huang, Pengcheng Shen, Ying Tai, Shaoxin Li, Xiaoming Liu, Jilin Li, Feiyue Huang, Rongrong Ji.Distribution Distillation Loss: Generic Approach for Improving Face Recognition from Hard Samples. arXiv:2002.03662.结语本文完整梳理了 InsightFace 在 IJB-B / IJB-C 上的评测工具链从数据申请与目录准备到example.sh一键启动再到ijb_11.py的 1:1 五步流水线、ijb_1n.py的 1:N 检索评估以及面向多后端的统一框架ijb_evals.py和轻量级ijb_onnx.py。无论是复现 ArcFace 论文图表还是对自研模型做 IJB 基准对齐都可以在这套脚本基础上快速落地而脚本中保留的 N/D/F 模式开关也为深入研究“人脸得分加权、范数保留、翻转融合”对模板级识别性能的影响提供了现成的消融实验框架。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表