ARTICLE DETAIL

资讯详情

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

PaddleGAN SinGAN 实战指南:单图训练、多任务推理与源码解析

PaddleGAN SinGAN 实战指南:单图训练、多任务推理与源码解析 人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载SinGAN 是 PaddleGAN 中一套基于单张自然图像训练的无条件生成模型实现适用于随机采样、图像编辑与协调、超分辨率、动画生成以及 Paint-to-Image涂鸦转图像等任务。本文以 docs/en_US/tutorials/singan.md 为主线结合 配置、模型实现、推理脚本 与 预测器 等仓库源码完整覆盖从训练、微调、权重提取到五种推理模式的全流程并深入解析多尺度金字塔的训练与采样原理帮助读者在 PaddleGAN 中复现并扩展 SinGAN。核心原理从单张图像学习内部统计与传统 GAN 在类级数据集class-specific dataset上训练、捕捉同类图像共性特征不同SinGAN 仅使用一张图像进行训练它从该图像多个尺度scale上的重叠图像块overlapping patches中学习图像自身的内部统计信息因此属于无条件生成模型unconditional generative model——即完全由随机输入生成样本而无需像条件 GANconditional GAN那样依赖控制生成类别的 class label。训练完成后SinGAN 可以产出与训练图像在语义上相似、但包含全新物体布局与结构的高质量图像且支持任意尺寸与宽高比的输出。这种由单图学分布的特性使得它天然适用于纹理类、自然景观类图像的生成与编辑任务。在 PaddleGAN 中这一思想落地为 SinGANModel多尺度金字塔模型依据配置中的scale_factor与min_size将训练图像逐级下采样构建scale_num层由粗到细的金字塔singan_model.pyscale_num ceil(log(min_size / min(h, w)) / log(scale_factor)) 1逐尺度训练每个尺度配一个生成器SinGANGenerator与一个判别器SinGANDiscriminator训练从最粗糙的尺度开始逐级向精细尺度推进singan_model.py噪声金字塔每一层生成器接收对应尺度的高斯噪声图并在跨尺度时以上一尺度的输出作为条件输入从而保证最终图像各尺度间结构一致generator_singan.py。配置文件四套模板与关键参数仓库为 SinGAN 提供了 4 套配置文件configs 目录配置文件适用任务与通用配置的主要差异singan_universal.yaml所有任务通用本文示例均基于此配置训练基准参数singan_sr.yaml超分辨率作者推荐scale_factor0.793701即(1/2)^(1/3)、min_size18、recon_criterion.loss_weight100.0singan_animation.yaml动画生成作者推荐generator.noise_zero_padFalsesingan_finetune.yamlPaint-to-Image 微调total_iters12000、is_finetuneTrue、finetune_scale1、color_num5通用配置逐项解读以 singan_universal.yaml 为例核心参数如下total_iters: 100000 # 总训练迭代数 output_dir: output_dir # 输出目录 model: name: SinGANModel generator: name: SinGANGenerator nfc_init: 32 # 最粗尺度生成器初始通道数 min_nfc_init: 32 # 生成器最小通道数 noise_zero_pad: True # 是否对噪声图做零填充 discriminator: name: SinGANDiscriminator nfc_init: 32 min_nfc_init: 32 gan_criterion: name: GANLoss gan_mode: wgangp # WGAN-GP 对抗损失 loss_weight: 1.0 recon_criterion: name: MSELoss # 重建损失 loss_weight: 10.0 gp_criterion: name: GradientPenalty # 梯度惩罚 loss_weight: 0.1 train_image: data/singan/stone.png # 训练图像路径 scale_factor: 0.75 # 金字塔相邻尺度缩放因子 min_size: 25 # 最粗尺度图像最短边 is_finetune: False # 是否为 Paint2Image 微调 dataset: train: name: EmptyDataset # 训练不需要数据集图像由模型直接读取 test: name: SingleDataset dataroot: data/singan # 测试图像目录必须只含一张图 num_workers: 0 batch_size: 1 preprocess: # 图像加载后转置并归一化到 [-1, 1] - name: LoadImageFromFile key: A - name: Transforms input_keys: [A] pipeline: - name: Transpose - name: Normalize mean: [127.5, 127.5, 127.5] std: [127.5, 127.5, 127.5] lr_scheduler: name: MultiStepDecay learning_rate: 0.0005 milestones: [9600] # 在第 9600 迭代将学习率乘 0.1 gamma: 0.1 optimizer: optimizer_G: name: Adam beta1: 0.5 beta2: 0.999 optimizer_D: name: Adam beta1: 0.5 beta2: 0.999 log_config: interval: 100 # 日志输出间隔 visiual_interval: 2000 # 可视化间隔 snapshot_config: interval: 10000 # 保存 checkpoint 间隔 validate: interval: -1 # 训练期不进行验证 save_img: True metrics: fid: name: FID batch_size: 1参数说明与源码对应nfc_init/min_nfc_init控制生成器各尺度卷积通道数通道数随尺度按min(nfc_init * 2^floor(i/4), 128)增长generator_singan.py判别器同样按此规则为每个尺度构建独立网络singan_model.pyscale_factor与min_size决定金字塔层数scale_num与每一层分辨率同时用于训练期与推理期图像的插值缩放noise_zero_pad为True时噪声图填充 0 后再与上采样图像相加为False时以随机噪声直接填充边界对应 generator_singan.py 的nn.Pad2D与z_fixedrecon_criterion.loss_weight重建损失权重超分场景singan_sr.yaml提高到100.0以强化对输入图像结构的保真is_finetune/finetune_scale/color_num微调模式下启用颜色量化K-Means 聚类到color_num个中心色见 singan_model.py帮助 Paint-to-Image 输出更贴近训练图的配色。训练与微调标准训练训练前需准备训练图像将其放入data/singan目录或修改配置中model.train_image与dataset.test.dataroot的路径。执行python tools/main.py -c configs/singan_universal.yaml \ -o model.train_imagetrain_image.png其中-o是命令行覆盖配置项见 ppgan/utils/options.py可灵活指定训练图像而不必改动配置文件。训练过程中SinGANModel 会按total_iters / scale_num切分每层尺度的迭代数并在每个scale_iters边界切换当前尺度singan_model.py每一层交替更新判别器与生成器判别器损失包含 WGAN-GP 的真/假判别损失与梯度惩罚生成器损失包含对抗损失与重建损失singan_model.py。Paint-to-Image 微调对Paint to Image场景先用通用配置训练再用微调配置继续训练以获得更贴近画作的配色效果python tools/main.py -c configs/singan_finetune.yaml \ -o model.train_imagetrain_image.png \ --load weight_saved_in_training.pdparams微调从finetune_scale1这一较细尺度开始configs/singan_finetune.yaml前若干尺度已冻结仅针对后续尺度优化且生成器的重建输入会被量化到训练图的聚类颜色中心singan_model.py这正是微调后结果配色更接近原图的原因。评估随机生成验证以下命令会在不更新权重的前提下利用噪声金字塔随机生成一张与训练图像分辨率一致的图像python tools/main.py -c configs/singan_universal.yaml \ -o model.train_imagetrain_image.png \ --load weight_saved_in_training.pdparams \ --evaluate-only注意事项与文档一致train_image.png必须位于data/singan目录或手动修改dataset.test.dataroot该目录内只能包含一张图像即训练图像本身评估通过 SinGANModel.test_iter 完成可配合配置中validate.metrics.fid计算 FID。提取生成器权重训练保存的 checkpoint 同时包含生成器与各尺度判别器推理阶段只需生成器。使用 tools/extract_weight.py 提取python tools/extract_weight.py weight_saved_in_training.pdparams --net-name netG --output weight_of_generator.pdparams其实现从 checkpoint 字典中取出netG对应的 state dict 并另存为.pdparams文件extract_weight.py。提取后的权重即可交给 applications/tools/singan.py 完成各类推理。提示tools/extract_weight.py也可用于提取其他模型的子网络权重只需替换--net-name例如判别器名netD0。推理五大模式实战推理统一使用applications/tools/singan.py其参数解析与调用链见 singan.py核心逻辑封装在 SinGANPredictor。公共参数参数默认值说明--weight_pathNone训练后提取的生成器权重weight_of_generator.pdparams--pretrained_modelNone官方预训练模型可选trees、stone、mountains、birds、lightning自动下载见 singan_predictor.py--moderandom_samplerandom_sample/editing/harmonization/sr/animation/paint2image--output_pathoutput_dir结果输出目录--seedNone随机种子传入后调用paddle.seed--cpuFalse以 CPU 推理调用paddle.set_device(cpu)未指定--weight_path时预测器会依据--pretrained_model下载对应权重两者都为空则报错singan_predictor.py。此外预测器会从 checkpoint 中恢复scale_num、coarsest_shape、nfc_init、num_layers等超参据此重建生成器singan_predictor.py因此训练配置与推理权重必须来自同一模型。随机采样Random Samplepython applications/tools/singan.py \ --weight_path weight_of_generator.pdparams \ --mode random_sample \ --scale_v 1 \ # 垂直缩放 --scale_h 1 \ # 水平缩放 --n_row 2 \ --n_col 2--scale_v/--scale_h以训练图像尺寸为基准指定输出在垂直/水平方向的放大倍数二者乘积决定输出宽高比默认均为1.0--n_row/--n_col输出网格的行列数即一次生成n_row * n_col张样本并拼成网格singan_predictor.py默认5行3列从最粗尺度generate_start_scale0开始以全随机噪声金字塔经生成器逐级上采样得到最终图像。图像编辑与协调Editing Harmonizationpython applications/tools/singan.py \ --weight_path weight_of_generator.pdparams \ --mode editing \ # 或 harmonization --ref_image editing_image.png \ --mask_image mask_of_editing.png \ --generate_start_scale 2--ref_image参考图像编辑/协调/超分/paint2image 均必填--mask_image编辑或协调任务的掩码图必填灰度图--generate_start_scale从第几层尺度开始重新生成默认0。值越大改动越局部、越贴近参考图结构从 singan_predictor.py 可见参考图会被插值到generate_start_scale对应尺度作为生成起点两者的差异在于掩码的膨胀半径harmonization使用半径 7 的圆盘结构元editing使用半径 20随后对掩码做高斯模糊再以(1 - mask) * ref mask * out将生成结果融入参考图singan_predictor.py。超分辨率Super Resolutionpython applications/tools/singan.py \ --weight_path weight_of_generator.pdparams \ --mode sr \ --ref_image image_to_sr.png \ --sr_factor 4--sr_factor放大倍数默认4.0。实现上按sr_iters ceil(log(sr_factor, 1/scale_factor))迭代逐级放大singan_predictor.py每轮输出再插值放大后作为下一轮输入最终统一缩放到ref * sr_factor的分辨率singan_predictor.py。动画生成Animationpython applications/tools/singan.py \ --weight_path weight_of_generator.pdparams \ --mode animation \ --animation_alpha 0.6 \ # 帧序列与训练图像的贴近程度 --animation_beta 0.7 \ # 控制生成片段的平滑度与变化速率 --animation_frames 20 \ # 动画总帧数 --animation_duration 0.1 # 每帧时长秒该模式下batch_size animation_frames每帧独立采样一组噪声再按alpha/beta加权组合相邻帧噪声singan_predictor.py从而在保持图像整体内容的前提下让细节随帧平滑变化结果以 GIF 保存为animation.gifduration控制每帧显示时长singan_predictor.py。Paint to Image涂鸦转图像python applications/tools/singan.py \ --weight_path weight_of_generator.pdparams \ --mode paint2image \ --ref_image paint.png \ --generate_start_scale 2将涂鸦/简笔画作为参考图从指定尺度开始生成使输出继承涂鸦的构图与训练图的纹理风格若先用singan_finetune.yaml微调再推理结果配色会更接近训练图像见前文训练与微调。从源码理解推理链路SinGANPredictor.run 的完整流程可归纳为四步模式校验与参数检查仅允许六种模式sr/harmonization/editing/paint2image必须提供ref_imageharmonization/editing必须提供mask_imagesingan_predictor.py输入准备按模式构造初始张量x_init——随机采样为按scale_v/scale_h扩展的零张量编辑/协调/paint2image 为插值后的参考图超分为按比例插值的参考图singan_predictor.py金字塔前向构造各尺度噪声z_pyramid逐尺度调用生成器超分模式则迭代执行生成→放大→再生成singan_predictor.py后处理与保存随机采样拼网格输出random_sample.png编辑/协调按掩码融合超分统一缩放动画保存 GIFsingan_predictor.py。生成器前向的核心在 SinGANGenerator.forward对每个尺度将缩放后的噪声z_pyramid[i] * sigma[scale]与填充后的上尺度图像相加送入GeneratorConcatSkip2CleanAdd卷积块堆叠 Tanh 输出 与下采样输入残差相加随后双线性插值到下一尺度继续。sigma每尺度由重建误差动态估计singan_model.py控制噪声注入强度。此外仓库 test_tipc/configs/singan/train_infer_python.txt 提供了 SinGAN 的 TIPCTraining and Inference Pipeline验证配置覆盖训练、导出tools/export_model.py导出为singan_random_sample推理模型与 CPU 推理tools/inference.py --model_type singan全流程可作为集成验证与回归测试的参考。引用与延伸阅读SinGAN 原始论文misc{shaham2019singan, title{SinGAN: Learning a Generative Model from a Single Natural Image}, author{Tamar Rott Shaham and Tali Dekel and Tomer Michaeli}, year{2019}, eprint{1905.01164}, archivePrefix{arXiv}, primaryClass{cs.CV} }相关仓库资源配置文件configs/singan_universal.yaml、configs/singan_sr.yaml、configs/singan_animation.yaml、configs/singan_finetune.yaml模型实现ppgan/models/singan_model.py、ppgan/models/generators/generator_singan.py、ppgan/models/discriminators/discriminator_singan.py推理工具applications/tools/singan.py、ppgan/apps/singan_predictor.py训练入口tools/main.py、tools/extract_weight.py文档docs/zh_CN/tutorials/singan.md中文版教程赞分享人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载相关推荐A2UI Swift 原生实现全解析从 A2UISwiftCore 运行时引擎到 SwiftUI 渲染适配器与 iOS 示例客户端A2UI Swift 原生实现全解析从 A2UISwiftCore 运行时引擎到 SwiftUI 渲染适配器与 iOS 示例客户端 本篇技术指南以 swift人工智能深度学习计算机视觉媒体生成视频处理图像处理Tensor2Tensor MultiProblem 多任务训练实战从任务定义、数据生成到推理全流程Tensor2Tensor MultiProblem 多任务训练实战从任务定义、数据生成到推理全流程 MultiProblem 是 Tensor2Tensor人工智能深度学习机器学习预训练PaddleGAN PReNet 图像去雨实战渐进式去雨网络原理、配置解析与训练评估指南PaddleGAN PReNet 图像去雨实战渐进式去雨网络原理、配置解析与训练评估指南 PReNetProgressive Image Deraining人工智能深度学习计算机视觉媒体生成视频处理图像处理上一篇better-monadic-for vs 原生Scala3个关键场景的代码对比与优势分析下一篇手把手教你安装shadPS4在电脑上畅玩PS4游戏的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表