Stable Diffusion 3详解
🌺系列文章推荐🌺
扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新)
🌈历史文章🌈:
SD模型原理:
- Stable Diffusion概要讲解
- Stable diffusion详细讲解
- Stable Diffusion的加噪和去噪详解
- Diffusion Model
- Stable Diffusion核心网络结构——VAE
- Stable Diffusion核心网络结构——CLIP Text Encoder
- Stable Diffusion核心网络结构——U-Net
- Stable Diffusion中U-Net的前世今生与核心知识
- SD模型性能测评
- Stable Diffusion经典应用场景
- SDXL的优化工作
- DiT(Diffusion Transformer)详解
- Stable Diffusion 3详解
微调方法原理:
- DreamBooth
- LoRA
- LORA及其变种介绍
- ControlNet
- ControlNet文章解读
- Textual Inversion 和 Embedding fine-tuning
目录
核心基础内容
Stable Diffusion 3整体架构初识
VAE模型
Latent特征Patch化
提高通道数
MM-DiT(Multimodal Diffusion Backbone)模型
中期融合
两套独立的权重参数
Text Encoder模型(包含详细图解)
新增T5-XXL Encoder
一、提取输入文本的全局语义特征“y”(上图中“1”)
二、提取输入文本的细粒度特征“c”(上图中“2”)
Dropout
改进的RF(Rectified Flow)采样方法
训练技巧&细节解析
训练数据预处理
图像Caption标签精细化
图像特征和文本特征在训练前缓存
使用Classifier-Free Guidance技术
使用DPO(Direct Preference Optimization, 人类偏好)技术微调
使用QK-Normalization
设计多尺度位置编码(插值+扩展)
TimeStep Schedule中shift参数作用
基于DiT架构AI绘画大模型的Scaling能力
SD 3.5
推荐阅读:文生图中从扩散模型到流匹配的演变:从SDXL到Stable Diffusion3(含Flow Matching和Rectified Flow的详解)
摘录于:https://zhuanlan.zhihu.com/p/684068402
核心基础内容
Stable Diffusion 3比起Stable Diffusion之前的系列,在多主题提示词的控制编辑一致性能力(multi-subject prompts)、文字渲染控制能力(spelling abilities)以及图像生成的整体质量(image quality)三个维度都有大幅的提升。
论文:Scaling Rectified Flow Transformers for High-Resolution Image Synthesis
Stable Diffusion 3整体架构初识
Stable Diffusion 3依旧是一个End-to-End模型,最大的亮点是扩散模型部分使用了全新的MM-DiT(Multimodal Diffusion Transformer)架构,这与OpenAI发布的文生视频大模型Sora一致(Transformer is all you need!)。
同时采用优化改进的Flow Matching(FM)技术【RF采样方法】训练SD 3模型,Flow Matching技术由Meta于2022年提出(https://arxiv.org/pdf/2210.02747),可以让扩散模型的训练过程更高效稳定,而且还可以支持更快的采样生成,同时生成质量进一步提高。
为了让用户能够在不同应用场景和硬件环境使用SD 3模型,SD 3一共发布了参数从8亿到80亿(800M-8B)的多个版本,也再次证明了Transformer架构的强大scaling能力。
SD 3 medium版本在FP16精度下组成结构:
- MM-DiT大小为4.17G
- VAE模型大小为168M
- CLIP模型
- CLIP ViT-L大小为246M(参数量约124M)
- OpenCLIP ViT-bigG大小为1.39G(参数量约695M)
- T5-XXL Encoder在FP6精度下大小为9.79G(参数量约4.7B,FP8精度下大小为4.89G)
Stable Diffusion 3的整体网络结构图如下所示:

红框中的详细MM-DiT网络结构图如下:

VAE模型
VAE(变分自编码器,Variational Auto-Encoder)模型在Stable Diffusion 3(SD 3)中依旧是不可或缺的组成部分,VAE在AI绘画领域的主要作用,不再是生成能力【传统时代VAE用于生成】,而是辅助SD 3等AI绘画大模型的压缩和重建能力。
Latent特征Patch化
在SD 3中,VAE模型作用和之前的系列一样,依旧是将像素级图像编码成Latent特征,不过由于SD 3的扩散模型部分全部由Transformer架构【MM-DiT】组成,所以还需要将Latent特征转换成Patches特征加入位置编码后,再送入扩散模型部分进行处理。
【Transformer架构处理图像(ViT,DiT)时的必要手段,Patch化后(2x2的patch,latten 2 × 2 patches),加上位置编码。可以参考DiT的过程:DiT(Diffusion Transformer)详解——AIGC时代的新宠儿-CSDN博客】
提高通道数
之前SD系列中使用的VAE模型是将一个H×W×3的图像编码为H/8×W/8×d的Latent特征,在8倍下采样的同时设置d=4(通道数),这种情况存在一定的压缩损失,产生的直接影响是对Latent特征重建时容易产生小物体畸变(比如人眼崩溃、文字畸变等)。
SD 3模型通过提升d来增强VAE的重建能力,提高重建后的图像质量。论文中的实验,当设置d=16时,VAE模型的整体性能(FID指标降低、Perceptual Similarity指标降低、SSIM指标提升、PSNR指标提升)比d=4时有较大的提升,所以SD 3确定使用了 d=16 (16通道)的VAE模型。
【补充】
之前SD系列下采样倍都是8倍,但是
- SD1.5 默认配置d=4
- SDXL 默认配置d=8
与此同时,随着VAE的通道数增加到16,扩散模型部分(U-Net或者DiT)的通道数也需要跟着修改(修改扩散模型与VAE Encoder衔接的第一层和与VAE Decoder衔接的最后一层的通道数),虽然不会对整体参数量带来大的影响,但是会增加任务整体的训练难度。因为当通道数从4增加到16,SD 3要学习拟合的内容也增加了4倍,我们需要增加整体参数量级来提升模型容量(model capacity)。
当模型参数量小时,16通道VAE的重建效果并没有比4通道VAE的要更好,当模型参数量逐步增加后,16通道VAE的重建性能优势开始展现出来,当模型的深度(depth)增加到22时,16通道的VAE的性能明显优于4通道的VAE。
VAE完整结构图如下:
【结构上与SD和SDXL并未有差别,更详细信息参考:Stable Diffusion核心网络结构——VAE_stable diffusion网络架构-CSDN博客】

可以看到,SD 3 VAE模型中有三个基础组件:
- GSC组件:GroupNorm+SiLU+Conv
- Downsample组件:Padding+Conv
- Upsample组件:Interpolate+Conv
同时SD 3 VAE模型还有两个核心组件:ResNetBlock模块和SelfAttention模块,两个模块的结构都已在上图中展示。
SD 3 VAE Encoder部分包含了三个DownBlock模块、一个ResNetBlock模块以及一个MidBlock模块,将输入图像压缩到Latent空间,转换成为Gaussian Distribution。
而VAE Decoder部分正好相反,其输入Latent特征,并重建成为像素级图像作为输出。其包含了三个UpBlock模块、一个ResNetBlock模块以及一个MidBlock模块。
在2048x2048高分辨率上,SDXL VAE出现了较明显的内容和文字的信息损失。与此同时,SD 3 VAE能够较好的对高分辨率图像进行压缩与重建。
MM-DiT(Multimodal Diffusion Backbone)模型
在SD之前的系列中,对于文本的Text Embeddings与图像信息是在U-Net中使用Cross-Attention机制来结合,其中Text Embeddings作为Attention中的keys和values,图像信息作为Attention的Query。
中期融合
SD 3一改之前的范式,在架构上最重要的改进就是设计了以多模态DiT(MM-DiT)作为核心扩散模型。直接将Text Embeddings和图像的patch Embeddings拼接(Concat)在一起进行处理,将文本特征的重要性和图像特征对齐,这样就不需要再引入Cross-Attention机制。
【这里“直接将Text Embeddings和图像的patch Embeddings拼接(Concat)在一起进行处理”,意思是早期融合,其实描述并不准确。从MM-DiT的架构中可以看出,文本和图像进行融合是在计算Q、K、V时候,属于中期融合。】
- 早期融合是指在模型的输入阶段或特征提取的初期(如输入或嵌入层),将不同模态的数据直接合并,统一表示,然后通过一个共享的网络进行处理,如ViLT、Single-DiT(FLUX中用到)。
- 中期融合是指模态数据在初期被分别编码为独立的特征后,在模型的中间层通过跨模态交互模块(如注意力机制)进行融合,如MM-DiT(使用Self-Attention机制来实现特征的交互融合),BLIP(通常通过跨模态/交叉注意力机制实现)。
- 后期融合是指模态数据由独立的网络完全编码为独立的特征,最后在输出阶段或决策层进行融合,如CLIP。
使用跨模态注意力机制通常是 中期融合 的特征,但如果跨模态注意力用于输入阶段或决策阶段,则可能属于早期融合或后期融合。
两套独立的权重参数
SD 3中MM-DiT架构的一个核心关键是对图像的Latent Tokens和文本的Tokens设置了两套独立的权重参数,并在Attention机制前拼接在一起,再送入Attention机制进行注意力的计算【中期融合】。MM-DiT架构图如下所示:

由于图像和文本属于两个不同的模态,所以SD 3中采用两套独立的权重参数来处理学习这两个不同模态的特征,两种模态特征在所有Transformer层的权重参数并不是共享的,只通过Self-Attention机制来实现特征的交互融合。这相当于使用了两个独立的Transformer模型来处理文本和图像信息,这也是SD 3技术报告中称这个结构为MM-DiT的本质原因,这是一个多模态扩散模型。
Stable Diffusion 3 MM-DiT的完整结构图如下:

SD 3论文中还将3套不同参数的MM-DiT(CLIP text tokens、T5-XXL text tokens和Patches分别各一套参数)与CrossDiT(引入Cross-Attention机制的DiT架构)、UViT(U-Net和Transformer混合架构)基于CC12M数据集训练后进行性能对比,验证MM-DiT架构的有效性,
看到MM-DiT在性能上是明显优于其它架构的, MM-DiT的模型参数规模主要是模型的深度d,即Transformer Block的数量【一个完整的 MSA + MLP 模块】决定的。
Text Encoder模型(包含详细图解)
【在介绍Text Encoder前,我们需要先明确一下MM-DiT模型的输入,即MM-DiT的结构图中的“y”、“c”和“x”,其中“y”和“c”来自CLIP等Text Encoder模型,“x”则来自VAE模型得到的补丁(Patching)并且位置编码(Positional Embedding)后的 Latent特征】
"x":MM-DiT和原生DiT模型一样在Latent空间中将图像的Latent特征转成patches特征,这里的patch size=2x2【最优】,和原生DiT的默认配置一致。接着和ViT一样,将得到的Patch Embedding再加上Positional Embedding一起输入到Transformer架构中【就是前面VAE中流程】。
【下面讲如何通过Text Encoder得到“y”和“c”】
Stable Diffusion 3的文字渲染能力很强,同时遵循文本Prompts的图像生成效果也非常好,这些能力主要得益于SD 3采用了三个Text Encoder模型,它们分别是:
- CLIP ViT-L(参数量约124M)
- OpenCLIP ViT-bigG(参数量约695M)
- T5-XXL Encoder(参数量约4.762B)
在Stable Diffusion系列的整个版本迭代中,Text Encoder部分一直在优化增强。
- SD 1.x系列模型的Text Encoder部分使用了CLIP ViT-L。
- SD 2.x系列模型中换成了OpenCLIP ViT-H。
- SDXL的Base模型使用CLIP ViT-L + OpenCLIP ViT-bigG的组合作为Text Encoder,Refiner模型只使用了OpenCLIP ViT-bigG的Text Encoder。
- SD 3则更进一步,继续增加Text Encoder的数量,加入了一个参数量更大的T5-XXL Encoder模型。
T5-XXL Encoder证明了预训练好的纯文本模型能够在AI绘画实现更好的文本理解能力。
- 2022年谷歌发布Imagen时,就使用了T5-XXL Encoder作为Imagen模型的Text Encoder
- OpenAI发布的DALL-E 3也采用了T5-XXL Encoder来提取文本prompt信息
CLIP ViT-L和OpenCLIP ViT-bigG的架构图如下:
【和SD前面系列一样,没变化】


新增T5-XXL Encoder
Stable Diffusion 3 T5-XXL Encoder的完整结构图如下:

总的来说,SD 3一共需要提取输入文本的全局语义和文本细粒度两个层面的信息特征。如下图:
一、提取输入文本的全局语义特征“y”(上图中“1”)
CLIP ViT-L和OpenCLIP ViT-bigG的Pooled Embeddings【全局特征向量】维度大小分别是768和1280,两个embedding拼接在一起得到2048的embedding,然后经过一个MLP网络之后和Timestep Embeddings相加(add操作)。
完成文本的全局语义信息(CLIP pooled embedding)与时间步信息(Timestep embedding)特征提取后,再通过add操作将两个特征进行融合相加【得到MM-DiT的结构图中的“y”】,就获得了要注入每一个Transformer Block的adaLN-Zero层的Conditioning特征。下图是详细清楚的图示,让大家能够直观的了解感受:

二、提取输入文本的细粒度特征“c”(上图中“2”)
- 这里首先分别提取CLIP ViT-L和OpenCLIP ViT-bigG的倒数第二层的特征,拼接在一起可以得到77x2048维度的CLIP Text Embeddings;
- 接着再从T5-XXL Encoder中提取最后一层的特征T5 Text Embeddings,维度大小是77x4096(这里也限制token长度为77)。
- 然后对CLIP Text Embeddings使用zero-padding【图中灰色】得到和T5 Text Embeddings相同维度的特征。
- 最后,将padding后的CLIP Text Embeddings和T5 Text Embeddings在token维度上拼接在一起,得到154x4096维度的混合Text Embeddings。
- 这个混合Text Embeddings将通过一个linear层映射到与图像Latent的Patch Embeddings相同的维度大小,并和Patch Embeddings拼接在一起送入MM-DiT中。
CLIP ViT-L和OpenCLIP ViT-bigG都只能默认编码77 tokens长度的文本,这让原本能够编码512 tokens的T5-XXL Encoder在SD 3中也只能处理77 tokens长度的文本,限制了T5-XXL Encoder的能力。
SD系列的“友商”模型DALL-E 3由于只使用了T5-XXL Encoder一个语言模型作为Text Encoder模块,所以可以输入512 tokens的文本,从而发挥T5-XXL Encoder的全部能力。
Dropout
在SD 3的训练过程中,由于三个Text Encoder都是已经预训练好的语言模型,它们的参数被冻结。同时三个Text Encoder的特征单独以46.4%的概率进行drop,然后送入MM-DiT进行训练。按照这样的思路,其实在SD 3推理时也是可以任意组合这三个Text Encoder的。【下文CFG有详细描述】
由于T5 XXL的参数量是最大的,可以只使用CLIP ViT-L + OpenCLIP ViT-bigG的特征,此时需要将T5-XXL的特征设置为zero。
在这种配置下,SD 3论文中发现去掉T5-XXL后,图像生成的整体质量不会下降(有50%的胜率),但是文字渲染能力大幅下滑(仅有38%的胜率),同时文本理解能力有一定的下滑(只有46%的胜率)。
整体上看,T5-XXL Encoder对于SD 3还是非常关键的,因为就算是最大的8B模型,缺少了T5-XXL Encoder后,SD 3引以为傲的文字渲染与文字理解能力都大打折扣,与其他AI绘画主流大模型的效果对比很差。
改进的RF(Rectified Flow,直方流)采样方法
SD 3不再使用DDPM作为扩散模型,而是该用优化的RF(Rectified Flow)做为扩散模型。
【RF(直方流Rectified Flow)是一种革命性的采样方法,彻底改变了传统扩散模型的生成过程。通过直接优化从数据分布到目标分布的映射,RF 提高了生成速度和质量,是 Stable Diffusion 3 生成过程的核心创新之一。】
Rectified Flow技术的核心思想是通过引入流变换方法,前向加噪过程被定义为一个Rectified Flow,以一条直线连接数据分布和噪声分布,简化模型的训练和推理过程,提升生成效率,具有比DDPM更好的理论属性和概念简洁性。具体来说,Rectified Flow采用了分段线性变换(Piecewise Linear Transformations),并结合梯度流修正(Gradient Flow Rectification),使得流的训练过程更加高效。
在SD 3的论文中,先介绍的Flow Matching(FM)框架和RF(Rectified Flow),在介绍SD 3基于 RF(Rectified Flow)做的改进的。下面也按照这个顺序,先介绍FM,再介绍RF的改进:
【由于篇幅过长,单独发文展示】
SD3的采样上篇——Flow Matching-CSDN博客
SD3的采样下篇——Rectified Flow-CSDN博客
训练技巧&细节解析
训练数据预处理
在SD 3的技术报告中并没有公布预训练数据集的来源分布,不过技术报告中的很多数据预处理技术:
- NSFW风险内容过滤:使用NSFW检测模型来过滤这些风险数据。
- 筛除美学分数较低的数据:使用美学评分系统预测图像的美学分数,并移除分数较低的数据。
- 数据去重:使用基于聚类的去重方法来移除训练数据集中重复的图像,防止模型对于某些重复图像中的特征过拟合。
在上述的数据预处理完成后,官方筛选出了1B+的数据供SD 3训练优化。SD 3首先在1B数据上进行了预训练,然后再用30M专注于特定视觉内容和风格的高质量美学数据进行微调,最后使用3M偏好数据进行精细化训练。
图像Caption标签精细化
SD 3使用多模态大模型CogVLM来对训练数据集中的图像生成高质量的Caption标签。 这借鉴了DALL-E 3的数据标注方法(已经成为AI绘画领域的主流标注方法)。
那么有读者可能会问,DALL-E 3的数据标注方法具体是什么样的呢?
DALL-E 3开源的技术报告题目直接就是《Improving Image Generation with Better Captions》,可见OpenAI对数据质量与标注质量的重视。
目前AI绘画大模型存在一个很大的问题是模型的文本理解能力不强,主要是指AI绘画大模型生成的图像和输入文本Prompt的一致性不高。产生这个问题归根结底还是由训练数据集本身所造成的,更本质说就是图像Caption标注太过粗糙。
这里总共有两个方面的原因。
- 图像数据集自带的常规文本Caption标签一般很简单(比如COCO数据集),它们大部分只描述图像中的主体内容而缺失了背景、主体位置、主体数量、图像中的文字等其它的很多重要信息。
- 当前训练AI绘画大模型的主流图像文本对数据集(LAION数据集等)都是从网页上直接爬取的,其中文本Caption标签其实就是简单的Alt Text信息,并且会包含很多不太相关的文本信息(广告等),加入了太多的无关噪声。
这两个原因导致了AI绘画大模型的预训练数据集中的Caption标签粗糙且不准确,而数据是决定AIGC模型性能上限的关键,自然也导致训练的模型无法充分学习到文本和图像的对应关系,这是就产生了我们刚才说的Prompt Following能力的不足。
所以我们需要优化训练数据集的文本Caption标签,来提升的AI绘画模型的Prompt Following能力,让生成的图像和输入文本Prompt更加一致。
DALL-E 3是通过训练【微调】一个基于CoCa架构的Image Captioner模型来合成完善图像的Caption标签。
论文:CoCa: Contrastive Captioners are Image-Text Foundation Models
CoCa模型相比CLIP模型额外增加了一个Multimodal Text Encoder结构来生成Caption,它训练的损失同时包含CLIP的对比损失和Captioning的交叉熵损失。因此CoCa也可以用于Caption标签的生成,CoCa模型的架构和训练过程如下图所示:
CoCa模型的架构与训练过程 预训练好Image Captioner模型后,为了获得更加精细的Caption标签,DALL-E 3(https://cdn.openai.com/papers/dall-e-3.pdf)中对Image Captioner进行了进一步的微调训练,包括两个不同的数据集构建方案,具体如下所示:
- 第一个方案的微调数据集中只有描述图像主体的短Caption标签。
- 第二个方案的微调数据集中有详细描述图像内容的长Caption标签。
通过这两种方案,我们获得了两个不同的微调模型,分别具备生成短Caption(Short Synthetic Captions,SSC)标签和长Caption(Descriptive Synthetic Captions,DSC)标签的能力。之后主要实验了合成Caption标签的比重对训练的效果。得出两个结论:
- 采用合成的长Caption对AI绘画模型的Prompt Following能力是有比较大提升的。
- 采用95%的合成长Caption+5%的原始Caption作为最终的Caption标签,在此基础上训练得到的AI绘画大模型的图像生成效果是最好的。
上面的内容就是DALL-E 3的完整标签制作流程与训练策略,这也是其图像生成性能大幅提升的关键。
虽然采用95%的合成长Caption进行训练会大大提升AI绘画大模型的生成效果,但是也存在AI绘画大模型过拟合到长Caption上,当我们输入常规的短Caption时,生成图像的效果可能会变差的情况。为了解决这个问题,OpenAI是用了GPT-4对用户输入的Caption进行“upsampling”操作,对输入的文本进行优化扩写。下图展示了用GPT-4对输入Prompt进行优化扩写的过程,这样不论用户输入什么样的Prompt,DALL-E 3都能生成质量较高的图像:
使用GPT-4对用户输入的文本Prompt进行优化扩写 所以,DALL-E 3与GPT-4结合不仅仅是AI产品层面的创新,也是为了保证DALL-E 3的输入Prompt不偏离训练时的分布。
SD 3沿用了DALL-E 3的数据标注技术
- 将Image Captioner模型从CoCa替换成了CogVLM。
- 同时在SD 3的训练过程中,是使用50%的原始Caption和50%的合成长Caption
【考虑到合成标题可能导致文本到图像模型忘记VLM知识语料库中不存在的某些概念,故他们使用50%的原始标题和50%的合成标题(且做了实验,证明这种一半原始标题 一半合成标题的效果确实明显好于100%都是原始标题的情况)】
这样就能够较好的提升SD 3模型的整体性能,具体结果如下表中所示:
图像特征和文本特征在训练前缓存
SD 3与之前的版本相比,整体的参数量级大幅增加,这无疑也增加了推理和训练成本。
为了减少训练过程中SD 3所需显存和特征处理耗时,SD 3设计了图像特征和文本特征的预计算逻辑:由于VAE、CLIP-L、CLIP-G、T5-XXL都是预训练好且在SD 3微调过程中权重被冻结的结构,所以在训练前可以将整个数据集预计算一次图像的Latent特征和文本的Text Embeddings,并将这些特征缓存下来,这样在整个SD 3的训练过程中就无需再次计算。整体上看,其实预计算逻辑是一个空间换时间的技术。
【分两步:第一步先讲图像特征和文本特征拿到,存起来,第二步,直接使用存起来的特征训练】
使用Classifier-Free Guidance技术
想要了解Classifier-Free Guidance,那首先要从Classifier Guidance讲起。
Classifier Guidance技术是由OpenAI在2021年首次提出,其思想是让扩散模型可以按照指定的类别【提示词】生成图像。我们可以使用贝叶斯定理对条件生成概率进行分解,从下式中可以看出Classifier Guidance的条件生成只需要添加一个额外的Classifier梯度即可:
【
- 无条件分布的梯度(Unconditional Score):
,表示模型对数据分布本身的理解,不考虑任何特定条件
。
- 分类器梯度(Classifier Gradient):
,表示特定条件
对生成样本
的影响(在 生成样本
的前提下,特定条件
的概率)。
- 左侧Classifier Guidance: 表示在特定条件
(提示次)的前提下,生成样本
的概率。
】
我们可以添加一个权重项 λ 来灵活的控制unconditional score和classifier gradient的占比,如下所示:
【原文中的公式2的
位置不对,这里已经更正】
公式各部分含义
1.
:
- 无条件生成的梯度(unconditional score)。
- 负责生成样本的真实感和自然性,与任何条件
无关。
2.
:
- 分类器梯度(classifier gradient)。
- 提供条件
的指导信息,使生成样本符合指定条件。
3.
:
- 权重项,控制条件生成(分类器信号)与无条件生成之间的平衡:
- 当
= 0:忽略条件控制,生成完全依赖无条件分布。
- 当
= 1:完全依赖条件控制,生成样本符合类别 \(y\)。
- 当 0 <
< 1:平衡无条件分布和条件分布。
使用Classifer Guidance技术需要训练Classifier梯度项,这相当于额外训练一个根据噪声得到类别标签的分类器,这是一个非常困难的任务。此外这个分类器的结果反映到了生成梯度上,无疑会对生成效果产生一定程度的干扰影响。
为了解决这个问题,Google提出了Classifier-Free Guidance技术。Classifier-Free guidance的核心思想是通过一个隐式分类器来代替显式分类器,使得生成过程不再依赖这个显式的分类器,从而解决了Classifier Guidance中出现的上述这些问题。具体来讲,我们对式(1)进行移项,可得:
将式(3)代入到式(2)中,我们有
根据式(4),我们的分类器由conditional score和unconditional score两部分组成。在训练时,我们可以通过一个对标签的Dropout来将标签以一定概率置空,从而实现了两个score在同一个模型中的训练。
同样的,SD 3在训练过程主要对输入文本进行一定程度的dropout来实现Classifier-Free Guidance,实际操作时对三个Text Encoder各以46.4%的比例单独dropout,这也意味着输入文本完全dropout的比例为(46.4%)3≈10%。
【为什么需要独立Dropout?】三个Text Encoder独立进行dropout可以增加模型的泛化性能,这样当我们使用SD 3进行推理时就可以灵活的使用三个Text Encoder或者几种的一两个。
比如说,当我们的计算资源有限时,我们可以不加载占用显存较大的T5-XXL模型,从而只保留两个CLIP Text Encoder模型。官方论文中实验发现这样的操作并不会影响视觉美感(没有T5-XXL的胜率为50%),不过会导致文本一致性的略有下降(胜率为46%),并且还是包含了文本提示词描述高度详细的场景。不过如果想要进行高质量的文字渲染,还是需要加上T5-XXL模型的,因为在不加载T5-XXL时的胜率只有38%。
使用DPO(Direct Preference Optimization, 人类偏好)技术微调
首先DPO(Direct Preference Optimization)技术一开始在NLP领域被提出,主要是使用偏好数据对大型语言模型(LLMs)进行微调来获得更好的性能。现在在AI绘画领域,DPO技术也可以用来对AI绘画模型进行偏好的微调训练了。
与SDXL使用的RLHF(人类反馈强化学习)相比,DPO技术的优势是无需单独训练一个Reward模型,而是直接基于成对的比较数据进行微调训练。
所以在最后,DPO技术能够有效地根据人类偏好对SD 3模型进行进一步调优,不过SD 3并没有直接微调整个网络参数,而是引入了Rank = 128的LoRA权重在20亿和 80亿参数的SD 3 Base模型上进行了4000次和2000次迭代的微调。
经过DPO技术的微调后,SD 3的图像生成质量有一定的提升,特别是文字渲染方面的能力更强了。
使用QK-Normalization
【Attention层计算的Q 和 K 的矩阵乘缩放仅仅依赖缩放可能不足以解决高分辨率图像训练时的数值不稳定性】
随着SD 3模型的参数量持续增大,官方发现在进行高分辨率图像训练时,Attention层的attention-logit(Q和K的矩阵乘)会变得不稳定,导致训练会跑飞,梯度出现NaN的情况。为了提升SD 3在混合精度训练时的稳定性,在MM-DiT【两个流】的Self-Attention层使用RMSNorm对Q-Embeddings和K-Embeddings进行归一化,也就是论文里说的QK-Normalization。如下图红框:
RMSNorm介绍如下:
RMSNorm(Root Mean Square Normalization)主要是基于Layer Normalization的一种改进方法,它通过计算参数激活值的均方根(RMS)进行归一化,而不是像Layer Normalization那样计算均值和方差。
假设输入向量为 x ,其维度为 d。RMSNorm 的计算步骤如下:
计算均方根值(RMS):
对参数进行归一化:
缩放和平移:
其中,γ 和 β 分别是 缩放参数 和 平移参数,与 Batch Normalization 和 Layer Normalization 类似。这两个参数是可学习的,在 SD3 的训练过程中逐步优化更新。
其他归一化方法请参考:深度学习——优化算法、激活函数、归一化、正则化
使用RMSNorm作为正则化项有如下优势:
- 计算效率高:RMSNorm 仅需计算均方根值,而不需要计算均值和方差,计算量相对较小。
- 适用于小批量或单样本:与Batch Normalization不同,RMSNorm不依赖于批量大小,因此在小批量或单样本情况下表现良好。
- 稳定性:通过均方根值进行归一化,可以在一定程度上避免梯度爆炸和梯度消失问题,提高训练稳定性。
设计多尺度位置编码(插值+扩展)
SD 3先在256x256分辨率的数据上进行预训练,再在1024x1024分辨率的数据上进行多尺寸的微调,所以需要MM-DiT架构对应的位置编码也设计成多尺寸的。
为了能够适应多尺寸的位置编码,SD 3的MM-DiT借鉴了ViT(vision transformer)的2D Frequency Embeddings(两个1D Frequency Embeddings进行concat操作),并在此基础上进行了插值+扩展的策略。
【补充:位置编码,因为Transformer的位置编码主要是针对一维的序列,对于二维的图像数据,将水平位置编码(width, W)和垂直位置编码(height, H)分别计算后拼接,得到二维的位置信息】
2D Frequency Embeddings详细介绍可以参考:深度学习——3种常见的Transformer位置编码中的基于频率的二维位置编码部分。
假设目标分辨率的像素量为 ,SD 3 中也使用了数据分桶(bucketed sampling)训练的策略,数据集中各个尺寸的图像满足
(比如
,
,
等),同时设定图像的宽和高最大分别为
和
。因为 SD 3 的 VAE 会进行 8 倍的下采样,同时设置 Patch Size 为 2 会带来 2 倍的下采样,所以输入到 SD 3 的 MM-DiT 架构中的 patches 尺寸进行了 16 倍下采样,最大值有:
SD 3 的预训练阶段是在 256×256 分辨率下进行位置编码的,我们可以先通过插值的方式将位置编码应用到 S×S 尺度上,此时相当于位置 p 处的网格值为:
进一步地,我们可以将其扩展支持最大的宽和高,以高为例子,这里有:
对于不同的尺寸,我们只需要 CenterCrop 出对应的 2D 网格进行 Embedding 得到位置编码。
插值+扩展的策略是处理多分辨率、多尺寸场景的必要设计,是为了让 位置编码 能够适配不同分辨率和宽高比的图像,从而在高分辨率和多尺寸训练任务中保持模型性能和数值稳定性。一般需要通过以下步骤:
1: 数据分桶(Bucketed Sampling)
目的:
- 解决多分辨率和多宽高比图像在训练中的适配问题。
- 保证模型能处理不同尺寸的图像,同时训练效率更高。
实现:
- 图像分辨率满足
,如
,
,
。
- 设定最大宽高
和
,以支持所有目标分辨率。
- 数据分桶通过将不同尺寸的图像分组,确保每组图像都能有效训练模型。
2: 下采样与 Patch 设计
目的:
- 通过下采样降低输入图像的分辨率,从而减少计算成本,提高训练速度。
- 将不同分辨率的图像归一化为固定尺寸 Patch,使其适配 MM-DiT 架构。
实现:
- 总下采样倍数:通过 VAE 和 Patch Embedding,输入图像会被 16× 下采样。
- VAE 下采样 8× 。
- Patch Size 2× 2 进一步 2× 下采样。
- 结果尺寸:
- 最大输入尺寸变为:
3: 插值策略
目的:
- 让预训练阶段(256×256分辨率)的初始位置编码扩展到更高分辨率(如1024×1024),同时保持平滑性和一致性。
实现:
- 位置编码通过插值扩展到目标分辨率 S×S:网格值 =
![]()
- p:网格中的位置。
:从低分辨率到高分辨率的插值缩放因子。
4: 扩展与裁剪策略
目的:
- 扩展位置编码以支持最大宽高的图像,保证任意尺寸的输入都能适配。
- 通过裁剪从扩展网格中提取对应部分,使其适配不同宽高比的输入。
实现:
- 扩展:
- 将位置编码扩展到最大尺寸
,以确保支持所有可能的宽高比。
- 裁剪:
- 通过 CenterCrop 提取目标分辨率的编码: 位置=
- 确保裁剪后的编码能精准匹配输入图像。
TimeStep Schedule中shift参数作用
在AI绘画大模型的训练过程中,如果对高分辨率的图像采用和低分辨率图像一样的noise schedule,会出现对图像的加噪破坏不充分的情况,如下图所示:
DDPM架构的扩撒模型采用对noise schedule进行偏移的方法来进行解决
【SDXL中使用的Offset Noise操作,也是因为加噪破坏不充分。SDXL的解决方案可以参考:SDXL的优化工作-CSDN博客】。
对于SD 3这个基于RF的扩散模型来说,则是设计了TimeStep Schedule的shift策略,详细介绍如下:
【TODO】
SD 3论文中的实验结果表明,当分辨率调整为1024×1024时,shift value 最优值为 3.0。
基于DiT架构AI绘画大模型的Scaling能力
基于Transformer架构与基于U-Net(CNN)架构相比,一个较大的优势是具备很强的Scaling能力,通过增加模型参数量、训练数据量以及计算资源可以稳定的提升AI绘画大模型的生成能力和泛化性能。
SD 3论文中也选择了不同参数规模(设置网络深度为15、18、21、30、38)的MM-DiT架构进行实验。当网络深度为38时,也就是SD 3的8B参数量模型,MM-DiT架构表现出了比较好的Scaling能力,当模型参数量持续增加时,模型性能稳步提升。
同时从实验结果也可以看到,以目前的参数量级来说,还没有出现模型性能饱和的情况,说明如果继续增大模型参数量,模型性能可能继续提升,而这个结论也在后续发布的FLUX.1模型中得到了印证。
同时参数量更大的模型不仅性能更好,而且在生成时可以用较少的采样步数获得相同的性能。
SD 3.5
2024年10月22号,StabilityAI最新发布了Stable Diffusion 3的升级版Stable Diffusion 3.5系列,包括Stable Diffusion 3.5 Large、Stable Diffusion 3.5 Large Turbo以及Stable Diffusion 3.5 Medium(将于10月29日开源)三个模型。
相关文章:
Stable Diffusion 3详解
🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&…...
【CSS】设置文本超出N行省略
文章目录 基本使用 这种方法主要是针对Webkit浏览器,因此可能在一些非Chrome浏览器中不适用。 基本使用 例如:设置文本超出两行显示省略号。 核心代码: .ellipsis-multiline {display: -webkit-box; -webkit-box-orient: vertical; /* 设置…...
Python绘画:蛋糕
Python绘画:蛋糕 🐸 前言 🐸🐋 效果图 🐋🐉 代码 🐉 🌵🌲🌳🌴🌿🍀☘️🌱🍃🎋…...
使用wget在清华镜像站下载Anaconda报错ERROR 403: Forbidden.
问题描述 使用wget在清华镜像站下载Anaconda报错ERROR 403: Forbidden. Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)… 101.6.15.130, 2402:f000:1:400::2 Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15…...
道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
道可云元宇宙每日简报(2024年11月27日)讯,今日元宇宙新鲜事有: 工信部等十二部门印发《5G规模化应用“扬帆”行动升级方案》 11月25日,工业和信息化部等十二部门印发《5G规模化应用“扬帆”行动升级方案》。《方案》…...
web安全之信息收集
在信息收集中,最主要是就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息,目标网站系统,CMS指纹,目标网站真实IP,开放端口等。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。 1.1收集域名信息 知道目标的域名之后,获取域名的注册信…...
Google Earth Engine APP(GEE) ——基于多种机器学习多源遥感不同变量组合下的森林地表生物量模型预测APP
目录 Arguments: Returns: ui.Select Arguments: Returns: ui.Chart Arguments: Returns: ui.Chart Arguments: Returns: Classifier Arguments: Returns: Classifier Arguments: Returns: Classifier 本代码的主要功能是将我们提前准备好的森林生物量样本点上传到…...
Redis开发02:redis.windows-service.conf 默认配置文件解析与注解
文件位置:redis安装目录下的 redis.windows-service.conf ,存放了redis服务的相关配置,下面列举出默认配置的含义: 配置项含义bind 127.0.0.1限制 Redis 只监听本地回环地址,意味着只能从本地连接 Redis。protected-m…...
webrtc 3A移植以及实时处理
文章目录 前言一、交叉编译1.Pulse Audio webrtc-audio-processing2.交叉编译 二、基于alsa进行实时3A处理1.demo源码2.注意项3.效果展示 总结 前言 由于工作需要,硬件3A中的AEC效果实在太差,后面使用SpeexDSP的软3A,效果依旧不是很好&#…...
Android so库的编译
在没弄明白so库编译的关系前,直接看网上博主的博文,常常会觉得云里雾里的,为什么一会儿通过Android工程cmake编译,一会儿又通过NDK命令去编译。两者编译的so库有什么区别? android版第三方库编译总体思路: 对于新手小白来说搞明白上面的总体思路图很有必…...
Reachy 2,专为AI与机器人实验室打造的卓越开源双臂移动操作平台!
近期,花粉机器人(POLLEN ROBOTICS)隆重推出Reachy 2仿生机器人——下一代开源操作平台,为AI与机器人实验室带来理想的双臂移动操作科研平台! Reachy 2的仿生性: 》拥有两个基于Maxon无刷电机的仿生7自由度…...
Jest 测试异步函数
异步编程的发展历史 异步函数,就不用我描述了,JS是单线程的,所以没有办法处理异步问题,但是可以通过其他的机制实现 回调函数 例如,我们写一个定时器,在函数fetchData中,有一个延时处理的函数,但是,你有不能等他,如果他是一年呢? 所以,我们给他一个回调函数,来等他执行完返回处…...
linux安全管理-防火墙配置
1. 开启系统防火墙 1、检查内容 检查操作系统是否开启防火墙; 2、配置要求 操作系统开启防火墙; 3、配置方法 systemctl status firewalld ##查看系统防火墙运行状态 systemctl start firewalld ##启动防火墙 systemctl restart firewalld ##重启防火墙…...
Blender 运行python脚本
Blender 运行python脚本 步骤 1:打开 Blender 首先,打开 Blender 软件。你可以从官方网站 [blender.org]( 下载最新的 Blender 版本,并按照安装向导进行安装。 步骤 2:打开“文本编辑器”面板 在 Blender 的默认布局中ÿ…...
Three.js CSS2D/CSS3D渲染器
在Three.js开发过程中,有时需要将 HTML 元素与 Three.js 渲染的 3D 场景相结合,这就需要用到 CSS2DRenderer 和 CSS3DRenderer。本文将详细介绍这两种渲染器的原理及其应用 一、CSS2DRenderer 渲染器 概述 CSS2DRenderer 渲染器用于在 3D 场景中渲染纯…...
centos7 yum install 失败,mirrorlist.centos.org连接不上
由于centos7停止支持,导致mirrorlist.centos.orgdns解析都是失效啦,yum命令没法安装程序. 换一个镜像源就好 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/…...
BGP协议路由黑洞
一、实验环境 1、分公司与运营商AS自治系统内运行IGP路由协议OSPF、RIP或静态路由,AS自治系统内通过IBGP路由协议建立BGP邻居关系。 2、公司AS自治系统与运营商AS自治系统间运行EBGP路由协议。 3、通过loopback建立IBGP与EBGP邻居关系,发挥loopback建立…...
学习ASP.NET Core的身份认证(基于Session的身份认证1)
ASP.NET Core使用Session也可以实现身份认证,关于Session的介绍请见参考文献5。基于Session的身份认证大致原理就是用户验证成功后将用户信息保存到Session中,然后在其它控制器中从Session中获取用户信息,用户退出时清空Session数据。百度基于…...
《Docker Registry(镜像仓库)详解》
一、引言 在容器化技术日益普及的今天,Docker 已成为众多开发者和企业的首选工具。而 Docker Registry(镜像仓库)作为 Docker 生态系统中的重要组成部分,负责存储和分发 Docker 镜像。本文将深入探讨 Docker Registry 的概念、功能…...
Mybatis
1 什么是MyBatis MyBatis是一个优秀的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、 结果集检索等JDBC繁杂的过程代码 。…...
uniapp学习(010-3 实现H5和安卓打包上线)
零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战,开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第114p-116p的内容 文章目录 H5配置文件设置开始打包上传代码 安卓设置模拟器启动设置基础配置设置图标启动界面…...
IPGuard与Ping32结合,提供企业级数据加密与防泄密解决方案,全面保障敏感数据安全
随着数字化转型的深入推进,企业面临着日益复杂的安全挑战。如何在确保数据流通的同时,保障企业的核心资产不被泄露,是每个企业必须面对的难题。为此,Ping32与IPGuard联合推出了一套全面的企业级数据加密与防泄密解决方案ÿ…...
爬虫与反爬-旋转验证码突破方案(知名短视频、TK海外版 及 某东等等)
概述:文本对旋转验证码进行了突破及讲述了实现原理,代码使用纯算法 OpenCV,使用代价较小同时不用安装一大堆AI训练相关的模组,方便且能够快速上手 当前亲自验证了能够支持的网站:国内知名短视频平台、海外版 以及 某东…...
霍夫变换:原理剖析与 OpenCV 应用实例
简介:本文围绕霍夫变换相关内容展开,先是讲解霍夫变换基本原理,包含从 xy 坐标系到 kb 坐标系及极坐标系的映射等。接着介绍了 cv2.HoughLines、cv2.HoughLinesP 概率霍夫变换、cv2.HoughCircles 霍夫圆变换的函数用法、参数含义、与常规霍夫…...
虚拟机之间复制文件
在防火墙关闭的前提下,您可以通过几种不同的方法将文件从一个虚拟机复制到另一个虚拟机。这里,我们假设您想要从 IP 地址为 192.168.4.5 的虚拟机上的 /tmp 文件夹复制文件到当前虚拟机(192.168.4.6)的 /tmp 文件夹下。以下是几种…...
漏洞管理与补丁管理详解:系统安全的基石
文章目录 漏洞管理与补丁管理详解:系统安全的基石什么是漏洞管理?什么是补丁管理?漏洞管理与补丁管理的联系与区别实施漏洞管理与补丁管理的最佳实践 漏洞管理与补丁管理详解:系统安全的基石 在网络安全的防护体系中,…...
ArrayList与LinkedList的区别是什么?
ArrayList与LinkedList是Java集合框架中实现List接口的两种常见类,它们各自具有独特的数据结构和特点,适用于不同的应用场景。 一、底层数据结构 ArrayList和LinkedList的底层数据结构是它们之间最本质的区别。 ArrayList: ArrayList是基于…...
《Java-数组》
《Java-数组》 1.数组介绍 概念:数组是一种容器,用来存储同种数据类型的多个值。注意:数组容器在存储数据的时候,需要结合隐式转换考虑; 2.数组的定义和初始化 2.1数组定义 定义格式1(常用)…...
Docker 实战:搭建本地 Registry 私有镜像仓库及批量导入脚本
前言:在我之前的博客中,我分享了 Harbor 仓库搭建的详细操作步骤。然而,在实际的生产环境中,并非每个 Docker 环境都需要部署一个规模庞大的 Harbor 仓库。有时,一个轻量级的本地 Registry 私有镜像仓库会更为便捷。本…...
MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`
目录 前言1. 问题背景2. 错误分析2.1 错误信息详解2.2 可能原因 3. 问题排查与解决方案3.1 检查 MySQL 错误日志3.2 验证 MySQL 配置文件3.3 检查文件和目录权限3.4 手动启动 MySQL 服务3.5 修复 systemd 配置文件3.6 验证依赖环境 4. 进一步优化与自动化处理结语 前言 在日常…...
java-分而治之算法
分而治之(Divide and Conquer)算法是一种解决问题的策略,它将一个复杂的问题分解成若干个相同或相似的子问题,递归地解决这些子问题,然后将它们的解合并以解决原始问题。这种算法通常用于排序、搜索、数学计算等领域。…...
透明化教育管理:看板如何提升班级整体效率
随着教育信息化的不断推进,传统的教学和班级管理方式逐渐暴露出时间紧、任务繁、多任务并行等问题。看板管理,作为一种高效的可视化工具,正在成为教师管理教学、提升班级协作与互动的重要利器。通过透明化、系统化的管理方式,看板…...
UDP客户端服务器通信
在这篇博客中,我们将探索 UDP(用户数据报协议) 通信,简要地说,UDP 是一种无连接、快速但不可靠的通信协议,适用于需要快速数据传输但对丢包容忍的场景,比如视频流和在线游戏。就像《我是如此相信…...
helm手动部署Kafka集群
1、到指定node节点创建pv需挂载的目录,若有分布式存储可忽略 mkdir -p /data/kafka-data-0 mkdir -p /data/kafka-data-1 mkdir -p /data/kafka-data-2 mkdir -p /data/kafka-zookeeper-data-0 2、创建pvc ---apiVersion: v1kind: PersistentVolumemetadata:n…...
vue3 ajax获取json数组排序举例
使用axios获取接口数据 可以在代码中安装axios包,并写入到package.json文件: npm install axios -S接口调用代码举例如下: const fetchScore async () > {try {const res await axios.get(http://127.0.0.1:8000/score/${userInput.v…...
c/c++ 用easyx图形库写一个射击游戏
#include <graphics.h> #include <conio.h> #include <stdlib.h> #include <time.h>// 定义游戏窗口的大小 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600// 定义玩家和目标的尺寸 #define PLAYER_SIZE 50 #define TARGET_SIZE 20// 玩家的结构…...
大数据新视界 -- 大数据大厂之 Hive 数据安全:权限管理体系的深度解读(上)(15/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
gitee:创建仓库,存入本地文件至仓库
一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…...
联想品牌的电脑 Bios 快捷键是什么?如何进入 Bios 设置?
在某些情况下,您可能需要通过U盘来安装操作系统或进行系统修复。对于联想电脑用户来说,了解如何设置U盘作为启动设备是非常有用的技能之一。本文简鹿办公将指导您如何使用联想电脑的 U 盘启动快捷键来实现这一目标。 联想笔记本 对于大多数联想笔记本电…...
微信小程序用户登录页面制作教程
微信小程序用户登录页面制作教程 前言 在微信小程序的开发过程中,用户登录是一个至关重要的功能。通过用户登录,我们可以为用户提供个性化的体验,保护用户数据,并实现更复杂的业务逻辑。本文将为您详细讲解如何制作一个用户登录页面,包括设计思路、代码示例以及实现细节…...
Flink细粒度的资源管理
Apache Flink致力于为所有应用程序自动导出合理的默认资源需求。对于希望根据其特定场景微调其资源消耗的用户,Flink提供了细粒度的资源管理。这里我们就来看下细粒度的资源管理如何使用。(注意该功能目前仅对DataStream API有用) 1. 适用场景 使用细粒度的资源管理的可能…...
Jenkins环境搭建及简单介绍
一、jenkins介绍 1、持续集成(CI) Continuous integration 持续集成 团队开发成员每天都有集成他们的工作,通过每个成员每天至少集成一次,也就意味着一天有可 能多次集成。在工作中我们引入持续集成,通过持续集成自动…...
如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @
在记录HTTP请求的日志中出现了这样的情况: 2024-11-20 11:12:49 INFO network_request gz_login 96 Body: countryAbbrCN&countryCode86&email1222405567%40qq.com&password12354e50456db124f9f34e2789308733&type1 出现这种情况的原因是&#x…...
box-im学习
box-im gitee代码 box-im 语雀文档 box-im 在线体验 部署说明 需要启动下列服务 ## ## 1、启动minio ## MINIO_ROOT_USERminioadmin MINIO_ROOT_PASSWORDxxx nohup /boxim/minio/minio server /boxim/minio/data --console-address ":9001" --address "…...
faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-6
调试 经过gdb调试获取的调用栈内容如下,链接: 步骤函数名称文件位置说明1faiss::IndexFlatCodes::add/faiss/IndexFlatCodes.cpp:24在 add 方法中,检查是否已经训练完成,准备添加向量到索引中。2std::vector<unsigned char&g…...
flutter开发环境—Windows
一、简介 我们使用最新版的flutter版本安装。 参考链接 名称地址官方网站https://flutter.dev/官方中文网站文档 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter软件下载路径https://docs.flutter.dev/release/archive?tabwindows 二、操作流程 2.1 下载软件 点…...
【计网】自定义序列化反序列化(二) —— 实现网络版计算器【上】
🌎 实现网络版计算器【上】 文章目录: 实现网络版计算器【上】 自定义协议 制定自定义协议 Jsoncpp序列化反序列化 Json::Value类 Jsoncpp序列化 Jsoncpp反序列化 自定义协议序列化反序列化 …...
Harbor安装、HTTPS配置、修改端口后不可访问?
Harbor安装、HTTPS配置、修改端口后不可访问? 大家好,我是秋意零。今天分享Harbor相关内容,安装部分可完全参考官方文档,写的也比较详细。 安装Harbor 官方文档:https://goharbor.io/docs/2.12.0/install-config/ …...
React中高阶组件HOC详解
高阶组件(Higher-Order Component,简称 HOC)是 React 中的一种设计模式,用于复用组件逻辑。它本质上是一个函数,接收一个组件作为参数,并返回一个新的组件。 1. HOC 的定义 HOC 是一个函数,类…...
网络原理(一)—— http
什么是 http http 是一个应用层协议,全称为“超文本传输协议”。 http 自 1991 年诞生,目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的,例如 http1.0,http1.0,http2.0 http3 是…...