ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

open_clip 如何用 --use-naflex 训练可变分辨率的 CLIP 模型?

open_clip 如何用 --use-naflex 训练可变分辨率的 CLIP 模型? open_clip 如何用 --use-naflex 训练可变分辨率的 CLIP 模型【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip如果你的图像数据分辨率、长宽比差异很大比如网页图片、截图、文档扫描件用固定 224×224 输入训练 CLIP 会把非方形图片大量裁剪或拉伸。open_clip 的main分支提供了 NaFlex 训练路径视觉塔换成 timm 的naflexvit数据管线按“token 预算”组批同一个 batch 里可以混入不同分辨率、不同序列长度的图片。训练入口加一个--use-naflex开关并配合--naflex-*系列参数控制 patch 尺寸和序列长度。本文给出从环境准备、命令拼装到验证结果的完整操作路径。准备条件NaFlex 训练只存在于main分支重构后的训练栈TrainingTask dict batch NaFlex 数据管线。README 明确说明旧的python -m open_clip_train.legacy_main入口“不支持 FSDP2、EMA、CLAP 音频训练、NaFlex、length bucketing 等 task-era 特性”v3分支也没有这条路径所以必须用main。环境安装沿用 README 的 Training 一节python3 -m venv .env source .env/bin/activate pip install -U pip pip install open_clip_torch[training]训练依赖timm1.0.29见 requirements-training.txt。NaFlex 数据管线在 src/open_clip_train/naflex_data.py 中尝试导入timm.data.naflex_dataset和timm.data.naflex_transforms导入失败时NAFLEX_AVAILABLE为False任何 NaFlex 操作会经require_naflex()抛出RuntimeError。看到这类报错先升级timm而不是改训练参数。训练数据必须是 WebDataset 格式一组.tar文件每个样本由同名、不同扩展名的图像和文本文件组成如abc.jpgabc.txt多数据源用::分隔。NaFlex 的训练批处理是 WebDataset batchingREADME 的 NaFlex 条目和--use-naflex的帮助文本都把它绑定到 webdataset 流--imagenet-train在 NaFlex 训练下会直接抛出ValueError见 tests/test_naflex.py不要混用 ImageNet 目录式训练集。选择 NaFlex 模型仓库自带一套naflex_*配置最直接的是 naflex_ViT-B-16.jsonvision_cfg: { image_size: 224, image_seq_len: 196, timm_model_name: naflexvit_base_patch16_gap, timm_model_pretrained: false }它的视觉塔就是 timm 的naflexvit_base_patch16_gapbase patch size 16224×224 下对应 196 个 token文本塔是标准 77 上下文的 CLIP 文本编码器embed_dim512。如果你不想用naflex_*配置也可以选其他兼容的 timm/OpenCLIP ViT 系模型--use-naflex对图像模型会自动隐含--force-naflex-vision见 src/open_clip_train/params.py把兼容的视觉塔转换为 NaFlexViT并自动设置aug_cfg的use_timm与naflex开关无需手动传递。组装训练命令最短主路径单进程基于 README 的 Sample single-process running code数据换成 WebDataset 并把模型换成 NaFlex 配置python -m open_clip_train.main \ --save-frequency 1 \ --zeroshot-frequency 1 \ --report-to tensorboard \ --train-data/data/cc12m/cc12m-train-{0000..2175}.tar \ --train-num-samples 10968539 \ --dataset-type webdataset \ --model naflex_ViT-B-16 \ --use-naflex \ --batch-size 128 \ --warmup 10000 \ --lr 1e-3 \ --wd 0.1 \ --epochs 30 \ --workers 8命令中的--train-data与--train-num-samples取自 README 的 CC12M 示例执行前替换为你自己的 webdataset.tar路径和样本数。这条命令里没有显式写--naflex-seq-lens按 tests/test_naflex.py 展示的默认行为--naflex-seq-lens省略时训练序列长度取默认调度(128, 256, 576, 784, 1024)验证序列长度回落到模型的image_seq_len对naflex_ViT-B-16即 196。关键--naflex-*参数全部参数定义与帮助文本在 src/open_clip_train/params.py参数用途--use-naflex启用 NaFlex WebDataset 训练批处理验证/zero-shot 加载器也切换为 patch 化加载--force-naflex-vision把兼容的 timm EVA/ViT 视觉塔转换为 NaFlexViT--use-naflex隐含此项--naflex-num-train-image-tokens每个 epoch 的图像 token 数用于 NaFlex 调度帮助文本明确它是--train-num-samples的 token 预算替代项--naflex-patch-sizes训练时采样的 patch 尺寸列表评估使用第一个值省略时默认 16--naflex-patch-size-probs与--naflex-patch-sizes对应的采样概率--force-naflex-patch-interp启用 timm 的免参数 patch-embed 权重插值使--naflex-patch-sizes可包含非基础 patch 尺寸列出多个 patch 尺寸时自动启用--naflex-seq-lens训练时采样的序列长度图像 token 数列表评估按最大值 pad/crop--naflex-seq-len-probs按 batch 采样的权重与--naflex-seq-lens等长等序未设置时均匀。帮助文本提醒权重是按 batch 计的短序列单 batch 行数更多单样本层面偏向短序列--naflex-max-tokens-per-batch每个本地 batch 的 token 上限未设置时按--batch-size × max(--naflex-seq-lens)推断显式值覆盖该推断--naflex-batch-divisor调度出的 batch size 的可整除约束默认 8--naflex-loss-scale按实际本地 batch size 相对--batch-size缩放 loss可选none/linear/sqrt默认none一个显式控制调度与 token 预算的完整示例参数取值来自 tests/test_naflex.py 的test_parse_naflex_args示例python -m open_clip_train.main \ --train-data/data/cc12m/cc12m-train-{0000..2175}.tar \ --dataset-type webdataset \ --model naflex_ViT-B-16 \ --use-naflex \ --batch-size 16 \ --naflex-num-train-image-tokens 1024 \ --naflex-patch-sizes 16 32 \ --naflex-patch-size-probs 0.25 0.75 \ --naflex-seq-lens 128 256 \ --naflex-max-tokens-per-batch 4096 \ --naflex-batch-divisor 4 \ --naflex-loss-scale sqrt这里列出两个 patch 尺寸会触发force_naflex_patch_interp自动置位params.py否则非基础 patch 尺寸会在 NaFlex 数据配置的 fail-fast 检查中报错。多 GPU 场景沿用 README 的torchrun启动方式只需在参数列表里加上同样的 NaFlex 参数节点间扩参、--local-loss --gather-with-grad等与 NaFlex 无关按 README 的 Multi-GPU 一节处理即可。注意--batch-size在 NaFlex 下的语义实际每个 batch 的行数由 token 预算--naflex-max-tokens-per-batch或其推断值除以行成本决定--batch-size主要作为推断基准和--naflex-loss-scale的参照。README 同时提醒main分支上--naflex-max-tokens-per-batch默认不设置token 预算按--batch-size * max(--naflex-seq-lens)推断旧的16384默认值已不存在要复现老行为需显式传值。验证训练与数据管线跑 NaFlex 单元测试按 READMEmake install-test后执行python -m pytest -x -s -v tests/test_naflex.pytests/test_naflex.py 覆盖了三类断言正好对应 NaFlex 数据契约NaFlexBatcher输出的 batch 是 dictimage子 dict 含patches、patch_coord、patch_valid训练 batch 还有seq_lentext为定长张量naflex_ViT-B-16经create_model_and_transforms(naflex_ViT-B-16, pretrainedNone, aug_cfg{use_timm: True, naflex: True})创建的preprocess_val(max_seq_len..., patch_size...)返回 patch 化输入模型前向接受该 dict 并返回(B, 512)的图像/文本特征。测试通过说明你的timm版本满足NAFLEX_AVAILABLE、数据管线与模型能对上。zero-shot 与 loss 曲线训练命令里带--zeroshot-frequency 1 --imagenet-val /path/to/imagenet/validation/路径替换为本地 ImageNet 验证集val目录需含子文件夹即可周期性输出 zero-shot 结果NaFlex 下验证/zero-shot 加载器是 patch 化的评估按--naflex-seq-lens的最大值 pad/crop、按--naflex-patch-sizes的第一个值 patch不设置--naflex-seq-lens时回落到模型image_seq_len。曲线观测沿用 README 的tensorboard --logdirlogs/tensorboard/ --port7777。限制与常见报错RuntimeErrorNaFlex 不可用timm缺少naflex_dataset/naflex_transforms模块升级到timm1.0.29后重试。ValueError: ...--imagenet-train...NaFlex 训练不支持 ImageNet 目录式训练集数据改回 webdataset.tar。patch 尺寸 fail-fast 报错--naflex-patch-sizes写了非基础尺寸却没有启用插值报文中会点名--force-naflex-patch-interp多尺寸列表会自动启用单尺寸且非基础尺寸时需显式加该开关。旧分支行为差异v3/legacy_main下不存在--use-naflex的 NaFlex 数据路径main默认--precision已从amp改为amp_bf16需要 fp16 AMP 时显式传--precision amp。范围边界GenLIP/GenLAP/naflexclap系列模型会自动置位use_naflex但它们是生成式/音频模型视觉塔不做 NaFlexViT 转换与本文的图像 CLIP 训练不是同一条路径这里不展开。训练跑起后断点续训用--resume /path/to/checkpoints/epoch_K.ptREADME 的 Resuming from a checkpoint 一节与 NaFlex 参数无冲突。【免费下载链接】open_clipAn open source implementation of CLIP.项目地址: https://gitcode.com/GitHub_Trending/op/open_clip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表