本文涉及到的详细测试代码和测试步骤放置于:
https://github.com/xinyuwei-david/david-share.git下的:Multimodal-Models/Flux.1-Test
本文中不再赘述代码实现。欢迎给repo点亮Star,您的点赞是作者持续创作的动力。
FLUX.1 是由 Black Forest Labs(黑森林实验室) 开发的。这是一款开源的图像生成模型,提供了多种版本以满足不同用户的需求,包括 [pro]、[dev] 和 [schnell]。本文验证使用的FLUX.1 dev。FLUX.1 的最高分辨率可以达到 2K(即 2048 x 2048 像素)
扩散模型、CLIP、ViT、Stable Diffusion与FLUX.1的关系解析
一、扩散模型的正向和反向过程
扩散模型(Diffusion Model)是一类生成模型,通过逐步添加和去除噪声来生成数据,包括正向过程(添加噪声)和反向过程(去除噪声)。
正向过程:从一幅清晰的图像开始,逐渐添加噪声。就像在一幅清晰的风景画上不断喷洒墨水,图像会逐渐被噪声覆盖,最终变成纯噪声。
反向过程:这个过程用于生成新图像。从纯噪声开始,通过训练好的模型,逐步去除噪声,恢复出清晰的图像。模型学习如何在每一步有效地去噪,从而从随机噪声中生成高质量的图像。
因此,扩散模型的核心体现在解码阶段,即从噪声到图像的生成过程。
二、CLIP与ViT的角色
1. CLIP(Contrastive Language-Image Pre-Training)
用途:CLIP旨在将图像和文本映射到同一嵌入空间,实现图像与文本描述之间的匹配和检索。
组成:CLIP由两个独立的编码器组成:
图像编码器:通常采用ViT(Vision Transformer)或ResNet等架构,将图像编码为特征向量。
文本编码器:将文本描述编码为特征向量。
工作原理:通过对大量的图文对进行训练,使得对应的图像和文本在嵌入空间中距离更近,从而实现跨模态的检索和匹配。
2. ViT(Vision Transformer)
用途:ViT是将Transformer架构应用于图像领域的模型,主要用于图像分类等任务。
工作原理:
图像分块:将图像划分为固定大小的Patch(如16×16像素)。
展平序列:将这些Patch展平成一维的序列,类似于文本中的词序列。
位置编码:添加位置嵌入,以保留图像空间信息。
Transformer处理:使用Transformer的自注意力机制处理序列化的图像Patch。
三、Stable Diffusion的架构演进
1. Stable Diffusion 2
架构:基于潜在扩散模型(Latent Diffusion Model, LDM),在压缩的潜在空间中进行扩散过程。
核心网络:使用U-Net架构,包括编码器和解码器,并通过跳跃连接传递细节信息。
特点:
计算效率高:在潜在空间中操作,减少了计算量。
生成质量好:能够生成高分辨率、高质量的图像。
2. Stable Diffusion 3
架构更新:引入了Diffusion Transformer(DiT),替代了传统的U-Net架构。
新技术:结合了**Flow Matching(FM)**方法,提高了训练和生成效率。
亮点:
模型规模多样:从8亿参数到80亿参数,满足不同需求。
更好的文本理解:在多主题提示处理、图像质量以及拼写能力方面有所提升。
安全与责任:注重安全措施,防范滥用风险,强调道德规范。
四、FLUX.1简介
FLUX.1是由Black Forest Labs(黑森林实验室)开发的一款开源图像生成模型,提供了多种版本以满足不同用户需求,包括[pro]、[dev]和[schnell]。
最高分辨率:支持高达2K(即2048×2048像素)的图像生成。
版本特性:
[pro]:专业版,提供最佳的图像质量和细节表现。
[dev]:开发者版,平衡了性能和质量,适合测试和开发。
[schnell]:快速版,强调生成速度,适合需要快速结果的场景。
FLUX.1以其高质量的图像生成能力、快速的性能和灵活的自定义选项而著称。
FlUX.1架构图如下所示:
在FLUX架构中,不同组件在训练和推理阶段的作用如下:
CLIP:
训练阶段:用于学习图像和文本之间的关联和对齐关系。
推理阶段:主要用于结合文本输入,帮助生成与文本描述一致的图像。
T5:
训练阶段:学习从文本中提取特征。
推理阶段:将文本输入转换为特征向量,用于指导图像生成。
Stable Diffusion(或扩散模型组件):
训练阶段:学习通过扩散过程生成潜在表示。
推理阶段:使用学到的潜在表示和特征生成高质量图像。
FLUX整体架构:
训练阶段:结合多模态输入学习特征嵌入和生成策略。
推理阶段:从文本输入生成图像,利用编码器提取特征,通过解码器生成最终图像输出。
FLUX通过结合这些组件,实现了从文本生成图像的完整流程。
五、生图效果
我们先看生图的效果:
image = generate_image("A Handsome chinese man with glasses is holding a book named LLM , the cover of the book is a Astronauts skiing on the moon, the book cover is blue stars in the background. ")
生成图片:
在生成一张景色的图片:
image = generate_image("The most beautiful October in Beijing")
生成图片过程中GPU的开销: