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_gan | pix2pix |
--name | 实验名称/模型保存目录 | horse2zebra | facades_pix2pix | |
--netG | 生成器网络结构 | resnet_9blocks | unet_256 | |
| 数据配置 | --dataroot | 数据集路径 | ./datasets/horse2zebra | ./datasets/facades |
--dataset_mode | 数据集类型 | unaligned | aligned | |
--direction | 转换方向(仅pix2pix) | - | BtoA | |
| 推理配置 | --num_test | 测试图像数量 | 50 | 50 |
--preprocess | 图像预处理方式 | scale_width_and_crop | scale_width_and_crop | |
| 输出配置 | --results_dir | 结果保存路径 | ./results/ | ./results/ |
--aspect_ratio | 输出图像宽高比 | 1.0 | 1.0 | |
| 硬件配置 | --gpu_ids | GPU设备ID(-1表示CPU) | 0 | 0 |
4.2 高级参数说明
--eval:启用评估模式(影响BatchNorm和Dropout层行为)--no_dropout:禁用Dropout(CycleGAN默认启用)--model_suffix:指定加载生成器后缀(如_A表示单向生成器)--load_iter:加载特定迭代次数的模型(默认加载最新模型)
5. CycleGAN推理实战
5.1 基础推理流程
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 显存不足问题
解决方法:
- 使用
--model test模式(仅加载单个生成器) - 降低输入图像分辨率:
--preprocess scale_width --load_size 256 - 使用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 测试流程回顾
- 环境配置→2. 模型下载→3. 数据准备→4. 参数设置→5. 执行推理→6. 结果分析
10.2 性能优化建议
- 显存优化:使用
--model test模式,减少加载网络数量 - 速度优化:增大
--batch_size(需更多显存),使用FP16推理 - 质量优化:调整
--netG为resnet_6blocks(速度快)或resnet_9blocks(质量高)
10.3 后续学习方向
- 模型训练调优(学习率调度、损失函数权重)
- 自定义数据集适配(多通道图像、非RGB数据)
- 模型改进(注意力机制集成、高分辨率生成)
收藏本文,随时查阅CycleGAN与pix2pix推理技巧!关注获取更多计算机视觉实战教程。下期预告:《CycleGAN训练调优指南:从损失分析到模型优化》
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



