update CGAN.py
Jittor 是一个开源的深度学习框架,可以运行在 CPU 和 GPU 上,并且支持多种硬件加速。
但Jittor的安装比较复杂,而且很容易出现问题。安装过程相当坎坷。华为云平台限制用户权限,不允许修改GCC等编译器版本,导致Jittor编译难以通过,因此选择使用本地Windows环境安装Jittor。而本地使用的是4070显卡,和Jittor版本契合度不好,低于3.7版本不支持40系显卡,而高于3.9版本又会出现各种Bug编译不通过。同时,如果不新建环境也会导致奇怪的编译失败······
因此,最终选择了在本地Windows环境下安装Jittor 1.3.7.5版本。
conda create -n jittor python=3.8 conda activate jittor pip install pywin32 pip install jittor==1.3.7.5 python -m jittor.test.test_core # 对于test_example和test_cudnn_op,我自己测试仍然不通过,但不影响使用。
本赛道将在数字图片数据集 MNIST 上训练 Conditional GAN(Conditional generative adversarial nets)模型,通过输入一个随机向量 z 和额外的辅助信息 y (如类别标签),生成特定数字的图像。
MNIST 数据集是一个手写数字图片数据集,共有 60,000 张训练图片和 10,000 张测试图片。每张图片大小为 28x28,共有 10 个类别,分别对应 0-9。
Conditional GAN 的模型结构如下图所示:
Conditional GAN 由两个网络组成:生成器(Generator)和判别器(Discriminator)。生成器接收随机向量 z 和额外的辅助信息 y,生成特定数字的图像。判别器接收一张图像和额外的辅助信息 y,判断这张图像是否是特定数字的图像。
生成器的输入是随机向量 z 和额外的辅助信息 y,输出是特定数字的图像。生成器通过解码器(Decoder)将 z 和 y 映射到图像空间,再通过卷积层和激活函数生成图像。
判别器的输入是一张图像和额外的辅助信息 y,输出是判别结果。判别器通过编码器(Encoder)将图像映射到特征空间,再通过全连接层和激活函数生成判别结果。
Geneator 结构:
Generator( label_emb: Embedding(None, None, None) model: Sequential( 0: Linear(110, 128, float32[128,], None) 1: leaky_relu(0.2) 2: Linear(128, 256, float32[256,], None) 3: BatchNorm(256, 0.8, momentum=0.1, affine=True, is_train=True, sync=True) 4: leaky_relu(0.2) 5: Linear(256, 512, float32[512,], None) 6: BatchNorm(512, 0.8, momentum=0.1, affine=True, is_train=True, sync=True) 7: leaky_relu(0.2) 8: Linear(512, 1024, float32[1024,], None) 9: BatchNorm(1024, 0.8, momentum=0.1, affine=True, is_train=True, sync=True) 10: leaky_relu(0.2) 11: Linear(1024, 1024, float32[1024,], None) 12: Tanh() ) )
Discriminator 结构:
Discriminator( label_embedding: Embedding(None, None, None) model: Sequential( 0: Linear(1034, 512, float32[512,], None) 1: leaky_relu(0.2) 2: Linear(512, 512, float32[512,], None) 3: Dropout(0.4, is_train=False) 4: leaky_relu(0.2) 5: Linear(512, 512, float32[512,], None) 6: Dropout(0.4, is_train=False) 7: leaky_relu(0.2) ) )
通过训练中间图片及训练曲线可以发现,生成器与判别器的损失函数的平衡且此起彼伏。训练的图像质量逐渐提高,噪点逐渐减少,图像越来越清晰且接近原始分布。
本次实验的主要内容是实现Conditional GAN模型,并训练生成器生成特定数字的图像。通过观察生成器的生成结果,可以发现生成器生成的图像具有较高的真实性,并且能够生成具有独特风格的图像。
A Jittor implementation of Conditional GAN (CGAN)
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
2025年计算机图形学课程小作业实验报告
章壹程
https://www.gitlink.org.cn/yuge/CGAN
环境配置
Jittor 是一个开源的深度学习框架,可以运行在 CPU 和 GPU 上,并且支持多种硬件加速。
但Jittor的安装比较复杂,而且很容易出现问题。安装过程相当坎坷。华为云平台限制用户权限,不允许修改GCC等编译器版本,导致Jittor编译难以通过,因此选择使用本地Windows环境安装Jittor。而本地使用的是4070显卡,和Jittor版本契合度不好,低于3.7版本不支持40系显卡,而高于3.9版本又会出现各种Bug编译不通过。同时,如果不新建环境也会导致奇怪的编译失败······
因此,最终选择了在本地Windows环境下安装Jittor 1.3.7.5版本。
赛题介绍
本赛道将在数字图片数据集 MNIST 上训练 Conditional GAN(Conditional generative adversarial nets)模型,通过输入一个随机向量 z 和额外的辅助信息 y (如类别标签),生成特定数字的图像。
数据集
MNIST 数据集是一个手写数字图片数据集,共有 60,000 张训练图片和 10,000 张测试图片。每张图片大小为 28x28,共有 10 个类别,分别对应 0-9。
模型结构
Conditional GAN 的模型结构如下图所示:
Conditional GAN 由两个网络组成:生成器(Generator)和判别器(Discriminator)。生成器接收随机向量 z 和额外的辅助信息 y,生成特定数字的图像。判别器接收一张图像和额外的辅助信息 y,判断这张图像是否是特定数字的图像。
生成器的输入是随机向量 z 和额外的辅助信息 y,输出是特定数字的图像。生成器通过解码器(Decoder)将 z 和 y 映射到图像空间,再通过卷积层和激活函数生成图像。
判别器的输入是一张图像和额外的辅助信息 y,输出是判别结果。判别器通过编码器(Encoder)将图像映射到特征空间,再通过全连接层和激活函数生成判别结果。
Geneator 结构:
Discriminator 结构:
训练过程
超参数设置
LOSS曲线
生成结果
中间生成结果
总结
通过训练中间图片及训练曲线可以发现,生成器与判别器的损失函数的平衡且此起彼伏。训练的图像质量逐渐提高,噪点逐渐减少,图像越来越清晰且接近原始分布。
本次实验的主要内容是实现Conditional GAN模型,并训练生成器生成特定数字的图像。通过观察生成器的生成结果,可以发现生成器生成的图像具有较高的真实性,并且能够生成具有独特风格的图像。