前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让AI 作画更快一点

让AI 作画更快一点

作者头像
云水木石
发布2022-08-30 17:02:54
1.2K0
发布2022-08-30 17:02:54
举报

在上一篇文章《AI 作画初体验》中给大家介绍了一款 AI 作画工具 DD (Disco Diffusion) 及其本地部署方法。初次尝试,感觉 DD 生成的画作效果还不错,就是每次运行的时间比较长,为此花了一些时间研究如何提高 DD 作画的效率。

注意本文并不是探讨如何优化算法或者优化 GPU 来提高效率,这里面的水太深,不是我等普通程序员能够驾驭得了的事情。这里探讨的是通过调整一些参数,在牺牲一些体验的基础上提高生成一幅画的时间。

DD 包含很多参数,用来调整图像的生成过程,参数可以在 Disco_Diffusion.ipynb 的 3. Settings 部分找到:

还有一部分运行控制参数位于 4. Diffuse! 部分:

如果是通过 Docker 部署,可以在 disco.py 文件中找到对应的参数。

关于 DD 详细的参数调整说明可以参考这篇文档:

https://docs.google.com/document/d/1l8s7uS2dGqjztYSjPpzlmXLjl5PM3IGkRWI3IiCuK7g/edit)

这里仅介绍几个常用的参数。

  • n_batches: (50|1-100) 这个变量决定 DD 生成的静态图片的数量,默认值是 50,也就是说跑一次一下子给你作 50 张画。其实大部分时候我们并不需要这么多,如果把这个值改为 1 ,其它参数不变,在我的 RTX 2080 TI 的显卡上,创作一张画的时间大约为 7 分钟,这算是一个比较能让人接受的时长。在 Google Colab 上运行,时间大约为 12 分钟,无需购买 GPU 资源也能作画。 那为何会设计这样一个参数呢?主要是因为 AI 作图,有时会创作出一些莫名其妙的作品,生成多张,可以从中挑选满意的一张。如果显卡性能强劲,可以考虑增加这个值,一般设置为 9 就足够了。 需要注意的是,DD 还能生成视频,如果是生成视频,这个参数会被忽略。
  • width_height: ([1280,768]) 该变量决定最终生成的图像大小,以像素为单位,默认值是 1280x768。在手机摄像头动辄千万像素的年代,这个分辨率似乎有点低,但对于 AI 而言,[1024x768] 都是相当大的图像。如果这个尺寸设置过大,可能会导致 OOM(内存不足)错误,导致 DD 崩溃!可以从 [512x768] 开始尝试,如果运行没问题,再增大。比如在我的 2080 TI 显卡上,使用默认值运行起来完全无压力。 AI 创作的图像可以是正方形、或宽或高,但每个边应设置为 64 像素的倍数。当然,如果设置的尺寸不是 64 像素的倍数,DD 将自动调整为 64 的倍数。 如果你希望产生更高清的图像,可以借助于其它的 AI 图片放大工具。
  • steps: (250|50-10000) AI 生成图像有点类似负反馈系统,系统先生成一个图像,然后评估,引导图像生成的“方向”,再次生成图像,如此轮回。每一个轮回就是一个 step。增加步长将为 AI 提供更多调整图像的机会,并且每次调整幅度都会更小,从而产生更精确、更细腻的图像。 当然,增加 steps 是意味着更长的渲染时间。这个值的选择取决与你希望生成图像的质量以及图像的复杂程度,没有一个固定值。一般而言,使用默认值就是一个比较好的选择。 如果你只是验证提示词(prompts)和生成画作的相关度,可以先把这个值设置小一些,等提示词设计确定下来,再来增加这个参数值,以生成更精确的图像。
  • cutn_batches: (4|1-8) 每次迭代,AI 将图像分割成小块,并将每个小块与提示(prompts)进行比较,以决定如何指导下一个生成步骤。更多的小块通常可以产生更好的图像,因为 DD 在每个时间步有更多的机会微调图像精度。 小块划分得越多,内存消耗越大。 在默认设置下,DD 每个步骤执行的切割数量为 cutn_batches x 16。如果 cutn_batches 为 4,DD 将分为 4 个连续批次,每批次切割 16 块,因为一次只评估 16 个小块,DD 只使用 16 个小块所需的内存,但提供 64 个小块的质量优势,但带来的不足之处是,渲染每个图像需要大约 4 倍的时间。 所以,增加 cutn_batches 会增加渲染时间,因为工作是按顺序完成的。
  • skip_augs:(False) DD 使用了一些视觉效果增强技巧,在图像创建过程中引入随机图像缩放、透视和其他调整方法,以提高图像质量。这样产生的图像更加自然、边缘更加平滑。通过将 skip_augs 设置为 True,可以跳过这些增强,这样可以稍微加快渲染速度。
  • display_rate: (50|5-500) 前面讲到,DD 是通过多次迭代生成最终图像,在运行期间,DD 提供一个机会让你监控正在创建的每个图像。如果 display_rate 设置为 50,DD 将每 50 步显示一次图像。 将此值设置为较低的值,例如 5 或 10,可以仔细观察出图像是如何一步一步生成的。如果你对中间过程不敢兴趣,可以将 display_rate 设置为等于前面的 steps 参数值,这样可以稍稍提高在 Colab 中运行的速度,毕竟显示图像也会花费一点时间。

随后,我尝试了几种参数组合对图像生成速度的影响(本地部署,显卡 RTX 2080 TI )。

第一次,我只修改了 n_batches 参数值,将其设为 1,耗时 07:18,得到如下图像:

第二次,我修改的参数 n_batches=1 cutn_batches=1,结果耗时 04:55,得到如下图像:

第三次,我修改的参数 n_batches=1 cutn_batches=1 skip_augs=True steps=150,耗时降低到 02:45,得到如下图像:

通过这些尝试,发现适当降低画作的质量,时间就能显著降低。在家用级显卡上,不到三分钟就能渲染出一幅还算不错的作品,这也给了大众参与创作的机会。而且通过参数调整,我们也可以借助于 Colab 创作,无需购买谷歌的 GPU 运算资源。

后续我会研究一下 提示语(prompts)对创作的影响,尝试创作一些古风山水画。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档