# Utopia-GAN **Repository Path**: lixiangdude/utopia-gan ## Basic Information - **Project Name**: Utopia-GAN - **Description**: 及格就是一切,一切为了及格 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-22 - **Last Updated**: 2023-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 需要考虑 1. 基础网络要了解:西瓜书神经网络部分,人工智能现代方法神经网络部分 2. 读前沿文献:学习解决问题的思路,如何验证等;读文献可以学习解决问题的整个过程;数据预处理,模型评估;了解业界解决图像生成的主流方法 3. 基本框架:是不是用paddle好一些,机器学习课要用,一举两得 4. 拉上老师单独开小会 5. 图像生成也要分方向:娱乐、工业等等 6. 找到数据集 7. 代码实现 8. 图像生成对我们目前的水平来说难度有些高,需要额外花费精力 ## 报告涉及到的方面 1. 背景和意义 2. 现状 3. 要达到的目标 4. 应用方向,性能指标(比如准确率) 5. 技术选型 6. 实验过程和改进思路 7. 模型效果 8. 心得 9. 引用文献 ## 第一周 1. 介绍一下自己和擅长的方向,比如写代码、写报告、做PPT等 * 李想:写代码,找资源,做计划 * 高宝宇:写代码,PPT,报告 * 李强:PPT,报告 * 李冬冬:读文献,写代码 * 郑芳芳:读文献 * 狄虎:读文献,写代码 2. 阅读哪些文献 1. Generative Adversarial Nets;**(必读)** 2. MirrorGAN: Learning Text-to-image Generation by Redescription; 3. StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks; 4. StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks; 5. Generative Adversarial Text to Image Synthesis; 6. Controllable Text-to-Image Generation; 7. DM-GAN: Dynamic Memory Generative Adversarial Networks for Text-to-Image Synthesis; 3. 使用哪个框架 1. **Pytorch:API简洁,易于使用** 2. ~~PaddlePaddle:中文文档,样例丰富~~ 3. ~~TensorFlow:低级API,较难学习~~ 4. ~~Keras:基于TensorFlow提供高级API~~ 5. ~~Caffe&Caffe2:性能强大,难以上手~~ 4. 图像生成的方向:最好达到工业级别的水平 1. 具体的场景生成,包括布景,天气之类的细节条件 2. 以用户为主角画漫画,要有连续的故事情节 3. 聊天的时候,通过双方的文字生成表情包 4. AI辅助创作 5. 使用哪些数据集 1. [CUB鸟类数据集](https://www.vision.caltech.edu/datasets/cub_200_2011/) 2. [Oxford-102 Flowers](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/) 3. [MS COCO Dataset: Using it in Your Computer Vision Projects (datagen.tech)](https://datagen.tech/guides/image-datasets/ms-coco-dataset-using-it-in-your-computer-vision-projects/) 6. 参考哪种代码实现 1. [ControlGAN](https://github.com/mrlibw/ControlGAN):基于Pytorch实现 2. [StackGAN](https://github.com/hanzhanggit/StackGAN):基于TensorFlow和Pytorch的实现都有 7. 模型: 1. Guided Language to Image Diffusion for Generation and Editing 2. DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 8. 会议纪要 1. 每个人读GAN论文 2. 李冬冬提供GAN的文献综述,帮助其他人加深理解 3. 代码实现难度不低,可以考虑直接修改已有的实现,先去熟悉一下Pytorch的API ## 第二周 1. 要咨询老师的问题 1. 论文的选择 2. GAN方向推荐阅读的论文 3. 在所有人对AI都是零基础的情况下,建议的实现程度 2. GAN论文阅读进度 3. 分配每人精读论文的任务 1. 郑芳芳:Generative Adversarial Text to Image Synthesis 2. 李强:StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks ​ StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks 3. 李想:MirrorGAN: Learning Text-to-image Generation by Redescription 4. 李冬冬:Controllable Text-to-Image Generation 5. 高宝宇:DM-GAN: Dynamic Memory Generative Adversarial Networks for Text-to-Image Synthesis 6. 狄虎: SD-GAN:Semantics Disentangling for Text-to-Image Generation 4. 每人具体分工 1. 都要熟悉pytorch的使用 2. 每人认领一篇论文精读 5. 还有六周的时间,建立里程碑,确定每周的目标 1. Pytorch熟悉完毕 2. 论文精读完毕,描述每篇文献实现的功能,实现原始的GAN模型 3. 每个人把DMGAN模型跑起来,大致知道模块功能 4. 完成第一版代码实现(随机生成)和报告初稿,当周会议探讨优化点,当周会议确定往哪个方向优化 5. 完成第二版代码实现(单一分类样本集,输入文字生成),当周会议探讨使用MS COCO的可能性 6. 完成第三版代码实现(综合分类样本集,输入文字生成),项目演示 6. 会议纪要 1. 阅读图像生成领域的综述 2. 代码复现,使用数据集进行训练,查看结果 3. 希望达到什么指标,制定检验模型有效性的性能指标,可以先用学术界已经给定的指标 4. 报告中主要讲述做的改进,采取的独到的方法 5. 讲述的时候要以目标、思路、实现方式、实验验证、性能效果的顺序 6. 分工: 1. 拆分成几个独立性较强的模块,每人负责一个模块 2. 可以分头实现不同方案,横向对比 7. 指标的评价: 1. 看其他人论文里采用什么指标 2. 根据业务需求的实现效果来评判 3. 通过图像识别模型来识别生成的图片 ## 第三周(10.29 ~ 10.30) 1. 论文阅读进度 1. 郑芳芳:刚开始 2. 李强:StackGAN读完,在消化 3. 李想:50% 4. 李冬冬:DCGAN读完 5. 高宝宇:刚开始 6. 狄虎: 50% 2. 下周目标:读完论文,熟悉Pytorch,实现原始的GAN模型 3. 分工 1. 李冬冬,狄虎:实现GAN,手写数字生成,写一下简短的报告 2. 其他人:论文读完,掌握pytorch基本操作,可以直接看[DCGAN Tutorial — PyTorch Tutorials 1.13.0+cu117 documentation](https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html)用到的API 3. 李想,高宝宇,郑芳芳,李强:找评价指标 4. 配环境 ## 第四周(11.05 ~ 11.06) 1. 进度 * 李想:MirroGAN读完,差综述,周日补上。Inception Score评价标准初步运行起来,后续深入了解一下,还有R-Precision * 郑芳芳:30% * 李强:StackGAN++刚开始,pytorch环境搭建 * 李冬冬:已经实现DC-GAN手写数字生成,Fashion-MNIST,人脸 * 高宝宇:DMGAN读完,差综述 * 狄虎:已经实现GAN手写数字生成 2. 下周目标: 1. ~~每个人把DMGAN模型跑起来,大致知道模块功能~~ 2. 每个人决定自己要了解哪些方向 3. 会议纪要: 1. 图像质量提升,文本到图像的过程,性能指标的测试 2. 先把DMGAN模型跑起来 ## 第五周(11.12 ~ 11.13) 1. 进度: * 决定用哪个实现:RatGAN * 决定使用数据集:CUB鸟类数据集 2. 下周目标: * 实现模型的调用,输入文本生成图片 * R-precision评价指标,评价语义一致性 * PPT开始写 * 有时间的话看看代码 * 其他几种模型也跑一下,对比效果 * 分工: * 李冬冬:跑模型,实验报告 * 李想:R-precision评价指标,评价语义一致性 * 狄虎:实现模型的调用,输入文本生成图片 * 高宝宇:收集其他模型的结果,用于作对比 * 李强:待定 * 郑芳芳:待定 ## 第六周(11.19 ~ 11.20) 1. 进度 1. 李想:Inception Score,FID评价指标 2. 李冬冬:模型训练完毕,实验报告数据总结出来了 3. 狄虎:尝试工程化 4. 高宝宇:其他模型代码和论文:https://developer.aliyun.com/article/1000752 5. 李强:看代码原理,用冬哥模型跑了一下看看效果 6. 郑芳芳:看论文 2. ppt提纲 1. 选题和分工 2. T2I任务的现状分析,GAN,Conditional GAN,相关工作 3. 实现方法,介绍模型,简单写一下原理,参数调整,优化 4. 效果介绍,图片和评分 5. 总结分析,展望,扩散模型 3. 下周目标 1. 狄虎:文本描述转pickle文件的方式,工程化,公式第三部分 2. 李想:公式第二部分 3. 李冬冬:公式第一部分 4. 郑芳芳:公式第二部分 5. 李强:公式第三部分 6. 高宝宇:公式第一部分 ## 第七周(11.26 ~ 11.27) 1. 进度 1. 李想:公式第二部分 ![image-20221126233342409](/Users/lixiang/Library/Application Support/typora-user-images/image-20221126233342409.png) * 作用:用于生成器,用相同形状的标准上下文向量表达不同层的输出,以实现对不同层的统一控制。然后用RNN连接上下文向量,以发现长期依赖关系。通过RNN中的skip connection,fusion blocks不仅在相邻层之间保持一致,而且还降低了训练难度。 * 原理: $$ Affine(c|h_t) = \gamma \cdot c + \beta \\ \gamma = MLP_1(h_t) , \beta = MLP_2(h_t) $$ 结合隐藏状态$h_t$对图像特征c(通过标准正态分布随机取得)进行仿射变换,其中$\gamma$和$\beta$是通过RAT block中定义的两个多层感知机(即全连接前馈神经网络)来进行预测。 RNN用于构建RAT block内的时间结构,以便在全局基础上分配文本信息,RAT-GAN中使用的是RNN的一个变体:LSTM(长短期记忆)。一个RAT block内的整体流程如下: $$ {\usepackage{verbatim} z \sim N(0,1)\\ h_0 = MLP_3(z), c_0 = MLP_4(z)\\ \begin{equation} \left( \begin{array}{lr} i_t\\ f_t\\ o_t\\ u_t \end{array} \right) = \left( \begin{array}{lr} \sigma\\ \sigma\\ \sigma\\ tanh \end{array} \right) \left( T \left( \begin{array}{lr} s\\ h_{t-1} \end{array} \right) \right) \end{equation}\\ c_t = f_t \odot c_{t-1} + i_t \odot u_t,\\ h_t = o_t \odot tanh(c_t),\\ \gamma_t, \beta_t = MLP_1^t(h_t), MLP_2^t(h_t) $$ * 效果:消融实验表明如果不采用RAT的话性能指标会显著降低,换句话说,RAT显著提升了模型的性能 ![image-20221126232339284](/Users/lixiang/Library/Application Support/typora-user-images/image-20221126232339284.png) 2. 李冬冬: 3. 狄虎: 4. 高宝宇:公式第一部分 1. ![gongshi3-1-1](readmeImage/gongshi3-1-1.png) * 解释:s代表句子特征,f代表图片特征。 2. ![gongshi3-1-2](readmeImage/gongshi3-1-2.png) * 解释:第i个单词,对生成图像的第j个区域的重要程度,该值越大代表该文字特征越重要。 3. ![gongshi3-1-3](readmeImage/gongshi3-1-3.png) * 解释:取对数将乘法换成加法,方便计算,防止下溢。 5. 李强:公式第三部分 ![](readmeImage/ratgan.png) 为了提高合成图像和文本描述之间的语义一致性,作者将空间注意纳入识别器中。文本描述意识到匹配的图像区域,监督生成器合成更多相关的图像内容。如上图 (b)所示,使用几个下采样块将图像编码为图像特征映射P。结合图像特征图P和句子向量s中的信息,空间注意生成一个注意图α,抑制不相关区域的句子向量。这个注意模型的精确表述是: $$ x_w,_h = MLP(P_w,_h,s) $$ $$ \alpha_w,_h = \frac{\frac{1}{1+e^{-x_w,_h}}}{\sum_{w=1,h=1}^{W,H}\frac{1}{1+e^{-x_w,_h}}} $$ 其中$S_w;_h$为位置{w,h}处S的特征通道,将$P_w;_h$和S输入一个隐含层的多层感知,计算一个能量值$x_w;_h$,然后输入一个隐含层的多层感知,计算一个能量值xw;h,然后将该能量值转换为注意概率$\alpha_w;_h$,最后将S与P连接,输入后一个下采样块,生成全局特征表示。为了稳定GAN训练,使用软阈值函数预测注意概率。 $$ p(x_k) = \frac{\frac{1}{1+e^{-x_k}}}{\sum_{j=1}^{K}\frac{1}{e^{-x_j}}} $$ 软阈值在归一化之前使用标准逻辑函数压制(0,1)之间的负能值。我们不采用流行的softmax函数,因为它使最大概率最大化,抑制其他概率接近0。极小的概率阻碍了梯度的反向传播,加剧了GAN训练的不稳定性。相比之下,软阈值函数防止注意概率趋近于零,提高了反向传播的效率。空间注意模型将更多的文本特征分配到相关的图像区域,这有助于判别器判断文本图像对是否匹配。在对抗训练中,较强的鉴别器迫使生成器合成更多相关的图像内容。 6. 郑芳芳: 2. 下周目标 1. 狄虎:文本加载,可视化输入页面 2. 李想:性能指标报告 3. 其他人:整理公式的作用、原理、效果 ## 第八周(12.03 ~ 12.04) 延后 ## 第九周(12.10 ~ 12.11) 1. 进度 * 李想: 性能指标介绍: 1. IS(Inception Score):一种用于评估生成式图像模型(如生成式对抗网络(GAN))所创建的图像质量的算法。该分数是根据一个单独的、经过预训练的[Inceptionv3](https://en.wikipedia.org/wiki/Inceptionv3)图像分类模型的输出,应用于生成式模型所生成的图像样本(通常为30,000张左右)计算的。本次大作业采用Inception Score作为生成图像的性能指标之一,用于判断生成图像的真实度和多样性。 | 方法 | IS | | --------------------------------------------- | --------- | | StackGAN++ | 4.04±0.6 | | AttnGAN | 4.36±0.3 | | DAE-GAN | 4.42±0.4 | | DM-GAN | 4.75±0.7 | | DTGGAN | 4.88±0.3 | | DF-GAN | 5.10 | | SSAG | 5.17±0.8 | | RAT-GAN(NF64, 500 epochs) | 5.36±0.2 | | RAT-GAN(NF64, 950 epochs, trained by ourself) | 5.12±0.06 | 2. FID(Frechet Inception Distance Score):与早期的inception score(IS)只评估生成的图像的分布不同,FID将生成的图像分布与一组真实图像的分布("ground truth")相比较,这也侧面保证了语义一致性,因为真实图片肯定是和文本语义相一致的。 | 方法 | FID | | --------------------------------------------- | ----- | | StackGAN++ | 15.30 | | AttnGAN | 23.98 | | DAE-GAN | 15.19 | | DM-GAN | 16.09 | | DTGGAN | 16.35 | | DF-GAN | 14.81 | | SSAG | 15.61 | | RAT-GAN(NF64, 500 epochs) | 13.91 | | RAT-GAN(NF64, 950 epochs, trained by ourself) | 14.36 | ​ 消融实验: ​ image-20221210212826648 ## 第十周(12.17 ~ 12.18) 本周没有工作进展,需要提交的材料有: 每个人都要交的: 1. 拆分后的大作业实验报告,自己负责的部分 2. 拆分后的PPT,自己负责的部分 3. 总结报告中的个人总结 组长整理: 1. 总结报告:项目成员工作;项目文档提交说明;项目成果物说明;开发过程总结;团队总结 2. 实验报告,整理其他人交上来的内容到报告中 宇哥: 1. PPT整合 ## 第十二周(12.17 ~ 12.18) * 李想 - [x] 会议记录整理 - [x] 实验总结 - [ ] PPT修改,符合老师建议的格式 1. 按报告目录的顺序进行展示 2. 描述具体工作 3. 不需要太多具体原理 - [x] 个人总结 - [x] 录制性能指标跑分视频 * 李冬冬 - [x] 个人总结 - [x] 第二次实验的报告(1200轮训练,以400轮为一个阶段) * 狄虎 - [ ] 个人总结 - [ ] 可视化页面 - [ ] 可视化开发报告 - [ ] 对可视化页面的效果录制视频 * 李强 - [ ] 个人总结 - [ ] PPT,RATGAN初期部分 * 高宝宇 - [ ] 个人总结 - [x] 实验报告第二、三章(基础理论和解决方案) * 郑芳芳 - [ ] 个人总结 - [ ] 实验报告其他章节