Pix2PixHD数据处理+运行方法

Pix2PixHD数据处理+运行方法

  • 写在前面
    • 数据格式
    • 数据处理
    • 如何运行
    • 可视化代码
  • 写在后面

写在前面

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

数据格式

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

数据处理

one-hot编码:citycapes一共有35类(34个类别+1个背景),作者将语义图片NCHW[1, 1, 2048, 1024]编码成one-hot格式[1, 35, 2048 ,1024],其中每一个通道代表一个类别,这里我们取出第26个通道[1, 1, 2048 ,1024]出来,发现这一个通道全是车子
Pix2PixHD数据处理+运行方法_第4张图片
边缘映射:作者将实例图像[1, 1, 2048 ,1024]转换为边缘图像[[1, 1, 2048 ,1024]],如何转换的论文里面有。
Pix2PixHD数据处理+运行方法_第5张图片
生成器输入:将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数据处理+运行方法_第6张图片
get_onehot.py:one-hot编码,把语义图进行one-hot编码,每一通道是一个类别,一个35个类别,所以有35个通道。
Pix2PixHD数据处理+运行方法_第7张图片get_imgvalue.py:鼠标指在哪里现实哪里的像素值,把鼠标移到车子上可以看到车子的像素值大小为26000多。

写在后面

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

你可能感兴趣的:(生成对抗网络,opencv,计算机视觉,python,深度学习,生成对抗网络)