Pix2PixHD数据处理+运行方法

写在前面

项目需要,研究了一下Pix2PixHD的运行方法,这里对一些个人感觉难以理解的代码进行讲解,如果有写的不对的地方欢迎指正~

数据格式

这里以citycapes数据集为例,参考了这篇博客
语义图像:每个类别一种标签颜色,例如图片中的所有车的像素值都是26。citycapes的语义图像大小为[2048, 1024, 1]。
Pix2PixHD数据处理+运行方法
注意Pix2PixHD并没有直接使用这幅语义图像,而是使用的上面那副。
Pix2PixHD数据处理+运行方法
实例图像:同一类别的不同实例个体用的标签颜色也不一样,例如下面四辆车,用肉眼看是一个颜色,但是用opencv工具显示出来发现像素值还是有差别的,四辆车的像素值分别为26010、26005、26008、26003。这里之所以像素值大小为26010应该是用的16位存的,而不是0~255那种8位来存。
citycapes的实例图像大小为[2048, 1024, 1]。
注意需通过cv2.imread(path, cv2.IMREA_UNCHANGED)才能无损的读取到实例的uint图像数据。
Pix2PixHD数据处理+运行方法

数据处理

one-hot编码:citycapes一共有35类(34个类别+1个背景),作者将语义图片NCHW[1, 1, 2048, 1024]编码成one-hot格式[1, 35, 2048 ,1024],其中每一个通道代表一个类别,这里我们取出第26个通道[1, 1, 2048 ,1024]出来,发现这一个通道全是车子
Pix2PixHD数据处理+运行方法
边缘映射:作者将实例图像[1, 1, 2048 ,1024]转换为边缘图像[[1, 1, 2048 ,1024]],如何转换的论文里面有。
Pix2PixHD数据处理+运行方法
生成器输入:将one-hot编码[1, 35, 2048 ,1024]与边缘映射[1, 1, 2048 ,1024按通道维度拼接变为[1, 36, 2048 ,1024]送入生成器进行训练。

如何运行

如果您只有语义图像
python train.py –name 训练名字 –no_instance –label_nc 0 –resize_or_crop none –dataroot 数据集名字

如果你有语义图像+实例图像
python train.py –name 训练名字 –label_nc 类别数 –resize_or_crop none –dataroot 数据集名字

如果要联合训练(先训练全局生成器,再训练局部增强器)
首先执行:
python train.py –name 训练名字 –label_nc 类别数 –netG global –resize_or_crop none –dataroot 数据集名字
训练完成后,执行:
python train.py –name 训练名字 –label_nc 类别数 –netG local –resize_or_crop none –dataroot 数据集名字 –load_pretrain 训练全局生成器网络保存路径

可视化代码

我把代码放在这里
下面是每个文件的简要说明
get_edges.py:边缘映射,将实例图变为边缘图。Pix2PixHD数据处理+运行方法
get_onehot.py:one-hot编码,把语义图进行one-hot编码,每一通道是一个类别,一个35个类别,所以有35个通道。
Pix2PixHD数据处理+运行方法get_imgvalue.py:鼠标指在哪里现实哪里的像素值,把鼠标移到车子上可以看到车子的像素值大小为26000多。

写在背面

看论文固然重要,但是要更加深入的理解作者作者的思想,阅读和复现代码是少不了的。希望本文对大家学习Pix2PixHD有所帮助。
Pix2PixHD数据处理+运行方法

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月15日
下一篇 2022年3月15日

相关推荐