SPADE运行方法
写在前面
SPADE作为目前Label to Image的守门员,非常值得学习,前几天复现了一下他的模型现在来分享一下运行方法。
为什么Pix2PixHD和SPADE都不用RGB作为输入
可以参考这篇博客https://blog.csdn.net/iiiiiiimp/article/details/123459193
其实这是为了把单通道的语义图label进行one-hot编码再给生成器
如何运行SPADE
我这里以512 * 512 大小的图片为例子,label默认为单通道8bit大小。
(1)我偏要用RGB的label图片作为输入
SPADE不能像Pix2PixHD那样使用参数--label_nc 0
直接将RGB送给网络,但是我之前试了一下把--label_nc
的参数设置255然后加上--contain_dontcare_label
是可以运行的。参考了https://github.com/NVlabs/SPADE/issues/137
python train.py --name 名字 --dataset_mode custom --load_size 512 --crop_size 512 --display_winsize 512 --label_nc 255 --contain_dontcare_label --label_dir 路径/train_label --image_dir 路径/train_img --no_instance
(2)只有label作为输入
python train.py --name 名字 --dataset_mode custom --load_size 512 --crop_size 512 --display_winsize 512 --label_nc 类别数 --label_dir 路径/train_label --image_dir 路径/train_img --no_instance
(3)label和intance作为输入
把--no_instance
改为--instance_dir
即可
python train.py --name 名字 --dataset_mode custom --load_size 512 --crop_size 512 --display_winsize 512 --label_nc 类别数 --label_dir 路径/train_label --image_dir 路径/train_img --instance_dir 路径/train_inst
(4)如果输入图片的宽高不相等
例如我这里图片是720 * 576
这先计算720/576 = 1.25,然后把这个1.25作为 --aspect_ratio
的参数
python train.py --name 名字 --dataset_mode custom --preprocess_mode none --load_size 720 --crop_size 720 --display_winsize 720 --aspect_ratio 1.25 --label_nc 类别数 --label_dir 路径/train_label --image_dir 路径/train_img --instance_dir 路径/train_inst
可能遇到的问题
如果训练效果可以,而测试效果如下这种很模糊,就把test.py里面的model.eval()注释掉就行。参考了https://github.com/NVlabs/SPADE/issues/96
(2022/04/28更)如何控制合成风格
如果使用训练时使用了超参--use_vae
,那么测试时使用--use_vae
每次运行生成的图片都会有不同的风格,但如何像论文第一页那种控制风格呢?
运行test.py前把pix2pix_dataset.py中__getitem__函数的
image = Image.open(image_path)
改为
image = Image.open( self.image_paths[0])
其中self.image_paths[0]中的0表示使用使用测试集图片的第0张图片去编码,如果想使用测试集图片的第1张图片去编码,改为1就行了。
(2022/07/30更)--contain_dontcare_label参数
--contain_dontcare_label
表示的是是否包含不关心的类别,citycapes中不关心的类别为第一类,也就是没有标签,默认值为0。
但是SPADE中的不关心类别默认为255。
但是在SPADE的官方代码中,citycapes数据集并没有设置--contain_dontcare_label
,所以是unlabel类型也当成一个类型去处理的。
但是在OASIS的citycapes数据集,这是把-1当作不关心的类别处理的。
写在后面
这是我总结的GAN相关论文的解析。希望本文对大家学习SPADE有所帮助。