HiDT 配置文件完全解读:daytime.yaml 与 wikiart.yaml 参数逐行拆解
【免费下载链接】HiDTOfficial repository for the paper "High-Resolution Daytime Translation Without Domain Labels" (CVPR2020, Oral)项目地址: https://gitcode.com/gh_mirrors/hi/HiDT
HiDT(High-Resolution Daytime Translation Without Domain Labels)是 CVPR 2020 Oral 论文的官方开源实现,它能在一张照片与一张参考风格图之间完成高分辨率白天风格迁移——比如把阴天变成晴天、把黄昏变成日落,甚至把写实照片转换成印象派油画。而这一切的"配方",都藏在项目根目录的 configs/daytime.yaml 与 configs/wikiart.yaml 两个 HiDT 配置文件里。本文将逐行拆解这两个文件中的每一个参数,讲清楚它们如何控制网络结构与推理流程,帮你快速上手并学会按需修改。
HiDT 项目概览:配置文件究竟管什么?
HiDT 的核心思路是把一张图分解为**内容(Content)与风格(Style)**两个独立表征:内容编码器负责"这张图里有什么",风格编码器负责"这张图看起来像什么",解码器再用 AdaIN 机制把它们重新合成。配置文件就是描述这三段管线如何搭建的"施工图",hidt/networks/generators/gen_content_style_unet.py 中的GeneratorContentStyleUnet会按照配置里的models.gen部分动态构建整个网络。
上图展示了 HiDT 的核心网络结构:内容编码器逐层下采样提取特征,风格编码器生成风格向量 s,解码器通过 AdaIN 层与跳连(skip connection)将二者融合,最终还原出高分辨率图像。
daytime.yaml 参数详解:逐行拆解
先来看 configs/daytime.yaml,这份配置面向白天场景翻译(白天风格之间的天气/时段转换)。
trainer 与数据类型声明
trainer: TrainerBasetrainer指定了训练与推理的组织类,对应 hidt/trainers/trainer_base.py 中的TrainerBase。它会读取配置并调用getattr(networks, architecture)构建生成器模型。
data_types: images: # 风格输入:普通 RGB 图像 color_space: rgb dim: 3 type: style segmentation_maps: # 内容输入:语义分割图(白天任务的独有配置) color_space: rgb dim: 3 type: content这里用 YAML 锚点&type_images/&type_segmentation_maps声明了两种数据类型:images作为风格来源,segmentation_maps(语义分割图)作为内容来源。也就是说,daytime 任务的内容信息来自分割图,这让模型在换天气时能牢牢锁定场景结构。
生成器三大模块:content_encoder、style_encoder、decoder
models: gen: architecture: GeneratorContentStyleUnet initialization: kaiming # Kaiming 初始化,利于深层网络收敛architecture指定生成器类型为GeneratorContentStyleUnet,即带跳连的 UNet 版本,实现在 gen_content_style_unet.py。
内容编码器(对应源码 content_encoders.py):
content_encoder: architecture: ContentEncoderUnet num_downsamples: 2 # 下采样 2 次 num_blocks: 4 # 末尾 4 个残差块 dim: 48 # 基础通道数 48 norm: in # Instance Normalization activ: relu pad_type: reflect # 反射填充,减少边缘伪影 skip_dim: 5 # 跳连保留前 5 个通道风格编码器(对应源码 style_encoders.py):
style_encoder: architecture: StyleEncoder num_downsamples: 4 dim: 48 output_dim: 3 # 风格向量维度:daytime 为 3 norm: none # 风格编码不使用归一化 activ: lreluoutput_dim: 3是这份配置的关键参数——它决定风格向量 s 的维度。图片经全局平均池化后压缩成一个 3 维向量,作为"这张图的风格指纹"。
解码器(对应源码 decoders.py):
decoder: architecture: DecoderUnet res_norm: adain # 残差块用 AdaIN 归一化(风格注入点) up_norm: ln # 上采样层用 LayerNorm num_upsamples: 2 # 上采样 2 次(与内容编码器下采样对称) num_blocks: 5 dim: 192 num_res_conv: 0 skip_dim: 5 adain_net: # 风格→AdaIN 参数的映射网络 architecture: MLP input_dim: 3 # 与 style_encoder.output_dim 必须一致! dim: 64 num_blocks: 3adain_net是一个 MLP,把风格向量 s 映射成解码器中所有 AdaIN 层的均值/方差参数(计算方式见 norm.py 的AdaptiveInstanceNorm2d)。注意:adain_net.input_dim必须等于style_encoder.output_dim,否则模型无法加载。
test_dataset:推理预处理参数
test_dataset: transform: preprocess: scale_shorter_side_and_crop # 先按短边缩放,再随机裁剪 load_size: 256 # 短边缩放到 256 crop_image_height: 256 # 裁剪高度 crop_image_width: 256 # 裁剪宽度 no_flip: False # 是否关闭水平翻转 dequantization: True # 反量化,避免 0/255 极值这些参数控制输入图片如何被预处理。注意:实际推理时 style_transformer.py 会覆写部分参数——把preprocess改为scale_load_shorter_side,并把load_size设为inference_size(默认 512),实现全分辨率推理。
wikiart.yaml 解读:艺术风格迁移的差异化配置
configs/wikiart.yaml 面向WikiArt 艺术风格(油画、水彩等绘画风格)的迁移任务,结构与 daytime.yaml 几乎一致,但有三个关键差异:
差异一:没有语义分割图
data_types: images: color_space: rgb dim: 3 type: stylewikiart 配置只声明了images一种数据类型,内容与风格都直接来自图像本身(内容由内容编码器从图像中提取),不依赖分割图。
差异二:风格向量维度从 3 变成 12
style_encoder: output_dim: 12 # 艺术风格更复杂,需要 12 维风格向量 adain_net: input_dim: 12 # 与 output_dim 保持同步绘画风格的差异远比天气差异丰富,因此把风格向量维度提升到 12,以承载更复杂的色彩与笔触信息。
差异三:解码器输出不再包含分割图,只输出图像(daytime 配置的output_data同时包含 images 和 segmentation_maps 两项)。
两份配置文件关键差异速查表
| 配置项 | daytime.yaml | wikiart.yaml | 作用说明 |
|---|---|---|---|
| 内容输入 | images + segmentation_maps | 仅 images | 内容表征来源 |
| style_encoder.output_dim | 3 | 12 | 风格向量维度 |
| adain_net.input_dim | 3 | 12 | 风格映射网络输入维度 |
| decoder 输出 | images + 分割图 | 仅 images | 输出分支 |
| 其他网络参数 | 相同 | 相同 | 结构共用 |
可以看到,两份配置的网络骨架完全一致,差异集中在"内容来源"和"风格向量维度"两处——这正体现了 HiDT 配置设计的精妙:换任务只需改数据声明和维度,无需动一行代码。
如何用配置文件跑通一次推理
克隆仓库后(git clone https://gitcode.com/gh_mirrors/hi/HiDT),配合 trained_models/generator/daytime.pt 或 trained_models/generator/wikiart.pt 预训练权重,参考 README.md 中的命令即可开始推理,内容图与风格图可直接使用 images/daytime/ 和 images/wikiart/ 目录下的示例素材。
上图为白天风格插值结果:从左到右从阴天雾霭平滑过渡到晴朗蓝天,同一场景在两种天气风格间连续变化,验证了配置中风格向量的表达能力。
上图展示了黄昏到日落的艺术风格插值,色调从暗沉的蓝灰平滑过渡到温暖的金橙,正是 wikiart 风格迁移能力的直观体现。
修改配置的小技巧与常见坑
- 想换风格任务?核心是调整
style_encoder.output_dim与adain_net.input_dim,二者必须相等,否则加载权重会报维度不匹配。 - 内容来源怎么选?有语义分割图标注时(如白天场景)用分割图当 content;没有标注时(如艺术画)删掉
segmentation_maps声明,让模型从图像自提内容。 - 推理分辨率怎么调?不要改
test_dataset里的 256,改StyleTransformer的inference_size参数(默认 512)即可获得更高分辨率输出;若显存不足,配合 trained_models/enhancer/enhancer.pth 超分增强器效果更佳。 - 注意 YAML 锚点继承:
<<: *type_images是 YAML 合并键语法,改动data_types会波及所有引用它的模块,改之前先确认影响范围。
掌握了这两份 HiDT 配置文件,你就等于拿到了模型调优的"总钥匙"——无论是换数据集、调风格强度,还是改输出分辨率,都能在参数层快速完成,让 HiDT 真正为你所用。快去动手试试吧!🚀
【免费下载链接】HiDTOfficial repository for the paper "High-Resolution Daytime Translation Without Domain Labels" (CVPR2020, Oral)项目地址: https://gitcode.com/gh_mirrors/hi/HiDT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考