ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MRL数据准备实战:用FFCV快速序列化ImageNet的完整指南(含write_imagenet.sh参数详解)

MRL数据准备实战:用FFCV快速序列化ImageNet的完整指南(含write_imagenet.sh参数详解) MRL数据准备实战用FFCV快速序列化ImageNet的完整指南含write_imagenet.sh参数详解【免费下载链接】MRLCode repository for the paper - Matryoshka Representation Learning项目地址: https://gitcode.com/gh_mirrors/mrl/MRLMRLMatryoshka Representation Learning套娃表示学习是论文《Matryoshka Representation Learning》的官方开源代码仓库。在开始训练 MRL 模型之前第一步就是完成ImageNet 数据准备——项目采用 FFCV 高速数据加载框架本文带你一步步用write_imagenet.sh脚本把 ImageNet 磁盘数据集序列化serialize成.ffcv高速读取文件并逐一详解脚本的三个关键参数。 先看懂 MRL为什么数据准备这么重要MRL 的核心思想一句话概括只训练一个 2048 维的表示向量而它的任意前缀维度8 / 16 / 32 … 2048 维也都能独立使用就像俄罗斯套娃一样层层嵌套。推理时你可以按算力预算自由选择维度长度自适应分类模型级联model cascades维度逐级增加自适应检索低维度先召回短名单再高维度重排funnel retrieval为了让训练不被数据 I/O 拖慢项目没有使用传统的 PyTorchDataLoader而是引入了FFCVFaster 视觉数据加载框架。代价是需要先把几万个小文件形式的 ImageNet一次性序列化成单个二进制文件之后训练读取速度接近纯内存。数据准备就是干这件事的。 第一步准备 PyTorch 格式的 ImageNet 数据集序列化脚本的输入是一个 PyTorch 风格的 ImageNet 目录即包含train/和val/两个子目录、每个类别一个文件夹、内部存放 JPEG 图片的标准布局。拿到数据集后用环境变量IMAGENET_DIR指向它即可。⚙️ 第二步运行 write_imagenet.sh 完成序列化如需获取代码先克隆项目git clone https://gitcode.com/gh_mirrors/mrl/MRL然后安装依赖、设置环境变量并执行序列化pip3 install -r requirements.txt cd train/ export IMAGENET_DIR/path/to/imagenet/ # PyTorch格式ImageNet根目录 export WRITE_DIR/your/path/here/ # .ffcv文件输出目录 ./write_imagenet.sh 500 0.50 90write_imagenet.sh 三个参数逐个拆解./write_imagenet.sh 500 0.50 90的三个位置参数决定了图片的存储方式参数示例值含义官方取值第 1 个500图片最大边长像素500匹配 ResNet50 训练配置第 2 个0.50以 JPEG 压缩存储的图片比例训练 0.50 / 验证 0第 3 个90JPEG 压缩质量90几个容易踩坑的点混合存储策略第 2 个参数为 0.5 时FFCV 会以 50% 概率把每张图片存成 JPEG、50% 存成原始像素值。这是 FFCV 官方推荐配置——JPEG 省磁盘且读取快原始存储则在强数据增强下保留完整像素信息。输出文件名有规律脚本会在WRITE_DIR下生成train_500_0.50_90.ffcv和val_500_0.50_90.ffcv两个文件格式为{split}_{边长}_{JPEG比例}_{质量}.ffcv。官方训练命令还引用了val_500_uncompressed.ffcv验证集、0% JPEG 不压缩可以再跑一次脚本并将第 2 个参数设为 0 获得。预留磁盘空间序列化后的文件体积较大务必确认WRITE_DIR所在磁盘空间充足。脚本内部到底做了什么train/write_imagenet.sh是 train/write_imagenet.py 的薄封装内部流程分三步用ImageFolder读取IMAGENET_DIR/{train|val}下的 PyTorch 格式数据集构建 FFCVDatasetWriter定义两个字段RGBImageField图片携带边长/压缩率/质量设置和IntField类别标签以16 个 worker 并行、每次 100 张chunk_size100为批次写入.ffcv文件num_workers与chunk_size均可通过write_imagenet.py的--cfg.参数调整。 小技巧不必每次跑完 128 万张全量图像来验证流程给write_imagenet.py追加--cfg.subset10000只写前 1 万张几分钟即可打通整条数据管线。 第三步用序列化好的数据开始训练.ffcv文件就绪后只需把它们指给训练命令。项目提供了 40 个 epoch 的 ResNet50 标准配置 train/rn50_configs/rn50_40_epochs.yamlbatch_size 512、SGD、cyclic 学习率训练 MRL 模型的命令如下python train_imagenet.py --config-file rn50_configs/rn50_40_epochs.yaml --model.mrl1 \ --data.train_dataset$WRITE_DIR/train_500_0.50_90.ffcv \ --data.val_dataset$WRITE_DIR/val_500_uncompressed.ffcv \ --data.num_workers12 --data.in_memory1 --dist.world_size2 \ --training.distributed1 --lr.lr0.425得益于 FFCV 序列化数据与内存驻留--data.in_memory1GPU 不再空等 I/O。最终训出的 MRL ResNet50 的 Top-1 准确率曲线见下图摘自项目文档即便截断到 16 维低维度准确率仍接近 73%与 2048 全维度几乎持平——这就是 MRL 数据管线最终服务的目标。✅ 常见问题 FAQ可以跳过 FFCV 直接读原始 ImageNet 训练吗可以但官方结果基于 FFCV 管线500px、50% JPEG 的数据分布跳过后结果难以与论文对齐。序列化耗时多久取决于磁盘与 CPU 性能脚本默认 16 个 worker 并行写入SSD 上明显快于机械硬盘。训练产物在哪里模型 checkpoint 与训练日志默认按--logging.folder如trainlogs目录落盘$WRITE_DIR与创建数据集时使用的是同一个变量。数据准备后还能做什么训练完成后可在 inference/ 目录评估分类精度、在 model_analysis/ 目录做 GradCAM 等可视化分析、在 retrieval/ 目录做自适应检索实验。按上面的步骤完成 ImageNet 序列化后你就拥有了和论文完全一致的高速数据管线可以放心开启 MRL 训练了 【免费下载链接】MRLCode repository for the paper - Matryoshka Representation Learning项目地址: https://gitcode.com/gh_mirrors/mrl/MRL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表