rocky ding
公众号:wethinkin
写在前面
大家好,我是rocky。
2022年,stable diffusion横空出世,成为ai行业从传统深度学习时代过渡至aigc时代的标志模型,并为工业界和投资界注入了新的活力,让ai再次性感。
stable diffusion系列的第一篇文章中,rocky已经详细讲解了stable diffusion的核心基础知识深入浅出解析stable diffusion完整核心基础知识 |【算法兵器谱】。本文作为stable diffusion系列的第二篇文章,rocky将深入浅出的讲解stable diffusion中u-net的核心知识,包括u-net在传统深度学习中的核心价值与在aicg中的核心价值,让我们来看看u-net是如何在两个时代中同时从容,并大放异彩的。同时,rocky也希望我们能借助stable diffusion系列文章更好的入门stable diffusion及其背后的aigc领域。
话不多说,在rocky毫无保留的分享下,让我们开始学习吧!
so,enjoy:
正文开始
----【目录先行】----
传统深度学习时代的u-net
【一】u-net的“ai江湖”印象
【二】u-net的核心结构与细节
-
encoder-decoder结构
-
u-net结构细节挖掘
-
是什么让u-net通向aigc
stable diffusion中的u-net
【一】u-net在stable diffusion中扮演的角色
【二】u-net在aigc时代中的核心结构与细节
-
time embedding模块
-
spatial transformer(cross attention)模块
-
stable diffusion中u-net的完整核心结构
-
groupnorm
【三】u-net在stable diffusion中的训练和推理
-
u-net在stable diffusion中的训练过程
-
u-net在stable diffusion中的推理过程
----【传统深度学习时代的u-net】----
【一】u-net的“ai江湖”印象
在2015年,传统深度学习时代的早期,u-net: convolutional networks for biomedical image segmentation(u-net)正式发表,图像分割领域迎来了它的“resnet”。
u-net起初在生物医学图像这个细分领域取得了最佳的工业界效果,由于其简洁,高效,稳定的特性,随机被广泛的应用于图像分割的各个方向,比如智慧交通,智慧城市,工业检测等
可以说在传统深度学习时代,不管是实际业务、ai竞赛还是科研,u-net都成为了当仁不让的图像分割通用baseline。但是让人没想到的是,在8年后的aigc时代到来后,u-net顺应了时代的潮流,依旧爆发出了鲜活的生命力与价值。
【二】u-net的核心结构与细节
encoder-decoder结构
u-net最经典的特征是其encoder-decoder的结构,这样的结构简洁且高效,并且具备对称的“艺术”美感,也让u-net具备了极强的生命力与适应性。
其中左半部分的encoder模块负责进行特征的提取与学习,encoder模块可以由resnet、vgg、efficientnet等一流特征提取模型担任,所以encoder模块具备较强的工程潜力与科研势能。与此同时encoder模块可以增加对扰动噪声的鲁棒性,减少过拟合的风险,降低运算量以及增加感受野的大小等作用。
而右半部分的decoder模块则负责将feature map恢复到原始分辨率,并使skip-connection这个关键一招融合了浅层的位置信息与深层的语义信息。与此同时,decoder模块和encoder模块一样可以由resnet、vgg、efficientnet等一流模型担任,从而使得u-net的变体非常繁荣,增加了工程“魔改”的可玩性。
u-net结构细节挖掘
讲完encoder-decoder结构的整体框架,rocky再向大家介绍一下encoder-decoder结构中的一些能够成为通用范式和经典tricks的细节操作。
从上图的encoder-decoder结构中可以看到,u-net是一个全卷积神经网络,网络最后一层使用了浅蓝色箭头,表示1*1卷积,其完全取代了全连接层,使得模型的输入尺寸不再受限制,极大增强了u-net在各种应用场景的兼容性。
上图中的蓝色和白色框表示feature map,深蓝色箭头表示 3x3 卷积,padding=0 ,stride=1其用于特征提取。由于padding=0,所以每次经过卷积运算,feature map将有一定程度的下采样。深红色箭头表示max pooling,stride=2,用于降低维度。将卷积和max pooling两者结合,能够对feature map进行特征提取的同时从容进行下采样。
上图中的绿色箭头表示upsample操作,对feature map进行上采样从而恢复维度。
upsampling常用的方式有两种:转置卷积和插值。两者的详细内容可以阅读rocky之前的文章:【三年面试五年模拟】算法工程师的独孤九剑秘籍(前十二式汇总篇)v1版。而在u-net中,使用了bilinear双线性插值。
在encoder和decoder两个模块之间,使用skip-connection作为桥梁,用于特征融合,将浅层的位置信息与深层的语义信息进行concat操作。图中用灰色箭头表示skip-connection,其中“copy”就是concat操作,而“crop”则通过裁剪使得两个特征图尺寸一致。
是什么让u-net通向aigc
讲完u-net在传统深度学习时代的核心知识点与价值,接下来rocky再阐述一下为何在aigc时代,u-net成为了stable diffusion这个划时代模型的关键结构。
在投资界有一句话,叫“在上个时代适应的越好的人,很有可能是下一个时代最大的失败者”。这个逻辑套用在技术上再合适不过了,有太多技术产生,也有太多技术消亡,而学习技术并从事技术行业的工人们就会背负更多的沉没成本与风险。
但是u-net不这么认为,其同时成为了aigc与传统深度学习这两个时代的弄潮儿,在aigc时代,u-net有了新的内涵和面貌,并且“文艺复兴”。
那么,是什么让u-net能够通向aigc,跨过周期呢?
主要有以下四个特质:
- u-net中encoder模块的压缩特质。作为encoder模块最初的应用,输入的图像经过下采样,抽取出比原图小得多的高维特征,相当于进行了压缩操作。这和stable diffusion的latent逻辑不谋而合,随即在aigc时代“文艺复兴”。
- u-net中decoder模块的去噪特质,作为decoder模块最初的应用,在aigc时代“文艺复兴”。
- u-net整体结构上的简洁、稳定和高效,使得其在stable diffusion中能够从容的迭代去噪声,能够撑起stable diffusion的整个图像生成逻辑。
- encoder-decoder结构的强兼容性,让u-net不管是在分割领域,还是在生成领域,都能和transformer等新生代模型的从容融合。
u-net发表8年后的aigc时代里,正是这些特质让u-net顺应了时代的潮流,依旧爆发出了鲜活的生命力与价值。
----【stable diffusion中的u-net】----
【一】u-net在stable diffusion中扮演的角色
stable diffusion中的u-net包含约860m的参数,在float32的精度下,约占3.4g的存储空间。
在上图中可以看到,u-net是stable diffusion中的核心模块。u-net主要在“扩散”循环中对高斯噪声矩阵进行迭代降噪,并且每次预测的噪声都由文本和timesteps进行引导,将预测的噪声在随机高斯噪声矩阵上去除,最终将随机高斯噪声矩阵转换成图片的隐特征。
在u-net执行“扩散”循环的过程中,content embedding始终保持不变,而time embedding每次都会发生变化。每次u-net预测的噪声都在latent特征中减去,并且将迭代后的latent作为u-net的新输入。
总的来说,如果说stable diffusion是“优化噪声的艺术”,那么u-net将是这个“艺术”的核心主导者。
【二】u-net在aigc时代中的核心结构与细节
stable diffusion中的u-net,在encoder-decoder结构的基础上,增加了time embedding模块,spatial transformer(cross attention)模块和self-attention模块。
time embedding模块
首先,什么是time embedding呢?
time embedding(时间嵌入)是一种在时间序列数据中用于表示时间信息的技术。时间序列数据是指按照时间顺序排列的数据,例如股票价格、天气数据、传感器数据等。时间嵌入的目的是将时间作为一个特征进行编码,以便在深度学习模型中更好地学习时间相关性特征。
time embedding的基本思想是将时间信息映射到一个连续的向量空间,使得时间之间的关系可以被模型学习和利用。
time embedding的使用可以帮助深度学习模型更好地理解时间相关性,从而提高模型的性能。比如在stable diffusion中,将time embedding引入u-net中,帮助其在扩散过程中从容预测噪声。
stable diffusion需要迭代多次对噪音进行逐步预测,使用time embedding就可以将time编码到网络中,从而在每一次迭代中让u-net更加合适的噪声预测。
讲完time embedding的核心基础知识,我们再解析一下stable diffusion中u-net的time embeddings模块是如何构造的:
可以看到,time embeddings模块 + encoder模块中原本的卷积层,组成了一个residual block结构。它包含两个卷积层,一个time embedding和一个skip connection。而这里的全连接层将time embedding变换为和latent feature一样的维度。最后通过两者的加和完成time的编码。
spatial transformer(cross attention)模块
在stable diffusion中,使用了spatial transformer来表示类cross attention模块。
按照惯例,我们先理解一下什么是cross attention?
cross attention是一种多头注意力机制,它可以在两个不同的输入序列之间建立关联,并且可以将其中一个输入序列的信息传递给另一个输入序列。
在计算机视觉中,cross attention可以用于将图像与文本之间的关联建立。例如,在图像字幕生成任务中,cross attention可以将图像中的区域与生成的文字之间建立关联,以便生成更准确的描述。
stable diffusion中使用cross attention模块控制文本信息和图像信息的融合交互,通俗来说,控制u-net把噪声矩阵的某一块与文本里的特定信息相对应。
讲完cross attention的核心基础知识,我们再解析一下stable diffusion中u-net的cross attention模块是如何构造的:
可以看到,latent feature和context embedding作为输入,将两者进行cross attenetion操作,将图像信息和文本信息进行了融合,整体上是一个经典的transformer流程。
stable diffusion中u-net的完整核心结构
讲好了stable diffusion中u-net的各个核心模块,接下来让我们将其组合,构成u-net在stable diffusion中的完整结构:
groupnorm
rocky在这里再讲一个stable diffusion中u-net的细节trick,那就是u-net中全部采用groupnorm进行归一化。研究表明,groupnorm在生成任务中的表现是最好的。
关于groupnorm的详细知识,大家可以阅读rocky之前的文章:【三年面试五年模拟】算法工程师的独孤九剑秘籍(前十二式汇总篇)v1版
【三】u-net在stable diffusion中的训练和推理
u-net在stable diffusion中的训练过程
在stable diffusion中,u-net在不断的训练过程中主要学会了一件事,那就是去噪!去噪!还是tmd去噪!
想要让u-net能够高效去噪,并获得图像的隐特征,我们就要让u-net知道什么是噪声数据。
于是我们在训练的预处理过程中,向训练集有策略地加入噪声。
这个加噪策略主要包括设定不同级别的噪声,比如说0-100共101个强度的噪声,在每个batch中,随机加入1-n个101强度序列中的噪声,生成噪声图片。
加噪+噪声强度+加噪次数+原数据集,构成了stable diffusion中u-net训练数据的基石。
有了数据预处理的大逻辑,在训练过程中,u-net需要在已知噪声强度的条件下,不断学习提升从噪声图片中计算出噪声的能力。
需要注意的是,stable diffusion中的u-net并不直接输出无噪声的原数据,而是去预测原数据上所加过的噪声。
如上图所示,stable diffusion中u-net的训练一共分四步:
- 从训练集中选取一张加噪过的图片和噪声强度,比如上图的加噪街道图和噪声强度3。
- 将数据输入u-nnet,并且预测噪声矩阵。
- 将预测的噪声矩阵和实际噪声矩阵(label)进行误差的计算。
- 通过反向传播更新u-net的参数。
u-net在stable diffusion中的推理过程
在推理阶段中,我们将u-net预测的噪声不断在噪声图片中减去就能恢复出图片的隐特征了。
当我们完成了u-net在stable diffusion中的训练,如果我们再将噪声强度和噪声图输入u-net,那么u-net就能较准确地预测出有加在原素材上的噪声:
有了u-net对噪声的强预测能力,在stable diffusion的推理过程中,我们就可以使用u-net循环预测噪声,并在噪声图上逐步减去这些被预测出来的噪声,从而得到一个我们想要的高质量的图像隐特征,去噪流程如下图所示:
精致的结尾
到这里,stable diffusion中u-net的核心知识就完整展现在我们的面前了,希望在aigc时代中,大家能和rocky一起,飞速成长!
rocky将算法高价值面试知识点即“三年面试五年模拟”之独孤九剑秘籍前十二式进行汇总梳理成汇总篇,并制作成pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“三年面试五年模拟” 进行取用。
除此之外rocky还将yolov1-v7全系列大解析也制作成相应的pdf版本,大家可在公众号后台 【精华干货】菜单或者回复关键词“yolo” 进行取用。
rocky一直在运营技术交流群(wethinkin-技术交流群),这个群的初心主要聚焦于技术话题的讨论与学习,包括但不限于算法,开发,竞赛,科研以及工作求职等。群里有很多人工智能行业的大牛,欢迎大家入群一起学习交流~(请添加小助手微信jarvis8866,拉你进群~)
发表评论