TensorFlow 和 Stable Diffusion 的结合涉及以下方面:
Stable Diffusion 的基本原理:
Stable Diffusion 的技术原理:
Stable Diffusion 训练数据集制作:
The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time.(jalammar.github.io)贴博客是因为它解释得很清楚很好了。其次要了解Stable Diffusion的工作原理是生成随机噪声,并一步一步地更改噪声,以尝试并努力获得与提示一致的图像。work like thistext2img和img2img1.text2img2.img2img现在才进入正题!有以上img2img、text2img的流程可以看到,基本结构就是encoder+diffusion+decoder的流程。这是解释以上过程的论文的流程图。Checkpoint就是记录某个训练周期这整个diffusion/可能加上encoder decoder的参数。vae就是encoder decoder的参数,在SDXL等大型模型里vae要配对不然容易出现中间diffusion过程正常后面最后decode的时候花屏现象。接下来看ControlNet。这里的unet结构就是上面论文图中4个QKV的两片甲板的。左上这个prompt进入text encoder在每个模块上加入text information(token embeddings)。这里embedding模型就是这么用的咯,像字典一样。对token取对应的embedding。Time encoder是为了记录noise amount,第几步step。右边是controlnet插入。LoRA模型的训练逻辑是首先冻结SD模型的权重,然后在SD模型的U-Net结构中注入LoRA模块,并将其与CrossAttention模块结合,并只对这部分参数进行微调训练。也就是以上的sd encoder block和sd decoder block的权重参数进行调整。
Stable Diffusion核心技术来源于AI视频剪辑技术创业公司Runway的Patrick Esser,以及慕尼黑大学机器视觉学习组的Robin Romabach。该项目的技术基础主要来自于这两位开发者之前在计算机视觉大会CVPR22上合作发表的潜扩散模型(Latent Diffusion Model)研究。Stable diffusion是一种基于潜在扩散模型(Latent Diffusion Models)的文本到图像生成模型,能够根据任意文本输入生成高质量、高分辨率、高逼真的图像。Stable diffusion的原理可以分为以下几个步骤:1.stable diffusion使用一个新颖的文本编码器(OpenCLIP),由LAION开发并得到Stability AI的支持,将文本输入转换为一个向量表示。这个向量表示可以捕捉文本的语义信息,并与图像空间对齐。2.stable diffusion使用一个扩散模型(Diffusion Model),将一个随机噪声图像逐渐变换为目标图像。扩散模型是一种生成模型,可以从训练数据中学习出一个概率分布,并从中采样出新的数据。3.在扩散过程中,stable diffusion利用文本向量和噪声图像作为条件输入,给出每一步变换的概率分布。这样,stable diffusion可以根据文本指导噪声图像向目标图像收敛,并保持图像的清晰度和连贯性。
--max_data_loader_n_workers:设置大于等于2,加速数据处理。讲完了上述的运行代码以及相关参数,下面Rocky再举一个美女图片标注的例子,让大家能够更加直观的感受到BLIP处理数据生成caption标签的过程:SD模型数据标注流程:使用BLIP进行自然语言自动标注上图是单个图像的标注示例,整个数据集的标注流程也是同理的。等整个数据集的标注后,Stable Diffusion训练所需的caption标注就完成了。(2)使用Waifu Diffusion v1.4模型自动标注tag标签接下来我们可以使用Waifu Diffusion v1.4模型对训练数据进行自动标注,Waifu Diffusion v1.4模型输出的是tag关键词标签,其由一个个关键词短语组成:Tag关键词标签示例这里需要注意的是,调用Waifu Diffusion v1.4模型需要安装特定版本(2.10.0)的Tensorflow库,不然运行时会报“DNN library is not found“错误。我们只需要在命令行输入以下命令即可完成Tensorflow库的版本检查与安装适配:完成上述的环境配置后,我们依然进入到SD-Train/finetune/路径下,运行以下代码即可获得tag自动标注: