使用pytorch-CycleGAN-and-pix2pix训练的模型测试时出现Missing key错误
问题原因
你遇到的是PyTorch模型权重与实例化网络结构不匹配的报错,核心原因是测试时的网络结构参数和训练时不一致,导致权重的键名对应不上,具体错误点如下:
- 归一化配置不匹配:训练时使用
norm: batch,但测试时最终生效的配置为norm: instance,BatchNorm层和InstanceNorm层的位置、索引不同,直接导致权重键的序号偏移,就是你看到的Missing key和Unexpected key报错的来源。 - 模型类型参数冲突:训练使用的是
model: cycle_gan,你测试启动命令错误添加了--model pix2pix参数,虽然最终生效配置是cycle_gan,但参数冲突会导致网络结构初始化异常。 - 配置参数未生效:你在测试命令中设置的
--direction BtoA、--load_size 286、--norm batch都没有在最终运行配置中生效,说明参数传递存在问题。
解决方案
测试时所有和网络结构相关的参数必须和训练配置完全一致,将测试启动命令替换为以下内容即可:
python3 test.py --dataroot ./datasets/datasets/boundedwalls_50_0.1 --name cycbw50 --model cycle_gan --netG resnet_9blocks --direction AtoB --dataset_mode aligned --norm batch --load_size 286 --no_dropout
如果需要实现B到A方向的推理,只需将--direction AtoB修改为--direction BtoA即可,运行后先检查输出的配置列表,确认norm、model、direction三个参数和预期一致再运行。
如果需要单张图像推理,在上述命令基础上添加--num_test 1参数,同时将dataroot指向仅存放单张待推理图像的文件夹即可。
如果临时需要跳过权重键不匹配的校验,可以在net.load_state_dict(state_dict)代码处修改为net.load_state_dict(state_dict, strict=False),该方法仅作为临时验证方案,不建议长期使用。
内容的提问来源于stack exchange,提问作者Thijser
相关产品推荐
相关产品推荐

