pytorch-CycleGAN-and-pix2pix测试教程:模型推理与结果可视化

pytorch-CycleGAN-and-pix2pix测试教程:模型推理与结果可视化

【免费下载链接】pytorch-CycleGAN-and-pix2pix junyanz/pytorch-CycleGAN-and-pix2pix: 一个基于 PyTorch 的图像生成模型,包含了 CycleGAN 和 pix2pix 两种模型,适合用于实现图像生成和风格迁移等任务。 【免费下载链接】pytorch-CycleGAN-and-pix2pix 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-CycleGAN-and-pix2pix

1. 测试环境准备

1.1 环境配置要求

  • Python版本:3.8+
  • PyTorch版本:2.4+
  • 必要依赖库torchvision, numpy, Pillow, dominate(HTML结果生成)
  • 硬件要求
    • GPU:至少4GB显存(推荐NVIDIA显卡)
    • CPU:8核以上(推理速度较慢,不推荐)

1.2 项目代码获取

git clone https://gitcode.com/gh_mirrors/py/pytorch-CycleGAN-and-pix2pix
cd pytorch-CycleGAN-and-pix2pix

1.3 依赖安装

# 使用conda创建环境(推荐)
conda env create -f environment.yml
conda activate pytorch-CycleGAN-and-pix2pix

# 或使用pip安装
pip install -r requirements.txt

2. 预训练模型下载

2.1 CycleGAN模型下载

支持16种预训练模型,包括风格迁移、季节转换等经典任务:

# 下载马→斑马转换模型(示例)
bash ./scripts/download_cyclegan_model.sh horse2zebra

# 可用模型列表
echo "支持模型:apple2orange, orange2apple, summer2winter_yosemite, winter2summer_yosemite, horse2zebra, zebra2horse, monet2photo, style_monet, style_cezanne, style_ukiyoe, style_vangogh, sat2map, map2sat, cityscapes_photo2label, cityscapes_label2photo, facades_photo2label, facades_label2photo, iphone2dslr_flower"

2.2 pix2pix模型下载

支持5种对齐图像转换任务:

# 下载标签→建筑立面转换模型(示例)
bash ./scripts/download_pix2pix_model.sh facades_label2photo

# 可用模型列表
echo "支持模型:edges2shoes, sat2map, map2sat, facades_label2photo, day2night"

2.3 模型存储路径

下载的模型会自动保存至:

./checkpoints/${模型名}_pretrained/latest_net_G.pth

例如horse2zebra模型存储于./checkpoints/horse2zebra_pretrained/

3. 测试数据集准备

3.1 标准数据集下载

# CycleGAN数据集(以horse2zebra为例)
bash ./datasets/download_cyclegan_dataset.sh horse2zebra

# pix2pix数据集(以facades为例)
bash ./datasets/download_pix2pix_dataset.sh facades

3.2 自定义数据集结构

3.2.1 CycleGAN(非对齐数据)
datasets/
└── custom_dataset/
    ├── testA/  # 源域图像(如:马的图片)
    │   ├── img1.jpg
    │   ├── img2.jpg
    │   └── ...
    └── testB/  # 目标域图像(如:斑马的图片,可选,用于评估)
        ├── img1.jpg
        └── ...
3.2.2 pix2pix(对齐数据)
datasets/
└── custom_dataset/
    ├── test/
        ├── 0001_A.jpg  # 输入图像
        ├── 0001_B.jpg  # 目标图像(可选,用于评估)
        ├── 0002_A.jpg
        └── ...

4. 命令行参数详解

4.1 核心参数对照表

参数类别参数名说明CycleGAN默认值pix2pix默认值
模型配置--model模型类型cycle_ganpix2pix
--name实验名称/模型保存目录horse2zebrafacades_pix2pix
--netG生成器网络结构resnet_9blocksunet_256
数据配置--dataroot数据集路径./datasets/horse2zebra./datasets/facades
--dataset_mode数据集类型unalignedaligned
--direction转换方向(仅pix2pix)-BtoA
推理配置--num_test测试图像数量5050
--preprocess图像预处理方式scale_width_and_cropscale_width_and_crop
输出配置--results_dir结果保存路径./results/./results/
--aspect_ratio输出图像宽高比1.01.0
硬件配置--gpu_idsGPU设备ID(-1表示CPU)00

4.2 高级参数说明

  • --eval:启用评估模式(影响BatchNorm和Dropout层行为)
  • --no_dropout:禁用Dropout(CycleGAN默认启用)
  • --model_suffix:指定加载生成器后缀(如_A表示单向生成器)
  • --load_iter:加载特定迭代次数的模型(默认加载最新模型)

5. CycleGAN推理实战

5.1 基础推理流程

mermaid

5.2 单方向推理命令(推荐)

# 马→斑马转换(仅加载单向生成器,节省显存)
python test.py \
    --dataroot ./datasets/horse2zebra/testA \
    --name horse2zebra_pretrained \
    --model test \
    --no_dropout \
    --num_test 10 \
    --preprocess none  # 不进行裁剪,保留原图尺寸

5.3 双向推理命令(完整CycleGAN)

# 同时进行A→B和B→A转换(需要加载两个生成器)
python test.py \
    --dataroot ./datasets/horse2zebra \
    --name horse2zebra_pretrained \
    --model cycle_gan \
    --phase test \
    --no_dropout \
    --num_test 20

5.4 脚本化推理

项目提供预定义测试脚本,位于./scripts/目录:

# 使用内置脚本测试CycleGAN
bash ./scripts/test_cyclegan.sh

6. pix2pix推理实战

6.1 推理命令示例

# 建筑标签→照片转换(B→A方向)
python test.py \
    --dataroot ./datasets/facades \
    --name facades_pix2pix \
    --model pix2pix \
    --netG unet_256 \
    --direction BtoA \
    --dataset_mode aligned \
    --norm batch \
    --num_test 15

6.2 脚本化推理

# 使用内置脚本测试pix2pix
bash ./scripts/test_pix2pix.sh

6.3 自定义图像推理

针对单张图像推理,需将图像放入单独目录:

# 创建测试目录
mkdir -p ./datasets/single_image/testA

# 复制自定义图像到测试目录
cp /path/to/your/image.jpg ./datasets/single_image/testA/

# 执行推理
python test.py \
    --dataroot ./datasets/single_image \
    --name horse2zebra_pretrained \
    --model test \
    --no_dropout \
    --num_test 1 \
    --preprocess none

7. 结果可视化与分析

7.1 结果文件结构

推理完成后,结果保存在./results/${name}/${phase}_${epoch}/目录,典型结构:

results/
└── horse2zebra_pretrained/
    ├── test_latest/
        ├── images/          # 保存所有生成图像(PNG格式)
        │   ├── 0001_fake.png
        │   ├── 0001_real.png
        │   └── ...
        └── index.html       # 结果浏览HTML页面

7.2 HTML结果查看

# 使用浏览器打开结果页面
open ./results/horse2zebra_pretrained/test_latest/index.html

7.3 可视化结果解析

HTML页面包含以下内容:

  • 原始输入图像(Real)
  • 生成图像(Fake)
  • 循环一致性验证图像(Cycle,仅CycleGAN)
  • 身份验证图像(Identity,仅CycleGAN)

7.4 图像保存与导出

单个图像保存路径:

# 代码片段:util/visualizer.py
def save_image(image_numpy, image_path, aspect_ratio=1.0):
    """将numpy数组保存为图像文件"""
    image_pil = Image.fromarray(image_numpy)
    if aspect_ratio != 1.0:
        image_pil = image_pil.resize(
            (int(image_pil.size[0] * aspect_ratio), image_pil.size[1]),
            Image.BICUBIC
        )
    image_pil.save(image_path)

8. 常见问题解决

8.1 模型加载错误

错误表现RuntimeError: Error(s) in loading state_dict
解决方法

# 确保测试参数与训练参数一致
python test.py \
    --name horse2zebra_pretrained \
    --model test \
    --netG resnet_9blocks \  # 显式指定生成器结构
    --norm instance \        # 显式指定归一化方式
    --no_dropout             # 禁用Dropout(与训练保持一致)

8.2 显存不足问题

解决方法

  1. 使用--model test模式(仅加载单个生成器)
  2. 降低输入图像分辨率:--preprocess scale_width --load_size 256
  3. 使用CPU推理:--gpu_ids -1(速度较慢)

8.3 结果图像扭曲

原因分析:图像预处理方式不当
解决方法

  • 保持原图比例:--preprocess scale_width
  • 禁用裁剪:--preprocess none
  • 调整宽高比:--aspect_ratio 1.5(根据实际图像比例调整)

8.4 HTML结果无法显示

原因:缺少dominate
解决方法

pip install dominate

9. 高级应用:批量推理与集成

9.1 批量处理脚本

创建batch_test.sh实现多模型批量推理:

#!/bin/bash
# 支持的模型列表
MODELS=("horse2zebra" "summer2winter_yosemite" "monet2photo")

# 循环处理每个模型
for model in "${MODELS[@]}"; do
    echo "Processing $model..."
    bash ./scripts/download_cyclegan_model.sh $model
    python test.py \
        --dataroot ./datasets/$model/testA \
        --name ${model}_pretrained \
        --model test \
        --no_dropout \
        --num_test 100 \
        --results_dir ./results/batch_${model}
done

9.2 Python API调用示例

from options.test_options import TestOptions
from data import create_dataset
from models import create_model
import util.util as util

# 1. 设置参数
opt = TestOptions().parse()
opt.dataroot = "./datasets/horse2zebra/testA"
opt.name = "horse2zebra_pretrained"
opt.model = "test"
opt.no_dropout = True

# 2. 创建数据集和模型
dataset = create_dataset(opt)
model = create_model(opt)
model.setup(opt)
model.eval()

# 3. 推理单张图像
for i, data in enumerate(dataset):
    if i >= 1:  # 仅处理1张图像
        break
    model.set_input(data)
    model.test()
    visuals = model.get_current_visuals()
    
    # 4. 保存结果
    for label, im_data in visuals.items():
        im = util.tensor2im(im_data)
        util.save_image(im, f"output_{label}.png")

10. 总结与扩展

10.1 测试流程回顾

  1. 环境配置→2. 模型下载→3. 数据准备→4. 参数设置→5. 执行推理→6. 结果分析

10.2 性能优化建议

  • 显存优化:使用--model test模式,减少加载网络数量
  • 速度优化:增大--batch_size(需更多显存),使用FP16推理
  • 质量优化:调整--netGresnet_6blocks(速度快)或resnet_9blocks(质量高)

10.3 后续学习方向

  • 模型训练调优(学习率调度、损失函数权重)
  • 自定义数据集适配(多通道图像、非RGB数据)
  • 模型改进(注意力机制集成、高分辨率生成)

收藏本文,随时查阅CycleGAN与pix2pix推理技巧!关注获取更多计算机视觉实战教程。下期预告:《CycleGAN训练调优指南:从损失分析到模型优化》

【免费下载链接】pytorch-CycleGAN-and-pix2pix junyanz/pytorch-CycleGAN-and-pix2pix: 一个基于 PyTorch 的图像生成模型,包含了 CycleGAN 和 pix2pix 两种模型,适合用于实现图像生成和风格迁移等任务。 【免费下载链接】pytorch-CycleGAN-and-pix2pix 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-CycleGAN-and-pix2pix

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值