
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】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点击查看免费下载SinGAN 是 ICCV2019 提出的无条件生成模型仅从一张自然图像即可学习图像的内部 patch 分布进而生成保留全局结构、细节纹理且具有多样性的任意尺寸新样本。本文以 MMagic 仓库中 configs/singan/README.md 为核心结合 mmagic/models/editors/singan 下的源码实现与 configs/singan 下的三套完整配置系统讲解如何在 MMagic 中确定图像金字塔层数、理解配置文件每个参数、训练 SinGAN 以及通过 pickle 数据完成测试推理帮助读者在内部学习Internal Learning这一任务上快速上手。一、SinGAN 算法与 Internal Learning 任务SinGAN 是 ICCV2019 论文《Singan: Learning a Generative Model from a Single Natural Image》提出的无条件生成模型。与常见需要海量训练数据的 GAN 不同它只使用一张自然图像完成训练属于 MMagic 模型库中的 Internal Learning内部学习任务类别见 configs/singan/metafile.yml 中Task: internal learning。其核心思路可概括为内部 patch 分布学习模型被训练来捕获图像内部 patch 的分布从而生成与输入图像携带相同视觉内容的高质量、多样化样本全卷积 GAN 金字塔SinGAN 包含一个全卷积 GAN 金字塔每一层负责学习图像在不同尺度上的 patch 分布因此可以生成任意尺寸、任意宽高比的新样本保持全局结构、兼顾细粒度纹理生成的样本既保持训练图像的全局结构又拥有显著的多样性与精细纹理无条件、不限纹理图像与之前的单图像 GAN 方案不同SinGAN 不局限于纹理图像并且是无条件的直接从噪声生成样本而非条件生成。论文中的用户研究表明生成的样本经常被误认为是真实图像。SinGAN 被广泛用于一系列图像编辑任务。在 MMagic 中SinGAN 的完整实现位于 mmagic/models/editors/singan/singan.py其核心训练与推理逻辑都围绕多尺度金字塔展开。二、MMagic 中的模型实现与架构原理2.1 整体模型类SinGANMMagic 中 SinGAN 模型类继承自BaseGAN注册名为SinGAN见 mmagic/models/editors/singan/singan.py。其关键配置参数包括参数含义默认值generator生成器配置或模型必填discriminator判别器配置或模型Nonegenerator_steps判别器更新前生成器的完整更新次数1discriminator_steps生成器更新前判别器的完整更新次数1num_scales生成器/判别器的尺度stage数量从 0 开始计数与原论文一致Noneiters_per_scale每个分辨率尺度上的训练迭代数2000noise_weight_init固定噪声的初始化权重0.1lr_scheduler_args学习率调度参数使用 MultiStepLR与原论文一致Nonetest_pkl_data测试必需的 pickle 文件路径内含固定噪声与噪声权重None从源码结构可以推断出训练流程的关键设计singan.py 的train_step多分辨率渐进训练每个分辨率尺度训练iters_per_scale * discriminator_steps次后curr_stage递增 1并通过check_and_load_prev_weight从上一尺度加载权重每尺度独立的优化器与调度器SinGANOptimWrapperConstructor会为每个尺度构造独立的生成器/判别器优化器MMagic 明确要求 batch size 为 1 且不支持梯度累积固定噪声与重建模式rand_moderand从随机噪声采样rand_moderecon使用固定噪声重建图像噪声权重更新每个尺度训练结束时用当前尺度重建图像与下一尺度真实图像的 MSE 计算 RMSE乘以noise_weight_init作为下一尺度的噪声权重singan.py。2.2 多尺度生成器与判别器生成器SinGANMultiScaleGeneratorsingan_generator.py由num_scales 1个GeneratorBlock组成。每个 block 为 5 层卷积num_layers5基础通道数随尺度按2 ** floor(scale / 4)增长并封顶 128输出激活为 Tanh并带有残差连接x prev判别器SinGANMultiScaleDiscriminatorsingan_discriminator.py同样按尺度堆叠DiscriminatorBlock逐尺度判别基础模块GeneratorBlock/DiscriminatorBlock的 head/body/tail 结构、BN 归一化与 LeakyReLU(0.2) 激活、权重初始化Conv 使用normal_init(m, 0, 0.02)定义在 singan_modules.py。2.3 损失函数从 singan.py 的gen_loss与disc_loss可以看出MMagic 的 SinGAN 采用生成器损失WGAN 形式的对抗损失-D(G(z)).mean()叠加 10 倍权重的 MSE 重建损失10 * MSE(recon_img, real_img)判别器损失WGAN 形式的D(fake).mean() - D(real).mean()并叠加 0.1 权重的梯度惩罚gradient penalty。三、模型库与预训练权重MMagic 官方在 configs/singan/metafile.yml 中登记了 3 个预训练 SinGAN 模型对应关系如下Num Scales从 0 开始计数即金字塔层数模型数据集Num Scales下载SinGANballoons.png8ckpt 与 pkl 均可从 OpenMMLab 官方模型下载地址获取SinGANfish-crop.jpg10ckpt 与 pkl 均可从 OpenMMLab 官方模型下载地址获取SinGANbohemian.png10ckpt 与 pkl 均可从 OpenMMLab 官方模型下载地址获取其中 pkl 文件是测试必需的固定噪声与噪声权重数据README 中明确提示其重要性。四、训练前准备确定图像金字塔层数 num_scales原 README 特别强调训练 SinGAN 前应预先获取图像的尺度数量stages。该数值直接决定配置文件中生成器、判别器、训练迭代数的构造是搭建配置文件的关键前置步骤。获取方式如下见 configs/singan/README.md from mmgen.datasets.singan_dataset import create_real_pyramid import mmcv real mmcv.imread(real_img_path) _, _, num_scales create_real_pyramid(real, min_size25, max_size300, scale_factor_init0.75)注意在 MMagic 中该函数已迁移至 mmagic/datasets/singan_dataset.py实际导入语句为from mmagic.datasets.singan_dataset import create_real_pyramid。从源码看singan_dataset.pycreate_real_pyramid会根据min_size、max_size与scale_factor_init计算stop_scale即金字塔层数并逐层用mmcv.imrescale缩放生成reals图像金字塔列表。默认配置下min_size25, max_size300, scale_factor_init0.75num_scales即为配置文件中model.num_scales、生成器/判别器的num_scales以及 pipeline 中real_scale0 ... real_scale{num_scales}键的数量数据集SinGANDataset在load_data_list中调用该函数生成real_scale{i}系列键并将input_sample初始化为与real_scale0同尺寸的零张量singan_dataset.pySinGANDataset.__len__默认返回int(1e6)配合batch_size1与显式samplerNone使用。五、配置文件全解5.1 基础配置 singan_fish.pyconfigs/singan/singan_fish.py 是三套配置的基础文件完整展示了 SinGAN 的所有配置要点_base_ [../_base_/gen_default_runtime.py] # MODEL WRAPPER model_wrapper_cfg dict(find_unused_parametersTrue) # MODEL num_scales 10 # start from zero generator_steps 3 discriminator_steps 3 iters_per_scale 2000 # NOTE: add by user, e.g.: # test_pkl_data (./work_dirs/singan_fish/pickle/iter_66001.pkl) test_pkl_data None model dict( typeSinGAN, data_preprocessordict( typeDataPreprocessor, non_image_keys[input_sample]), generatordict( typeSinGANMultiScaleGenerator, in_channels3, out_channels3, num_scalesnum_scales, ), discriminatordict( typeSinGANMultiScaleDiscriminator, in_channels3, num_scalesnum_scales, ), noise_weight_init0.1, test_pkl_datatest_pkl_data, lr_scheduler_argsdict(milestones[1600], gamma0.1), generator_stepsgenerator_steps, discriminator_stepsdiscriminator_steps, iters_per_scaleiters_per_scale, num_scalesnum_scales) # DATA min_size 25 max_size 300 dataset_type SinGANDataset data_root ./data/singan/fish-crop.jpg pipeline [ dict( typePackInputs, keys[freal_scale{i} for i in range(num_scales)] [input_sample]) ] dataset dict( typedataset_type, data_rootdata_root, min_sizemin_size, max_sizemax_size, scale_factor_init0.75, pipelinepipeline) train_dataloader dict( batch_size1, num_workers0, datasetdataset, samplerNone, persistent_workersFalse) # TRAINING optim_wrapper dict( constructorSinGANOptimWrapperConstructor, generatordict(optimizerdict(typeAdam, lr0.0005, betas(0.5, 0.999))), discriminatordict( optimizerdict(typeAdam, lr0.0005, betas(0.5, 0.999)))) total_iters (num_scales 1) * iters_per_scale * discriminator_steps train_cfg dict(max_iterstotal_iters)关键参数说明num_scales尺度数量从 0 开始计数需由create_real_pyramid预先算好见第四节generator_steps/discriminator_steps均为 3表示生成器与判别器各连续更新 3 次iters_per_scale每个尺度训练 2000 次迭代total_iters总迭代数 (num_scales 1) * iters_per_scale * discriminator_steps即(101) * 2000 * 3 66000noise_weight_init0.1固定噪声初始权重训练中会按各尺度 RMSE 动态更新lr_scheduler_argsdict(milestones[1600], gamma0.1)每个尺度内部使用 MultiStepLR在第 1600 次迭代将学习率乘以 0.1数据相关min_size25、max_size300、scale_factor_init0.75与金字塔构建命令保持一致SinGANDataset只读取data_root指向的单张图像pipelinePackInputs打包real_scale0 ... real_scale9与input_sample共 11 个键优化器Adamlr0.0005betas(0.5, 0.999)由SinGANOptimWrapperConstructor为每个尺度构造独立优化器注意事项SinGAN 不支持 val_loop 与 test_loop配置文件显式设置val_cfg test_cfg None、val_evaluator test_evaluator None评估与生成需使用专用推理脚本见第七节。5.2 继承配置balloons 与 bohemianconfigs/singan/singan_balloons.py_base_ [./singan_fish.py]仅将num_scales改为 8data_root改为./data/singan/balloons.png并通过model dict(num_scalesnum_scales, generatordict(num_scalesnum_scales), discriminatordict(num_scalesnum_scales), test_pkl_datatest_pkl_data)覆盖基类配置configs/singan/singan_bohemian.py同样继承自singan_fish.py将max_size调整为 500data_root改为./data/singan/bohemian.png并重写custom_hooks中VisualizationHook的namebohemian。两套继承配置均保留PickleDataHook保存noise_weights、fixed_noises、curr_stage与VisualizationHookinterval5000、fixed_inputTrue这两个自定义 hook。5.3 custom_hooks 详解custom_hooks [ dict( typePickleDataHook, output_dirpickle, interval-1, after_runTrue, data_name_list[noise_weights, fixed_noises, curr_stage]), dict( typeVisualizationHook, interval5000, fixed_inputTrue, vis_kwargs_listdict(typeSinGAN, namefish)) ]PickleDataHook实现见 mmagic/engine/hooks/pickle_data_hook.py将模型的noise_weights、fixed_noises、curr_stage三个属性序列化为 numpy 后写入{work_dir}/pickle/iter_{iter1}.pkl。interval-1表示训练过程中不触发after_runTrue表示训练结束后保存一次。该 pkl 文件正是测试与推理所必需的固定噪声数据VisualizationHook每 5000 次迭代用固定输入可视化一次生成结果便于观察各尺度的训练进展。六、训练在准备好单张图像数据如./data/singan/fish-crop.jpg并完成num_scales计算后使用 MMagic 的标准训练入口即可启动训练python tools/train.py configs/singan/singan_fish.py多卡训练可使用 tools/dist_train.shbash tools/dist_train.sh configs/singan/singan_fish.py 8训练结束后PickleDataHook会在work_dirs/singan_fish/pickle/下生成形如iter_66001.pkl的 pickle 文件文件名模板iter_{}.pkl见 pickle_data_hook.py。七、测试与推理7.1 为测试修改配置文件原 README 明确指出测试 SinGAN 模型时必须修改配置文件并添加test_cfg。以 configs/singan/singan_balloons.py 为例唯一需要做的就是把pkl数据的路径填入test_pkl_datatest_cfg dict( _delete_ True pkl_data path to pkl data )在实际 MMagic 配置体系中更推荐直接在model中设置test_pkl_data配置文件顶部已预留注释示例# e.g. test_pkl_data ./work_dirs/singan_pkl/singan_balloons_20210406_191047-8fcd94cf.pkl model dict(test_pkl_datatest_pkl_data)从源码看SinGAN.test_step会先调用load_test_pkl()singan.py从 pickle 中还原fixed_noises、noise_weights与curr_stage_from_numpy会将 numpy 数据转回 Tensor 并搬到生成器所在设备随后才执行生成。若未设置test_pkl_data则测试无法进行——这是 SinGAN 与普通 GAN 最大的使用差异。7.2 使用 demo 脚本生成样本由于 SinGAN 不支持val_loop与test_loop官方提供专用推理脚本 demo/singan_demo.py用法如下python demo/singan_demo.py ${CONFIG_FILE} ${CHECKPOINT} \ [--samples-path ${SAMPLES_PATH}] \ [--save-prev-res] \ [--num-samples ${NUM_SAMPLES}]参数说明参数作用默认值config配置文件路径需已配置好test_pkl_data必填checkpoint训练得到的 ckpt 文件必填--seed随机种子2021--deterministic是否对 CUDNN 后端设置确定性选项关闭--samples-path生成图片的保存目录./--save-prev-res是否同时保存各中间尺度的生成结果保存到stage{i}子目录关闭--num-samples生成的样本数量10脚本内部通过model.test_step(dict(inputsdict(num_batches1, get_prev_resargs.save_prev_res)))逐个生成样本SinGAN 仅支持num_batches1生成结果经_tensor2img转回 uint8 图像后用mmcv.imwrite写出。八、源码与测试验证MMagic 为 SinGAN 提供了完整的单元测试可作为理解实现与验证行为的参考tests/test_models/test_editors/test_singan/test_singan.py模型训练/推理流程测试tests/test_models/test_editors/test_singan/test_singan_generator.py 与 test_singan_discriminator.py生成器/判别器结构测试tests/test_models/test_editors/test_singan/test_singan_modules.pyGeneratorBlock/DiscriminatorBlock模块测试tests/test_datasets/test_singan_dataset.pycreate_real_pyramid与SinGANDataset测试tests/test_engine/test_optimizers/test_singan_optimizer_constructor.py逐尺度优化器构造测试。九、引用若在研究中使用了 SinGAN请引用原论文inproceedings{shaham2019singan, title{Singan: Learning a generative model from a single natural image}, author{Shaham, Tamar Rott and Dekel, Tali and Michaeli, Tomer}, booktitle{Proceedings of the IEEE/CVF International Conference on Computer Vision}, pages{4570--4580}, year{2019}, }赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】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点击查看免费下载相关推荐SinGAN从单张自然图像学习生成模型SinGAN从单张自然图像学习生成模型 项目介绍 SinGAN 是一个由 Tamar Rott Shaham、Tali Dekel 和 Tomer MichaPaddleGAN SinGAN 实战指南单张图片训练无条件生成模型实现超分、图像编辑与静图转动PaddleGAN SinGAN 实战指南单张图片训练无条件生成模型实现超分、图像编辑与静图转动 SinGANSingle Image GAN是 Pad人工智能深度学习计算机视觉媒体生成视频处理图像处理MMagic 中 IndexNet 抠图模型实战指南学习索引的图像 Matting 原理、配置解析与训练测试MMagic 中 IndexNet 抠图模型实战指南学习索引的图像 Matting 原理、配置解析与训练测试 导读 本文以 MMagicOpenMMLab媒体生成计算机视觉深度学习人工智能大模型上一篇Hermes Agent 多智能体协作完全指南让一支智能体团队跑通你的复杂任务下一篇OpenSim Core5个核心技术构建完整的生物力学模拟与分析平台创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考