乐于分享
好东西不私藏

一文看懂AI绘画扩散模型

一文看懂AI绘画扩散模型

在 AI 绘画的世界里,生成高清、风格多变的图像不再是梦。背后的核心技术——扩散模型(Diffusion Models),通过“先加噪、再去噪”的独特方法,让计算机从随机噪声中逐步生成清晰的图像。

本文将带你从零开始,手把手解析扩散模型的原理、核心网络结构(U-Net)、采样流程及训练方法,并辅以大量 PyTorch 代码示例。无论你是 AI 初学者,还是希望实现自己图像生成实验的开发者,都能在这里找到完整的实战指南。

第一部分:扩散模型的基本原理

1.1 什么是扩散模型(Diffusion Model)

扩散模型是一类 生成式模型(Generative Models),它的核心思想是:

  • 先把真实数据逐步加入噪声(扩散过程,Forward Process);

  • 再训练一个模型学会逐步去噪(反向过程,Reverse Process);

  • 最终实现 从纯噪声中生成高质量图像

通俗点说:就像你把一张清晰的照片放进搅拌机里,打上 100 次,完全变成雪花点;然后再训练一个模型,让它学会“倒带”,一步步复原出照片。


1.2 对比 GAN、VAE 和 Diffusion

  • GAN (生成对抗网络):通过判别器和生成器对抗,训练难、容易崩。

  • VAE (变分自编码器):生成速度快,但图像往往模糊。

  • Diffusion Model:稳定、效果好,但采样速度较慢。


1.3 正向扩散(Forward Process)

在正向过程中,我们不断往图像里加噪声。假设初始干净图像为 x0x0,那么第 tt步的图像为:

其中:

  • βt是每一步的噪声强度(通常在 [0.0001, 0.02] 之间)。

  • xt表示第t步的图像。

经过很多步后,图像就变成了接近高斯分布的纯噪声。


1.4 反向扩散(Reverse Process)

目标:学会去噪,逐步从噪声恢复图像。模型的训练目标就是预测噪声 ϵϵ损失函数一般用:

1.5 Python代码示例:前向扩散

我们用一个简单的示例,把 MNIST 数字逐步加噪,看看从清晰到模糊的过程。

import torchimport torchvisionimport torchvision.transforms as transformsimport matplotlib.pyplot as plt# 超参数T = 200   # 扩散步数beta = torch.linspace(1e-40.02, T)  # 噪声强度调度# 前向扩散函数def forward_diffusion(x0, t):    """    x0: 原始图像    t: 第 t 步    """    noise = torch.randn_like(x0)    alpha = torch.cumprod(1 - beta, dim=0)    mean = torch.sqrt(alpha[t]) * x0    var = torch.sqrt(1 - alpha[t]) * noise    return mean + var# 下载 MNIST 数据transform = transforms.Compose([transforms.ToTensor()])dataset = torchvision.datasets.MNIST(root="./data", train=True, transform=transform, download=True)img, _ = dataset[0]img = img.unsqueeze(0)  # (1, 1, 28, 28)# 展示不同步数的扩散效果fig, axes = plt.subplots(15, figsize=(153))steps = [050100150199]for idx, t in enumerate(steps):    xt = forward_diffusion(img, t)    axes[idx].imshow(xt.squeeze().numpy(), cmap="gray")    axes[idx].set_title(f"Step {t}")    axes[idx].axis("off")plt.show()

运行结果:你会看到一张手写数字 从清晰 → 模糊 → 完全噪声的过程。


第二部分:前向扩散过程(Forward Diffusion)

2.1 什么是前向扩散?

前向扩散(Forward Diffusion)就是 不断往数据里添加高斯噪声,直到它变成标准高斯分布的过程。

设一张原始图像为 x0x0,第 tt步图像为 xtxt每一步加噪公式:

其中:

  • βt:噪声强度(调度参数)。

  • I:单位方差的高斯噪声。


2.2 直接计算任意步的公式

如果我们想从 第 0 步直接跳到第 t 步,可以用累积系数:

这样我们不需要一张一张地加噪,可以 直接一步采样到第 t 步

2.3 Python代码实现

下面我们写一个前向扩散函数,展示从 MNIST 数字到纯噪声的过程。

import torchimport torchvisionimport torchvision.transforms as transformsimport matplotlib.pyplot as plt# 超参数T = 200   # 扩散总步数beta = torch.linspace(1e-40.02, T)  # 噪声调度alpha = 1 - betaalpha_bar = torch.cumprod(alpha, dim=0)  # 累积alphadef q_sample(x0, t):    """    前向扩散公式: x_t = sqrt(alpha_bar_t) * x0 + sqrt(1-alpha_bar_t) * noise    """    noise = torch.randn_like(x0)    sqrt_alpha_bar = torch.sqrt(alpha_bar[t]).view(-1111)    sqrt_one_minus_alpha_bar = torch.sqrt(1 - alpha_bar[t]).view(-1111)    return sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * noise# 加载 MNIST 数据transform = transforms.Compose([transforms.ToTensor()])dataset = torchvision.datasets.MNIST(root="./data", train=True, transform=transform, download=True)img, _ = dataset[1]  # 随便取一个数字img = img.unsqueeze(0)  # (1, 1, 28, 28)# 展示不同步数的扩散效果fig, axes = plt.subplots(16, figsize=(183))steps = [02050100150199]for idx, t in enumerate(steps):    xt = q_sample(img, torch.tensor([t]))    axes[idx].imshow(xt.squeeze().numpy(), cmap="gray")    axes[idx].set_title(f"Step {t}")    axes[idx].axis("off")plt.show()

运行效果:

  • Step 0:清晰的手写数字

  • Step 20:有点模糊

  • Step 100:几乎认不出

  • Step 199:完全高斯噪声


2.4 关键点总结


    第三部分:反向扩散过程(Reverse Diffusion)

    3.1 什么是反向扩散?

    在前向扩散(Forward Process)里,我们逐步加噪,最后得到纯噪声。而反向扩散(Reverse Process)就是 从噪声一步步去噪,恢复原始图像

    但问题是:

    • 前向扩散是已知的概率分布(高斯),

    • 反向扩散的分布是未知的!

    所以我们需要训练一个神经网络来学习 如何去噪


    3.2 反向扩散的数学公式


    3.3 关键思想 —— 预测噪声

    训练时,我们不直接预测图像 x0x0,而是预测噪声 ϵϵ

    这样,采样时就能 逐步减去噪声,恢复出图像。


    3.4 用 PyTorch 实现一个小型去噪网络

    我们先写一个最小的神经网络,用来预测噪声。

    import torchimport torch.nn as nnimport torch.nn.functional as Fclass SimpleDenoiseNet(nn.Module):    def __init__(self, img_channels=1, hidden_dim=64):        super(SimpleDenoiseNet, self).__init__()        self.conv1 = nn.Conv2d(img_channels, hidden_dim, 3, padding=1)        self.conv2 = nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1)        self.conv3 = nn.Conv2d(hidden_dim, img_channels, 3, padding=1)    def forward(self, x, t):        """        x: 带噪图像        t: 时间步(这里只是占位,后面会加time embedding)        """        h = F.relu(self.conv1(x))        h = F.relu(self.conv2(h))        return self.conv3(h)# 测试网络model = SimpleDenoiseNet()dummy_x = torch.randn(112828)  # 一张带噪图dummy_t = torch.tensor([10])  # 时间步out = model(dummy_x, dummy_t)print(out.shape)  # (1, 1, 28, 28)

    输出结果应该是 (1, 1, 28, 28),表示预测的噪声和输入图像形状一致。


    3.5 训练损失函数

    我们定义训练损失,让模型学会“预测噪声”:

    def loss_fn(model, x0, t, alpha_bar):    """    x0: 原始干净图像    t: 时间步    alpha_bar: 累积alpha (前向扩散时计算的)    """    noise = torch.randn_like(x0)    sqrt_alpha_bar = torch.sqrt(alpha_bar[t]).view(-1111)    sqrt_one_minus_alpha_bar = torch.sqrt(1 - alpha_bar[t]).view(-1111)    xt = sqrt_alpha_bar * x0 + sqrt_one_minus_alpha_bar * noise    # 预测噪声    pred_noise = model(xt, t)    # 训练目标:预测噪声接近真实噪声    return F.mse_loss(pred_noise, noise)

    3.6 小结

    • 前向扩散:不断加噪,直到纯噪声。

    • 反向扩散:训练一个神经网络预测噪声,从而逐步去噪。

    • 核心损失:噪声预测误差 


    第四部分:核心模型结构 —— U-Net

    4.1 为什么选择 U-Net?

    在反向扩散过程中,我们要预测噪声。这个任务本质上就是 图像到图像的映射(输入是带噪图像,输出是噪声图像)。

    U-Net 是一个 编码器-解码器结构

    • 编码器(Encoder):逐步下采样,提取语义特征。

    • 解码器(Decoder):逐步上采样,恢复空间分辨率。

    • 跳跃连接(Skip Connection):把浅层的空间细节直接传递给解码器,避免细节丢失。

    这和扩散模型的需求完美匹配。


    4.2 U-Net 的基本结构

    一个简化版 U-Net 结构:

    输入 x_t   ↓卷积 + 下采样   ↓卷积 + 下采样   ↓卷积(中间层)   ↓卷积 + 上采样  ← 跳跃连接   ↓卷积 + 上采样  ← 跳跃连接   ↓输出噪声 ε

    4.3 时间嵌入(Time Embedding)

    扩散模型的特殊点:

    • 不仅输入图像,还需要输入 时间步 t(表示扩散到第几步)。

    • 时间步通常通过 正弦位置编码(sinusoidal positional encoding)映射成向量,再输入网络。

    公式:

    4.4 PyTorch 实现简化版 U-Net

    我们实现一个精简版的 U-Net,用于 MNIST 这种小图像。

    import torchimport torch.nn as nnimport torch.nn.functional as Fimport math# 时间嵌入模块class SinusoidalPosEmb(nn.Module):    def __init__(self, dim):        super().__init__()        self.dim = dim    def forward(self, t):        device = t.device        half_dim = self.dim // 2        emb = math.log(10000) / (half_dim - 1)        emb = torch.exp(torch.arange(half_dim, device=device) * -emb)        emb = t[:, None] * emb[None, :]        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)        return emb# 基础卷积块class ConvBlock(nn.Module):    def __init__(self, in_channels, out_channels, time_emb_dim):        super().__init__()        self.conv = nn.Sequential(            nn.Conv2d(in_channels, out_channels, 3, padding=1),            nn.GroupNorm(1, out_channels),            nn.ReLU()        )        self.time_mlp = nn.Linear(time_emb_dim, out_channels)    def forward(self, x, t):        h = self.conv(x)        # 时间步信息注入到特征图        time_emb = self.time_mlp(t)[:, :, NoneNone]        return h + time_emb# U-Net 主体class UNet(nn.Module):    def __init__(self, img_channels=1, time_emb_dim=128):        super().__init__()        self.time_mlp = nn.Sequential(            SinusoidalPosEmb(time_emb_dim),            nn.Linear(time_emb_dim, time_emb_dim),            nn.ReLU()        )        self.conv1 = ConvBlock(img_channels, 64, time_emb_dim)        self.conv2 = ConvBlock(64128, time_emb_dim)        self.conv3 = ConvBlock(12864, time_emb_dim)        self.conv4 = nn.Conv2d(64, img_channels, 1)    def forward(self, x, t):        # 时间嵌入        t_emb = self.time_mlp(t)        # 编码        h1 = self.conv1(x, t_emb)        h2 = self.conv2(F.avg_pool2d(h1, 2), t_emb)        # 解码        h3 = F.interpolate(h2, scale_factor=2, mode="nearest")        h3 = self.conv3(h3, t_emb)        # 跳跃连接        out = self.conv4(h1 + h3)        return out# 测试model = UNet()dummy_x = torch.randn(112828)   # 一张28x28的灰度图dummy_t = torch.tensor([50])          # 时间步out = model(dummy_x, dummy_t)print(out.shape)  # (1, 1, 28, 28)

    输出:

    torch.Size([112828])

    说明网络能正常工作,输入和输出尺寸一致,适合做“图像到图像”的预测。


    4.5 小结

    • U-Net 是扩散模型的核心骨架,用来预测噪声。

    • 时间嵌入让模型知道“现在是扩散的第几步”。

    • 简化版 U-Net 已经能跑 MNIST,扩展到 Stable Diffusion 就是更深更复杂的 U-Net(带残差块、注意力机制、多层 skip connection)。


    第五部分:采样过程(Sampling)

    5.1 为什么需要采样?

      采样,就是用训练好的模型一步一步“倒带”,最终生成一张新图像。


      5.2 采样的数学公式

      在反向扩散中,每一步我们要从分布中采样:


      5.3 采样流程

        5.4 PyTorch 实现 DDPM 采样

        import torch@torch.no_grad()def p_sample(model, xt, t, alpha, alpha_bar, beta):    """    单步采样公式    xt: 当前的图像 (带噪)    t: 当前时间步 (int)    """    betat = beta[t]    sqrt_recip_alpha = 1 / torch.sqrt(alpha[t])    sqrt_one_minus_alpha_bar = torch.sqrt(1 - alpha_bar[t])    # 预测噪声    eps_theta = model(xt, torch.tensor([t], device=xt.device))    # 计算均值    mean = sqrt_recip_alpha * (xt - (1 - alpha[t]) / sqrt_one_minus_alpha_bar * eps_theta)    if t > 0:        z = torch.randn_like(xt)        sigma = torch.sqrt(betat)        return mean + sigma * z    else:        # 最后一步,不加噪声        return mean@torch.no_grad()def p_sample_loop(model, shape, T, alpha, alpha_bar, beta):    """    反向扩散采样循环    """    xt = torch.randn(shape)  # 从纯噪声开始    imgs = []    for t in reversed(range(T)):        xt = p_sample(model, xt, t, alpha, alpha_bar, beta)        if t % 20 == 0:            imgs.append(xt.clone())    return imgs# 参数准备T = 200beta = torch.linspace(1e-40.02, T)alpha = 1 - betaalpha_bar = torch.cumprod(alpha, dim=0)# 假设已经训练好的模型(这里用未训练的 U-Net 代替)model = UNet()# 从噪声采样imgs = p_sample_loop(model, (112828), T, alpha, alpha_bar, beta)print(f"生成了 {len(imgs)} 张采样过程的中间图像")

        说明:

        • 如果模型未训练,输出就是纯噪声。

        • 如果模型训练充分,输出会从噪声逐渐变成 清晰的数字/图像


        5.5 DDIM:加快采样速度

        DDPM 的采样通常要跑 1000 步,非常慢。DDIM(Denoising Diffusion Implicit Models)提出了 非马尔科夫采样,可以在 50 步左右得到不错的效果。

        核心区别:

        • DDPM:必须严格按顺序采样。

        • DDIM:可以跳步采样,大幅度加快生成速度。

        代码上,只要修改采样的时间步序列即可,例如只取 50 个时间步:

        timesteps = torch.linspace(0, T-150, dtype=torch.long)

        5.6 小结

        • DDPM 采样:严格一步步从噪声还原图像,稳定但慢。

        • DDIM 采样:允许跳步采样,大幅度提升速度。

        • 核心思想:训练网络预测噪声,采样时逐步减去噪声。


        第六部分:扩展与优化

        6.1 条件扩散模型(Conditional Diffusion)

        普通的扩散模型只能无条件生成图像(Unconditional Generation),但在实际应用中我们常常希望 控制生成内容,比如:

        • 生成指定类别的数字(MNIST 里的 3 或 7)。

        • 根据文本描述生成图像(Text-to-Image)。

        解决方案:

        • 在 U-Net 输入中加入条件(标签、文本 embedding)。

        • 在训练损失里引导模型学会利用条件信息。


        6.2 类别条件扩散(Class-Conditional Diffusion)

        以 MNIST 手写数字为例,我们希望生成指定数字。做法:

        1. 获取类别标签 y

        2. 将标签嵌入成向量(embedding)。

        3. 将类别嵌入与时间步 embedding、图像特征结合。


        PyTorch 实现类别条件 U-Net

        class ConditionalUNet(nn.Module):    def __init__(self, img_channels=1, num_classes=10, time_emb_dim=128):        super().__init__()        self.time_mlp = nn.Sequential(            SinusoidalPosEmb(time_emb_dim),            nn.Linear(time_emb_dim, time_emb_dim),            nn.ReLU()        )        self.label_emb = nn.Embedding(num_classes, time_emb_dim)        self.conv1 = ConvBlock(img_channels, 64, time_emb_dim)        self.conv2 = ConvBlock(64128, time_emb_dim)        self.conv3 = ConvBlock(12864, time_emb_dim)        self.conv4 = nn.Conv2d(64, img_channels, 1)    def forward(self, x, t, y):        # 时间嵌入        t_emb = self.time_mlp(t)        # 类别嵌入        y_emb = self.label_emb(y)        # 两者相加作为条件        cond_emb = t_emb + y_emb        # 编码        h1 = self.conv1(x, cond_emb)        h2 = self.conv2(F.avg_pool2d(h1, 2), cond_emb)        # 解码        h3 = F.interpolate(h2, scale_factor=2, mode="nearest")        h3 = self.conv3(h3, cond_emb)        # 跳跃连接        out = self.conv4(h1 + h3)        return out# 测试model = ConditionalUNet()dummy_x = torch.randn(112828)dummy_t = torch.tensor([50])dummy_y = torch.tensor([3])  # 条件:数字 3out = model(dummy_x, dummy_t, dummy_y)print(out.shape)  # (1, 1, 28, 28)

        这样模型就能生成“数字 3”的图像,而不是随便的数字。


        6.3 文本引导扩散(Text-to-Image)

        在 Stable Diffusion 里,条件不是数字标签,而是 文本关键点:

        • 使用预训练的文本编码器(例如 CLIP Text Encoder、BERT)。

        • 把输入的 prompt(比如 "a cat sitting on a chair")转成向量 embedding。

        • 把这个 embedding 输入到 U-Net 作为条件。


        Stable Diffusion 的关键优化

        1. 潜在空间(Latent Space)

          • 不是直接在像素空间训练,而是在 VAE 压缩后的 latent space 训练。

          • 这样图像从 512×512 压缩到 64×64,训练速度快很多。

        2. 交叉注意力(Cross-Attention)

          • U-Net 在解码阶段引入 cross-attention,让图像生成和文本 embedding 交互。

          • 保证图像和文本语义一致。

        3. 采样优化

          • 使用 DDIM、PLMS 等采样器,加速采样,提高图像质量。


        6.4 简化版 “文本条件” U-Net 框架

        class TextConditionalUNet(nn.Module):    def __init__(self, img_channels=3, text_emb_dim=512, time_emb_dim=128):        super().__init__()        self.time_mlp = nn.Sequential(            SinusoidalPosEmb(time_emb_dim),            nn.Linear(time_emb_dim, time_emb_dim),            nn.ReLU()        )        self.text_proj = nn.Linear(text_emb_dim, time_emb_dim)        self.conv1 = ConvBlock(img_channels, 64, time_emb_dim)        self.conv2 = ConvBlock(64128, time_emb_dim)        self.conv3 = ConvBlock(12864, time_emb_dim)        self.conv4 = nn.Conv2d(64, img_channels, 1)    def forward(self, x, t, text_emb):        # 时间嵌入        t_emb = self.time_mlp(t)        # 文本嵌入(映射到相同维度)        txt_emb = self.text_proj(text_emb)        cond_emb = t_emb + txt_emb        h1 = self.conv1(x, cond_emb)        h2 = self.conv2(F.avg_pool2d(h1, 2), cond_emb)        h3 = F.interpolate(h2, scale_factor=2, mode="nearest")        h3 = self.conv3(h3, cond_emb)        out = self.conv4(h1 + h3)        return out# 测试:假设 text encoder 给了一个 512 维向量model = TextConditionalUNet()dummy_x = torch.randn(136464)         # RGB 图像dummy_t = torch.tensor([10])dummy_text_emb = torch.randn(1512)        # 文本 embeddingout = model(dummy_x, dummy_t, dummy_text_emb)print(out.shape)  # (136464)

        这就是一个 极简版的 Stable Diffusion 框架(当然真实版本更复杂,包含 attention、残差块等)。


        6.5 小结

        • 条件扩散模型:通过标签或文本 embedding 控制生成内容。

        • Stable Diffusion 的关键:潜在空间 + 文本编码器 + cross-attention。

        • 我们写了 类别条件 U-Net和 文本条件 U-Net的简化实现。


        第七部分:训练流程

        7.1 训练目标


        7.2 训练数据

        以 MNIST 手写数字为例(28×28 灰度图像):

        from torchvision import datasets, transformsfrom torch.utils.data import DataLoadertransform = transforms.Compose([    transforms.ToTensor(),    transforms.Lambda(lambda x: (x - 0.5) * 2)  # 归一化到 [-1, 1]])dataset = datasets.MNIST(root="./data", train=True, download=True, transform=transform)dataloader = DataLoader(dataset, batch_size=64, shuffle=True)

        7.3 前向扩散函数(加噪声)

        def forward_diffusion_sample(x0, t, alpha_bar):    """    给图像 x0 在时间步 t 添加噪声    """    noise = torch.randn_like(x0)    sqrt_alpha_bar_t = torch.sqrt(alpha_bar[t])[:, NoneNoneNone]    sqrt_one_minus_alpha_bar_t = torch.sqrt(1 - alpha_bar[t])[:, NoneNoneNone]    return sqrt_alpha_bar_t * x0 + sqrt_one_minus_alpha_bar_t * noise, noise

        7.4 训练循环

        import torchimport torch.nn as nnimport torch.optim as optim# 参数device = "cuda" if torch.cuda.is_available() else "cpu"T = 200beta = torch.linspace(1e-40.02, T).to(device)alpha = 1 - betaalpha_bar = torch.cumprod(alpha, dim=0)# 模型 & 优化器model = UNet().to(device)optimizer = optim.Adam(model.parameters(), lr=1e-4)loss_fn = nn.MSELoss()# 训练循环epochs = 5for epoch in range(epochs):    for step, (x0, _) in enumerate(dataloader):        x0 = x0.to(device)        batch_size = x0.shape[0]        # 随机选择时间步 t        t = torch.randint(0, T, (batch_size,), device=device).long()        # 加噪声,得到 x_t 和 真实噪声        x_t, noise = forward_diffusion_sample(x0, t, alpha_bar)        # 模型预测噪声        noise_pred = model(x_t, t)        # 损失函数        loss = loss_fn(noise_pred, noise)        # 反向传播        optimizer.zero_grad()        loss.backward()        optimizer.step()        if step % 100 == 0:            print(f"Epoch [{epoch+1}/{epochs}] Step [{step}/{len(dataloader)}] Loss: {loss.item():.4f}")

        7.5 训练效果监控

        • 训练过程中,Loss 应该逐渐下降。

        • 采样过程,可以用前面写的 p_sample_loop,从噪声生成图像。

        • 如果训练时间不够长,生成的图像可能比较模糊。


        7.6 小结

        • 训练扩散模型的关键是 预测噪声(不是直接预测图像)。

        • 前向扩散:随机选择时间步 t,加噪声。

        • 反向传播:优化模型参数,使预测噪声接近真实噪声。

        • 我们已经实现了完整的训练循环,可以在 MNIST 数据集上跑通。


        第八部分:总结与展望

        8.1 扩散模型回顾

        本文分八部分系统讲解了扩散模型(Diffusion Models)及其实现:

        1. 引言与基本概念

          • 介绍 AI 绘画背景和扩散模型的优势。

        2. 前向扩散过程(Forward Diffusion)

          • 从图像逐步加噪至高斯噪声的过程。

          • 提供了 PyTorch 实现。

        3. 反向扩散过程(Reverse Diffusion)

          • 核心:训练神经网络预测噪声。

          • 提供了最小 U-Net 去噪网络代码。

        4. 核心模型结构 —— U-Net

          • 编码器-解码器结构 + 跳跃连接。

          • 时间嵌入和简化 PyTorch 实现。

        5. 采样过程(Sampling)

          • DDPM 逐步采样公式。

          • DDIM 加速采样方法。

          • 提供采样循环代码示例。

        6. 扩展与优化

          • 条件扩散模型(类别条件、文本条件)。

          • Stable Diffusion 核心优化:潜在空间 + cross-attention + 文本编码器。

        7. 训练流程

          • 训练目标、数据准备、前向扩散加噪、反向传播。

          • 提供完整 PyTorch 训练循环。

        通过这些内容,读者可以从零开始理解并搭建一个简化版扩散模型。


        8.2 扩散模型的优势

        • 生成质量高:在图像细节和结构上,比 GAN 更稳定。

        • 训练稳定:损失函数简单(MSE),不像 GAN 那样容易不收敛。

        • 可控生成:条件扩散可以根据标签或文本生成特定图像。


        8.3 当前局限性

        • 采样慢:DDPM 通常需要上千步采样,生成大图像耗时。

        • 计算资源高:高分辨率图像训练需要大量 GPU 内存。

        • 多模态融合复杂:如文本 + 图像 + 音频,需要复杂的 cross-attention 机制。


        8.4 未来发展方向

        1. 采样加速

          • DDIM、PNDM、Fast Sampling 方法。

          • 目标:在几十步内生成高质量图像。

        2. 多模态生成

          • 文本 + 图像 + 视频 + 3D 模型生成。

          • 未来可实现 AI 全息创作平台。

        3. 轻量化与移动端部署

          • Tiny Diffusion、剪枝、量化技术。

          • 目标:移动端也能生成 512×512 高质量图像。

        4. 结合强化学习与风格控制

          • 用 RLHF 或控制信号对生成风格进行优化。

        5. 安全与内容监管

          • 自动过滤有害内容,保证 AI 绘画合规使用。


        8.5 总结

        扩散模型是 AI 绘画领域的一场革命:

        • 从 DDPM 到 Stable Diffusion,模型不断优化采样速度、生成质量和可控性。

        • PyTorch 实现让我们可以快速实验和扩展模型。

        • 未来,扩散模型将不仅局限于图像生成,还可能扩展到视频、3D、跨模态创作。

        核心理念

        先加噪,再去噪,借助神经网络预测噪声,逐步从随机中生成可控、高质量的图像。

        扩散模型(Diffusion Models)是 AI 绘画领域的核心技术,它通过 前向加噪和 反向去噪的过程,实现从纯随机噪声到高质量图像的生成。本文系统梳理了扩散模型的 基本原理、U-Net 网络结构、采样方法、条件扩展、训练流程,并配以大量 PyTorch 实战代码,让读者可以快速上手搭建自己的实验平台。

        扩散模型生成稳定、可控性强,尤其在文本条件生成(Text-to-Image)中表现出色;但也存在采样速度慢、计算资源需求高等挑战。未来,随着 采样加速、多模态生成、轻量化部署等技术的发展,扩散模型将在图像、视频、3D 乃至跨模态创作中发挥更大潜力。

        基本 文件 流程 错误 SQL 调试
        1. 请求信息 : 2026-06-21 23:01:31 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/780017.html
        2. 运行时间 : 0.098146s [ 吞吐率:10.19req/s ] 内存消耗:5,256.98kb 文件加载:145
        3. 缓存信息 : 0 reads,0 writes
        4. 会话信息 : SESSION_ID=6f485eb54c03182b41a13f60b764db26
        1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
        2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
        3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
        4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
        5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
        6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
        7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
        8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
        9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
        10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
        11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
        12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
        13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
        14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
        15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
        16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
        17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
        18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
        19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
        20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
        21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
        22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
        23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
        24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
        25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
        26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
        27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
        28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
        29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
        30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
        31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
        32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
        33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
        34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
        35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
        36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
        37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
        38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
        39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
        40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
        41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
        42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
        43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
        44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
        45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
        46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
        47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
        48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
        49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
        50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
        51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
        52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
        53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
        54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
        55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
        56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
        57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
        58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
        59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
        60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
        61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
        62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
        63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
        64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
        65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
        66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
        67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
        68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
        69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
        70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
        71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
        72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
        73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
        74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
        75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
        76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
        77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
        78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
        79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
        80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
        81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
        82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
        83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
        84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
        85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
        86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
        87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
        88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
        89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
        90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
        91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
        92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
        93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
        94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
        95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
        96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
        97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
        98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
        99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
        100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
        101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
        102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
        103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
        104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
        105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
        106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
        107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
        108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
        109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
        110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
        111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
        112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
        113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
        114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
        115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
        116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
        117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
        118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
        119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
        120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
        121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
        122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
        123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
        124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
        125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
        126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
        127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
        128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
        129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
        130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
        131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
        132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
        133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
        134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
        135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
        136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
        137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
        138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
        139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
        140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
        141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
        142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
        143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
        144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
        145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
        1. CONNECT:[ UseTime:0.000517s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
        2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000909s ]
        3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000341s ]
        4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000280s ]
        5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000488s ]
        6. SELECT * FROM `set` [ RunTime:0.000223s ]
        7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000585s ]
        8. SELECT * FROM `article` WHERE `id` = 780017 LIMIT 1 [ RunTime:0.003105s ]
        9. UPDATE `article` SET `lasttime` = 1782054091 WHERE `id` = 780017 [ RunTime:0.004374s ]
        10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000231s ]
        11. SELECT * FROM `article` WHERE `id` < 780017 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000482s ]
        12. SELECT * FROM `article` WHERE `id` > 780017 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000366s ]
        13. SELECT * FROM `article` WHERE `id` < 780017 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001329s ]
        14. SELECT * FROM `article` WHERE `id` < 780017 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004246s ]
        15. SELECT * FROM `article` WHERE `id` < 780017 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007461s ]
        0.099873s