【白话科普】10分钟从零看懂AI绘画原理

081645ad4d4e21936b710e1bdec1ad75.png

b94fb673060fe0e303718b413eaef737.gif

👉腾小云导读

计算机如何生成和真实图片相似的图画?模型是如何听懂我们想要它生成什么并给出对应结果?AIGC 热潮中的 Stable Diffusion、NovelAI、Latent upscale、ControlNet、LoRA等等是什么以及有什么亮点?本篇不涉及任何一个数学公式、不涉及晦涩文献解析,而是通过尽可能直白的解释,让没有太多AIGC背景知识的人也可以快速理解 AI 画画背后的技术原理和发展历史。欢迎阅读和分享。

👉看目录点收藏,随时涨技术

1. 计算机如何生成图画?

2. 如何控制画面内容?

    2.1 如何理解文本?

    2.2 如何控制生成的结果?

3. 为什么 AI 画画效果如此惊人?

4. ControlNet:让我们控制扩散模型

5. 潜在上限

6. LoRA:大型语言模型的低秩自适应

7. mov2mov

AI 画画这个领域发展太快了,要知道去年的 AI 画画还是这个画风:

5ce27db35284efe87b1b7a4cd493e709.png

现在的 AI 画画已经迅速进化到这个程度,我们举个例子:

施法咒语长这样——

film still, [film grain], large crowds, cyberpunk street, street level photograph, Chinese neon signs, time square advertisements, Dark atmospheric city by Jeremy Mann, Nathan Neven, James Gilleard, James Gurney, Makoto Shinkai, Antoine Blanchard, Carl Gustav Carus, Gregory Crewdson, Victor Enrich, Ian McQue, Canaletto, oil painting, brush hard, high quality, (brush stroke), matte painting, (very highly detailed)

生成结果长这样——

3a15c529efed499beb5753b190e76f4d.png

关于近期各个效果惊人的模型,目前市面上已经有不少介绍文章,但大部分比较晦涩难懂。所以本文将尽可能通俗、直白地解释 AI 绘画的原理,欢迎各位阅读。开发者朋友们在阅读完本篇后,可以进一步阅读本公众号今日推送的次条文章,跟随腾讯工程师的教程快速部署 Stable Diffusion Web UI,以及《给想玩AIGC的小白:教你从0搭一个图文视频生成网站(附插件&源码)》一文,上手打造AI绘画网站~

点下方关注并星标腾讯云开发者,回复「AIGC」,一键领取0基础AI绘画网站搭建教程、模型源件、工具插件、网站源码和部署模型所需GPU服务器限量优惠券。

01

计算机如何生成图画

这章我们会提到几个大家耳熟的概念:VAE、auto-encoder、GAN、Diffusion model 等等。阅读完这章,你将能有更清晰认知。言归正传,AI 是怎么学会画图的呢?

这就要涉及到两个方面了。一个是能生成像真实图片一样的数据,一个是要听得懂我们想要它生成什么,并给出对应的结果。

首先来看看如何生成像真实图片一样的数据。这涉及到机器学习中的一个重要分支——生成模型(generative model)。对于生成图像这个任务来说,通常一个生成模型需要先吞进大量的训练数据(巨量的人类真实图片),然后再学习这些数据的分布,去模仿着生成一样的结果。机器学习的核心无非就是这么回事,难点终究是在如何设计模型、让模型能更好的学到这样的分布上。

要讲生成模型,有一个不得不提的技术就是 VAE(变分自编码器,即 variational auto-encoder)。这其中的 auto-encoder,虽然叫 auto-encoder ,但是其实包含了编码器 encoder 和解码器 decoder,是一个对称的网络结构。对于一系列类似的数据例如图片,虽然数据量很大,但是符合一定分布规律的,信息量远小于数据量。编码器的目的就是把数据量为 n 维的数据压缩成更小的 k 维特征。这 k 维特征尽可能包含了原始数据里的所有信息,只需要用对应的解码器,就可以转换回原来的数据。在训练的过程中,数据通过编码器压缩,再通过解码器解压,然后最小化重建后数据和原始数据的差。训练好了以后,就只有编码器被用作特征提取的工具,用于进一步的工作,例如图像分类等应用中。故,称为 autoencoder。

d045fc62f546bf2d16481018cd8521ae.png

这时候有人想到:既然 auto-encoder 可以从 k 维特征向量恢复出一整张图片,那给你一个随机生成的 k 维特征向量,是否也可以随机生成什么画面呢?

然而实际结果显示,autoencoder 虽然可以「记住」见过的照片,但是生成新图像的能力很差。于是就有了 variational auto-encoder。VAE 令 k 维特征中的每个值变成了符合高斯分布的概率值,于是概率的改变可以让图片信息也有相应的平滑的改变,例如某个控制性别的维度,从 0 到 1 可以从一个男性的人脸开始,生成越来越女性化的人脸。

ccd278cf282e698305fe2692014c51a7.png

通过控制特征变量来操控人脸生成结果。

VAE 其实还是有很多统计假设的,而且我们要判断它生成的效果如何,也需要评估它生成的数据和原始数据的差距大不大。于是有人丢掉所有统计假设,并且把这个评估真(原始数据)假(生成数据)差异的判别器也放进来一起训练、创造了 GAN,生成对抗神经网络。

GAN 有两个部分——生成器和判别器。生成器从一些随机的 k 维向量出发,用采样网络合成大很多的 n 维数据,判别器就负责判断合成出来的图片是真是假。

一开始合成出来的都是意义不明的无规律结果,很简单的判别器就可以分辨出来。生成器发现一些生成的方向,例如有成块的色块可以骗过判别器,它就会往这个方向合成更多的图片。而判别器发现被骗过去了,就会找到更复杂的特征来区分真假。如此反复,直到生成器生成的结果,判别器已经判断不出真假了,这就算是训练好了。这样训练出来的生成器可以生成非常逼真的、即使是人眼也很难分辨的图片,但是是不存在的。到了这时候,计算机已经能学会生成相当逼真的画面了,例如下面这张人脸:

43e1019bc21ff16e03e218187774442d.png

虽然 GAN 因为引进了判别器,能生成非常逼真的图片,但是它由于要训练对抗网络,实在是太不稳定了,面对吞噬了网络巨量数据的超大规模网络来说非常难以控制。这时候另一个更好的选择出现了。也是现在的 AI 画画普遍使用的生成模型——Diffusion model(扩散模型)。

Diffusion model 生成图片的过程看似很简单,其实背后有一套非常复杂的数学理论支撑。复杂的理论先放一边,我们先通俗地聊聊 Diffusion model 是怎么运行的。

b4c3fef44ce8124bfa153cfafb25b4db.png

上图是 Diffusion model 运行的两个过程。右边是一个正常的图片,从右到左(Forward Diffusion)做的事情是在逐次叠加符合正态分布的噪声,最后得到一个看起来完全是噪声的图片,这就是所谓的“扩散(diffusion)”过程。你可以不严谨地想象成你有一块牛排,你一遍一遍地往上撒椒盐,一直到整块牛排都被椒盐覆盖到看不清原来的纹路。由于每次加噪声只和上一次的状态有关,所以是一个马尔科夫链模型,其中的转换矩阵可以用神经网络预测。

从左到右(Reverse Diffusion)做的事情是一步步去除噪声、试图还原图片,这就是 diffusion model 生成数据的过程。

为了达到去噪的目的,Diffusion model 的训练过程实际上就是要从高斯噪声中还原图片,学习马尔科夫链的概率分布、逆转图片噪声,使得最后还原出来的图片符合训练集的分布。

这个去噪的网络是如何设计的呢?我们可以从叠加噪声的过程中发现,原图和加噪声后的图片尺寸是完全一样的!于是很自然能想到用一个 U-net 结构(如下图)来学习。

88d970045d7b6830a0abdbab1314183d.png

U-net 是一个类似 auto-encoder 的漏斗状网络,但在相同尺寸的 decoder 和 encoder 层增加了直接的连接,以便于图片相同位置的信息可以更好通过网络传递。在去噪任务中,U-net 的输入是一张带噪声的图片,需要输出的是网络预测的噪声,groundtruth 是实际叠加上的噪声。有了这样一个网络,就可以预测噪声,从而去除掉它,还原图片。因为带噪声的图片=噪声+图片。这也是为什么 Diffusion model 会比其他方法生成图片更慢,因为它是需要一轮一轮去噪的,而不是网络可以一次性推理出结果。

以上就是 Diffusion model 生成图片的原理,是不是很简单呢!

02

如何控制画面内容

上面解释了计算机如何生成和真实图片相似的图画。接下来解释一下模型是如何理解我们想要它生成什么,并给出对应的结果的。

   2.1 如何理解文本?

玩过 AI 画画的人应该都知道,AI 画画最主流的模式是在网页输入框中输入一长串吟唱咒语。其中包括想要生成的内容主体、风格、艺术家、一些 buff 等,点击生成后就可以得到一张非常 amazing 的结果(也可能很吓人)。

文字控制模型生成画面最早的做法,其实更像是让生成模型生成一大堆符合常理的图片之后,再配合一个分类器来得到符合条件的结果。在海量的数据面前这显然是不够用的。这个领域的开山之作——DALL·E 中最值得一提的是引入了 CLIP 来连接文字和图片。

CLIP 模型其实就是用了巨量的文本+图片数据对,把图片和文本编码后的特征计算相似性矩阵,通过最大化对角线元素同时最小化非对角线元素,来优化两个编码器,让最后的文本和图片编码器的语义可以强对应起来。

f21fb4b91e37a2ea62da56d2663c0c87.png

如果不能理解 CLIP 的原理,只要记住 CLIP 把文字和图片对应起来了就可以了。它最大的成功之处不是用了多复杂的方法,而是用了巨量的数据。这样带来的好处是,很多现有的图像模型可以很容易扩展成文本控制的图像模型。原本需要大量人工标注的很多任务,现在只需要用集大成的 CLIP 就可以了,甚至还可能生成新数据,例如在 StyleCLIP 里用文本交互控制生成的人脸:

c34fa16e3d681e5f2c6723c57ff67892.png

最开始图片的文字信息大多是以打标签的形式通过大量人工标注来完成,有了CLIP 以后可以说是彻底打通了文字和图片之间的桥梁,使得图像相关的任务得到大大的扩展。说是 AI 画画的基石也不过分。有了这个 CLIP 模型,就可以计算任意图片和文本之间的关联度(即 CLIP-score),拿来指导模型的生成了。

这一步其实还分了几个发展阶段。最开始用的方法(Guided Diffusion)很naive:每次降噪后的图片,都计算一次和输入文本之间的 CLIP-score。原本的网络只需要预测噪声,现在网络不但要预测噪声还需要让去噪后的结果图尽可能和文本接近(也就是 CLIP-loss 尽量小)。这样在不断去噪的过程中,模型就会倾向于生成和文本相近的图片。由于 CLIP 是在无噪声的图片上进行训练的,这边还有一个小细节是要对 CLIP 模型用加噪声的图片进行 finetune,这样 CLIP 才能“看出”加噪声后的牛排还是一块牛排。

09051474620b1a0871baca8b73f487f8.png

这样做的好处是 CLIP 和 Diffusion model 都是现成的,只需要在生成过程中结合到一起。但缺点是本来就已经很慢的 Diffusion model 生成过程变得更慢了,而且这两个模型是独立、没法联合训练,得到更进一步的提升。

于是就有了 Classifier-Free Diffusion Guidence,模型同时支持无条件和有条件的噪声估计,在训练 Diffusion model 时就加入文本的引导。这样的模型当然也离不开很多很多的数据和很多很多的卡,除了网络爬取,还有通过商业图库构造出巨量的图片和文本对,最后做为成品的 GLIDE 在生成效果上又达到了一次飞跃。虽然现在看有点简陋,但是在当时来说已经很惊人了,恭喜大家,看到这里已经追上了AI绘画 21 年末的进度!

58d22fc3f61cc8241bd42202941860ed.png

   2.2 如何控制生成的结果?

再衍生一下:如果你试过用 AI 给你画头像,这时候输入条件就变成了图片,那么这样要怎么控制生成的结果呢?这里有几种不同的方法,其实算是不同流派了。这里我们将介绍3种:

第一种是直接提取图片的 CLIP 特征。就像文字特征一样去引导图片。这样生成出来的图片的内容比较相近,但结构不一定相同。例如下图,模型生成了相似的内容但是画风略微怪诞!

0c4a780650edf125a3833353ca06794c.png

第二种特别好理解,现在主流的 AI 画画 webui 里的 img2img 都是采用这个方法。就是对输入的原图增加几层噪声,再以这个为基础进行常规的去噪。使用你希望的画风相应的「咒语」,就可以生成和你原图结构类似但画风完全不同的图片。

叠加的噪声的强度越高,生成的图片和原图就差距越大,AI 画画的发挥空间就越大。

2fb7efdd58c5229ab970ac50b954e32d.png

上图是用这个方法生成的二次元形象,你把屏幕放远点看这两张图的色块是相近的。因为右边的图片就是基于左边叠加了厚厚的“椒盐”来作为基础生成的,大致的色块结构依然保留了,但模型也加上了自己的想象(通过文本引导)。

第三种方法是用对应的图片去 finetune 生成网络(Dreambooth),如下图。给模型看很多很多小狗狗的图,让模型学到这只小狗狗的样子,这样只需要再加上一些简单的词汇就可以生成各种各样的小狗狗。

12c331703106a85e4aa0fa9b321700ff.png


03

为什么 AI 画画效果如此惊人——几个里程碑级模型

上面解释了计算机如何生成和真实图片相似的图画,以及模型是如何听懂我们想要它生成什么并给出对应结果的。到此,AI 画画的基本原理已经介绍得差不多了。我们可以发现,其实大部分都是「改进」的工作,但是效果是真的很惊人!在这期间,涉及到很多训练网络的 tricks。

现在最火热的模型就是 Stable Diffusion,因为开源且效果好,得到了众多人喜爱。另外基于此,吸收了巨量二次元插画的 NovelAI 也在二次元画风上异军突起,甚至在火热程度上和 Stable Diffusion 相比,有过之而无不及。

讲 Stable Diffusion 为什么这么好,要先从 Latent Diffusion Model 谈起。

让我们来复习一下 diffusion model 的原理:

40c357788a18219a822d638eaffe0890.png

对一个带噪声的输入图片,训练一个噪声预测 U-net 网络,让它能预测噪声,然后再从输入中减去,得到去噪后的图片。

一般的 diffusion model 是对原始图片进行加噪去噪,噪声图片和原始图片尺寸是一样的。为了节约训练资源和生成时间,通常会用较小的图片尺寸训练,再接一个超分辨率模型。

8e0a7c856290a4c15e54a2ae25df615a.png

而在 Latent Diffusion Model 中,diffusion 模块被用于生成 VAE 的隐编码。于是整个流程变成了这样:

84fca9294570c1742100954d3afc973f.png

图片先用训练好的 VAE 的 encoder 得到一个维度小得多的图片隐编码(可以理解为将图片信息压缩到一个尺度更小的空间中),diffusion model 不再直接处理原图而是处理这些隐编码,最后生成的新的隐编码再用对应的 decoder 还原成图片。相较于直接生成图片像素,大幅度减少计算量与显存。

第二个改进是增加了更多的训练数据,并且还多了一个美学评分的过滤指标——只选好看的图片。这就像是如果想要学会画漂亮的画,就要多看看大艺术家们的 masterpieces 一样。

训练集里都是漂亮的图片,例如这样的:

02b8d828dffc47613027e6a19da22645.png

或者这样的:

365c4ba4c9376ab95278876ef88183c5.png

模糊的图、有水印的图都被 pass 了,让机器只从漂亮图片里学画画。

最后相比 Latent Diffusion Model 的改进,是用上文提到的 CLIP 来让文本控制图片的生成方向。

这里也提一下二次元画风的 NovelAI。其实在技术上没有非常新的内容,就是拿巨量二次元图片去 finetune 原始 Stable Diffusion 模型。主要一些改进是 CLIP 用了倒数第二层更贴近文本内容的特征、把训练数据扩展为长宽比不限(为了能容纳下完整的人像)、增加了可支持文本输入长度从而让咒语变得更灵活也更复杂。笔者个人认为效果好还是因为吞了巨量的图片,外加用户的热情让这个模型迅速发扬光大,甚至还有《元素法典》、《参同真解》等众多咒语书,更衍生出了众多辅助绘制工具~

04

ControlNet:让我们控制扩散模型

由于 diffusion 超强的学习能力,理论上网络是可以还原出训练集里的每一张数据的。所以只要数据足够多、足够好,模型就可以生成非常好的图片。和人学画画不同,如果人的难点是画不出来,那么模型就不知道该往哪个方向画。所以控制模型生成其实就是想办法让模型听话,按照你的指示生成结果。

在上文中,简单展示过 AI 画画中 img2img 的效果。原理是把左图加一些高斯噪声(撒撒黑胡椒)然后作为底图来基于它生成。所以基本上色块分布是接近的,但是很难控制的更细节。

84ee79b0d327cf5f853065a1b1cdc1bf.png

今年引起爆炸性话题的 ControlNet,则是可以通过任何的条件控制网络生成。原来模型只能得到一个文本的生成引导,现在它可以听懂任何基于图片提取的信号了,只要你拿一组成对的图片去训练!

这个方式出来以后极大地扩展了可玩性,而且官方已经提供了非常多常用的训练好的控制网络。你可以用 depth 控制结构生成各种场景:

a552b0a0d12a73f7188eec637d8bd818.png

可以直接拿线稿上色:

61cc0e50adb31fde380ffad3a3399fab.png

可以随便涂几笔就生成复杂的图片:

cc6f45c1d2e5822e61f17eb02daca59d.png

还可以通过姿态检测生成很好的多人结果:

7a2ab5bc479755d9cd50d070f2be08e0.png

3f59e8a896a7680ca0606668d3abd3db.png

只要你想,你甚至可以自己训练。比如说就有人训练了手脚的控制器,解决了 ai 不会画手的问题:

7ffbb65f2402e0b09edd5c66c1cfc020.png

206ead3dfa1ecd1340a76fd45d64424b.png

这些控制结果还可以一起用,例如结合人体姿态和深度图:

4c46936f4c951bf92c4bb66bbeea6851.png

甚至不需要来自同一张图:

e7030f19ab0815956cf491fb24a7decd.png

效果是真的非常惊艳,但原理上其实实现得比较简单。为了给原始模型增加额外的条件输入,把整个网络复制了一份,固定原始网络来保证输出的稳定性。原始的网络输入依然是噪声,而复制的 control 网络的输入是控制条件(深度、姿态等)。把两个输入和输出加起来,用成对的数据集(输入是深度图,输出是原图这种感觉)去训练控制网络,达到控制条件能够很好控制生成结果的程度,就训练好啦!并且这个训练本质上还是在做 finetune,所以耗时也不算很大,和直接 finetune 网络差不多。

130a477c4a0497e3a8f7e550a15766dd.png

05

潜在上限

ControlNet 解决了多人的姿态控制以后,模型已经可以很好地生成非常合理的结构了。这时候就会面临另一个问题,模型的细节要如何生成得更好?

想要得到高质量的图片,最直接的方式就是调大输出的分辨率。分辨率越大,细节画得就越好(尤其是人脸)。但是实际上高分辨率的结果非常容易崩掉,例如出现两个身体时因为训练模型里如此高分辨率的图片较少。并且分辨率高了以后计算成本飙升,会算得很慢。

0be400fdfaabb76baa05a15cb072ace2.png

于是一种常见的做法是先生成较小分辨率的结果,然后对图片做超分(就是把图片放大还要保证清晰度),流程如下。

eda6038fa006401eef4d38f5b13284dd.png

这么做可以保证结构的合理性,而且速度快非常多。但是超分模型对细节的补完不一定能做得很自然,而且容易有过于锐化的结果。除了传统超分模型,还有同样基于 diffusion 模型的超分算法。由于 diffusion 相当于重绘了,所以可以得到更好的细节效果。但是图片尺寸非常大,跑起来更慢了。

另一个现在被广泛使用的方法是 latent upscale(webui自带的Hires.fix即可实现),流程如下。

d99ce3af972ffd2519130df02677384c.png

之前写到过,stable diffusion 的结构优势之一是它是由压缩图片信息的 VAE 和对 latent 进行去噪的 U-net 网络组成,所以它天然适合基于 latent 的超分方法。

Latent upscale 就是在图片经过 VAE 压缩后,直接对 latent 进行超分,然后再喂给 VAE,就能得到 x2 的图片了。如果和 stable diffusion 结合,那就是 SD 的U-net 输出 latent 以后,先过一遍 latent upscale,再喂给 VAE 解码。

当然,对 latent 做 upscale 也有基于 diffusion 的方法并且效果应该是最好的。当然于此而来的代价就是耗时也增加了。对图片做普通超分和对 latent 做基于 diffusion 的超分结果对比如下。

b4fd340b31492e7bf162b702b5a8d2af.png

个人认为效果好主要是因为 diffusion,基于图片做 diffusion 超分应该也可以达到这个质量,只不过耗时更久。放一张 latent upscale + controlnet 得到的高清美图。

d7377a39c6798da97c1be5d110579c77.png


06

LoRA:大型语言模型的低秩自适应

除了 ControlNet,近期 AI 画画领域另一个不得不提的就是 LoRA,前面的水墨画美少女就是融合 LoRA 模型生成的。

要讲 LoRA 就要先解释模型的 finetune(微调)。模型的 finetune 指的是什么呢?其实就是当你有一个现成的,很厉害的大模型(pre-trained model),你想要让它学一些新知识,或者完成一些更面向具体应用的子任务,或者只是为了适配你的数据分布时,就需要拿你的小样本数据去对模型进行重新训练。这个训练不能训太久,否则模型就会过拟合到你的小样本数据上,丧失掉大模型的泛用性。

Pre-train + finetune 是机器学习中非常常见的组合,在应用上有很大价值。但是其中有一个问题就是“遗忘”:模型会在 finetune 过程中不断忘记之前已经记住的内容。

常见的解决方案有两个:

  • replay:就是也把原始知识过一遍;

  • 正则化:通过正则项控制模型参数和原始参数尽量一致,不要变太多;还有一个是Parameter isolation(参数孤立化),这个是通过独立出一个模块来做 finetune,原有的模型不再更新权重。

参数孤立化是最有效的一种方式,具体有好几种实现方式。例如 Adaptor 就是在原模型中增加一个子模块、固定原模型,只训练子模块。是不是听起来很熟悉?是的,ControlNet 就是一种类似 Adaptor 的方法,同理还有 T2I-Adapter,也是通过增加子模块来引入新的条件输入控制。

b1727a9346756be469988a429453ed9c.png

LoRA 则是另一种参数孤立化策略,也在 AI 画画找到了用武之地。它利用低秩矩阵来替代原来全量参数进行训练,从而提升 finetune 的效率。

dfdd10f9c753fd7601f85394bd4a0168.png

可以和之前最常用的 finetune 方法 DreamBooth 对比一下。

2f634439d782bf69f318d886d9c525a0.png

对于 DreamBooth 来说,它是直接更新整个大模型的权重来让模型学习新概念的。虽然可以通过正则项避免遗忘,但是 finetune 后的模型依然非常大(和原模型一样大)。

8bee02f977e1140183de4e7ed1821283.png

而使用 LoRA 后,LoRA 影响的只是其中一小部分(通过低秩矩阵叠加到大模型网络上的)权重,所以 finetune 起来更快,更不吃资源,而且得到的 finetune 模型非常小,使用起来方便很多。

由于 LoRA 在结构上是独立于大模型的,所以它有一个额外的好处是替换大模型可以得到不同的、令人惊喜的结果。例如用水墨画训练的一个很好看的 LoRA 模型“墨心”,结合国风美女的基础大模型,可以生成穿着中式服装的水墨画美少女:

285f3923990fea021c41500d69dcd90f.png

在网友写的《AI 形象生成指南》中,提出的方法就是利用可以生成亚裔女性的真人大模型,叠加从二次元大模型 finetune 出来的二次元女性形象LoRA,来生成带有角色特征的真人 coser 照片:

49ef910117362f831d2e33b520cd4402.png

而且 LoRA 也非常方便进行模型融合。例如说增加另一个韩国偶像 LoRA,得到的结果就融合了两者的特色:

df2aa2b2d2da440ea19495ca82cb4313.png

在使用上来说,LoRA 很像是模型的“插件”,可以在基础模型上叠加想要的效果,或者把各种想要的效果加权组合叠在一起,可以产生很多令人惊喜的结果。

当然 LoRA 由于是 finetune 模型,所以画风会趋于单一,是好是坏见仁见智,在需要固定画风 orID 的时候能发挥令人惊喜的用处。但是,使用现实中的真人照片训练 LoRA 并公开模型非常缺德,请各位读者不要这么做。

07

mov2mov

讲完 LoRA 和 ControlNet 了再顺便提一嘴它们的结合产物—— mov2mov,其实原理上就是组合了之前的各种技术。例如 img2img 来保证背景和主体的连续性,controlnet 提供更多控制条件来增强对应性,还需要 LoRA 来保证输出的结果能尽量一致。

除此之外,传统的视频防抖算法如窗口平滑、插帧,这些 buff 全部叠加上去,才可能得到一个依然很抖的效果。但是其中最重要的是,你需要一个高质量的驱动视频。感兴趣的可以自行搜索了解。几乎算是重绘 MMD 的情况下(简单中的简单模式了)视频效果依然不算理想,想要有更好的视频生成效果还是有一段距离的。

以上是本次分享全部内容,欢迎大家在评论区分享交流。如果觉得内容有用,欢迎转发~阅读完本篇后,推荐各位进一步阅读本公众号今日推送的次条,跟随腾讯工程师的教程快速上手部署 Stable Diffusion Web UI,以及《给想玩AIGC的小白:教你从0搭一个图文视频生成网站(附插件&源码)》一文,上手建设你的 AI 绘画网站~

点下方关注并星标腾讯云开发者,回复「AIGC」,一键领取0基础AI绘画网站搭建教程、模型源件、工具插件、网站源码和部署模型所需GPU服务器限量优惠券。

-End-

原创作者|周艺超

技术责编|周艺超

e0af37b5ff1e3a0b150b08e172f5ca98.png

f3bbfb9ec731d1071530db678ec9bdbe.png

b74c084b5aedaaa98eb1b596d3beee0c.png

fbf1b72fbb9ad46e6ba12efa687bb6b5.png

0f6ecad6fa6d288070fc5087f6239af4.png

程序员用现有 AIGC 代表产品(如GPT-4等)开放的 API 接口,可以做哪些自研工具?有哪些新奇/实用的使用方式?

欢迎在评论区聊一聊你的创想。在4月17日前将你的评论记录截图,发送给腾讯云开发者公众号后台,可领取腾讯云「开发者春季限定红包封面」一个,数量有限先到先得😄。我们还将选取点赞量最高的1位朋友,送出腾讯QQ公仔1个。4月17日中午12点开奖。快邀请你的开发者朋友们一起来参与吧!

点下方关注并星标腾讯云开发者

回复「AIGC」

一键领取0基础AI绘画网站搭建教程、模型源件、工具插件、网站源码和部署模型所需GPU服务器限量优惠券

相关推荐

大模型的Agent Skill功能,在LLM HTTP底层交互流中是怎么承载的?

网络文章文本的 skill,昨天我实现了之后也就开始好奇起 Skills 的底层原理了——相比起各种花里胡哨的 agrnt 应用,我一直以来都很对大模型在纯粹的 HTTP 交互层面是如何交互的更感兴趣。Skill 的全部"魔法"都发生在 system prompt 的措辞和 SKILL.md 文件的编写质量上——本质上是一种 prompt engineering + 文件系统的组合。但是各种天花乱坠的 skills,是如何在底层的 HTTP 中,与大模型——这个只会嘴遁的工具交互的呢?

QcloudCommunity的博客 406

万字入门AI Infra:深入理解大模型中的数学与Infra优化

关注腾讯云开发者,一手技术干货提前解锁👇AI Infra科普、入门或者进阶 ~~ 不到 5 万字,带你融会贯通理解大模型的数学、算法、硬件到系统工程。任何问题欢迎沟通交流。可怕,我竟然有点认同这句话。当然大概率是因为姚顺宇太懂AI了,而我则是因为无知者无畏。不过仔细想想,大模型推理中的数学逻辑确实不复杂,很多原理只需要高中数学知识就能看懂。但是为什么像 vLLM 这种推理系统这么复杂呢?本文将拆解大模型中几个核心操作(RMSNorm、Softmax、Causal Mask、Sampling)背后的数学与

QcloudCommunity的博客 1166

平平无奇的源码,竟藏着Agent的核心秘密?

System Prompt 是剧本,Skill 是剧本的扩展包,Agent Loop 是演员按剧本行动。欢迎留言,我们将邀请作者针对性回复你的评论,我们将选取1则优质的评论,送出腾讯云定制文件袋套装。,让 Agent 能主动"巡逻",而不只是被动等待用户消息。OpenClaw 的 System Prompt 分层结构。的"行为底线",任何 Skill 或用户命令都无法覆盖它。精华 2:Skill 的"按需加载"避免 token 浪费。精华 1:System Prompt 是"分层乐高积木"

QcloudCommunity的博客 426

QQ音乐Harness Engineering实践

一个看似简单的需求,背后可能牵动服务调用链、配置、灰度、埋点、错误码、接口契约和历史兼容性。当 AI 开始快速生成大量代码,真正的瓶颈就不再是"写不出来",而是"看不完、想不清、管不住"。在对话式编码阶段,一种典型的工作模式逐渐流行:开发者把需求丢给 AI,扫一眼输出"看起来对"就直接采纳,不审 diff、不追问逻辑、不验证边界。以音乐商业化业务为例,一个需求可能从 TAPD 单开始,经过需求评审、技术方案、服务影响面分析、IDL 契约变更、业务代码实现、测试验证、CR、灰度上线,最后才进入稳定运行。

QcloudCommunity的博客 713

从Prompt、Context到Harness,工程的三次进化与终局之战

同时,强制要求散落各处的决策记录(Slack、邮件、文档)全部迁移至代码仓库,确保 Agent 的唯一信息来源是可信的、版本受控的仓库。更坑爹的是,研究表明,当上下文过长时,模型会出现"中间遗忘(Lost in the Middle)"现象:它对开头和结尾的内容记忆较好,对中间大段内容的关注度大幅下降。这篇文章,我想带你完整走一遍这三次进化的逻辑:它们分别解决了什么问题,它们之间是什么关系,它们的边界在哪里,以及:当三者融合,AI 工程师的终极形态究竟是什么?大语言模型的本质,就是这位金鱼助理。

QcloudCommunity的博客 718

让Skill自己训练自己:8阶段Loop、3层评测、5维AND门控,从此实现自进化

所以每一轮改动都是有据可查的,不是「感觉这里可以优化」,而是「Case 41 挂了,因为 agent 把离职问题路由到了邮箱分类,但正确答案在通讯录,所以我改 root_index.md 加个易混淆提示」。但让我最后决定把它记录下来的,不是这的个「吸收」过程,而是它真的在替我探索我不想费脑力触达的边界,这看起来更像是一个机器智能应该有的样子。不准跨层,每轮只改一层的东西。但我经过这 19 轮之后觉得,更准确的描述是互补——你在明处看着,AI 在暗处替你试错,你看不见的那一半就是 AI 能贡献的地方。

QcloudCommunity的博客 1127

只加两行代码,为什么要两天?一文深度理解业务系统的复杂性

关注腾讯云开发者,一手技术干货提前解锁👇业务系统复杂性一直是令开发者头痛的问题。复杂的不是增加一个需求需要耗费多少时间,而是在增加一个需求后带来的蝴蝶效应:其它功能会不会受到影响、要如何去找到这些影响,最终如何实现系统正常运行......功能之间隐秘增加的耦合、不可避免的代码腐化在导致业务复杂性增加。大家都在说的软件开发提效到底在提什么?程序员日常工作中应该如何提升开发效率?敏捷开发、瀑布流式开发孰是孰非?欢迎阅读。业务背景与目标我依然非常清晰地记得某个时候,我所在团队 Leader 曾讲过一段话:“我担

QcloudCommunity的博客 712

从零设计生产级 Multi-Agent Harness:架构、评估、记忆、成本与 MCP 工具接入全拆解

在 AI Agent 领域,Multi-Agent Harness 指的是把多个 Agent 的能力、工具、状态、通信、编排、监控统一收束在一个运行时之内的框架。第三,Agent 路由。一个输入框,一个大模型,几个工具,一段写得很漂亮的 System Prompt,再配上一个炫酷的前端,看起来就像一个能干活的“数字员工”。Multi-Agent 完全不一样——它有计划、有中间步骤、有工具调用、有 Agent 协作、有重试、有反思、有最终合成。增加 Budget、权限、重试、压缩、轨迹评估、审计、回归测试。

QcloudCommunity的博客 710

拆完Hermes源码,我发现Agent的“自我进化“根本不需要训练模型

两个月 5.2 万 Star,Hermes Agent 用一个"LLM 审判官"机制实现了 Agent 的自我进化——不改模型权重,只改"怎么用模型"的策略。OpenClaw(社区昵称"龙虾"🦞)是 2025-2026 年最火的开源 Agent 框架,30 万+ Star,插件市场 ClawHub 里有数千个插件,能接入 Telegram、WhatsApp、Slack、飞书、企业微信——几乎是一个"个人 AI 操作系统"。Skill 是英语写的,Memory 是英语写的,审查 Prompt 也是英语写的。

QcloudCommunity的博客 909

AI Infra 其实没有多少新东西

传统 Infra 追求横向扩展,而 AI Infra 呈现 “AI 大型机”特性,是因为传统后台服务的可以容忍毫秒级延迟,但 AI 集群不行,GPU 的算力是 CPU 的数百倍,微秒级的延时等待也会造成很大的算力损耗,需要硬件的高度集成。在可预见的1-3年的未来,这样的专用硬件+网络的集中式架构很难发生比较大的改变。与之相似,模型推理的批处理就是将多个输入样本打包(batch),将原本串行的 N 次轻量的推理计算,合并为 1 次重量的计算,实现单位时间内处理更多的请求,提高了 GPU 利用率。

QcloudCommunity的博客 824

程序员越早想通这些越好

永远没有正确架构,你永远无法偿还完所有的技术债务,如同你永远不会设计出完美的界面,请避开完美主义的陷阱,永远没有完美的代码,能够满足当前需求,又为未来不管是自己还是他人留有扩展空间,就很好了。我们努力的方向就是将现实世界映射到有限的数据结构中,这就需要用户自定义类型,如果你的代码中包含类似 trader portfolio 这样的概念,你就可以使用他们的名称来建模,而不是使用基本数据类型复杂嵌套表述你的目的。从另一个角度看,代码里的注释都是补丁,是碎片化的,局部的注释很难推导模块整体的顺序及耦合关系。

QcloudCommunity的博客 465

RAG已死?不,是Grep回归了!

这样一来可以直接复用已有的计算缓存,只为新增的增量部分付全价,前面累积的大头按约 1/10 的缓存价计费。所以实际的工具组合方式是灵活的:Grep(默认模式)→ Read 是最常见的路径,但 Grep(content 模式)可以独立使用,LLM 也可以直接调 Read(如果已经知道文件路径),或者一次同时发起多个 Grep 并行搜索。它从零开始构建自己的对话历史,不继承主对话的消息,这意味着它搜索过程中产生的大量 grep 结果、代码片段都留在自己的 context 里,主对话只收到一段总结性的文本结论。

QcloudCommunity的博客 576

深入浅出Harness Engineerring之核心模式与理念

在智能体生命周期的关键节点(如会话开始、工具调用后)自动触发预设动作(如代码格式化),由系统确保关键流程被执行,不依赖可能被模型遗忘的指令。简单讲就是利用向量存储这个技术,来实现模糊检索,原理是:即使字面不同,但语义相近的文本,其向量在数学空间中的位置也很接近。根据命令类型、参数和影响,自动评估其风险等级(安全、有风险、危险),并采取自动执行、请求确认或直接拦截等不同策略。关键特性是可隔离、可重建、可扩展。不是一次判断就定终身,允许你改变、允许情况复杂,通过不断观察、思考、调整,越来越懂真实的你。

QcloudCommunity的博客 623

Harness Engineering实践心得:如何高效驾驭AI?

但如果这些经验被拆成一条条 Rule、一个个 Skill、一项项 Script 检查——"XAML 不能有中文"、"编译要用这个路径的 MSBuild"、"SVN 命令必须带认证参数"——AI 就能在秒级时间里"吸收"十年的踩坑经验。然后可以看到下方的图,我的PM会很顺利的调度其他agent分别负责不同的事项,遇到问题的时候也能准确的找到合适的agent。MCP 本质上是在扩展 AI 的"感知范围"——Rule 管"该怎么做",Skill 管"怎么操作",MCP 管"能看到什么、能碰到什么"。

QcloudCommunity的博客 841

从第一性原理思考 Agentic Engineering

需要注意的是,这一结论是有条件的:如果 AI 缺乏领域知识,过早介入反而可能引入 1.2 节所述的"似是而非"损耗——因此上下文供给(实践 1)是 AI 全链条参与的前提,而非结果。通过一个专门的自迭代 Skill 实现——当 AI 在协作过程中识别到自己被纠正(用户否定了 AI 的输出并给出了正确方向),它自动评估这个错误的根因,搜索现有的 Rules 和 Skills 中是否已有针对该类问题的处理规则。事实上,越是复杂的项目,工程师的认知负担越重(公理 3),AI 分担认知负担的潜在边际价值也越大。

QcloudCommunity的博客 757

万字干货!Harness Engineering如何工程化落地?

关注腾讯云开发者,一手技术干货提前解锁👇Harness Engineering 的概念已经火了有一阵了,全网很多文章基本都是在讲理念,讲为什么今天做 AI 开发,不能只靠一段提示词,也不能把模型当一个“更聪明的代码补全”。但与此同时,一个问题也在持续地发酵:这个问题特别重要。因为 Harness 这个词听上去很大,很像一个抽象的方法论,但它如果不能落到工程、目录、文档、脚本、工作流里,那它最后就只是一句漂亮的话。事实上,不同项目落地出来的 Harness,表面上可能完全不一样。有的项目是 CI 很强,有的

QcloudCommunity的博客 1169

全方位对比:Hermes VS OpenClaw

多账号矩阵运营 如果你的业务涉及同时管理多个社交媒体账号、多个平台的内容分发、多渠道的客户互动——OpenClaw是目前市场上的"无可替代的底座"。一个有专业背景的个人,现在可以快速构建一个垂直领域的AI助手:比如"财务分析Hermes"、"法律咨询Hermes"、"技术架构Hermes",直接通过微信提供服务,积累自己的专业IP。跨平台生态融合 如果你的工作流涉及飞书、Slack、Discord等多个平台的深度集成,需要这些平台之间的数据流转和联动——OpenClaw的生态支持是强大的。

QcloudCommunity的博客 1217

一文讲透:Harness Engineering即控制论!

而研发模式的升级我认为将会是一个飞跃的过程,之所以现在我们仍然需要需要参与编码,一个非常大的原因就是缺乏传感器和基建,仍然需要人来串流程,比如需要人来验证UI是否正确、需要人来告诉AI代码不符合代码规范,因此在有些场景我们仍然感觉 AI 完成的很吃力,但这不是 AI 能力不行,而是我们并没有为 AI 提供友好的环境……控制论中的突变理论介绍了矫枉过正和飞跃现象之间的矛盾,如果质变中经历的中间过渡态是不稳定的,那么他就是一个飞跃的过程,如果中间过渡态是稳定的,那么他就是一个渐变的过程。但是这些阶段要解决的。

QcloudCommunity的博客 1203

神级开源插件!一句话让QClaw变3D小镇,Agent工作可视化,赛博云监工

这个架构是翻了几次车才想通的—原有AI的实现机制是用 setTimeout 猜动画时长导致了幽灵 NPC、工位撞车、越改越崩,后面我停下来换了思路,推翻原有的架构,按照“意图+回传”的架构进行重构,之前的问题一次性全部解决。15 天,我和 AI 吵了 185 次架, 4.5 万行代码,开发了一款 QClaw / OpenClaw 的UGC游戏插件,这可能是人类跟 Agents 交互的新范式,插件已完全开源,有需要的欢迎自取~我天天用,用着用着我就在思考,Agent 产品现在的交互体验,基本都一个样。

QcloudCommunity的博客 1196

一文搞懂Hermes:新顶流Agent如何从经验中自我进化

Voyager 是一个能在 Minecraft 中自主探索、学习技能、无限积累能力的 AI Agent,它提出了 "Skill Library"(技能库)的概念——Agent 将成功的行为序列编码为可复用的技能函数,存储在一个持续增长的代码库中。如果 Skill 的名称和描述不够精准,或者用户的任务描述与 Skill 的触发条件有语义差距,Agent 可能会错过相关的 Skill。如果进程在写入过程中崩溃,目标文件要么是旧内容(还没被替换),要么是新内容(替换已完成),绝不会出现写了一半的损坏文件。

QcloudCommunity的博客 2634

自掏腰包一万元,拥抱AI这一年,我的工具、实践和思考

其实也很好理解,过往的每个领域(比如前端、后端、设计、测试等等)都主要是这个领域的从业者在为它添砖加瓦,但是大模型时代的 AI 应用领域却几乎是所有使用 AI 的人类一起在迭代,无分领域,无分文理,无分老少。因为每个时期的 AI 都有着不同的特点,很多时候当我费尽心思去钻研,自以为有点弄明白 AI 应该怎么玩的时候,基座模型和行业范式常常就会迎来颠覆式的变革,很多过往的经验都会倾覆,然后只能从头再来。过去一年多,被热议的 AI 范式大概是沿着四个阶段递进演化,每一个阶段其实都在解决前一个阶段的核心问题。

QcloudCommunity的博客 627

办公Agent的CI/CD时刻到来了

核心观点是:企业给员工配了一堆 AI 工具,试点跑了几百个,但真正拖慢 AI 转型速度的瓶颈不在模型能力,在"最后一公里":AI 输出和实际工作流之间的那道鸿沟。代码写完,打个 tar 包,开 FTP 传到服务器上,SSH 进去解压,改配置文件,重启服务,刷一下页面祈祷别 500。你复制,切窗口,粘贴到腾讯文档里,发现 Markdown 格式全乱了,手动调标题层级,代码块重新标记语言类型,表格散架了重排一遍。模型是越来越聪明了,但"生成"到"落地"之间那段路,还是你自己在走,一步一步,手动搬运。

QcloudCommunity的博客 608

4亿token买来5个教训:让6个AI Agent连写4天代码发生了什么?

Watchdog 检测到崩溃 → 启动诊断 Agent 分析原因 → 诊断 Agent 跑满 20 轮没搞定 → Watchdog 判定“已修复”,重启系统 → 重启的系统因为诊断 Agent 留下的环境变量被继承,连续 3 次拒绝启动 → 触发连续失败保护退出 → Watchdog 第 3 次巡检,发现进程和记录文件都没了,尝试手动重启,自己也停了。启动前我翻了论文、做了架构设计、写了监控+修复异常的脚本。这个发现让我的情绪从沮丧变成了兴奋——不是那种"终于修好了"的释然,是"我找到根因了"的快感。

QcloudCommunity的博客 584

赛博斗蛐蛐:9大模型决战三国志,天命在谁?

我猜是这样的,当Gemini面临决策的时候,一系列关键词比如 守城,劣势,粮草,三国等等,在语义层面的关联性中LLM发现了竖壁清野这个关键词概率非常高,所以以此为策略,然后再根据这个策略完美执行操作。MiMo 的外交是三方中最精明的。Kimi作为国产模型,也同样颠覆了我对他的看法,最后的比赛他甚至一度是优势者,存在很多夺冠的可能性,要知道他的对手可是claude和gemini,而他经常出兵慢,回过头来想想或许正是他的策略,毕竟中后期他的优势都来自于稳健的发展和较少的战斗频率(和claude比).

QcloudCommunity的博客 874

Claude Code是怎么知道你在骂他的?这 12 条发现值得关注

确实存在——5,500+ 行,集成了消息队列、工具装配、MCP 编排、会话状态、权限、分析、文件持久化和优雅关闭,基本上一个文件干了所有事。对抗虚假声明——"不要在输出显示失败时声称所有测试通过,不要压缩或简化失败的检查来制造绿色结果"。完整的 KAIROS 是一个持续驻留的守护进程,能感知你在不在电脑前、主动寻找有用的工作做,更像是住在终端里的全职同事。源码里藏着一个叫 "Buddy" 的电子宠物系统,完整度令人惊讶——这不是一个 TODO,而是一个从数值系统到 ASCII 动画都实现了的完整功能。

QcloudCommunity的博客 701

逆向深扒Claude Code源码,我发现了什么!?

Anthropic 内部用户获得更严格的质量控制 prompt、更好的验证机制(独立 Verification Agent)、以及针对 model 弱点的专门对策(如 Capybara v8 的 29-30% 错误声明率对策)。这不是代码混乱的标志——它是整个 Agent Loop 的心脏,所有的流式处理、工具调度、上下文压缩、子代理管理都在这个文件中协调。这种"胖核心"设计是刻意的:保持核心循环的原子性,避免分散到多个模块导致的协调复杂度。核心价值:Fork 代理的工具输出不会回到主代理的上下文窗口。

QcloudCommunity的博客 892

一文讲透如何构建Harness——六大组件全解析

本文将从"裸模型的四个硬伤"出发,逐一拆解 Harness 的六大组件——文件系统、Bash + 沙箱、记忆(AGENTS.md)、Web Search + MCP、上下文工程、编排 + Hooks——带你看清 AI Agent 真正的竞争壁垒,不在模型层,而在 Harness 层。如果你用过 Agent 做复杂任务,你一定有过这样的体验:一开始 Agent 的表现很好,但随着对话变长,它开始"变笨"——遗忘之前的约定,重复之前犯过的错误,甚至对同一个问题给出前后矛盾的回答。对于简单的问答场景,这无所谓。

QcloudCommunity的博客 761

Harness Engineering 来了,SDD 还有意义吗?

他们的解法是把「品味」编码进规则,然后用一个定期运行的「doc-gardening」Agent 自动扫描漂移、发起修复 PR——「技术债务就像一笔高息贷款,不断地以小额贷款的方式偿还,总比让债务不断累积要好」。代码仓库本地的、已版本化的工件,才是 Agent 所能看到的全部。在 Vibe Coding 模式下(即不做规划、随意向 AI 提需求的开发方式),大量设计决策、跨服务约定、「为什么不选另一个方案」的讨论,全部停留在一次性的 AI 对话里——下一个人,或者下一次 AI 会话,完全无从获取。

QcloudCommunity的博客 419

零废话!一文讲透从0构建AI Agent

每个工具都要写一套"定义→解析→执行"的胶水代码。上下文管理就是在"记住足够多"和"别超标"之间找平衡,常见策略包括滑动窗口、摘要压缩、RAG 检索增强。上下文窗口是 Agent 的"工作记忆",但它有硬性限制。LLM 负责"动脑"决策,代码负责"动手"执行。这是从"聊天机器人"进化到"Agent"的关键一步。每次调 API 都把完整对话历史发过去,LLM 本身是无状态的,"记忆"完全靠客户端的数组模拟。这样 Agent 一开始就知道自己"在哪里"、"手头有什么",不需要先花一轮工具调用去探索环境。

QcloudCommunity的博客 711

距离AI把小编我裁掉还有72小时

这是一个基于 OpenClaw 开源生态打造的本地化 AI Agent 助手,已于上周开启全量公测,无需复杂配置,三步即可上手,自带安全防护,支持微信直连绑定,内置多款优质国产大模型,现阶段也是完全免费使用,基本上前面提到过的痛点都可以靠它解决。对了,这里特别强调一点,上面的截图让产品同事汗流浃背,再三找我确认 QClaw 思考过程中优美的“草”字说法,不会是默认出现的吧?AI 好,AI 得学,但更重要的是,在你的工作和生活里,哪些东西是能结构化地被 AI 所接入的,不要死守着那些脏活累活不放。

QcloudCommunity的博客 673
上一篇: 腾讯云副总裁黄俊洪:驭“云原生”之力,驱动产业互联网持续发展
下一篇: 助力研发效能变革,第七届Techo TVP 开发者峰会圆满落下帷幕
腾讯云开发者
腾讯云开发者 企业官方账号 企业官方账号
博客等级 码龄10年 6291粉丝 1962原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值