
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载本文围绕 MMagicOpenMMLab 多模态生成工具箱的 DataPreprocessor 数据预处理器展开。它位于数据增强transforms与神经网络前向计算之间负责将 DataLoader 产出的批次数据搬运到 GPU、完成 Padding 与归一化是生成式模型GAN、图像翻译、修补、抠图等训练与推理管线中承上启下的关键一环。读完本文你将理解预处理器在完整训练管线中的位置、DataPreprocessor 与 MattorPreprocessor 的核心实现原理、每个配置参数的含义以及如何在实际配置与模型 train_step 中正确使用它。数据预处理器在训练管线中的位置在 MMagic 的模型训练过程中图像数据首先由 mmcv现 mmengine 体系提供的 transforms 完成数据增强增强后的数据被送入 DataLoader随后数据预处理器data preprocessor负责三件事将数据从 CPU 搬运到 CUDAGPU、执行 Padding、对图像做归一化。也就是说预处理器是数据增强之后、模型前向之前的标准化入口所有下游算法库图像翻译、超分、修补、生成等都可以复用同一套预处理逻辑从而避免在各模型实现中重复编写搬移、拼接与归一化代码。以configs/_base_/datasets/unpaired_imgs_256x256.py中的train_pipeline为例它使用 mmcv/mmengine 的 transform 体系定义了作用于训练图像的一组变换序列该设计正是为了消除不同下游算法库之间变换函数的冗余... train_pipeline [ dict(color_typecolor, keyimg_A, typeLoadImageFromFile), dict(color_typecolor, keyimg_B, typeLoadImageFromFile), dict(auto_remapTrue, mappingdict(img[img_A, img_B,]), share_random_paramsTrue, transforms[dict(interpolationbicubic, scale(286, 286,), typeResize), dict(crop_size(256, 256,), keys[img,], random_cropTrue, typeCrop),], typeTransformBroadcaster), dict(directionhorizontal, keys[img_A, ], typeFlip), dict(directionhorizontal, keys[img_B, ], typeFlip), dict(mappingdict(img_maskimg_B, img_photoimg_A), remappingdict(img_maskimg_mask, img_photoimg_photo), typeKeyMapper), dict(data_keys[img_photo, img_mask,], keys[img_photo, img_mask,], typePackInputs), ] ...逐段解读这段管线LoadImageFromFile按keyimg_A、img_B分别读取两个域domain的图像并以color_typecolor保留彩色通道TransformBroadcaster将Resize双三次插值缩放到 286×286与Crop随机裁剪到 256×256广播到img_A、img_B两个键share_random_paramsTrue保证两个域共享同一组随机参数确保几何变换对齐两个Flip分别对img_A、img_B做水平翻转KeyMapper将img_B重映射为img_mask、img_A重映射为img_photo用于后续按语义键取值PackInputs将img_photo、img_mask打包进 DataSample并声明data_keys。仓库中的实际文件 configs/base/datasets/unpaired_imgs_256x256.py 给出了同一管线的基准形态其中KeyMapper与PackInputs以注释形式保留并提示用户应根据自己的domain_a/domain_b实现 KeyMapper 与 Pack 操作数据加载器部分则约定batch_size、data_root由使用者填写train_dataloader使用InfiniteSamplershuffleTrueval/test_dataloader使用DefaultSamplershuffleFalse。DataPreprocessor 核心实现解析MMagic 中数据预处理的实现位于 mmagic/models/data_preprocessors/data_preprocessor.py核心类是继承自mmengine.model.ImgDataPreprocessor的DataPreprocessor通过MODELS.register_module()注册专门为生成式模型设计。输入约定与非图像键机制该类的输入约定为inputs与data_samples组成的字典。除了处理张量型inputs它还支持字典形式的inputs值为Tensor且键不在_NON_IMAGE_KEYS中时按图像张量处理执行通道转换、归一化、Padding值为Tensor且键属于_NON_IMAGE_KEYS时保持原样不做图像处理值为字符串或整数时同样保持原样。类内定义了两个关键集合_NON_IMAGE_KEYS [noise]标记不需要按图像处理的字段例如无条件 GAN 的随机噪声noise_NON_CONCATENATE_KEYS [num_batches, mode, sample_kwargs, eq_cfg]标记在批处理时不需要拼接、只需取首值的字段。核心构造参数参数默认值含义mean127.5像素均值可传单个数值或序列归一化在通道顺序转换之后执行不指定则不归一化std127.5像素标准差语义与mean相同pad_size_divisor1Padding 后图像尺寸应能被该值整除例如超分任务常用 16/32/64pad_value0Padding 填充的像素值pad_modeconstant传给torch.nn.functional.pad的 Padding 模式non_image_keysNone追加到_NON_IMAGE_KEYS的自定义非图像键non_concatenate_keysNone追加到_NON_CONCATENATE_KEYS的自定义不拼接键output_channel_orderNone输出通道顺序仅支持 RGB、BGR 或 NoneNone 表示不做通道转换data_keysgt_imgDataSample 中需要预处理的键训练阶段会对其归一化input_view/output_viewNone输入/输出张量的 view 形状仅 LIIF 等特殊模型使用源码标注未来可能移除stack_data_sampleTrue是否将 data sample 列表堆叠为单个 DataSample默认mean127.5, std127.5意味着把像素从[0, 255]归一化到[-1, 1]这与生成式模型常见的 Tanh 输出激活保持一致例如 configs/base/models/base_cyclegan.py 与 configs/base/models/base_pix2pix.py 中直接使用data_preprocessordict(typeDataPreprocessor)即采用该默认归一化而 configs/base/models/base_deepfillv2.py 则显式写出mean[127.5], std[127.5]。forward 的整体流程forward(data, trainingFalse)是预处理器的主入口其处理步骤为cast_data调用父类逻辑将批次数据递归复制到目标设备字符串/整数/浮点直接原样返回按inputs的类型分派处理torch.Tensor→_preprocess_image_tensorList[torch.Tensor]→_preprocess_image_list按批次中最大尺寸对齐并 Padding支持不同尺寸的样本dict→_preprocess_dict_inputs逐键处理遇到_NON_IMAGE_KEYS只 stack 不做图像处理遇到_NON_CONCATENATE_KEYS只取首值List[dict]→ 先转换为dict of list再走字典分支其他类型抛出ValueError调用_preprocess_data_sample处理 DataSample 中的data_keys字段返回与模型输入同构的字典。对于单个图像张量_preprocess_image_tensor内部依次执行_parse_batch_channel_order解析批次通道顺序→_do_conversion通道顺序转换→_do_norm归一化→F.padPadding并把每个样本的padding_size与输出通道顺序写回 DataSample 的 metainfo_update_metainfo其中padding_size形如(B, 3)记录(0, pad_h, pad_w)供后续destruct恢复时使用。通道顺序解析与转换_parse_channel_index将张量维度映射为通道维索引2 维(H*W, C)→1、3 维(C, H, W)→0、4 维(N, C, H, W)→1、5 维(N, t, C, H, W)→2覆盖了视频帧序列等场景若inputs为字典则取fake_img键的维度判断。_parse_channel_order负责推断当前张量的通道顺序优先读取 DataSample metainfo 中的{key}_channel_order与{key}_color_typegt_img键对应gt_channel_order/gt_color_type当color_type为grayscale时判定为单通道 single为unchanged时按通道数推断1 通道→single3 通道→BGR无元信息时同样按通道数推断默认 BGR。批次场景下会断言所有样本的通道顺序一致_parse_batch_channel_order。_do_conversion执行真正的转换当inputs_order为 RGB/BGR 且与目标顺序不同时通过torch.index_select按[2, 1, 0]4 通道时[2, 1, 0, 3]重排通道当输入为单通道 single 时无法转换仅打印一次 WARNING 后原样返回。归一化细节_do_norm使用(inputs - mean) / std完成归一化。mean/std 会被 view 成可广播的形状对 2 维(H*W, C)特殊处理为[1, -1]其余维度按[1, ..., -1, 1, 1]广播归一化前会校验 mean/std 的通道数必须为 1 或与输入一致避免单通道均值被错误广播到 3 通道张量。DataSample 的预处理与堆叠_preprocess_data_sample在训练trainingTrue时把data_keys指向的字段转换到output_channel_order并归一化测试trainingFalse时则统一转换到 BGR 且不做归一化便于直接可视化。处理结果会写入{key}_enable_norm、{key}_output_channel_order、{key}_mean、{key}_std等 metainfo最后按stack_data_sample决定是否调用DataSample.stack堆叠为单个样本。在 CycleGAN 训练与推理中的应用以 mmagic/models/editors/cyclegan/cyclegan.py 中的train_step为例数据预处理发生在模型真正前向之前... message_hub MessageHub.get_current_instance() curr_iter message_hub.get_info(iter) data self.data_preprocessor(data, True) disc_optimizer_wrapper optim_wrapper[discriminators] inputs_dict data[inputs] outputs, log_vars dict(), dict() ...data self.data_preprocessor(data, True)会完成搬移cast to GPU→ 拼接stack/concatenate→ 归一化三步随后从data[inputs]中按img_{source_domain}取出对应域的图像送入生成器判别器与生成器分别通过disc_optimizer_wrapper/gen_optimizer_wrapper的optim_context管理参数更新含discriminator_steps、disc_init_steps等节奏控制。而在test_step/val_step中预处理器以默认trainingFalse调用并且在产出fake_img后调用self.data_preprocessor.destruct(fake_img, data_samples[idx], fimg_{target_domain})把归一化、Padding 逆回去得到可直接交给可视化器与评估器的 BGR 图像。这正是预处理器可逆设计的价值训练侧归一化保证数值稳定推理侧 destruct 保证输出可读。面向抠图任务的 MattorPreprocessormmagic/models/data_preprocessors/mattor_preprocessor.py中的MattorPreprocessor继承自DataPreprocessor是针对 matting抠图模型的专用变体其差异体现在使用 ImageNet 风格统计量mean[123.675, 116.28, 103.53]、std[58.395, 57.12, 57.375]output_channel_orderRGB固定data_keys [gt_fg, gt_bg, gt_merged, gt_alpha]新增proc_trimap参数默认rescale_to_zero_one把 trimap 除以 255 归一化到[0,1]也可设为as-is仅转 float32训练时对data_keys字段除以 255而非按 mean/std 归一化forward中把预处理后的图像与 trimap 沿通道维拼接为N, (4/6), H, W的张量batch_inputs torch.cat((batch_images, batch_trimaps), dim1)并约束测试时batch_size1。对应测试见 tests/test_models/test_data_preprocessors/test_mattor_preprocessor.py可验证 trimap 处理、数据拼接等行为。destruct从预处理状态恢复到可视化destruct(outputs, data_samples, key)是预处理的逆操作也是本文提及的可逆设计的另一半_destruct_norm_and_conversion先做反归一化outputs * std mean再尝试把通道顺序转换回 BGR顺序不可颠倒因为 mean/std 是基于转换后通道顺序计算的_destruct_padding依据 DataSample metainfo 中记录的padding_size裁掉右侧/底部填充same_paddingTrue时按首个样本信息统一裁剪并返回堆叠张量否则逐样本裁剪返回列表最后clamp_(0, 255)把像素值收敛回合法区间。源码注释给出了典型使用场景模型输出的feats self.data_preprocessor.destruct(feats, data_samples, img)以及为可视化把输入图像也 destruct 后写回data_sample.set_data({input: destructed_input})。测试覆盖与验证预处理器有较完整的单元测试支撑tests/test_models/test_data_preprocessors/test_data_preprocessor.py 覆盖了初始化参数pad_size_divisor、pad_value、non_image_keys/non_concentate_keys的追加逻辑、_parse_channel_index对 2~5 维张量的通道维判定、_parse_channel_order对 metainfo 中channel_order/color_type各种组合RGB/BGR/grayscale/unchanged的推断以及归一化、Padding、destruct 等完整流程。这些测试既是行为契约也可作为自定义预处理器时的参考实现。小结MMagic 的 DataPreprocessor 把设备搬移、通道顺序转换、归一化、Padding、元信息记录、逆操作 destruct收敛为一条标准流水线并通过_NON_IMAGE_KEYS、_NON_CONCATENATE_KEYS、data_keys、output_channel_order等参数兼容了 GAN 噪声输入、多域图像、视频帧序列、matting trimap 等多样化的生成任务输入形态。理解它有助于你在自定义模型时正确地组织train_pipeline与data_preprocessor配置也能在调试图像发绿/发暗/尺寸错位等常见问题时快速定位到通道顺序、归一化范围与 Padding 三个环节。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载相关推荐MMagic 数据预处理器DataPreprocessor完全指南从数据搬移到归一化与反变换MMagic 数据预处理器DataPreprocessor完全指南从数据搬移到归一化与反变换 导读 本文围绕 MMagicOpenMMLab 生成式 A媒体生成计算机视觉深度学习人工智能大模型PaddleSpeech 源码解读paddlespeech.t2s.exps.tacotron2 实验模块的数据预处理、特征归一化与训练全流程PaddleSpeech 源码解读 paddlespeech.t2s.exps.tacotron2 实验模块的数据预处理、特征归一化与训练全流程 导读 本文以人工智能语音音频NLP媒体生成INFINI Console管道处理数据预处理与转换流程INFINI Console管道处理数据预处理与转换流程 概述 INFINI Console作为一款轻量级的多集群、跨版本统一Elasticsearch/Op后端数据库可观测性告警运维上一篇Formily 2025年路线图深度解析全新功能与技术演进全指南下一篇self-llm AMD 专题Ubuntu 24.04 ROCm 7.13TheRock环境准备与 Gemma 4 推理框架部署指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考