AI绘画是近期比较热门的一个应用,其功能主要为可以把用户输入的一段或几段文字,使用训练好的模型来自动生成一幅美丽的画作。
本文以GPU云服务器,型号:GN8为例,实现AI绘画。
AI作画已经是一个很早的概念了,简单的说就是利用文本编辑器和图像编辑器来实现自然语言的处理和图像的识别,通过不断的扩散(随机)迭代,再根据已经训练好的模型的权重(weight)评估,最终达到图文一致,达到输出和用户描述词条一致的图像。
只要能输入恰当的描述,AI就能够生成令人意想不到效果的插画。下边给出几个案例:
本文以disco-diffusion为原型,用GPU云服务器,来实现“本地”的AI作画。
源码的git地址:
https://github.com/alembics/disco-diffusion
读者也可以通过技术上网去colab体验:
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb
可以看到最新的支持CUDA 11.3,一般都向下兼容,笔者安全起见选择了11.0,实测选择11.6的版本,也是可以运行的。
如果提示没有指令,可能是安装的时候某个地方忘记勾选ao to path之类的,没有关系,可以手动添加环境变量,操作如下:
右键此电脑,属性,高级系统设置,高级选项卡下的环境变量,在系统变量中找到path,双击进入编辑,新建 C:\Program Files\NVIDIA Corporation\NVSMI 确定保存。
重启power shell,输入nvidia-smi可正确查看显卡信息了。
用IE访问python官网https://www.python.org/,点击download会弹出一个下载页面,会自动匹配你的系统。
完成下载之后,执行安装
记得勾选Add python to path,安装完成后打开shell执行python命令:
可以看到已经安装成功,并显示了当前的版本信息。
到此,我们的前期准备已经完成了。
项目文件夹,链接:https://share.weiyun.com/c77rJDKm 密码:zyir8j
进入项目目录,
新建models文件夹,用于存放模型
新建init_images文件夹,用于存放初始图片
新建images_out文件夹,用于存放成品图片
下载项目所需的模型(较大),并存放在models目录中
512Model:
https://v-diffusion.s3.us-west-2.amazonaws.com/512x512_diffusion_uncond_finetune_008100.pt
256Model:
https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt
secondaryModel:
https://v-diffusion.s3.us-west-2.amazonaws.com/secondary_model_imagenet_2.pth
RN50:
RN101:
RN50X4:
RN50X16:
RN50X64
VB32:
VB16:
VL14:
如只需要简单的测试,可以仅选择以下model下载:
(512Model,secondaryModel,RN50X16,VB32,需要在代码模块勾选正确配置的模型,详见最后)
第一步很重要,打开命令行,输入:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple;
设置国内镜像,可以节约你非常多的时间
之后首先安装训练器torch,这个文件比较大:依次输入:
pip install torch==1.11.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html pip install torchvision==0.12.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
安装完成后,进入项目目录(在命令行输入CD 项目文件夹路径),输入python EvnCheck.py,查看一下:
主要检查torch.cuda.is_available() True是不是True
随后输入pip install opencv-python pandas lpips ftfy regex matplotlib ipywidgets
安装其他项目所需的依赖。
依赖和models下载完毕之后,打开命令行,进入项目目录,之后输入python app.py可以直接运行程序:
程序首次运行会下载一个VGG的包,耐心等待即可;
运行之中会生成过程的图片已经最终图片到项目的images_out文件夹。
项目中针对源码中含有的动画生成模块,图片生成过程中的快照显示等做了删减,只保留了最简单的图片生成部分。
感兴趣的同学可以查看项目源码进行学习。
app.py中,
第742行:
diffusion_model = "512x512_diffusion_uncond_finetune_008100" #@param ["256x256_diffusion_uncond", "512x512_diffusion_uncond_finetune_008100"]
diffusion_model 指扩散的模型,可以选256的和512的,512模型的最终图片效果会更精细。如果只是希望做小图,可以使用256x256_diffusion_uncond。
第748-755行:
ViTB32 = True #@param{type:"boolean"}
ViTB16 = True #@param{type:"boolean"}
ViTL14 = False #@param{type:"boolean"}
RN101 = False #@param{type:"boolean"}
RN50 = True #@param{type:"boolean"}
RN50x4 = False #@param{type:"boolean"}
RN50x16 = True #@param{type:"boolean"}
RN50x64 = False #@param{type:"boolean"}
是CLIP所用到的模型,用于分析自然语言和图片对比,相当于前文中提到的文本模块和图像模块。勾选越多就能越好的识别你所输入的词条,更准确的描绘画卷,当然渲染速度也就越慢。
第786和第804行:
'use_fp16': False,
如果是选择T4的机型,请把此选项的值置为True,这个参数指计算时是否用半精度做计算:
可以看到,T4卡支持半精度计算,而且运算速度很高。而笔者选的P40机型并不支持。
代码中813-815行:
batch_name = 'TimeToDisco' #@param{type: 'string'}
steps = 250 #@param [25,50,100,150,250,500,1000]{type: 'raw', allow-input: true}
width_height = [1024, 768]#@param{type: 'raw'}
batch_name 是图片的名称,可以用户自定义;
steps是扩散的次数,一般250次可以生成一幅很不错的图片,1000次以上就非常精细,当然时间也很长。
width_height是图片的分辨率,可以用户自定义,但是数值请填写256的整数倍数。
第898-900行:
text_prompts = {
0: ["A painting of Cyberpunk streetscape","Artstation"]
}
此处填写你所需要生成图片描绘的词条,结构可以是:
“A xxx painting of ”:一幅xx类型的画(油画,水彩画等等)
+
“Castle in the sky”:具象事物的描绘
+
“Picasso”:参照的画家
+
“ArtStation”:参照的网站
第902-904行:
image_prompts = {
# 0:['ImagePromptsWorkButArentVeryGood.png:2',],T
}
此处可以添加你所需要AI参考的底稿的图片路径,AI会根据你提供的原画的基础上,进行渲染;
第908-909行:
display_rate = 50 #@param{type: 'number'}
n_batches = 3 #@param{type: 'number'}
display_rate是产生图片的频率,此处50代表每50步就保存一个进度图片;
n_batches是你所需要生产这个图片的数量,此处3代表一共会根据用户之前提供的参数,做出3张图片。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。