ARTICLE DETAIL

资讯详情

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

读懂 timm 的 results 目录:pytorch-image-models 的 ImageNet 验证、鲁棒性测试与性能基准是如何组织生成的

读懂 timm 的 results 目录:pytorch-image-models 的 ImageNet 验证、鲁棒性测试与性能基准是如何组织生成的 读懂 timm 的 results 目录pytorch-image-models 的 ImageNet 验证、鲁棒性测试与性能基准是如何组织生成的【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models本文围绕 pytorch-image-modelstimm仓库中的results/目录展开逐一说明其中 6 个评估数据集对应的结果文件、CSV 的字段结构与差异列rank/top1/top5 diff的计算口径并结合 validate.py、benchmark.py 和 results/generate_csv_results.py 的源码讲清楚这些结果表是如何被批量评测、排序与再生成出来的帮助你在选型模型时正确解读每一列数字。results 目录的定位验证结果与性能基准分两类按 results/README.md 的说明该目录存放本模型集合的验证结果validation results与基准测试结果benchmark results两者的覆盖范围不同验证分数只针对带预训练权重且为 ImageNet-1k 分类头的模型运行基准数字对所有模型包括无预训练权重的都会跑。当前目录内共包含三类 CSV类别文件前缀数量说明验证/鲁棒性测试results-*.csv6 个 2 个 clean 对照覆盖 6 个评估数据集性能基准benchmark-infer-*.csv/benchmark-train-*.csv20 个不同 GPU、PyTorch/CUDA 版本、精度与内存布局训练元数据model_metadata-in1k.csv1 个记录各模型的预训练数据集与训练技术一个值得注意的事实6 个验证类 CSV 的规模完全一致均为 1557 行即 1556 个模型条目 1 行表头说明同一批预训练 ImageNet-1k 模型在所有数据集上做了统一评测。六个评估数据集与对应结果文件results 目录目前覆盖 ImageNet 验证集与 5 个额外的测试/标签集。理解每个数据集的考法才能正确解读表中数字。ImageNet Validation —— results-imagenet.csv标准的 50,000 张 ImageNet-1k 验证集。README 特别指出训练过程中的模型选择就依赖这个验证集因此它并不是一个真正的测试集——它衡量的是模型在训练分布内的拟合水平可作为横向比较的基准线。ImageNet-Real Labels —— results-imagenet-real.csv同样是 ImageNet-1k 验证集但使用一套重新人工标注的标签用于修正原始标注流程中的错误。从仓库内置的数据看这批真实标签由 RealLabelsImagenet 在评测时替换标准 top-k 统计见 validate.py 中real_labels.get_accuracy(k1/5)的调用链。ImageNetV2 Matched Frequency —— results-imagenetv2-matched-frequency.csv10,000 张约在原始 ImageNet 采集 10 年后新采集的测试图像采样时刻意复现了原始 ImageNet 的策展/分布流程用来检验模型对新分布的泛化能力。ImageNet-Sketch —— results/results-sketch.csv50,000 张非摄影图像素描、涂鸦多为单色覆盖全部 1000 个 ImageNet 类别考察跨域域迁移鲁棒性。ImageNet-Adversarial —— results-imagenet-a.csv7,500 张自然对抗样本覆盖 1000 类中的 200 类——这些是真实世界中恰好会让典型 ImageNet 分类器误判的图像。README 的原话是这是很有挑战性的数据集典型的 ResNet-50 top-1 会打到 0%。由于只覆盖 200 类仓库另外提供了同 200 类口径的干净对照表 results-imagenet-a-clean.csv用于公平计算差异。ImageNet-Rendition —— results-imagenet-r.csv200 个 ImageNet 类别的 30,000 张再创作图像卡通、雕塑、油画等表现形式测试表现形式的鲁棒性。同样配有同 200 类的干净对照表 results-imagenet-r-clean.csv。差异列的对照口径重要README 明确了与干净验证集相比的 rank 及 top-1/top-5 差值的计算基线且两类数据集口径不同Real Labels、ImageNetV2、Sketch差值相对完整 1000 类的 ImageNet-1k 验证集即results-imagenet.csv计算Adversarial、Rendition差值相对使用测试集同样 200 类的 ImageNet-1k 干净验证运行即两个-clean.csv计算——因为这两个测试集只覆盖 200 类直接和 1000 类基线比并不公平。这一口径在 results/generate_csv_results.py 中被严格编码results { results-imagenet.csv: [ results-imagenet-real.csv, results-imagenetv2-matched-frequency.csv, results-sketch.csv ], results-imagenet-a-clean.csv: [ results-imagenet-a.csv, ], results-imagenet-r-clean.csv: [ results-imagenet-r.csv, ], }即Real/V2/Sketch 三表以results-imagenet.csv为基线A 表以 a-clean 为基线R 表以 r-clean 为基线。CSV 字段结构与排序规则验证类 CSV 的列定义以 results-imagenet.csv 的表头为例字段含义model模型名timm 模型注册名含权重后缀如eva02_large_patch14_448.mim_m38m_ft_in22k_in1kimg_size评测输入图像边长模型预训练配置中的测试尺寸top1/top1_errTop-1 准确率(%) / Top-1 错误率(%)top5/top5_errTop-5 准确率(%) / Top-5 错误率(%)param_count参数量百万千分位格式如1,014.45crop_pct中心裁剪比例1.000表示无中心裁剪即 full-input 评测interpolation预处理重采样插值方式如bicubic5 个测试集 CSVreal、v2、sketch、a、r在上述列的基础上额外增加三列字段含义top1_diff与基线的 Top-1 差值带符号保留 3 位小数如-10.203、1.088top5_diff与基线的 Top-5 差值带符号rank_diff相对基线的排名偏移N表示排名上升 N 位-N表示下降 N 位0表示并列例如在 results-imagenet-a.csv 中可以看到eva02_large_patch14_448.mim_m38m_ft_in22k_in1k一行top1 88.627top1_diff -10.203rank_diff 2——说明它在自然对抗样本上比同类干净验证集低了 10.2 个百分点但排名反而上升了 2 位说明它对自然对抗的相对免疫力强于其干净集排名所暗示的水平。差异列与重排序的源码实现results/generate_csv_results.py 的核心逻辑diff(base_df, test_csv)值得逐点理解匹配键用model - img_size拼成的mi键把测试集行与基线行对齐generate_csv_results.py匹配不上的行三个差异列留空rank_diff以基线表已按 top1 降序、top5 降序、model 升序排序后的行位置为参照rank base_rank时记为负排名落后反之记为正top1_diff / top5_diff测试集值 - 基线值按±%.3f格式化收尾处理param_count千分位格式化测试表按[top1, top5, model]降序、降序、升序重新排序后回写 CSVgenerate_csv_results.py。这就是为什么 5 个测试集 CSV 内部不是按模型名排列而是按各自测试集上的 top1 排名排列且排名顺序与results-imagenet.csv不同。结果是怎么跑出来的validate.py 的批量验证流程这些 CSV 由仓库根目录的 validate.py 批量生成。其要点均可在源码中确认结果输出--results-file FILENAME指定 CSV 输出文件--results-format支持csv与jsonvalidate.py 的参数定义write_results函数负责落盘结果字段单个模型的results字典恰好对应 CSV 各列——model、top1/top1_err/top5/top5_err保留 4 位小数、param_countM 单位、img_size取自模型数据配置input_size、crop_pct、interpolationvalidate.py批量验证与排序当--model是通配符或不存在的名字时list_models(..., pretrainedTrue)展开为全部预训练模型逐个运行单模型 OOM 时decay_batch_step会自动衰减 batch size 重试--retry/_try_run所有结果最后按top1降序排序后写入validate.pyReal Labels 支持--real-labels FILENAME传入真实标签 JSON 后评测末尾用RealLabelsImagenet重新计算 top1/top5 替换标准统计validate.py这正是results-imagenet-real.csv的评测方式关键评测参数--img-size、--crop-pct、--interpolation、--channels-last、--amp混合精度推理等都会影响结果数字因此 CSV 中记录img_size、crop_pct、interpolation三列保证数字可复现、可溯源。性能基准benchmark-*.csv 的命名与字段README 中 Benchmark 一节说明带基准前缀的 CSV 记录模型在不同加速器、不同精度下的性能数字最初仅覆盖 RTX 3090 AMP 推理后续不断扩充。当前目录中实际的文件命名遵循如下模式benchmark-{infer|train}-{precision}-{layout}-pt{PyTorch版本}-cu{CUDA版本}-{GPU型号}[-dynamo].csv现有 20 个文件覆盖 RTX 3090 / 4090 / 5090 / Pro 6000 Max-Q、i7/i9 CPU 等平台精度包括ampfp16 AMP、bf16、amp_bf16、fp32内存布局nchw/nhwc并区分是否启用torch.compile文件名含dynamo后缀即启用。以 benchmark-infer-amp-nchw-pt291-cu130-5090.csv 为例推理基准的列含义为字段含义model模型名infer_img_size推理输入边长infer_samples_per_sec吞吐样本/秒infer_step_time单步耗时msinfer_batch_size实测 batch sizeparam_count参数量Minfer_gmacs推理计算量GMACsinfer_macts激活数量M activations训练基准 CSV如 benchmark-train-amp-nchw-pt112-cu113-rtx3090.csv则含train_samples_per_sec、train_step_time、train_batch_size、train_img_size、param_count列。这些数字由 benchmark.py 生成关键机制包括三种 RunnerInferenceBenchmarkRunnereval torch.inference_mode、TrainBenchmarkRunner含随机目标的 CrossEntropy 前向反向优化器步进可用--detail拆分 fwd/bwd/opt 三段耗时、ProfileRunner基于 deepspeed 或 fvcore 只测 MACs/激活数benchmark.py计时口径默认 10 次预热迭代 40 次正式迭代--num-warm-iter/--num-bench-iterCUDA 设备在计时前torch.cuda.synchronize同步避免异步执行污染计时benchmark.py精度控制--precision支持amp/amp_bfloat16/float32/float16/bfloat16--amp开关会覆盖该参数benchmark.py 的resolve_precision批量回退OOM 时自动衰减 batch size 重试与 validate.py 相同的decay_batch_step机制benchmark.py结果导出同样支持--results-file--results-format csv|json且批量模式下按infer_samples_per_sec或训练/剖析模式对应键降序排序benchmark.py。需要说明的前提基准数字强依赖硬件与软件栈文件名中的 GPU 型号、PyTorch 与 CUDA 版本就是为了让读者只在同配置文件内做横向比较跨文件对比时需留意这些变量。训练元数据model_metadata-in1k.csvREADME 的 Metadata 一节说明带model_metadata前缀的 CSV 记录模型的来源训练信息当前包含预训练数据集与训练技术蒸馏 distillation、自监督 SSL、弱监督 WSL 等作者还计划未来补充数据增强、正则化等元数据但承认来源难以保持一致。当前实际文件是 model_metadata-in1k.csv仅两列model,pretrain共 521 个模型条目。pretrain字段的取值分布为取值条数含义in1k382ImageNet-1k 直接监督训练in1k-dist56ImageNet-1k 知识蒸馏in21k41ImageNet-21k 预训练后微调jft300m-ns10JFT-300M Noisy Student 自监督in1k-ap9对抗训练Adversarialyfc-semisl/ig1b-swsl/in21k-selfsl/ig1b-wsl6 / 6 / 5 / 4YFCC100M 半监督、IG-1B 弱监督、IN21K 自监督、IG-1B 弱监督in1k-adv/pretrain2 / 1ImageNet-1k 对抗训练 / 通用预训练配合验证 CSV 使用时的实用技巧同一模型名在两张表中都能找到把pretrain列 join 进results-imagenet.csv就能在准确率之外回答这个权重是怎么来的便于按训练策略蒸馏、SSL、对抗筛选候选模型。规划中的扩展README 末尾的 TODO 列出了一项明确计划探索引入 **ImageNet-CCorruptions**与 **ImageNet-PPerturbations**的缩减版本——原始数据集体积巨大且与图像尺寸强相关因此需要制作缩减版后才能纳入。也就是说当前 6 个数据集的覆盖范围真实标签、分布偏移、域迁移、自然对抗、表现再创作中尚缺合成扰动/损坏这一类鲁棒性维度读者解读结果时应意识到这一空白。小结results/目录的验证结果只覆盖有 ImageNet-1k 预训练头的 1556 个模型配置基准结果覆盖全部模型5 个测试集 CSV 的top1_diff / top5_diff / rank_diff三列由 results/generate_csv_results.py 按固定基线配对计算其中 Adversarial/Rendition 用 200 类 clean 表作基线其余用完整 1000 类验证集作基线验证数字可由 validate.py 复现关注--img-size、--crop-pct、--interpolation、--real-labels等参数与 CSV 记录的一致性性能数字由 benchmark.py 复现关注精度、布局与硬件是否与文件名匹配选型时建议三步走先看results-imagenet.csv的干净准确率定档再用 V2/Sketch/A/R 的 diff 列评估鲁棒性代价最后结合 model_metadata-in1k.csv 确认训练路线是否符合自己的合规或部署约束。【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表