目录
目录README.md

| 第三届计图挑战赛

Jittor 手写数字生成赛题

用户随机ID:14178951416663

result:

result.png

简介

本项目包含了第三届计图挑战赛计图 - 手写数字生成赛题的代码实现和结果。

本项目的特点是: 在数字图片数据集 MNIST 上训练 Conditional GAN(Conditional generative adversarial nets)模型,通过输入一个随机向量 z 和额外的辅助信息 y (如类别标签),生成特定数字的图像。因此我们训练了一个将随机噪声和类别标签映射为数字图片的Conditiona1GAN模型,并生成给定用户随机ID 14178951416663 对应的数字图片结果。

result.png

安装

本项目在 1 张 2080 上运行,训练时间约为 6 小时。

运行环境

  • ubuntu 20.04 LTS
  • python >= 3.7
  • jittor >= 1.3.0

预训练模型

预训练模型模型下载地址为https://www.gitlink.org.cn/Ground-Truth/minist/tree/master。


## 训练
# -----------------
        #  训练生成器
        # -----------------

        # 采样随机噪声和数字类别作为生成器输入
        z = jt.array(np.random.normal(0, 1, (batch_size, opt.latent_dim))).float32()
        gen_labels = jt.array(np.random.randint(0, opt.n_classes, batch_size)).float32()

        # 生成一组图片
        gen_imgs = generator(z, gen_labels)
        # 损失函数衡量生成器欺骗判别器的能力,即希望判别器将生成图片分类为valid
        validity = discriminator(gen_imgs, gen_labels)
        g_loss = adversarial_loss(validity, valid)
        g_loss.sync()
        optimizer_G.step(g_loss)

        # ---------------------
        #  训练判别器
        # ---------------------

        validity_real = discriminator(real_imgs, labels)
        d_real_loss = adversarial_loss(validity_real,valid)#"""计算真实类别的损失函数"""

        validity_fake = discriminator(gen_imgs.stop_grad(), gen_labels)
        d_fake_loss = adversarial_loss(validity_fake,fake)#""" 计算虚假类别的损失函数"""

        # 总的判别器损失
        d_loss = (d_real_loss + d_fake_loss) / 2
        d_loss.sync()
        optimizer_D.step(d_loss)

## 推理

将用户随机ID:14178951416663 作为训练好的模型输入看是否生成与随机ID排序一样的手写数字图片.执行以下代码:

        number = "14178951416663"#TODO: 写入比赛页面中指定的数字序列(字符串类型)
        n_row = len(number)
        z = jt.array(np.random.normal(0, 1, (n_row, opt.latent_dim))).float32().stop_grad()
        labels = jt.array(np.array([int(number[num]) for num in range(n_row)])).float32().stop_grad()
        gen_imgs = generator(z,labels)
        
 结果显示:
 
        img_array = gen_imgs.data.transpose((1,2,0,3))[0].reshape((gen_imgs.shape[2], -1))
        min_=img_array.min()
        max_=img_array.max()
        img_array=(img_array-min_)/(max_-min_)*255
        Image.fromarray(np.uint8(img_array)).save("result.png")


## 致谢

此项目基于论文 *A Style-Based Generator Architecture for Generative Adversarial Networks* 实现,部分代码参考了 [jittor-gan](https://github.com/Jittor/gan-jittor)。
关于

ground truth

3.8 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号