AttnGAN代码复现(详细步骤+避坑指南)文本生成图像

简介: 这篇文章是AttnGAN: Fine-Grained TexttoImage Generation with Attention(带有注意的生成对抗网络细化文本到图像生成)的代码复现博文,我边做边写,展示详细步骤、踩坑和debug的过程。论文地址: https://arxiv.org/pdf/1711.10485.pdf论文阅读笔记:Text to image论文精读 AttnGAN

@TOC

一、前言

这篇文章是AttnGAN: Fine-Grained TexttoImage Generation with Attention(带有注意的生成对抗网络细化文本到图像生成)的代码复现博文,我边做边写,展示详细步骤、踩坑和debug的过程。

论文地址: https://arxiv.org/pdf/1711.10485.pdf

论文阅读笔记:Text to image论文精读 AttnGAN

二、下载代码和数据集

(下载链接如果打不开,翻到文末)

1、首先在github上下载模型代码:https://github.com/taoxugit/AttnGAN(此为Python2.7版本)

:star2::star2::star2:最近在github上找到了AttnGAN的python3版本,可以有效避免很多语法错误,推荐下载(22年2月28日更新):star2::star2::star2::

https://github.com/davidstap/AttnGAN

在这里插入图片描述

2、下载为鸟类预处理的元数据:https://drive.google.com/open?id=1O_LtUP9sch09QH3s_EBAgLEctBQ5JBSJ

并将其保存到data/

在这里插入图片描述

3、下载鸟类图像数据:http://www.vision.caltech.edu/visipedia/CUB-200-2011.html 将它们提取到data/birds/。

在这里插入图片描述:star2::star2::star2: 若该链接打不开可下载这个,内容是一样的(22年2月28日更新):star2::star2::star2:: https://drive.google.com/file/d/1hbzc_P1FuxMkcabkgn9ZKinBwW683j45/view

在这里插入图片描述

4、下载完后目录如下:

在这里插入图片描述

三、搭建环境

1、首先配置好解释器

2、然后安装环境

pip install python-dateutil

pip install easydict

pip install pandas

pip install torchfile nltk

pip install scikit-image

可能需要额外安装的环境,根据提示进行补充:

pip install torchvision

四、预训练DAMSM 模型(也可以跳过这步骤,直接下载预训练模型)

python pretrain_DAMSM.py --cfg cfg/DAMSM/bird.yml --gpu 0

可能出现的问题1:'EasyDict' object has no attribute 'iteritems'

问题原因:Python3中:iteritems变为items

解决方案:根据提示将iteritems改为items

在这里插入图片描述 在这里插入图片描述  

可能出现的问题2: 'EasyDict' object has no attribute 'has_key'

问题原因:Python3以后删除了has_key()方法

解决方案:将 b.has_key(k):改为if k in b

可能出现的问题3: module 'torch._C' has no attribute '_cuda_setDevice'

问题原因:环境问题,环境没配好

解决方案:卸载原环境,重新配置pytorch

可能出现的问题4:name 'xrange' is not defined

问题原因:xrange是python2的用法,在python3中range与xrange已经合并为range了。

解决方案:把用到的程序里的xrange( )函数全部换为range( )

可能出现的问题5: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

问题原因:读取文件时的解码问题

解决方案:更改为:

class_id = pickle.load(f, encoding='bytes')

可能出现的问题6:IndexError: list index out of range

问题原因:代码问题,数组超限

解决方案:

在这里插入图片描述将 if i < (cfg.TREE.BRANCH_NUM - 1):改为if i < (cfg.TREE.BRANCH_NUM - 2):

可能出现的问题7:IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number

问题原因:在pytorch高版本用item()

解决方案:将【0】改为.item()

在这里插入图片描述  

可能出现的问题8:OSError: cannot open resource

问题原因:ImageFont.truetype('Pillow/Tests/fonts/FreeMono.ttf', 50),环境里没有FreeMono这个字体

解决方案:更换字体,更改为:

 fnt = ImageFont.truetype('Pillow/Tests/fonts/arial.ttf', 40)

五、运行

1、预训练模型的下载(选做)

如果做了第四步,可以直接进入下一小节

如果没有做第四步,首先下载别人已经训练好的预训练模型:

https://drive.google.com/open?id=1GNUKjVeyWYBJ8hEU-yrfYQpDOkxEyP3V将其保存到DAMSMencoders/

下载https://drive.google.com/open?id=1lqNG75suOuR_8gjoEPYNp8VyT_ufPPig并将其保存到models/

2、运行

训练GAN:python main.py --cfg cfg/bird_attn2.yml --gpu 1

运行:python main.py --cfg cfg/eval_bird.yml --gpu 1

以从“./data/birds/example_filenames.txt”中列出的文件中的标题生成示例。结果保存到DAMSMencoders/.

可能出现的问题1:‘str‘ object has no attribute ‘decode

问题原因:Python2和Python3在字符串编码上的区别。

解决方案:.encode(‘utf-8’). decode(‘utf-8’) ) #先编码再解码:

filenames = f.read().encode('utf8').decode('utf8').split('\n')

sentences = f.read().encode('utf8').decode('utf8').split('\n')

可能出现的问题2:FileNotFoundError: [Errno 2] No such file or directory:'../data/birds/text/180.Wilson_Warbler/Wilson_Warbler_0007_175618.txt'

问题原因:该文件没找到, 路径问题

解决方案:更改为正确的路径,如果text是处于压缩状态要解压。

可能出现的问题3:RuntimeError: CUDA out of memory. Tried to allocate 40.00 MiB (GPU 0; 4.00 GiB total capacity; 2.86 GiB already allocated; 33.84 MiB free; 20.86 MiB cached)

 问题原因:GPU性能不足(但依然还是能跑出结果,结果在AttnGAN-master\models\bird_AttnGAN2\example_captions中)

 解决方案:花钱升级硬件或者放到服务器

六、实验结果

可以在这里输入相应测试的文本

在这里插入图片描述

然后在这里就可以看到生成的各个阶段的图像和注意力机制的应用。

在这里插入图片描述

在这里可以选择采样数据集

在这里插入图片描述

然后在这里可以看到采样生成的图像。

在这里插入图片描述

部分实验结果如下:

1.this bird is yellow with white and has a very long beak

在这里插入图片描述

2.this bird has wings that are blue and has a red belly

在这里插入图片描述

3.this bird is yellow with white on its head and has a very short beak

在这里插入图片描述

六、资源下载

打不开网址的可以点击:https://download.csdn.net/download/air__Heaven/85067478

该文件除了需要下载配置好图像数据集(二-3),其他都是配置好了的

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
算法 数据库 计算机视觉
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略
|
机器学习/深度学习 并行计算 异构计算
NVIDIA CUDA/cuDNN历代版本下载地址
NVIDIA CUDA/cuDNN历代版本下载地址
4696 0
NVIDIA CUDA/cuDNN历代版本下载地址
|
机器学习/深度学习 并行计算 PyTorch
利用谷歌colab跑github代码AttnGAN详细步骤 深度学习实验(colab+pytorch+jupyter+github+AttnGAN)
Google Colab,全名Colaboratory,是由谷歌提供的免费的云平台,可以使用pytorch、keras、tensorflow等框架进行深度学习。其GPU为Tesla T4 GPU,有很强的算力,对于刚入门机器学习或深度学习的用户,这个平台是不二之选。
利用谷歌colab跑github代码AttnGAN详细步骤 深度学习实验(colab+pytorch+jupyter+github+AttnGAN)
|
9月前
|
传感器 人工智能 资源调度
智能Agent与灵活调用的背景
本文介绍了智能Agent的基本概念及其灵活调用的实现方式,通过具体代码示例展示了如何设计具备灵活调用能力的智能Agent系统。文章首先阐述了智能Agent的定义、特点及分类,接着详细解释了灵活调用的意义、目标及其实现步骤。最后,探讨了灵活调用在实际应用中的挑战及未来的发展方向。
|
人工智能 自然语言处理 数据处理
【AI大模型】Transformers大模型库(十三):Datasets库
【AI大模型】Transformers大模型库(十三):Datasets库
587 0
|
前端开发 异构计算 API
探索Stable Diffusion:从零开始的代码接入创意图像生成指南
探索Stable Diffusion,了解这一图像生成技术,适用于创意设计、内容生成和前端应用。本文从基本概念到实战,教你如何用Python和相关库搭建环境,通过GPU加速,生成基于文本提示的图像。学习多样性和风格融合技巧,解决实践中遇到的问题,如内存溢出和图像模糊。前端开发者可将模型部署为API,实现实时动态图像生成,提升用户体验。一起发掘Stable Diffusion在艺术和设计领域的无限潜力!
596 2
|
机器学习/深度学习 算法 大数据
【benchmark】三行代码解决你训练速度慢的问题
【benchmark】三行代码解决你训练速度慢的问题
334 0
|
机器学习/深度学习 人工智能 自然语言处理
Text to image论文精读DF-GAN:A Simple and Effective Baseline for Text-to-Image Synthesis一种简单有效的文本生成图像基准模型
DF-GAN是南京邮电大学、苏黎世联邦理工学院、武汉大学等学者共同研究开发的一款简单且有效的文本生成图像模型。该论文已被CVPR 2022 Oral录用,文章最初发表于2020年8月,最后v3版本修订于22年3月 。 论文地址:https://arxiv.org/abs/2008.05865 代码地址:https://github.com/tobran/DF-GAN 本博客是精读这篇论文的报告,包含一些个人理解、知识拓展和总结。
Text to image论文精读DF-GAN:A Simple and Effective Baseline for Text-to-Image Synthesis一种简单有效的文本生成图像基准模型
|
机器学习/深度学习 自然语言处理 算法
Text to Image 文本生成图像定量评价指标分析笔记 Metric Value总结 IS、FID、R-prec等
Text to Image 文本生成图像定量评价指标分析笔记 Metric Value总结 IS、FID、R-prec等
Text to Image 文本生成图像定量评价指标分析笔记 Metric Value总结 IS、FID、R-prec等
|
存储 算法
LeetCode:1. 两数之和
给定一个整数数组nums 和一个整数目标值target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
169 1
LeetCode:1. 两数之和

热门文章

最新文章