借助 ControlNet 生成艺术二维码

目录

背景介绍

Stable Diffusion 实战技巧

提示词工程

Prompt 的基本概念

Prompt 的误区

调整提示词的权重

注意提示词的顺序

Prompt 中的 Emoji

视角 Prompt 推荐

图片优化

哪些参数需要调整

如何对比寻找最佳参数

图片尺寸优化

优化多人物 / 宽幅单人物的生成

进行手部修复

进行面部修复

借助 ControlNet 生成艺术二维码

Step1:优化二维码

Step2:制作基础二维码

Step3:确定艺术风格

Step4:在 ControlNet 中导入二维码


背景介绍

在过去的数月中,亚马逊云科技已经推出了多篇 Blog,来介绍如何在亚马逊云科技上部署 Stable Diffusion,或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。

为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序,众多合作伙伴与亚马逊云科技紧密合作。他们提供各种各样的服务、深入的技术知识、最佳实践和解决方案,包括基础设施迁移、应用程序现代化、安全和合规性、数据分析、机器学习、人工智能、云托管、DevOps、咨询和培训。

最近,亚马逊云科技核心级服务合作伙伴 eCloudrover(伊克罗德 推出了基于 Stable Diffusion 的 AI 绘画解决方案——imAgine,既拥有经过广泛验证且易于部署的先进 AI 算法模型,又提供丰富且高性价比的云端资源以优化成本,旨在帮助游戏、电商、媒体、影视、广告、传媒等行业快速构建 AIGC 应用通路,打造 AI 时代的领先生产力。

本文主要分享我们在帮助客户使用 Stable Diffusion 时总结的实战经验,以及使用基于 Stable Diffusion 研发的 imAgine 产品生成艺术二维码的最佳实践。

我们将以 QRCode 作为 ControlNet 的输入,使 QRCode 数据点融入到艺术图像中,同时仍然可以被 QRCode 阅读器扫描。借助这项技术,您可以将任何二维码转化为独特的艺术作品,以一种全新的方式来表达和传递信息。以下为几张图片案例:

Stable Diffusion 实战技巧

古语有云:“万事开头难”,“致广大而尽精微”。这对应了在 Stable Diffusion 实战中,客户最常遇到的两方面问题,一是如何选择合适的提示词起手式,来生成满足期望的图片;二是如何对图片进行细节优化,使最终产出的结果能够满足生产应用需求。

我们根据过往服务客户使用 Stable Diffusion 的经验,整理了以下内容作为我们推荐的最佳实践,希望对读者使用 Stable Diffusion 进行创作时提供参考。

提示词工程

随着 Stable Diffusion 版本不断迭代,AI 对语义的理解越来越接近“常识”之后,对提示词(Prompts)的要求也会越来越高。很多提示词上的误区有时会对绘图产生反作用。

Prompt 的基本概念
  • 提示词分为正向提示词(positive prompt)和反向提示词(negative prompt),用来告诉 AI 哪些需要,哪些不需要。
Prompt 的误区
  • Prompt 在于精确,不在于数量;用最简短的单词阐述画面,比自然语言要更有效。
  • 提升质量的描绘词绝不是无脑堆砌、越多越好。
  • 经常出现的起手式:“masterpiece” “best quality” 等,很多时候会成为提示词中的累赘。这些词语在 NovelAI 时代是有意义的,因为当时 NovelAI 训练模型时大量使用了这些词汇来对图像进行评价;但在如今,经过 Civitai 上模型作者们不断重新炼制模型,这些提示词已经很难在生图结果中展现应有的作用。
调整提示词的权重
  • 词缀的权重默认值都是 1,从左到右依次减弱
  • 提示词权重会显著影响画面生成结果
  • 通过小括号+冒号+数字来指定提示词权重,写法如 (one girl:1.5)
注意提示词的顺序
  • 比如景色 Tag 在前,人物就会小,相反的人物会变大或半身
  • 选择正确的顺序、语法来使用提示词,将更好、更快、更有效率地展现所想所愿的画面
Prompt 中的 Emoji
  • Prompt 支持使用 emoji,且表现力较好,对于特定的人脸表情或动作,可通过添加 emoji 图来达到效果
  • 为了防止语义偏移,优先考虑 emoji,然后少用不必要的 with 一类的复杂语法
视角 Prompt 推荐
参数解释
extreme closeup脸部特写
close up头部
medium close up证件照
medium shot半身
cowboy shot无腿
medium full shot无脚
full shot全身

图片优化

很多时候我们生成了一张差强人意的图片,希望对这个结果进行进一步的优化,但往往不知道从何下手。这时您或许可以参考以下图片参数调优的最佳实践:

哪些参数需要调整
  • CFG Scale图像与提示词的相关度。该值越高,提示词对最终生成结果的影响越大,契合度越高。
    • CFG 2-6:有创意,但可能太扭曲,没有遵循提示。对于简短的提示来说,可以很有趣和有用。
    • CFG 7-10:推荐用于大多数提示。创造力和引导力度之间的良好平衡。
    • CFG 10-15:当您确定提示是详细且非常清晰的,对图片内容有极明确的要求时使用。
    • CFG 16-20:除非提示非常详细,否则通常不推荐。可能影响一致性和质量。
    • CFG >20:几乎无法使用。
  • Sampling Steps 迭代步数:步骤越多,每一步图像的调整也就越小、越精确。同时也会成比例地增加生成图像所需要的时间。
    • 对于大部分采样器,迭代越多次效果越好,但超过 50 步后就收效甚微。
  • Sampling method 采样方法:不同的采样方法,对应的最佳迭代步数是不同的,在进行对比时需要综合考虑。
    • Euler a:富有创造力,不同步数可以生产出不同的图片。并且这是一个效率较高的采样方法,可以用来快速检查 prompt 效果的好坏。
    • DPM2 a Karras:适合跑真实模型,30 步以后不好把控。
    • DPM++ 2M Karras:在高步数下表现优异,步数越高细节越多。
    • DDIM:收敛快,但效率相对较低,因为需要很多 step 才能获得好的结果,适合在重绘时候使用。
    • 不同模型与采样方法搭配出的结果也不同,以上仅供参考,在进行采样方法的选择时,最好使用 X/Y/Z 图表进行对比。
  • Seed 随机种子:随机种子值很多时候对构图的影响是巨大的,这也是 SD 生图随机性的最主要来源。
    • 保持种子不变,同样的提示词和模型,保持所有参数一致的情况下,相同的种子可以多次生成(几乎)相同的图像。
    • 在确定好一个合适的画面构图时,固定种子,对细节进行进一步打磨,是最合适的做法。
如何对比寻找最佳参数
  • 利用 X/Y/Z 图找最佳参数:通过使用 X/Y/Z 图,我们可以很清晰地对比不同参数下的结果,快速定位合适的参数范围,进行进一步的生成控制。

图片尺寸优化
  • 图片质量并不直接与图像尺寸挂钩。
  • 但尺寸在一定程度上影响了主题/图片内容,因为它潜在代表选择的类别(比如竖屏人物,横屏风景,小分辨率表情包等)。
  • 当出图尺寸太宽时,图中可能会出现多个主体。
  • 1024 之上的尺寸可能会出现不理想的结果,并且对服务器显存压力是巨大的。推荐使用小尺寸分辨率 + 高清修复。
优化多人物 / 宽幅单人物的生成
  • 单纯使用 txt2img 无法有效指定多人物情况下,单个人物的特征。
  • 较为推荐的方案是制作草稿 + img2img 或 ControlNet 的方式。
  • 宽幅画作+单人物生成最好打草图,进行色彩涂抹,确定画面主体;或使用 ControlNet 的 OpenPose 做好人物骨架。
  • 多人物确定人物数量,最好使用 ControlNet 的 OpenPose 来指定;该方案也适合画同一人物的三视图。
进行手部修复
  • 将图片送入 img2img inpaint,使用大致相同的提示词,将关于“手”的提示放在前面,根据希望手部特征变动多少来设置重绘幅度(如果只是希望手更完整,调至 0.25 以下),然后保留步骤和 CFG 与 txt2img 相同。
  • 找到一个满足期望的手部图片,借助 ControlNet 的 Canny 或 OpenPose_hands 等预处理器+模型,结合 inpaint 操作,能实现更精确的手部控制。
进行面部修复
  • 在绘制人物主体较小的图片时,经常会出现面部崩坏的情况。尤其是本文之后会介绍的生成艺术二维码流程,人物的面部经常会因为二维码码点的存在而崩坏。
  • 对面部的重绘,更推荐使用 !After Detailer 插件实现,通称 ADetailer。
  • 该插件会使用 yolo 算法对图片中的物体进行识别,我们设定其识别人物面部,并提供面部重绘的提示词和模型;该插件会在识别到的面部位置进行局部重绘,完成面部修复。
  • ADetailer 插件可以满足面部和手部的识别与修复。
  • 在 ADetailer 中也能引用 Lora 模型进行局部重绘生成。

借助 ControlNet 生成艺术二维码

Step1:优化二维码

二维码是一种借助特定几何图形分配,在二维空间上分布的、黑白相间的、记录数据符号信息的图形。二维码有多种不同的编码方式,我们此处采用通用度最高也是最基础的编码方式:QR Code。

输入的二维码是借助 SD 生成艺术二维码过程中最重要的部分之一。我们主要关心输入的二维码的以下两个特点:

1. 二维码中包含的信息量

无论二维码采用何种编码方式,承载的字符信息越多,二维码在视觉上呈现的黑白结构就越复杂。复杂的结构很容易导致我们在生成艺术创意时,极大地收到二维码本身信息的掣肘。因此我们首先要想办法精简二维码中包含的字符长度

对于最广泛的应用场景,二维码通常会包含一个网页链接;为了提升二维码生成的美观性,我们首先需要对网页链接进行缩短。市面上的链接缩短工具有很多,您可以自由选择。但需要注意,在中国大陆境内请选择有域名备案的缩链平台,否则会被微信、浏览器等阻挡。

例如我们有一个希望制作成二维码的网址:伊克罗德信息科技有限公司 - 南京伊克罗德信息科技有限公司,通过缩链处理后为:http://c.suo.nz/7KZrF

通过下图可以比较直观地看出链接长短对于二维码视觉的影响,缩短的链接将更有利于我们接下来的创作。

2. 二维码的呈现形式

随着技术发展,二维码不仅只支持黑白方块状的图案样式,定位点和码元都支持多样化的呈现,例如以下几种样式

在实际操作中,我们可以尝试多种不同的码点形式,以使得生图效果符合我们的预期。

下图展示了不同的二维码形式对最终效果图的影响:

生成参数:

Prompt: mountain, green grassland, sky, cloud, bird, blue sky, no human, day, wide shot, flying, border, outdoors, white bird, scenery
Negative prompt: easynegative
Steps: 40, Sampler: DPM++ 2M Karras, CFG scale: 6, Seed: 3943213078, Size: 872x872, Model hash: 876b4c7ba5, Model: cetusMix_Whalefall2, Clip skip: 2, ControlNet: "preprocessor: none, model: control_v1p_sd15_qrcode_monster [a6e58995], weight: 1.35-1.5, starting/ending: (0.05, 1), resize mode: Resize and Fill, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)", Version: v1.3.

Step2:制作基础二维码

了解了上述要点后,我们将要开始使用二维码制作工具,生成一个输入给 SD 的基础二维码。互联网上有多种网页二维码生成工具,您可以自由选择。同时为了方便您使用,我们在 Blog 专用的 AMI 中已经预装了 QRCode 生成插件,只要您从正确的版本中启用 AMI,都可以直接在 Webui 上看到下述的 QRCode Toolkit:

  • Anthony’s QR Toolkit:整合在 Webui  QRCode 生成与优化工具

GitHub - antfu/sd-webui-qrcode-toolkit: Anthony's QR Toolkit for Stable Diffusion WebUI

接下来我们演示如何使用 Anthony’s QR Toolkit 来生成二维码,您可以参考下图完成二维码参数的配置。

完成二维码制作后,可以点击右侧的 “Download” 以下载到本地。或点击 “Send to ControlNet”,直接将二维码发送至 ControlNet 以进行下一步操作。

Step3:确定艺术风格

使用 Stable Diffusion 进行艺术创作的核心是选择合适的模型+提示词。我们在创作艺术二维码之前,建议先不使用 ControlNet,先进行一次普通的图片生成,以测试生图效果。

此处我希望二维码中有山川、蓝天、白云等自然景观,因此先使用以下参数,测试提示词和模型的生成效果。

生成参数:

Prompt: mountain, green grassland, sky, cloud, bird, blue sky, no human, day, wide shot, flying, border, outdoors, white bird, scenery
Negative prompt: easynegative
Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 4078355702, Face restoration: CodeFormer, Size: 512x512, Model hash: 876b4c7ba5, Model: cetusMix_Whalefall2, Clip skip: 2, Version: v1.3.2

Step4:在 ControlNet 中导入二维码

确认好图片风格后,我们将未经处理的二维码上传 ControlNet。请注意以下几个选项的配置:

  • “启用” 按钮:勾选以确保 ControlNet 在图片生成过程中生效;
  • 模型选框:请选择 “control_v1p_sd15_qrcode_monster” 来加强二维码的控制力度;
  • 控制权重:对于 qrcode_monster 模型,我们建议设置在 1.1-1.6 之间;
  • 引导介入/终止时机:介入时机建议在 0-0.1 之间,终止时机建议为 1

在文生图配置中建议调整两组数值:

  • 迭代步数:建议在 30-50 之间,默认值 20 不足以引导生成一个高质量的二维码图片
  • 宽度/高度:建议直接从 ControlNet 发送二维码原图的宽高比至上方

参数全部配置完成后,点击生成即可,可以看到此处我们生成了一个效果不错的图片,使用手机扫码测试也完全通过。

如果生成的二维码不能够达到期望,可以选择微调以下几个参数,并增加生成的总批次数,不断尝试抽卡以逼近最终期望的效果:

  • 提示词
  • 采样方法
  • ControlNet 控制权重
  • ControlNet 引导介入/终止时机

必要时可以选择使用 “脚本” 中的 X/Y/Z Plot,来对比不同参数下生成二维码的效果。我们此处对比了 ControlNet 的控制权重和引导介入时机:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值