1、 2023.8电子产品世界讲座L ectures 细观Diffusion隐空间里UNet的训练流程(一)The training of diffusion UNet on the latent space高焕堂在上一期里,您已经领会 Encoder 和 Decoder 两者的涵意和功能了。请您看看图 1 里,在两者之间有个空间,通称为:隐空间(latent space)。本期以 SD(Stable Diffusion)模型为例,来欣赏其隐空间里的架构之美。由于 Diffusion 隐空间里的主角是:UNet 模型。于是,先来细观 Diffusion 隐空间里 UNet模型的训练流程。1 简介U
2、Net模型在本专栏里,曾经详细介绍过AE(autoencoder),相 信 您 对 AE 已经很熟悉了,不再 重 复 介 绍 AE模型。UNet 是 AE模型的延伸型式。由于典型 AE 模型的特性是:其前段 的 Encoder(编码 器)是 特 征 提取的过程,会过滤掉一些信息。这些被过滤掉的信息,就没有办法传递到后段的Decoder(解码器)了。于是,UNet 就来延伸 AE 模型,将原有的 Encoder与 Decoder 之间增加了一些连结,例如 Encoder 的每一层输出都与对映层级的译码器连接。因此使得编码器每一层的信息,额外输入到译码器的对映层,让 Decoder在重建的过程中,
3、比较不会遗失掉重要的信息了。而Unet 模型的架构如其名呈现一个 U 字形(图 2)。如此,UNet 使用对映层级的连接来保留小且精细图2(来源https:/ ENGINEERING&PRODUCT WORLD 2023.8Lectures 电子产品世界$讲座尺度的特征。2 Diffusion隐空间里的UNet角色在 AIGC 潮流中,SD(Stable Diffusion)产品的推出是 AIGC 图像生成发展历程中的一个里程碑,提供了高性能模型,能快速生成创意十足的图像(图 3)。SD 提供两项主要功能:输入文本(Text)提示来生成图像(即 text2img);输入图像,然后根据文本描述来
4、修改图像(即输入 text+img)。在SD 隐空间里,UNet 扮演关键性角色(图 4)。在 SD 隐 空 间 里,使 用 了 1 个UNet 模 型,并 搭 配 1 个 时 间 调 度(scheduling)器,来担任图像生成的核心任务。扩散(diffusion)一词描述了SD 隐空间里进行的图像生成情形,整个过程都是在隐空间里逐步推进(step by step)的,每一步都会增加更多的噪音(noise)。例如,我们准备了一张图像,接着产生随机噪音加入到图像中,然后将这含有噪音的图像输入给 UNet,让它来预测噪音。为了加速图像的生成效率,SD 使用 VAE 的 Encoder 先将原图像
5、压缩为46464型式的隐空间数组(array),然后才展开上述的扩散、生成过程。换句话说,整个扩散过程都是在隐空间里进行的。3 认识噪音(Noise)刚才提到了,我们将随机噪音添加到原图像里,成为含噪音图像(noisy image)。然后把它输入给 UNet 模型,让它预测出此图像所含的噪音。在 SD里,使用数学运算,根据时间步数(time step)来决定将多少噪音量添加到原图像里(图 5)。图 4 里的 step-1 是:准备 1 张原图像,并使用VAE 的 Encoder 将原图压缩为 4x64x64 型式的数组。接着,step-2 是:产生 1 张也是 4x64x64 型式的随机噪音数
6、组;step-3 是:选取 1 个随机整数(如图里的 03),即是时间步数(time step),并由此整数(即时间步数)来决定欲添加的噪音量;step-4 是:将所决定的噪音量实际添加到原图像的压缩数组里,就成为含有噪音的图像了。图3(来源https:/jalammar.github.io/illustrated-stable-diffusion/)图4(来源https:/jalammar.github.io/illustrated-stable-diffusion/)图5 来源(https:/jalammar.github.io/illustrated-stable-diffusion/)
7、 2023.8电子产品世界讲座L ectures 4 训练UNet模型4.1 输入1张训练图像刚才提到:我们会根据时间步数(time step)来计算出多少噪音量将添加到原图像里。也就是,我们掌握了两项数据:含噪音的图像(noisy image)数组;时间步数(time step)。我们就把这两项数据输入给 UNet 模型,来训练它,让它学习预测所添加的噪音,所以它输出是:预测噪音(predicted noise)。在训练过程中,希望它输出的预测噪音愈接近所添加的噪音就愈好,也就是预测误差值(loss)愈小愈好(图 6)。4.2 训练很多回合在实际训练UNet模型时,把全部图像的压缩数组都输入给 UNet,让它学习一遍,通称为:训练 1 回合(epoch)。在每一回合里,都会为每一张图像搭配 1 个随机整数(即时间步数)值。并根据时间步数值来计算出噪音量,于是得到两项数据:含噪音的图像数组和时间步数。然后,把这两项数据输入给 UNet 模型,来训练它,让它学习预测噪音(图 7)。上 述 SD 的 UNet 训 练 方法比较特殊之处是:这 UNet的功能是输出是噪音,而不是去除噪音。5 结束语本期说明了 SD 隐空间里UNet 模型的角色及其训练步流程的起步。下一期,将继续介绍及欣赏 SD 隐空间的架构之美,也领会 AIGC 生成艺术的源点。图6(来源https:/ https:/