ARTICLE DETAIL

资讯详情

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

CoreNet 中的 ByteFormer:直接操作文件字节的 Transformer 训练与评估实战指南

CoreNet 中的 ByteFormer:直接操作文件字节的 Transformer 训练与评估实战指南 深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载ByteFormer论文 Bytes Are All You Need: Transformers Operating Directly On File BytesarXiv 2306.00238是一种无需图像解码即可直接在文件字节序列上执行分类推理的 Transformer 架构已作为classification模型原生集成在 CoreNet 库中。本文以 projects/byteformer/README.md 为主线结合 CoreNet 的模型源码、collate 函数与实验配置完整讲解 ByteFormer 的架构原理、配置参数、训练/评估命令、字节级数据增强以及 ImageNet 与 Speech Commands v2 上的实验复现方案帮助你直接上手在 CoreNet 中训练与部署字节级分类模型。ByteFormer 架构输入文件字节序列 → Token Embedding → Conv1D 下采样 → Windowed Transformer → 输出类别。图片来源projects/byteformer/model_arch.png。ByteFormer 核心思想为什么可以直接吃字节传统图像 Transformer 的输入是解码后的像素张量推理时需要完整走一遍图像解码流程。ByteFormer 则把输入视为一串原始文件字节int序列让模型自行从字节模式中学习语义。原 README 给出的关键结论如下在相似参数量下ByteFormer 在 ImageNet 上达到77.33%Top-1 准确率高于原始 DeiT-Ti 的72.2%且推理时完全不需要图像解码因为网络只消费字节可以不加修改地用于不同图像编码TIFF/JPEG/PNG/fHWC 等以及不同模态如图像与音频在不修改架构和训练超参数的情况下ByteFormer 在 Speech Commands v2 音频分类上达到95.42%对照该领域当时的 SOTA 98.7%通过向网络输入混淆后的字节可以在推理阶段增强隐私保护。注意以上数字均引自项目官方 README 及其论文用于说明该架构在论文设定实验下的表现不代表与所有后续模型的横向对比结论。源码级架构拆解ByteFormer 在 CoreNet 中的实现ByteFormer 的模型类位于 corenet/modeling/models/classification/byteformer.py通过MODEL_REGISTRY.register(namebyteformer, typeclassification)注册见 byteformer.py。其前向流程为字节序列 → 词元嵌入 → 可选的 Conv1D 序列压缩 → 位置编码 → Windowed Transformer 骨干含 Token Merging 下采样→ 均值池化 → 线性分类头。各模块逐一拆解如下。字节词元嵌入Byte Token Embedding模型接收形状为[batch_size, sequence_length]的整数张量作为输入用整数而非 byte 类型是因为填充位用-1表示见 byteformer.py。词元嵌入的vocab_size默认为257对应 256 个字节值加上 1 个 mask token源码注释与参数说明见 byteformer.py。嵌入权重除 padding 索引外使用trunc_normal重新初始化标准差为sqrt(1.0 / embed_dim)byteformer.py。Conv1D 序列压缩Token Reduction Net在嵌入之后ByteFormer 用一个nn.Conv1d对 token 序列做下采样byteformer.pykernel_size由--model.classification.byteformer.conv-kernel-size控制默认16stride kernel_size // 2即使用重叠一半的滑动窗口当kernel_size 0时跳过卷积token_reduction_net None。对应的 mask 使用unfold_tokensbyteformer.py以相同窗口做同步折叠通过max合并窗口内 mask 值保证填充位置在压缩后仍然被标记为-inf。位置编码位置编码长度由--model.classification.byteformer.max-num-tokens决定默认 10000默认使用可学习位置嵌入也可通过--model.classification.byteformer.sinusoidal-pos-emb切换为固定正弦编码byteformer.py。前向时按self.pos_embed(self.max_num_tokens)[:, :x.shape[1]]截取当前序列长度所需的部分byteformer.py。Windowed Transformer 骨干与 Token Merging 下采样骨干由WindowedTransformerEncoder堆叠而成corenet/modeling/modules/windowed_transformer.py核心超参数为window_sizes滑动窗口注意力窗口大小默认[128]若只给一个值会自动广播到所有层byteformer.pywindow_shifts窗口偏移列表默认在 0 与 64 之间交替[0, 64] * 6downsample布尔列表指定在哪些层之后做下采样默认[True, True] [False, True] * 4 [False, False]12 层配置stochastic_dropout随机深度按层在 0 到设定值之间线性插值分配byteformer.py。下采样通过TokenMerging(embed_dim)来自 corenet/modeling/layers/token_merging.py实现它会同步缩减序列长度与 key-padding maskbyteformer.py。层数、窗口、偏移、下采样四者的长度必须严格一致否则抛ValueError。池化与分类头骨干输出经过post_transformer_norm默认 LayerNorm后按 mask 做排除填充位的均值池化把-inf位置置 0 后求和再除以有效 token 数最后接一个LinearLayer(embed_dim, num_classes)分类器byteformer.py。模型规模配置模型规模由--model.classification.byteformer.mode控制各档位定义在 corenet/modeling/models/classification/config/byteformer.pymodeembed_dim层数注意力头数FFN 维度头维度tiny19212376864small384126153664base7681212307264huge12803220512064各档位的注意力和 FFN dropout 均为 0pos_emb_drop_p在 tiny 下为 0.1其余为 0。实验配置中普遍使用tiny。配置文件详解以 ImageNet TIFF 编码为例每个实验对应一个 YAML 配置文件。以 encoding_typeTIFF.yaml 为例完整配置如下common: run_label: train log_freq: 500 auto_resume: true mixed_precision: true tensorboard_logging: false accum_freq: 2 dataset: root_train: /mnt/imagenet/training root_val: /mnt/imagenet/validation name: imagenet category: classification train_batch_size0: 48 val_batch_size0: 48 eval_batch_size0: 48 workers: 10 persistent_workers: false pin_memory: true collate_fn_name_train: byteformer_image_collate_fn collate_fn_name_val: byteformer_image_collate_fn collate_fn_name_test: byteformer_image_collate_fn image_augmentation: random_resized_crop: enable: true interpolation: bicubic resize: enable: true size: 256 interpolation: bicubic center_crop: enable: true size: 224 random_horizontal_flip: enable: true rand_augment: enable: true random_erase: enable: true p: 0.25 mixup: enable: false cutmix: enable: false pil_save: enable: true file_encoding: TIFF sampler: name: batch_sampler bs: crop_size_width: 224 crop_size_height: 224 loss: category: classification classification: name: cross_entropy cross_entropy: label_smoothing: 0.1 optim: name: adamw weight_decay: 0.05 no_decay_bn_filter_bias: true adamw: beta1: 0.9 beta2: 0.999 scheduler: name: cosine is_iteration_based: false max_epochs: 300 warmup_iterations: 7500 warmup_init_lr: 1.0e-06 cosine: max_lr: 0.001 min_lr: 2.0e-05 model: classification: name: byteformer n_classes: 1000 byteformer: mode: tiny max_num_tokens: 50000 conv_kernel_size: 32 window_sizes: - 128 activation: name: gelu layer: global_pool: mean conv_init: kaiming_uniform linear_init: trunc_normal linear_init_std_dev: 0.02 ema: enable: true momentum: 0.0001 stats: val: - loss - top1 - top5 train: - loss checkpoint_metric: top1 checkpoint_metric_max: true要点解读image_augmentation.pil_savefile_encoding: TIFF表示训练时将增强后的图像重新编码为 TIFF 文件字节再喂给网络这正是直接消费文件字节的关键一环JPEG 实验还需quality字段如quality: 100fCHW/fHWC 则直接展平像素张量而不经过 PIL 编码见下文增强一节collate_fn_name_*三者都指向byteformer_image_collate_fn注册于 byteformer_collate_functions.py字节级变换与 padding 都在 collate 阶段完成model.classification.byteformermode: tiny、max_num_tokens: 50000配置里常放大到 50000 以便实验源码默认 10000、conv_kernel_size: 32、window_sizes: [128]训练策略为 AdamWweight_decay 0.05 余弦调度max_epochs 300、warmup 7500 迭代、max_lr 0.001 标签平滑 0.1 EMAmomentum 0.0001 混合精度训练。训练 ByteFormer训练命令来自原 READMEcorenet-train --common.config-file $CONFIG_FILE原 README 说明ImageNet 实验在单节点 8 块 A100 GPU上训练Speech Commands v2 实验在单节点 4 块 A100 GPU上训练。直接用各子目录下的 YAML 配置文件即可例如corenet-train --common.config-file projects/byteformer/imagenet_file_encodings/encoding_typeTIFF.yaml评估 ByteFormer加载预训练权重原 README 给出的评估命令示例TIFF 模型export CFG_FILEprojects/byteformer/imagenet_file_encodings/encoding_typeTIFF.yaml export MODEL_WEIGHTShttps://docs-assets.developer.apple.com/ml-research/models/cvnets-v2/multimodal_classification/imagenet_tiff.pt export DATASET_PATH/mnt/vision_datasets/imagenet/validation/ CUDA_VISIBLE_DEVICES0 corenet-eval --common.config-file $CFG_FILE --model.classification.pretrained $MODEL_WEIGHTS --common.override-kwargs dataset.root_val$DATASET_PATH命令要点--common.config-file指向对应实验配置此处为 TIFF 编码配置--model.classification.pretrained加载预训练权重文件imagenet_tiff.pt--common.override-kwargs dataset.root_val$DATASET_PATH用命令行覆盖验证集路径不必修改 YAML 文件CUDA_VISIBLE_DEVICES0指定单卡评估。评估入口的实现位于 corenet/cli/main_eval.py训练/评估/转换等命令的统一入口说明见 corenet/cli/main.py。实验配置目录速览原 README 的projects/byteformer/下每个子目录对应论文中一张实验表格均可直接用于复现子目录实验内容imagenet_file_encodings/使用 TIFF 或其他编码fCHW/fHWC/PNG/TIFF的图像实验imagenet_jpeg_q100/JPEG 质量因子为 100 的实验含不同conv_kernel_sizeimagenet_jpeg_q60/JPEG 质量因子为 60 的实验含不同 kernel size 与窗口大小imagenet_jpeg_shuffle_bytes/打乱字节顺序的消融实验reverse / random_shuffle / cyclic_half_length / stride / window_shuffleimagenet_obfuscation/字节值替换混淆实验见论文细节imagenet_privacy_preserving_camera/掩码像素值隐私保护相机实验不同keep_frac与 kernel sizespeech_commands_mp3/Speech Commands v2 上的 MP3 音频分类实验speech_commands_wav/Speech Commands v2 上的 WAV 音频分类实验字节级数据增强collate 阶段的变换链ByteFormer 的字节变换不在模型内部、也不在常规 transform 阶段执行而是在collate 函数中串行应用原因正如 byteformer_collate_functions.py 所述这些变换无法在 GPU 上完成放在 collate 阶段可以并行化并避免张量在 GPU→CPU→GPU 之间反复搬运。图像侧byteformer_image_collate_fn的变换链为byteformer_collate_functions.pyapply_pil_save → apply_shuffle_bytes → apply_mask_positions → apply_random_uniform_noise → apply_byte_permutation → apply_padding → pytorch_default_collate_fn对应变换类均定义在 corenet/data/transforms/image_bytes.py变换开关配置关键参数与源码行为PILSaveimage_augmentation.pil_save.enablefile_encoding支持fCHW、fHWC、TIFF、PNGcompress_level0、JPEGquality默认 100前两种直接展平[C,H,W]像素为字节后三种经 PIL 编码为文件字节image_bytes.pyShuffleBytesimage_augmentation.shuffle_bytes.enablemode支持reverse整段倒序、random_shuffle全随机重排、cyclic_half_length半长循环滚动、stride按stride默认 1024 重排、window_shuffle按window_size默认 1024 的固定随机置换分窗打乱image_bytes.pyMaskPositionsimage_augmentation.mask_positions.enablekeep_frac默认 0.5用固定种子生成一次性的随机掩码仅保留keep_frac比例的字节模拟只传输部分像素的隐私保护相机image_bytes.pyRandomUniformNoiseimage_augmentation.random_uniform.enablewidth_range默认[-5, 5]对每个字节加均匀噪声后% 256取模用于混淆实验image_bytes.pyBytePermutationimage_augmentation.byte_permutation.enable用固定种子生成 0–255 的随机置换把字节值映射到新值也是混淆手段之一image_bytes.py填充由apply_padding完成取 batch 内最大序列长度用--model.classification.byteformer.padding-index默认-1补齐短样本byteformer_collate_functions.py。这解释了为何模型输入是可能含负值的整数张量padding 位用-1而非真实字节值。以混淆实验为例width_range[-20,20].yaml 同时开启pil_savefile_encoding: fHWC、byte_permutation与random_uniformwidth_range: [-20, 20]隐私保护相机实验 keep_frac0.05,conv_kernel_size4.yaml 则开启mask_positionskeep_frac: 0.05并把conv_kernel_size降为 4 以适配更短的字节序列。音频分类Speech Commands v2WAV / MP3ByteFormer 同样覆盖音频模态。音频侧 collate 函数为byteformer_audio_collate_fnbyteformer_collate_functions.py流程为apply_torchaudio_save → apply_padding(keyaudio) → 删除 metadata → 默认 collate。TorchaudioSavecorenet/data/transforms/audio_bytes.py由audio_augmentation.torchaudio_save.enable开关控制通过encoding_dtype如float32、int16、uint8等与formatwav或mp3把音频重新编码为文件字节。以 speech_commands_wav/encoding_dtypefloat32,conv_kernel_size32.yaml 为例其与图像配置的关键差异dataset.name: speech_commands_v2、category: audio_classificationspeech_commands_v2.mixup: truecollate_fn_name_*: byteformer_audio_collate_fn音频增强使用audio_augmentation.noiselevels 如-50refresh_freq 100与audio_augmentation.rollwindow 0.1模型侧classification.byteformer.mode: tiny、conv_kernel_size: 32、window_sizes: [128]n_classes: 1212 类命令词调度器 warmup 迭代数更少500。MP3 实验配置位于 speech_commands_mp3/将format改为mp3、conv_kernel_size与window_size按需调整如 k4、w32。复现 FLOPs 与模型规模估计的关键注意点原 README 特别提醒此处完整保留默认情况下配置中的--model.classification.byteformer.max-num-tokens设置得比实际所需更大目的是允许在不改配置的情况下自由试验例如调低 Conv1D 的 kernel size 会导致输入到 Transformer 骨干的 token 数变长。论文中估算 FLOPs 与模型规模时将该值设为对应输入类型TIFF、JPEG 等经 BF-Ti 的 Conv1D 下采样后的平均 token 长度但训练时若直接设为平均输入长度对于变长输入如 JPEG会因必然出现超过max-num-tokens的样本而报错。同理--model.classification.byteformer.dummy-input-token-length应设为你目标输入域在 Conv1D 下采样之前的预期输入长度以获得准确的性能估算。源码中该参数默认值为48564对应 ImageNet 上 224×224 JPEG 图像的平均字节长度byteformer.py。dummy_input_and_labelbyteformer.py会用该长度生成随机字节 dummy 输入用于 FLOPs/模型规模统计。此外预训练权重由于同样包含比必要值更大的嵌入模型文件本身也会略大于最小所需体积详见原 README 关于模型规模的说明。预训练模型原 README 提供的预训练模型列表如下配置链接已转换为仓库内相对路径权重文件为官方发布可通过 CoreNet 模型下载说明获取imagenet_tiff.pt等文件数据集任务Top-1配置ImageNet图像分类77.05IN TIFFImageNet图像分类67.64IN JPEG Q100 k8 w128ImageNet图像分类62.43IN JPEG Q60 k4 w128ImageNet字节打乱图像分类61.14IN Shuffle Bytes ReverseImageNet混淆图像分类76.00IN Random Uniform [-20, 20]ImageNet隐私保护相机图像分类68.10IN k4 keep_pixels0.05Speech Commands v2 12 类音频分类94.95SC WAV FP32 k32 w128Speech Commands v2 12 类音频分类90.25SC MP3 k4 w32评估时按前文命令将--model.classification.pretrained指向对应权重文件如imagenet_tiff.pt并结合相应 YAML 配置即可复现表内 Top-1 指标。延伸阅读与引用论文Bytes Are All You Need: Transformers Operating Directly On File BytesHorton, Mehta, Farhadi, Rastegari, 2023arXiv 2306.00238配套架构实现byteformer.py、模型配置 config/byteformer.py数据侧实现byteformer_collate_functions.py、变换实现 image_bytes.py 与 audio_bytes.py测试覆盖可参考 tests/data/collate_fns/test_byteformer_collate_fn.py 与 tests/modeling/models/classification/CoreNet 库的整体说明见 README.md。若你的工作使用了本实现可按原 README 提供的 BibTeX 引用article{Horton2023BytesAA, title{Bytes Are All You Need: Transformers Operating Directly On File Bytes}, author{Maxwell Horton and Sachin Mehta and Ali Farhadi and Mohammad Rastegari}, journal{ArXiv}, year{2023}, volume{abs/2306.00238} } inproceedings{mehta2022cvnets, author {Mehta, Sachin and Abdolhosseini, Farzad and Rastegari, Mohammad}, title {CVNets: High Performance Library for Computer Vision}, year {2022}, booktitle {Proceedings of the 30th ACM International Conference on Multimedia}, series {MM 22} }赞分享深度学习计算机视觉NLP多模态模型训练大模型【免费下载链接】corenetCoreNet: A library for training deep neural networks项目地址https://gitcode.com/GitHub_Trending/co/corenet点击查看免费下载相关推荐go-git 扩展机制完全指南Storer、Filesystem、Transport、Cache 与 Hash 五大扩展点深度解析go git 扩展机制完全指南Storer、Filesystem、Transport、Cache 与 Hash 五大扩展点深度解析 go git 是使用 Go深度学习计算机视觉NLP多模态模型训练大模型游戏 DLSS 版本怎么换、怎么回退DLSS Swapper 完整教程游戏 DLSS 版本怎么换、怎么回退DLSS Swapper 完整教程 游戏更新后塞来一个新 DLSS 版本画面开始闪你又不想动游戏目录里的文件。DLSS桌面应用终极指南如何快速掌握CoreNet Byteformer字节级处理技术终极指南如何快速掌握CoreNet Byteformer字节级处理技术 CoreNet是字节跳动开源的深度学习训练库专门用于训练深度神经网络。其中Bytef深度学习计算机视觉NLP多模态模型训练大模型上一篇ESP-IDF 构建系统实战指南7 步吃透 ESP32 组件依赖与固件瘦身下一篇Winlator 装不上 .NET Framework 4.0三步装好指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表