今天,我被二维码卷到了...

重视并星标腾讯云开发者

每周4 | 鹅厂一线程序员,为你“试毒”新技术# 第1期 | 腾讯王锐:测评二维码艺术画生成体会

今天,我被二维码卷到了...

都说AI绘画来势汹汹,但论创意,仍是人类玩得花 。下面这几张乍一看平平无奇、却在网上疯传的AI生成图片,你能看出其间隐藏的玄机吗?

今天,我被二维码卷到了...

今天,我被二维码卷到了...

今天,我被二维码卷到了...

今天,我被二维码卷到了...

建议咱们在手机上手动缩放一下这些图。缩得越小,图片夹带的文字/二维码能展现得更明晰。

还有网友给了其他“认字”诀窍,比方摘下你的近视眼镜:

今天,我被二维码卷到了...

咱们能够发现,这些图片生成的思路千篇一律——通过光影、上色等等操控手段,确保文字或许二维码作为光影、衣服图画等,融入图画中。

令本人震惊的是,艺术画二维码仍是由几位在校学生运用 ControlNet+StableDiffusion 生成的。后生可畏!他们练习的 ControlNet 生成的二维码图片极具艺术感。二维码不再是经典的黑白格子矩阵,而是被美妙地融合在图片的内容当中。

今天,我被二维码卷到了...

@倪豪@陈柏宇(时辰) @王照涵 @陈智勇的 QR Code ControlNet 著作

我不由考虑这种图为什么依然是一个可用的二维码呢?怎样才能制造这样的二维码图片呢?遂开始一次小实验。

今天,我被二维码卷到了...

首先咱们需要快速了解二维码识其他原理。

今天,我被二维码卷到了...

二维码图片首要包括定位图画(图上的三个大“回”形方框)、中间的点阵数据图画。二维码的扫描进程看上去也很复杂,我看了一下网上的介绍,粗略地将其解码进程总结为:

  • 依据三个定位图画检测以及“摆正”二维码。

  • 将二维码区域转换为灰度图,切分红不重叠的区块,每个区块内独自计算得到一个阈值,高于阈值的为1,小于阈值的为0。

  • 依据必定的规则,从读取的一串010110…数据流中解码得到信息。二维码的编码有必定的冗余,数据流中偶尔几位的0,1被搞混也不会影响解码。

因而,尽管上面这些艺术画二维码看上去不再是黑白格子矩阵,但只要它:

  • 依然包括要害的三个定位图画。

  • 定位图画围住的数据区域有显着的亮暗联系变化,能够被解码为0,1数据流。

  • 数据流中被扰乱的0,1比特还没有那么多,还能被冗余信息恢复。

那么它便是一个二维码。

总结一下:只要二维码的亮暗联系还没被破坏得太多,那就仍是一个可用的二维码?

好的,现在咱们现已知道要害点是保存亮暗联系了,接着一个问题便是,怎么才能制造满足这种亮暗联系的二维码图片?

引子中说到的文章作者并没有透露他们运用的 ControlNet 计划。现网制造这些二维码的计划许多,并且作用上距离还挺显着。

下面我尽量多介绍几种组成艺术画二维码的计划,例如开源社区很快有人提出能够用 tile_resample ControlNet ,来模仿一下相似的作用。

今天,我被二维码卷到了...

ControlNet 1.1 Tile 是 ControlNet 作者(github: lllyasviel)制造的一个功能相似于弥补细节的 ControlNet。

当被输入丢掉了许多细节纹路的图片(如下面的模糊狗狗图)时:

今天,我被二维码卷到了...

输出则是一幅正常的细节完善的图片:

今天,我被二维码卷到了...

利用其补细节这一特性,咱们运用一张包括黑白格子二维码的图片作为 ControlNet 的输入,一起用 ControlNet 的输入当作 img2img 的垫图,即根据 resample ControlNet + img2img,能够搞出相似于下图的作用:

今天,我被二维码卷到了...

具体来说,用这种图一起当作 img2img 的垫图及 ControlNet 的输入:

今天,我被二维码卷到了...

在 Stable Diffusion WebUI 的 img2img Tab,设置调整那一系列参数,然后点 Generate 就能够“开盲盒”了。

为了降低咱们“开盲盒”的难度,我这里分享下我运用的 WebUI 参数:

Tony Stark, bruise wounded, wet soaked, water splash, torn apart, ripped clothes, random background vintage, neons lights, (high detailed skin:1.2), 8k uhd, dslr, soft lighting, hyperdetailed, intricately detailed, unreal engine, fantastical, ideal human, high quality, film grain, bokeh, Fujifilm XT3, hyper realisticNegative prompt: ugly, disfigured, low quality, blurry, nsfwSteps: 50, Sampler: DPM++ 2M Karras, CFG scale: 10, Seed: 3724036266, Size: 768x768, Model hash: 4199bcdd14, Model: revAnimated_v122, Denoising strength: 0.85, Mask blur: 4, ControlNet 1: "preprocessor: tile_resample, model: control_v11f1e_sd15_tile [a371b31b], weight: 0.8, starting/ending: (0.23, 0.9), resize mode: Just Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 1, 64)"

我用了 revAnimated_v122 模型,Prompt 和 Negative Prompt 现已包括在上面。

最要害的 ControlNet 参数是:

ControlNet 1: "preprocessor: tile_resample, model: control_v11f1e_sd15_tile [a371b31b], weight: 0.8, starting/ending: (0.23, 0.9), resize mode: Just Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 1, 64)"

这里 weight: 0.8, starting/ending: (0.23, 0.9),是我首要调整的参数。别离对应了 ControlNet 起效的力度、起效的 diffusion step 开始与结束。这本质上是在调整 ControlNet 在图生图进程中的作用巨细

ControlNet 作用太大,出来的图格子感太重;反之作用太小,生成图很有可能现已不是二维码了。

当然,你能够预先调整一下输入图的二维码色彩方位,提早组织一下生成成果中二维码大概的色彩和方位。比方把二维码设置成红色,那么你就能得到下面这幅盔甲色彩更为天然的图片。

今天,我被二维码卷到了...

这种计划我测验了很久,实在体会便是:摸奖的成分很重。

比方上面的钢铁侠二维码,调整好 ControlNet+img2img 参数后,大部分随机数种子对应的图片中钢铁侠的人脸都有黑白格子对应的”污损“:

今天,我被二维码卷到了...

今天,我被二维码卷到了...

想得到上面那种脸没有污损的图片,要抽许多随机数种子(随机数选42成果欠好,我试了ヾ(••)o)。

天然而然地,我又有一个问题:有没有办法指定图中人物的方位 or 姿态呢?用多了 WebUI 的开发者,能立马想到再加一个 ControlNet 操控人物的计划(当然我没想到,在 reddit 上盯了半响才学到这个计划)。

今天,我被二维码卷到了...

这一计划是上面的计划改进版。

ControlNet tile 负责弥补二维码区域的纹路细节,ControlNet OpenPose 负责操控人物方位。

依然是用 Stable Diffusion WebUI 的 img2img tab,但敞开了两个 ControlNet。其间 ControlNet1 是 Openpose:输入图及其供给的火柴人 pose 图如下:

今天,我被二维码卷到了...

ControlNet2 则是和上一个计划相似的一个带二维码的图片:

今天,我被二维码卷到了...

依然揭露一下我调出来的 webui 参数,供咱们参考:

futobot, cyborg, ((masterpiece),(best quality),(ultra-detailed), (full body:1.2), 1 female, solo, hood up, upper body, mask, 1 girl, female focus, black gloves, cloak, long sleevesNegative prompt: paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, glans, nsfw, nipples, (((necklace))), (worst quality, low quality:1.2), watermark, username, signature, text, multiple breasts, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, bad feet, single color, ((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), (((tranny))), (((trans))), (((trannsexual))), (hermaphrodite), extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), (((disfigured))), (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), (missing legs), (((extra arms))), (((extra legs))), mutated hands,(fused fingers), (too many fingers), (((long neck))), (bad body perspect:1.1)Steps: 60, Sampler: DPM++ 2M Karras, CFG scale: 11, Seed: 2912497446, Size: 768x768, Model hash: ed4f26c284, Model: camelliamix25D_v2, Denoising strength: 1, Mask blur: 4, ControlNet 0: "preprocessor: openpose_full, model: control_sd15_openpose [fef5e48e], weight: 1, starting/ending: (0, 1), resize mode: Resize and Fill, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 64, 64)", ControlNet 1: "preprocessor: tile_resample, model: control_v11f1e_sd15_tile [a371b31b], weight: 0.75, starting/ending: (0.23, 1), resize mode: Resize and Fill, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 1, 64)"

这种计划生成的图片相似于这样:

今天,我被二维码卷到了...

更换一下供给姿态的图片,就能调整生成图片中人物的姿态:

今天,我被二维码卷到了...

这个计划的生成作用格子感很重,但成功率较高。基本上每个随机数种子的成果都大差不差,毕竟运用了两个 ControlNet,对生成图片的操控程度提升了许多。

以上两个计划尽管能搞出一些冷艳的作用,可是全体上当作功率不高,生成图格子感也比较重。

看来,针对二维码这个特定的场景,独自练习一个对应的 QRCode ControlNet 仍是很有必要的。

今天,我被二维码卷到了...

本人在研讨上面两个计划的一起,发现huggingface 上有人开源了一个 QRCode ControlNet。这个 ControlNet 作用怎么样呢?

社区开源的 QRCodeControlNet 在:DionTimmer/controlnet_qrcode-control_v1p_sd15 Hugging Face 其展现的作用相似于:

今天,我被二维码卷到了...

我个人评价不是特别好。它运用成对的二维码及其艺术二维码图片作为练习集,生成的图片二维码感十分强,可扫性很高,但欠好看。

但即使是这样,开源到社区后,仍是很快有人用这个模型搞出来相似于下图这样的作用:

今天,我被二维码卷到了...

是不是感觉还能够?开源社区调 Prompt 的技巧仍是很强的!但我觉得它这种思路仍是有点问题。

咱们期望的是生成的图片看不出来是二维码。假如练习时就用了一堆二维码图片当作输出,那么网络就会很快地过拟合到二维码域,二维码感会很强。咱们需要的是没有“二维码感”的二维码! 有没有什么更好的思路呢?

今天,我被二维码卷到了...

在尝试练习 ControlNet 前,先要理清楚怎么结构数据。回忆一下,咱们期望的 ControlNet 有两个要害点:

ControlNet tile 实际上解决了第一个问题,配合着 img2img,它能够把输入二维码的明暗联系保存下来,但一起也过多地保存了输入图的色彩,以及“格子感”。保存明暗,疏忽色彩、格子……

这些需求启发我规划了对应的数据处理策略,练习一个专门的 QRCode ControlNet。初步测验的成果也支持了我的主意。

上述两个要害点启发的 QRCode ControlNet 能得到一些相似于这样的输出:

今天,我被二维码卷到了...

可是还有一个问题:二维码呈现的方位仍是很突兀。感觉二维码和图片没有很天然地融合在一起。之后,我又考虑了一下突兀问题的解法,给上面的思路增加了一点细节。能够得到下面这样的二维码艺术画:

今天,我被二维码卷到了...

今天,我被二维码卷到了...

自练习的 QRCode ControlNet 制造的图片漂亮程度,相较于其它办法改进了许多。我也制造了一个生成 demo 分享给了同事,咱们基本上很容易就能生成一些很漂亮的二维码图片,远胜于之前我一个人用 Stable Diffusion WebUI 频繁“开盲盒”。

也许会有读者朋友想要个艺术二维码生成体会链接?先卖个关子,相关的体会活动近期会在QQ上线。上面说到的多个生成思路,十分引荐咱们动手体会!!

全体来说,萌生 AIGC 二维码这个主意后的这个探究进程,我学着用起了 Stable Diffusion WebUI,尝试了许多计划终究才有了一个还不错的作用,体会到了一种解密的快感。实际作用其实也超出了我原先预期,这便是 AIGC的美妙可能性。欢迎咱们转发分享~

-End-

原创作者|王锐

古有神农尝百草,一日而遇七十毒。今有码农尝百技,拥抱变化、让燎原之火。咱们推出《码农尝百草》栏目,每期邀请腾讯工程师“试毒”新技术。

你还想看腾讯工程师体会测评哪些新产品、新技术?对本栏目有什么建议和看法? 欢迎在腾讯云开发者大众号留言。咱们将为1位提案供给者送出腾讯定制程序员文化衫。8月3日中午12点开奖。

今天,我被二维码卷到了...

*假如您不期望您的留言被精选揭露,能够在留言时参加文字补白。