乐于分享
好东西不私藏

AI绘画是魔法还是科学?一文揭开背后的运行机制

AI绘画是魔法还是科学?一文揭开背后的运行机制

人工智能技术飞速发展,AI绘画已从科幻走进现实,成为数字艺术领域的热门话题。无论是业余爱好者,还是专业设计师,越来越多人开始利用AI生成惊艳的艺术作品。但你是否好奇,这些“AI画家”到底是如何“看懂”文字描述,创造出丰富多彩的图像的?它们背后的核心技术又是什么?

本篇文章将从基础原理入手,系统讲解当前主流的AI绘画技术框架、文本控制机制、采样算法及进阶技巧,并带你了解训练专属模型的方法,最后探讨AI艺术创作面临的伦理和版权挑战。无论你是技术爱好者,还是想用AI提升创作效率的艺术家,都能在这里找到启发和实用干货。

第一部分:AI绘画简介与演变

🧠 什么是 AI 绘画?

AI绘画,严格来说是由人工智能模型根据用户的输入(通常是一段文字或图像)生成一幅图像的过程。常见的输入方式包括:

  • 文生图(Text-to-Image):输入“一个穿盔甲的猫骑着独角兽”,AI画出来;

  • 图生图(Image-to-Image):输入一张草图,让AI润色为精美插画;

  • 多模态控制(图+词+面部+线稿):输入多种提示,进行精准控制。

其本质是一个 条件生成建模任务(Conditional Generative Modeling)

“在给定特定条件(如文本)的情况下,生成一个满足条件的图像。”


🧬 发展历程:从 GAN 到 Diffusion

AI绘画的技术演化大致可以分为几个阶段:

年份
模型
技术类型
特点
~2015
GAN(如DCGAN)
对抗生成网络
首次提出 AI 生图,但质量低
2018
BigGAN、StyleGAN
高质量 GAN
更逼真的面孔图像
2021
VQGAN+CLIP
组合模型
文生图出现萌芽,兼容性差
2022
DALL·E 2 / Imagen
Transformer+CLIP
更强的文本理解
2022
Stable Diffusion
Latent Diffusion
开源、轻量、可本地部署
2023
ControlNet、LoRA
可控生成
精准生成、参数高效微调

这些模型之间的最大区别在于:

  • 输入的提示处理方式不同(是否用了文本编码器如 CLIP)

  • 图像生成过程是否可逆可控

  • 模型是否开源、是否能在普通显卡上运行;


🔍 AI绘画的代表模型盘点

🧙‍♂️ 1. DALL·E / DALL·E 2

  • 开发者:OpenAI

  • 模型结构:CLIP + Transformer + Diffusion

  • 优点:语言理解强

  • 缺点:不开源,不能本地运行

🧠 2. Stable Diffusion

  • 开发者:CompVis(德国海德堡大学)

  • 模型结构:Latent Diffusion

  • 优点:轻量(只需一张 8G 显卡)、开源、支持社区扩展

  • 缺点:默认生成的图需要精调(prompt engineering)


🚀 快速体验:一行代码生成AI图

这里我们用最流行的 Hugging Face diffusers库来加载 Stable Diffusion:

✅ 安装依赖

pip install diffusers transformers accelerate torch torchvision🧪 示例代码(纯文本提示 → 图片)from diffusers import StableDiffusionPipelineimport torch# 加载预训练模型pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")pipe = pipe.to("cuda")  # 有 GPU 的话# 输入 promptprompt = "A cat wearing a samurai armor, full body, digital painting"# 生成图片image = pipe(prompt).images[0]# 保存图像image.save("samurai_cat.png")
执行后,会在当前目录生成 samurai_cat.png文件,一只穿着日本武士盔甲的猫咪形象跃然纸上。

如果你没有 GPU,也可以用 CPU,虽然会比较慢,只需要改成 pipe.to("cpu")即可。


🧠 小结

这一部分我们了解了:

  • AI绘画的本质是条件图像生成;

  • 从 GAN 到 Diffusion 的演化路线;

  • 各大主流模型的核心特点;

  • 如何使用开源 Stable Diffusion 进行快速体验。

第二部分:AI绘画核心原理 —— 生成模型概览

🎨 1. 什么是生成模型?

生成模型的任务,就是学习数据的分布,然后根据这个分布“伪造”数据。比如学会了人脸的规律,它就能“凭空”生成人脸。

生成模型常见的代表有:

模型类型
代表模型
原理简述
VAE(变分自编码器)
VQ-VAE
编码-解码,生成模糊图
GAN(对抗网络)
StyleGAN、BigGAN
生成器对抗判别器,训练难但效果好
Flow(可逆变换)
Glow
数学稳,训练慢,图像清晰
Diffusion(扩散模型)
DDPM、Stable Diffusion
从纯噪声逐步“反推”图像

目前 AI 绘画最主流的是 扩散模型(Diffusion),它既能生成高质量图像,又容易控制,还能结合文字做“条件生成”。


💣 2. 什么是扩散模型?

📌 简单说:

扩散模型有两个过程:

  • 正向过程(加噪声):把原始图像一步步加噪,直到变成纯噪音;

  • 反向过程(去噪声):从纯噪音一步步还原成清晰图像。

整个过程就是个“炸了再修”的行为:

“我先把图像‘炸成渣’,再靠训练学会‘怎么把渣还原成原图’。”


🧮 3. 正向扩散(Forward Diffusion)

在训练时,我们用一个图像 $x_0$,通过多次加噪声得到 $x_1, x_2, ..., x_T$:

q(xtxt1)=N(xt;1βtxt1,βtI)

噪声的强度 $\beta_t$ 随着步数 $t$ 增加。

🧪 PyTorch 示例代码:正向加噪

import torchdef forward_diffusion_sample(x_0, t, betas):    """    给定原图 x_0 和扩散步数 t,加噪得到 x_t    """    noise = torch.randn_like(x_0)    sqrt_alpha_cumprod = torch.sqrt(torch.cumprod(1. - betas, dim=0))[t]    sqrt_one_minus = torch.sqrt(1 - torch.cumprod(1. - betas, dim=0))[t]    return sqrt_alpha_cumprod * x_0 + sqrt_one_minus * noise, noise
你可以用一张图,手动加 100 次噪声看看结果,它最终会变成纯噪点图像。

🔁 4. 反向去噪(Reverse Process)

反向过程是扩散模型训练的核心。目标是学一个模型 $\epsilon_\theta(x_t, t)$ 来预测噪声,从而逐步复原图像。

数学公式(简化):

pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))

训练目标是最小化预测噪声与真实噪声的均方误差(MSE):

L=Ex0,ϵ,t[ϵϵθ(xt,t)2]

🤖 5. 模型结构:U-Net + 噪声预测器

扩散模型的核心是一个 U-Net 网络,它接受:

  • 当前 noisy 图像 $x_t$;

  • 时间编码(告诉它当前是哪一步);

  • 文本提示的嵌入(用于控制生成内容);

然后输出预测噪声 $\hat{\epsilon}$,用于反向更新。

示例:构造一个简化 U-Net(仅结构)

import torch.nn as nnclass SimpleUNet(nn.Module):    def __init__(self, channels=3):        super().__init__()        self.down = nn.Sequential(            nn.Conv2d(channels, 643, padding=1),            nn.ReLU(),            nn.Conv2d(641283, padding=1),            nn.ReLU(),        )        self.up = nn.Sequential(            nn.ConvTranspose2d(128643, padding=1),            nn.ReLU(),            nn.ConvTranspose2d(64, channels, 3, padding=1),        )    def forward(self, x, t):        h = self.down(x)        out = self.up(h)        return out
真实模型当然要复杂得多,还会加入时间编码、交叉注意力、LayerNorm 等。

🔁 6. 推理时的采样流程(从噪声到图)

在生成阶段,我们从纯噪声出发:

x_T = torch.randn((1, 3, 512, 512))

然后使用 $\epsilon_\theta$ 预测噪声 $\hat{\epsilon}$,一步步迭代还原:

for t in reversed(range(T)):    noise = model(x_t, t)    x_t = update(x_t, noise, t)
每一步类似在“修复图像的细节”。

📦 7. 快速实践:Stable Diffusion 样本

Hugging Face 提供了预训练好的 Stable Diffusion 模型,我们不必从头训练:

from diffusers import StableDiffusionPipelinepipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")pipe.to("cuda")img = pipe("a futuristic city in the clouds, 8k").images[0]img.save("future_city.png")
你现在看到的每一张 AI 图,背后都经历了数十次这样的“噪声预测与还原”过程。

✅ 小结

  • AI绘画基于生成模型,尤其是扩散模型(Diffusion Models);

  • 它通过“加噪-去噪”训练过程来学会“凭空生成图像”;

  • 扩散模型的核心是噪声建模与迭代还原;

  • 使用 U-Net 结构预测噪声,再通过公式反推生成图像。

第三部分:Stable Diffusion 原理解析

🧠 1. 为什么不用原图空间做扩散?

传统 Diffusion 模型,比如 DDPM,直接对像素级图像做加噪/去噪操作。以 512×512 分辨率、3 通道彩色图为例:

  • 每张图像的输入张量为 [3, 512, 512],共计 786,432个维度;

  • 模型训练过程耗显存、慢、效果还不如人意;

所以,CompVis 提出了一种新的做法:

“咱别在图像空间折腾了,先压缩到‘潜空间’,再进行扩散。”

这就引出了 Stable Diffusion 的核心技术—— Latent Diffusion Model(LDM)


🧬 2. 什么是 Latent Diffusion Model(LDM)?

LDM 的核心思想:

  • 用一个 图像编码器(Autoencoder)将图像压缩为一个低维潜变量;

  • 在这个小得多的潜空间中做扩散操作;

  • 最后用解码器还原成图像。

架构流程如下:

图像 x_0  ↓  编码器 f(x)潜变量 z_0  ↓  扩散去噪潜变量 z_T → z_0  ↓  解码器 f⁻¹(z)图像 x_0'

比喻:

原图像空间就像在操控 100 万个像素点;潜空间就像只操控 10 万个“潜变量”,你仍能还原原始图,但训练成本大大降低。


🧪 3. 使用 AutoencoderKL 进行潜空间压缩

Stable Diffusion 的编码器和解码器使用了一个叫 AutoencoderKL的变分自编码器。

✅ 安装 HuggingFace Transformers 模块:

pip install transformers
✅ 代码示例:压缩图像到潜空间
from PIL import Imageimport torchfrom torchvision import transformsfrom diffusers.models import AutoencoderKL# 加载预训练的 VAE 模型vae = AutoencoderKL.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="vae")vae = vae.to("cuda").eval()# 加载图像image = Image.open("cat.jpg").convert("RGB")preprocess = transforms.Compose([    transforms.Resize((512512)),    transforms.ToTensor(),    lambda x: x * 2 - 1  # normalize to [-1, 1]])image_tensor = preprocess(image).unsqueeze(0).to("cuda")# 编码图像:图像 → 潜变量 zwith torch.no_grad():    latent_dist = vae.encode(image_tensor).latent_dist    latent_z = latent_dist.sample()print("潜空间张量形状:", latent_z.shape)  # [1, 4, 64, 64]
我们将 512×512×3 图像压缩到了 64×64×4,大大减小了处理量!

🧯 4. 在潜空间中做扩散

Stable Diffusion 并不是对图像做扩散,而是对 潜变量 $z$ 做扩散

也就是说,我们训练一个模型 $\epsilon_\theta(z_t, t, c)$,它输入是 noisy 潜变量 $z_t$,输出是噪声预测。

这个过程和普通扩散模型一样,唯一的区别是:

  • 图像 → 潜变量

  • 扩散模型处理的不是图像,而是潜变量

这就是 “Latent Diffusion”。


🔁 5. 解码图像(潜变量 → 图)

完成采样后,我们可以把潜变量 z_0 解码成图像:

# 解码图像with torch.no_grad():    decoded_image = vae.decode(latent_z).sample# 将张量转为 PIL 图像from torchvision.transforms.functional import to_pil_imageimg = (decoded_image.squeeze(0) + 1) / 2  # [-1, 1] → [0, 1]img_pil = to_pil_image(img.cpu())img_pil.save("decoded.png")
如果你做个对比,会发现虽然潜空间压缩了信息,但重建图像仍然非常清晰。

🎯 6. 为什么 Stable Diffusion 可以跑在普通显卡上?

正是因为它:

  • 在 64×64×4 潜空间中做操作;

  • 用轻量的 U-Net构建扩散网络;

  • 使用 文本编码器(CLIP)来控制生成方向;

因此即使是 8GB 显存的 3060 显卡,也能跑一张 512×512 的图(原来需要 A100)。


🔐 7. 简要回顾 Stable Diffusion 各模块职责

模块
作用
说明
VAE 编码器
图像 → 潜变量
降维、压缩特征
文本编码器(CLIP)
文字 → 向量
让 AI 知道“画什么”
U-Net 扩散模型
预测噪声
核心生成器,运行在潜空间
VAE 解码器
潜变量 → 图像
把潜变量变成图

这套结构,构成了 Stable Diffusion 的骨架。


✅ 小结

  • Stable Diffusion 并不直接在图像上做扩散,而是在“潜空间”中操作;

  • 它使用 AutoencoderKL 压缩图像,再在潜变量上进行扩散和去噪;

  • 这种方法让模型计算更高效,占用显存更低,生成效果仍可观;

  • 用文本向量控制图像的生成,是通过“条件扩散”的方式完成的;

第四部分:文本如何控制图像?——CLIP与条件生成

📌 1. 问题引出:AI是怎么理解这段话的?

输入一句话:

"A cat wearing a samurai armor riding a dragon in the sunset"

AI就能画出一个符合场景和情绪的图。这不是“关键词检索”,而是 AI 真正理解了这段描述的语义结构

那么——

AI 是怎么把文字变成“画画的动机”的?

这就要从 CLIP 说起。


🧠 2. 什么是 CLIP?

CLIP(Contrastive Language–Image Pretraining)是 OpenAI 提出的一个跨模态编码器,可以把文字和图像投射到同一个语义空间里。

它的功能是:

  • 把一段文字变成一个向量:$E_\text{text}(prompt)$

  • 把一张图像也变成一个向量:$E_\text{image}(image)$

  • 两者在语义上越“对得上”,内积就越大

所以,CLIP 能做两件事:

  1. 文本 → 图像 语义检索

  2. 文本 → 控制 AI 绘图方向(条件控制)


🎯 3. 条件扩散:如何将文本嵌入“引导生成”?

我们讲过 Diffusion 是在不断预测噪声的过程:

ϵ^θ(zt,t)

而在条件扩散中,我们引入文本嵌入 $c$:

ϵ^θ(zt,t,c)

也就是说:AI 在每一步预测噪声时,会“参考”你提供的文本向量,引导图像往符合文字描述的方向去走。

✅ 代码演示:提取文本嵌入向量

我们使用 CLIPTextModel 从 HuggingFace 提取 prompt 的语义向量。

from transformers import CLIPTokenizer, CLIPTextModelimport torch# 加载 Tokenizer 和 Text Encodertokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14")text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14")# 输入提示词prompt = "A cyberpunk cityscape at night"# 编码成 tokeninputs = tokenizer(prompt, return_tensors="pt")# 获取文本嵌入向量(last_hidden_state 或 pooled_output)with torch.no_grad():    text_embeddings = text_encoder(**inputs).last_hidden_state  # [1, 77, 768]print("文本嵌入向量形状:", text_embeddings.shape)
这些向量会送入 U-Net 中,通过 cross-attention 层参与每一层的生成过程。

🧮 4. Cross-Attention:AI如何“边画边参考文字”?

U-Net 的中间层使用 Cross-Attention,将图像潜变量和文本向量关联起来。

原理:

在多层神经网络中加入 attention 层:

  • Query 来自图像潜变量;

  • Key、Value 来自文本嵌入向量;

  • 得到图像区域对文本 token 的注意力分布。

类比:

你可以理解成 AI 画画时一边想:

“我现在画的是这部分,该参考 prompt 中的哪个词?”

所以,“cyberpunk” 就会强化色调,“night” 就会加强暗部光源效果。


⚖️ 5. Classifier-Free Guidance(CFG)

问题:

有时文本控制力不够,AI 画得不对题。

解决:

引入 CFG 技术,使用一条无条件路径 + 条件路径做加权。

公式如下:

ϵ^=(1+w)ϵθ(zt,t,c)wϵθ(zt,t)

其中 $w$ 是 guidance scale(一般设为 7.5~12)。

✅ Diffusers 中控制 CFG:

image = pipe(prompt, guidance_scale=8.5).images[0]
这就相当于把“听话程度”调高,让 AI 更忠实于 prompt。

🎨 6. Prompt Engineering:如何写出“听话”的提示?

好的 prompt 不是一句话,而是一个组合指令

"A beautiful female elf, fantasy style, detailed face, glowing eyes, soft lighting, trending on artstation"

常见关键词模块:

功能
示例
主体
"a girl", "a dragon", "a robot dog"
风格
"digital painting", "cyberpunk", "pixel art"
镜头
"close-up", "wide shot", "full body"
情绪
"melancholy", "epic", "peaceful"
平台标签
"trending on ArtStation", "award winning", "concept art"

🧪 实战:生成带风格控制的图像

prompt = "A surreal dreamscape, melting clocks, Salvador Dali style, highly detailed, oil painting"image = pipe(prompt, guidance_scale=9.0).images[0]image.save("dali_dream.png")
结果图像会表现出明显的“达利风格”和“超现实”元素,仿佛在梦境中。

✅ 小结

  • 文本控制图像生成,是通过 CLIP 文本编码器将文字转为嵌入向量;

  • 扩散模型在每一步都会参考这些向量,引导图像贴近 prompt;

  • 使用 Classifier-Free Guidance 可以提高对 prompt 的响应度;

  • Prompt 设计技巧直接影响生成效果,是“AI 绘画的语言”。

第五部分:采样算法详解 —— 从DDIM到DPM++

🧠 1. 什么是采样器(Sampler)?

在扩散模型中,生成图像并不是一蹴而就的,而是一个逐步“去噪”的过程:

  • 从纯噪声 $x_T$ 开始

  • 经过 $T$ 次步骤逐步去噪

  • 最终得到 $x_0$(清晰图像)

这个“逐步还原图像”的过程,靠的就是采样器算法。

举例说明:

Sampler
步数 T
特点
DDPM
1000+
原始方法,慢
DDIM
25~50
快速、可控、主流
Euler
20~40
清晰、有细节
DPM++
10~30
新一代,速度与质量兼顾

📦 2. 原始方法:DDPM

DDPM(Denoising Diffusion Probabilistic Models)是最初的采样方法:

  • 每一步都计算一个高斯分布;

  • 从 $x_t$ 采样得到 $x_{t-1}$;

  • 需要 1000 步左右,太慢。

所以就诞生了改进版本,比如 DDIM。


🚀 3. 快速采样:DDIM

DDIM(Denoising Diffusion Implicit Models)是一种确定性采样器,它的特点是:

  • 可调步数(如 50 步);

  • 推理过程可复现(deterministic)

  • 可以用相同噪声多次采样;

数学公式(简化):

DDIM 直接构造出 $x_{t-1}$ 的公式,不再是随机采样,而是用神经网络预测的噪声确定地更新:

xt1=xt1αtϵθ(xt)αt+optional noise

✅ 在 diffusers中使用:

from diffusers import DDIMSchedulerscheduler = DDIMScheduler.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="scheduler")pipe.scheduler = schedulerimage = pipe("a castle on a cliff", guidance_scale=7.5, num_inference_steps=50).images[0]

🎨 4. 经典采样器:Euler 与 Euler a

Euler(欧拉)

  • 数学上是经典的常微分方程(ODE)求解器;

  • 在去噪过程中逼近真实轨迹;

  • 有非常自然的细节还原。

Euler a(欧拉离散版)

  • 在 Euler 基础上加入一定程度的“随机性”;

  • 可以提高图像多样性;

  • 更适合创意生成。


⚙️ 5. DPM++ 系列:新一代高性能采样器

DPM++(Denoising Probabilistic Models Plus)是目前主流扩散模型性能最优的采样器之一,由多位学者共同提出。

它支持多种方式(2M、SDE、Karras等),特点是:

  • 可自适应步长;

  • 高质量;

  • 快速收敛(10~20步即可出图);

  • 多种变体可以兼顾稳定性与创意性。

✅ 示例:使用 DPM++ 采样器(需 diffusers>=0.17

from diffusers import StableDiffusionPipeline, DPMSolverMultistepSchedulerpipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")pipe.scheduler = DPMSolverMultistepScheduler.from_pretrained("runwayml/stable-diffusion-v1-5", subfolder="scheduler")pipe = pipe.to("cuda")image = pipe("a glowing sword stuck in a stone", guidance_scale=8.0, num_inference_steps=20).images[0]
效果往往会比 DDIM 更锐利。

📊 6. 各采样器效果对比(经验总结)

采样器
清晰度
创意性
耗时
推荐用途
DDIM
★★★★☆
★★☆☆☆
默认优选
Euler
★★★★★
★★★☆☆
中等
写实/插画
Euler a
★★★★☆
★★★★☆
中等
艺术/幻想
DPM++ 2M Karras
★★★★★
★★★★☆
高质量图像
Heun
★★★☆☆
★★★☆☆
实验用途

实际生成时,不同 prompt + 不同 Sampler 的组合,能产生很不一样的风格。


🧪 实验:同 prompt 多采样器对比

prompt = "an astronaut riding a horse on Mars, cinematic lighting"for sampler_name in ["DDIM""Euler""Euler a""DPM++"]:    scheduler = get_scheduler(sampler_name)    pipe.scheduler = scheduler    image = pipe(prompt, guidance_scale=7.5, num_inference_steps=30).images[0]    image.save(f"{sampler_name}.png")
提示:你可以将采样器封装成参数接口,在前端图形化界面中选择不同采样器进行试验。

✅ 小结

  • Sampler 决定了扩散模型“怎么从噪声还原图像”;

  • 不同采样器有速度、风格、稳定性等权衡;

  • 推荐使用 DPM++ / Euler / DDIM 三大主流采样器;

  • 善用采样器组合,可以生成极具创意、精度高的图像;

第六部分:进阶控制技术 —— ControlNet、LoRA 与 T2I-Adapter

📌 1. 什么是“控制”?

传统扩散模型只接受文本作为输入,听话程度有限。于是人们想出了更多手段来“辅助控制”AI画画:

控制技术
能力
应用举例
ControlNet
附加条件图(如姿态、边缘、深度)
指定姿势、结构、草图转图
LoRA
微调局部风格
加载某画师风格、角色脸替等
T2I-Adapter
类似 ControlNet,更轻量
实时草图画图、快速控制

🧠 2. ControlNet 原理概述

ControlNet 是在原始 U-Net 扩散模型中插入一条可学习的副路(control branch),用于处理“控制图”。

比如你输入一句 prompt:“a girl dancing”,再提供一个姿态骨架图,ControlNet 就能让图像不仅像“一个跳舞的女孩”,而且还精确贴合这个姿势。

✅ 示例输入:

from controlnet_aux import OpenposeDetectorfrom diffusers import StableDiffusionControlNetPipeline, ControlNetModel# 加载 ControlNet 的姿势检测器pose = OpenposeDetector.from_pretrained("lllyasviel/ControlNet")# 读取图片 → 骨架图image = Image.open("girl.jpg")pose_image = pose(image)# 加载 ControlNet 模型controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-openpose")# 构建管道pipe = StableDiffusionControlNetPipeline.from_pretrained(    "runwayml/stable-diffusion-v1-5",    controlnet=controlnet)pipe.to("cuda")# 使用控制图 + 提示词生成图像image = pipe("a dancing girl, cyberpunk style", image=pose_image, num_inference_steps=30).images[0]image.save("dance_pose.png")
这样你就能直接“操控姿势”来生成图像了。

🖼️ 3. ControlNet 支持哪些控制图?

模型
控制图类型
应用
openpose
人体骨架
动作控制
canny
边缘图
草图转画
depth
深度图
空间感控制
scribble
手绘草图
快速创意实现
seg
语义分割
区域换装、分区上色

你可以把 ControlNet 想象成 “插画家 + 人类提示词 + 指挥手势” 的集合体。


🧬 4. LoRA:微调模型的新方式

LoRA(Low-Rank Adaptation)是一种“轻量微调”的方法。

它解决的问题是:

我不想训练整个模型,只想教 AI 一种新风格,比如“村上隆风格”或者“赵丽颖的脸”,该怎么办?

LoRA 只微调模型中某些层的低秩矩阵(通常是 U-Net 的 attention 层),文件体积非常小(几MB),加载速度快。

✅ 使用 LoRA(示例)

from diffusers import StableDiffusionPipelinefrom safetensors.torch import load_filepipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")pipe.to("cuda")# 加载 LoRAstate_dict = load_file("lora_zhaoliying.safetensors")pipe.unet.load_attn_procs(state_dict)# 提示词生成prompt = "a beautiful princess, wearing hanfu, in the style of zhao liying"image = pipe(prompt, num_inference_steps=30).images[0]image.save("zhaoliying_style.png")
提示:有很多 LoRA 模型可以在 Civitai.com 下载使用。

🔌 5. T2I-Adapter:轻量级 ControlNet 替代方案

T2I-Adapter(Text-to-Image Adapter)和 ControlNet 的思路相似,但它是:

  • 单独训练的 adapter 网络;

  • 与原始模型解耦合;

  • 兼容更多基础模型(如 SDXL、Anything v5);

它的优势是:

  • 模型更小;

  • 更易适配;

  • 可用于嵌入式环境或移动端。

✅ 使用 T2I-Adapter(简化流程)

# pip install diffusers t2i-adapter transformersfrom t2i_adapter import apply_t2i_adapterpipe = apply_t2i_adapter(    base_model="runwayml/stable-diffusion-v1-5",    adapter_type="canny",    adapter_ckpt="t2i_adapter_canny.pth")
# 提供边缘图和提示词image = pipe(prompt="cyberpunk street at night", image=sketch_img).images[0]

🧪 6. 综合实验:ControlNet + LoRA 组合使用

你可以“姿势指定 + 风格指定”:

# 提供骨架图 + 加载赵丽颖风格 LoRApose_img = openpose(image)pipe.unet.load_attn_procs(load_file("zhaoliying.safetensors"))# 生成图像image = pipe("a girl dancing in traditional Chinese dress", image=pose_img).images[0]
生成的角色会保持你的姿势,同时拥有指定的风格和脸型。

✅ 小结

  • ControlNet 可实现 结构级控制(姿势、边缘、深度等);

  • LoRA 可实现 风格级/人脸级控制,适合定制角色;

  • T2I-Adapter 是轻量化替代方案,适合移动端或灵活部署;

  • 这些进阶控制技术让 AI 绘画从“文本提示”进化到“精确执行”;

第七部分:训练你自己的AI画师——Fine-tuning与DreamBooth实战指南

📌 1. 为什么要训练自己的模型?

虽然预训练的Stable Diffusion非常强大,但它不能完全满足个性化需求,比如:

  • 想要专属风格(个人绘画风格、公司品牌风格);

  • 想把特定人物、宠物、建筑物加入AI生成库;

  • 需要更精准的人物脸、服装、动作表达。

这时,就需要用Fine-tuning(微调)或者DreamBooth(个性化训练)技术来“训练”专属模型。


🧠 2. Fine-tuning 与 DreamBooth 的区别

技术名称
作用
训练数据
特点
Fine-tuning
对整个模型或部分层微调
大量数据(数千张)
训练成本高,通用性强
DreamBooth
训练识别特定对象(如某人脸)
少量数据(10~20张)
训练速度快,专属性强

🛠 3. Fine-tuning 基础流程

3.1 环境准备

推荐使用 diffusers + Accelerate 环境,支持多GPU和混合精度训练。

pip install diffusers accelerate transformers datasets
3.2 数据准备
  • 准备大量高质量的训练图像与对应文字描述;

  • 格式一般是 COCO 风格的图片 + 标签;

3.3 训练示例代码(简化)

from diffusers import StableDiffusionPipeline, UNet2DConditionModel, DDPMSchedulerfrom transformers import CLIPTextModel, CLIPTokenizerimport torch# 加载基础模型model_id = "runwayml/stable-diffusion-v1-5"pipe = StableDiffusionPipeline.from_pretrained(model_id)pipe = pipe.to("cuda")# 训练准备:一般冻结部分参数,微调特定层# 省略具体代码...# 训练循环示例(伪代码)for epoch in range(num_epochs):    for batch in dataloader:        images, captions = batch        # 计算损失,反向传播,优化参数        ...
真实训练复杂,需要设计优化器、scheduler、数据增强、日志记录等。

🎯 4. DreamBooth 个性化训练

DreamBooth 是谷歌提出的专门用于个性化扩散模型训练的方法。

4.1 主要步骤

  • 准备少量(10~20张)目标对象照片,拍摄多角度多光照;

  • 创建带有独特关键词的训练文本,如 <sks>表示目标对象;

  • 使用预训练模型,微调使模型学会识别 <sks>

  • 生成时输入带 <sks>的 prompt 即可生成特定对象。

4.2 代码示例(简化)

from dreambooth import DreamBoothTrainer  # 假设存在trainer = DreamBoothTrainer(    pretrained_model="runwayml/stable-diffusion-v1-5",    instance_data_dir="./sks_images",    class_data_dir="./class_images",    instance_prompt="<sks> in a photo",    output_dir="./dreambooth_model")trainer.train(num_steps=1000)
训练完成后,你就得到了一个“懂得是谁”的模型。

⚙️ 5. Fine-tuning的注意事项

  • 训练数据质量是关键,图片越多越丰富越好;

  • 防止过拟合,适当数据增强;

  • 训练时间长且消耗显存,建议多卡并行;

  • 学习率设置要低,避免破坏预训练权重;

  • DreamBooth更适合快速训练单个对象。


🧪 6. 实战:如何用 DreamBooth 生成指定人物

  1. 收集20张目标人物高清照片;

  2. 制作训练数据文件夹;

  3. 写好对应 prompt,带上唯一标识符;

  4. 启动训练,监控损失曲线;

  5. 训练完成后,测试生成:

prompt = "<sks> wearing a red dress, in the style of oil painting"image = pipe(prompt).images[0]image.save("custom_person.png")

✅ 小结

  • Fine-tuning 能让模型适应新风格或新任务,但成本高;

  • DreamBooth 是快速训练少量目标对象的利器;

  • 训练过程需合理设置参数,避免过拟合和性能退化;

  • 训练完成后,可以用专属关键词调用个性化模型生成内容。

第八部分:AI绘画中的伦理与版权问题

📌 1. AI绘画为何引发伦理争议?

AI绘画技术迅速普及,带来了前所未有的艺术创作自由,但也引发了多方面的伦理讨论:

  • 作者身份问题:AI生成作品是谁的“创作”?

  • 原创性和抄袭:AI训练依赖大量已有艺术作品,会不会侵犯原作者权益?

  • 深度伪造与隐私:是否有人被“无授权”用作训练或生成?

  • 内容管控:如何防止生成暴力、色情、歧视等不良内容?


⚖️ 2. 版权问题解析

2.1 AI训练数据的版权争议

大多数扩散模型的训练数据是互联网公开数据,包含大量受版权保护的艺术作品。

  • 问题点:未经授权直接使用可能侵犯版权;

  • 现实:目前法律尚未明确界定AI训练数据的版权状态;

  • 案例:部分艺术家起诉AI公司,认为作品被无偿“剽窃”。

2.2 生成作品的归属权

  • AI生成的作品,通常归“操作者”或“模型所有者”所有;

  • 不同国家对AI作品归属权的法律定义不一;

  • 一些平台要求用户声明有权使用输入提示和参考素材。


🛡️ 3. 伦理使用AI绘画的建议

建议
说明
尊重原创
避免用AI复制、模仿特定艺术家风格进行商业变现
合法授权
使用训练数据或素材时确保合法合规
透明标注
公开标识AI生成内容,避免误导受众
内容审核
严禁生成违法、暴力、色情、歧视内容
保护隐私
避免使用未经允许的个人照片训练或生成

🚨 4. 各大平台的应对措施

  • OpenAI、Stability AI等均发布了使用规范;

  • 平台加强对敏感内容的检测与过滤;

  • 鼓励开发者设计“可解释”“可追溯”的AI模型;

  • 推动行业自律与法律法规完善。


🔍 5. 未来趋势展望

  • 版权法规可能逐步明确AI训练数据和生成作品归属;

  • AI生成内容将更多采用“水印”或“指纹”技术识别出处;

  • 伦理教育和技术监管相结合,促进AI健康发展;

  • AI与艺术家合作模式将更加多样与规范。

AI绘画的伦理和版权问题复杂且持续演变,作为用户,应当尊重原创,合法合规使用AI技术,关注行业动态,推动技术与法规良性互动,共同维护健康、公平、创新的艺术生态。

写到这里本文就结束了,本文系统介绍了AI绘画的基本原理及相关进阶技术,从扩散模型基础,到文本控制、采样算法,再到进阶控制和个性化训练,最后触及伦理版权,助你全面理解AI绘画的方方面面。

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-20 19:01:29 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/773118.html
  2. 运行时间 : 0.199720s [ 吞吐率:5.01req/s ] 内存消耗:4,840.21kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7badceb8a848b29a81ae734f8725eed1
  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.001097s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001447s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000620s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000589s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001132s ]
  6. SELECT * FROM `set` [ RunTime:0.000530s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001171s ]
  8. SELECT * FROM `article` WHERE `id` = 773118 LIMIT 1 [ RunTime:0.001361s ]
  9. UPDATE `article` SET `lasttime` = 1781953289 WHERE `id` = 773118 [ RunTime:0.001620s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000575s ]
  11. SELECT * FROM `article` WHERE `id` < 773118 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000933s ]
  12. SELECT * FROM `article` WHERE `id` > 773118 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000765s ]
  13. SELECT * FROM `article` WHERE `id` < 773118 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002033s ]
  14. SELECT * FROM `article` WHERE `id` < 773118 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001650s ]
  15. SELECT * FROM `article` WHERE `id` < 773118 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001481s ]
0.203577s