想象你是一位项目总监,手下有一位才华横溢但极度“自我”的插画师。他叫 Stable Diffusion。你只要说一句“画一个站在街角的少女”,他就能凭空画出光影梦幻的画面——但问题是,他太爱自由发挥了:明明要站姿,他画成飞起来的姿势;要正面,他非要给侧脸。你盯着画纸上那批“翻车”作品,头疼不已。 这时候,ControlNet 登场了。它像一位拿着施工图纸的项目经理:先用“扫描仪”把参考照片里的轮廓、骨架、深度信息提取成一张张图纸,再站在画师身后悄悄提醒——“线条顺着这张图走,骨架摆这个姿势,别自己改”。画师依然是你认识的那个天才,落笔的质感、色彩、光影全都保留,但画面的大结构终于“听话”了。 这篇文章会带你把整套“图纸系统”拆开看明白:图纸如何生成(预处理器)、如何递给画师(零卷积注入)、有哪些图纸类型(边缘/姿态/深度/分割)、怎么调“盯场”强度(控制权重)、多张图纸怎么叠用,以及如何让这位画师画得更快更省。学完你会发现,AIGC 出图从“抽盲盒”变成了“按图施工”。

岗位关联

对 AI 从业者而言,ControlNet 是把生成结果从“不可控的灵感”变成“可交付的工程”的关键技能,也是数字人、电商、影视等 AIGC 落地场景最重要的控制手段。

目录
  1. 可视化演示
  2. 原理与架构:画师大脑里发生了什么
  3. 核心组件:从参考图到施工图纸
  4. 控制类型:五种常用的“图纸”流派
  5. 参数调优:把“盯场”强度调到恰到好处
  6. 实战工作流:多张图纸叠加的导演指挥法
  7. 性能优化:让画师画得更快更省
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

三模式展示ControlNet核心:SD UNet可训练副本+零卷积注入控制信号、Canny/Depth/Pose/Seg四种控制条件类型、有无ControlNet生成精度对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

ControlNet架构:可训练副本+零卷积 冻结原始SD UNet参数,保留预训练生成能力 复制UNet为可训练副本,学习条件控制信号 零卷积层初始权重为0,训练初期不影响SD输出 y = SD(x) + Z(CN(x)), Z初始化=0 零卷积保证训练起始时ControlNet输出为零,逐步学习控制能力。

原理与架构:画师大脑里发生了什么

想象那位插画师的工作台。他不会直接从白纸开始画,而是先在脑海里搅动一团模糊的“颜料雾”——这团雾在专业术语里叫潜空间。Stable Diffusion 从一个随机噪声出发,经过很多轮去噪,雾逐渐凝成清晰的画面。这个过程叫扩散生成流程。问题在于,他“脑补”的成分太多:文字提示只是给了个大概方向,具体姿势、透视、布局全靠他自己的偏好,于是经常画得“神但不像”。ControlNet 的做法,是往这位画师的每一个工作层递上一张“结构便签”——便签上画着条件图,提醒他骨骼该在哪里。

技术上看,ControlNet 复制 U-Net 编码器网络作为可训练副本,而主网络参数保持冻结。副本网络接收条件特征,并通过零卷积(初始权重和偏置都为 0 的特殊卷积层)把控制信号渐进地注入主网络。零卷积的关键在于:训练刚开始时它不产生任何输出,相当于项目经理先闭嘴观察,画师原来的画风一点都不受影响;随着训练进行,它再慢慢学习“什么时候该递纸条、纸条上该写什么”。

所以 ControlNet 不是换掉画师,也不是禁止他发挥,而是在他每一层工作台上放一张“结构便签”。画师还是那个画师,只是这一次,他不会再把站姿画成飞跃。

yc=F(xc;θ)+Z(xc,c;ϕ)\displaystyle y_c = F(x_c; \theta) + \mathcal{Z}(x_c, c; \phi)
主 U-Net 的某层输出,加上 ControlNet 副本根据条件图算出的修正信号,得到受控后的特征。
  1. x_c条件输入特征:主网络当前处理的特征图,相当于画师工作台上的半成品草稿。
    xc\displaystyle x_c
  2. F(x_c; θ)冻结的主干分支:主 U-Net 对该特征的变换,参数 θ 固定不动,保证原有画风不崩。
    F(xc;θ)\displaystyle F(x_c; \theta)
  3. Z(x_c, c; φ)可训练的控制分支:ControlNet 副本同时参考草稿 x_c 和条件图纸 c,φ 是它自己学出来的参数。
    Z(xc,c;ϕ)\displaystyle \mathcal{Z}(x_c, c; \phi)
  4. 逐层相加注入两个分支的输出按元素相加,控制信号“叠加”进主网络,画师一边自由画一边被结构提醒。
    yc=F(xc;θ)+Z(xc,c;ϕ)\displaystyle y_c = F(x_c; \theta) + \mathcal{Z}(x_c, c; \phi)

核心组件:从参考图到施工图纸

项目经理的“扫描仪”在技术里叫预处理器。它负责把一张参考照片变成画师能看懂的“图纸”。比如用 Canny 算法抠出线条,用姿态估计器抽出骨骼点,用深度模型算出远近关系。这张图纸在 ControlNet 里叫条件图,是后续一切控制的起点。图纸质量直接决定最终控制效果——如果扫描仪糊了,后面的“按图施工”自然无从谈起。

条件图被送入 ControlNet 后,会先经过若干卷积层做条件特征提取,然后在 U-Net 的不同尺度上与主网络特征做残差融合。残差融合的意思是:主网络原本的特征继续保持,控制分支只负责“附加修正”,两者相加。这种结构与 ResNet 的残差学习一脉相承,好处是训练稳定、不会遗忘原有能力。

用生活的话说:图纸不是用来覆盖画作的,而是贴在草稿旁边当参照。画师每一笔都还是自己的笔触,只是落笔位置被“图纸引力”轻轻拉向正确的地方。

y=F(x,c)+x\displaystyle y = \mathcal{F}(x, c) + x
主特征 x 原样保留,控制分支 F 把条件 c 的修正加进来。
  1. x主网络特征:画师正在打磨的草稿图层,无论有没有控制,它都完整存在于主路径上。
    x\displaystyle x
  2. F(x, c)控制分支输出:ControlNet 结合草稿与图纸算出的“修正量”,相当于项目经理的具体提醒。
    F(x,c)\displaystyle \mathcal{F}(x, c)
  3. 残差相加原始草稿加上修正量,既保留画师风格,又纳入结构约束。
    y=F(x,c)+x\displaystyle y = \mathcal{F}(x, c) + x

控制类型:五种常用的“图纸”流派

不同客户需要不同图纸。Canny 边缘控制像是给你一张白描线稿,画师负责填色和光影,适合室内设计、建筑线稿上色;OpenPose 姿态控制给的是“火柴人”——只有关节点和骨架连线,适合人物姿势迁移、数字人动作控制;深度图估计控制给的是一张“距离沙盘图”,深色近、浅色远,适合要求空间层次清晰的场景;语义分割控制则是“着色的区域示意图”,人、天空、地面分别涂上不同色块,适合需要精确划分画面区域的合成任务。

每种“图纸”都对应一种预处理器。Canny 算法通过计算图像梯度找出灰度剧烈变化的像素,OpenPose 用神经网络回归人体关键点,深度估计模型预测每个像素的远近值,语义分割模型则逐像素分类。选对图纸类型,等于给画师派对了工种——你不可能拿一张区域色块图去要求他画出精确的手指关节,就像你不能拿消防通道图去指导水电施工。

图纸越贴近任务需求,画师交稿就越准。线稿控结构、骨架控姿态、深度控空间、分割控区域——四张图纸各有主场,也常常组合出战。

M=Gx2+Gy2\displaystyle M = \sqrt{G_x^2 + G_y^2}
图像梯度的幅值,是 Canny 边缘检测判断“哪里是轮廓”的核心依据。
  1. G_x水平方向梯度:图像在 x 方向上的明暗变化率,相当于扫描“横向的轮廓线”。
    Gx\displaystyle G_x
  2. G_y垂直方向梯度:图像在 y 方向上的明暗变化率,捕捉“纵向的轮廓线”。
    Gy\displaystyle G_y
  3. 求模得边缘强度两个方向梯度平方和开方,得到该像素点的边缘强度,超过阈值就保留为边缘。
    M=Gx2+Gy2\displaystyle M = \sqrt{G_x^2 + G_y^2}

参数调优:把“盯场”强度调到恰到好处

项目经理不能永远站在画师耳边大吼。控制权重 β 就是“盯场强度”,专业写法是 controlnet_conditioning_scale。β 调大,结构约束变强,画面构图像复印图纸一样精准,但画师会紧张得不敢发挥,细节、光影、质感都被抹平;β 调小,画师重新放飞,图纸形同虚设。实践中 0.5~0.8 是常见甜区,具体还要看任务:产品图要求版型精确,可以拉到 0.9;艺术创作只要大致姿势,0.4 就够了。

除了总权重,还有注入时机——告诉 ControlNet 在采样的哪些阶段介入。前 50%~70% 的采样过程决定画面大结构,这时注入控制最有效;后 30% 主要打磨细节,可以减弱控制,让画师放开画笔。迭代步数则决定整体打磨精细度:步数太少来不及充分“看图”,太多则浪费时间。别忘了提示词协同:条件图管“形”,提示词管“神”,两者互补才能既不像复印机,又不至于跑偏。

把 β 调好,就像给项目经理定 KPI:不是步步紧逼,也不是放任不管,而是“关键处盯死,细节处放手”。调参的乐趣正在于此——同一个提示词、同一张图纸,β 从 0.3 拧到 0.9,你会亲眼看到画师从“灵性”走向“工整”。

y=F(x;θ)+β⋅Z(x,c;ϕ)\displaystyle y = F(x; \theta) + \beta \cdot \mathcal{Z}(x, c; \phi)
在 ControlNet 的特征注入前乘一个可调节的系数 β,代表“图纸介入的程度”。
  1. 基座输出 F(x; θ)主网络原始输出,也就是画师完全自由发挥时的结果。
    F(x;θ)\displaystyle F(x; \theta)
  2. 控制输出 Z(x, c; φ)ControlNet 根据图纸计算出的修正信号。
    Z(x,c;ϕ)\displaystyle \mathcal{Z}(x, c; \phi)
  3. β 缩放修正量把修正信号乘以 0~1 之间的系数 β,实现“图纸强度”的连续调节。
    β⋅Z(x,c;ϕ)\displaystyle \beta \cdot \mathcal{Z}(x, c; \phi)
  4. 叠加到基座上β 为 0 时完全没有控制,β 为 1 时严格按图施工,中间值则是适度参考。
    y=F(x;θ)+β⋅Z(x,c;ϕ)\displaystyle y = F(x; \theta) + \beta \cdot \mathcal{Z}(x, c; \phi)

实战工作流:多张图纸叠加的导演指挥法

真实的 AIGC 项目很少只用一张图纸。想象你是电影导演,要演员做一个回眸动作同时面带微笑:你递给 ControlNet 一张 OpenPose 骨架图定动作,再递一张表情条件图定神态,必要时加一张语义分割图定镜头分层。多条件组合的技术实现是把多张条件图的特征沿通道拼接,一起送入同一个 ControlNet 副本,让模型同时参考多个维度的约束。

最经典的工作流是线稿上色:设计师手绘线稿,Canny/MLSD 提取线条,SD 根据提示词上色,构图完全不跑偏;姿态迁移:把 A 照片的动作骨架提出来,套到 B 人物身上,模特不用重新拍摄就能换姿势;人物换装:用 Canny 锁定服装版型,再用 OpenPose 锁定模特姿态,平铺服装图瞬间变成上身效果图。数字人领域更是靠这套组合拳生成口型、表情、手势完全可控的视频帧。

多条件组合就像导演手里的分镜脚本:每张图纸只负责一个维度,叠在一起就有了完整调度。但要记住,图纸之间不能互相矛盾——你让骨架图说“坐下”,又让语义分割图把地面全部涂成“天空”,画师再厉害也会崩溃。

cΣ=[c1;c2;c3]\displaystyle c_{\Sigma} = \left[ c_1; c_2; c_3 \right]
多张条件图沿通道维度拼接成一个更高维的“图纸包”,一次性交给 ControlNet。
  1. c_1, c_2, c_3多个条件图:姿态骨架、边缘线稿、深度图等,各自描述画面某一维度的结构。
    c1;  c2;  c3\displaystyle c_1; \; c_2; \; c_3
  2. 通道方向拼接把多张图“叠”成一个多通道张量,而不是简单平均——保留每个条件的独立信息。
    [c1;c2;c3]\displaystyle \left[ c_1; c_2; c_3 \right]
  3. 送入控制网络拼接后的特征一起输入 ControlNet 副本,模型自动学习如何协同利用它们。
    cΣ=[c1;c2;c3]\displaystyle c_{\Sigma} = \left[ c_1; c_2; c_3 \right]

性能优化:让画师画得更快更省

ControlNet 不是免费的:它多了一条可训练分支,推理时每步都要额外计算,显存和耗时大约增加 20%~30%。怎么让画师又快又省地交稿?第一是显存优化:开启 enable_model_cpu_offload() 把不用的模块临时搬到 CPU,或者用 FP16/INT8 低精度推理,让 8GB 显存也能跑大型管线。第二是推理加速:减少采样步数并搭配蒸馏类采样器(如 LCM、DMD),原本 30 步出图可以压到 8 步以内;用 torch.compile 对 U-Net 和 ControlNet 做图编译,也能明显提效。第三是模型轻量化:使用小尺寸蒸馏版 ControlNet,或者对零卷积做剪枝量化,把附加开销降到最低。

总耗时可以拆成三块看:每一步采样都要依次经过 U-Net 主网络、ControlNet 控制分支,最后用 VAE 解码。问题排查也由此入手:如果显存爆了就去优化加载方式,如果出图慢就减少步数,如果控制不生效就检查预处理器输出和权重是否太低,如果画面“车祸现场”就检查多条件之间是否冲突。

优化不是魔法,而是把每一块时间掰开揉碎。当你能说出“这一步慢在 t_C 上”而不是笼统地说“生成很慢”,你才真正从用户变成了工程师——画师还是那个画师,但你已经是能给他配齐最好画材的制片人了。

T=N×(tU+tC+tV)\displaystyle T = N \times (t_{U} + t_{C} + t_{V})
总生成耗时 = 采样步数 ×(每步主网络耗时 + 每步控制分支耗时 + 编解码耗时)。
  1. N推理采样步数:扩散去噪的迭代次数,步数越少越快,但太少会牺牲画质。
    N\displaystyle N
  2. t_U主 U-Net 每步耗时:画师每次落笔本身的时间,通常占比最大。
    tU\displaystyle t_{U}
  3. t_CControlNet 每步耗时:项目经理每次核对图纸的时间,可通过轻量化模型压缩。
    tC\displaystyle t_{C}
  4. t_VVAE 编解码耗时:进出潜空间的转换开销,只在开头和结尾各执行一次,但也要计入总时长。
    T=N×(tU+tC+tV)\displaystyle T = N \times (t_{U} + t_{C} + t_{V})

AI 应用场景

数字人动作可控生成

阶段:内容生成(推理阶段的条件控制)

解决的问题:传统数字人动作依赖专业动捕设备或手工动画,成本高、周期长;纯文本驱动的生成又无法精确指定动作。ControlNet 用一张参考图的 OpenPose 骨架,就能让数字人生成指定姿态,动作连续且成本大幅下降。

具体案例:某虚拟主播团队用真人直播录像提取姿态骨架,再通过 SD+ControlNet 逐帧生成数字人画面,口型、手势与真人一一对应。制作成本从每期数万元降到几千元,上新频率翻倍。

电商服装平铺图转模特上身图

阶段:图像编辑与重绘(条件图引导生成)

解决的问题:服装上新需要模特实拍,摄影棚排期长、模特档期贵。ControlNet 可以读取服装的 Canny 轮廓,并搭配预设模特姿态,在保持版型不变的前提下生成“虚拟上身”效果图。

具体案例:某快时尚品牌每天上传数百款服装,传统流程两周才能完成模特图拍摄。接入 ControlNet 工作流后,平铺图+标准骨架图一键生成模特图,上新周期缩短到一天,预览点击率提升 40%。

影视概念设计的线稿快速成稿

阶段:概念探索(多方案快速生成)

解决的问题:概念设计师手绘线稿后,传统方式需要手工上色数小时才能看到效果。ControlNet 锁定线稿结构,SD 快速渲染不同色彩与光影方案,让导演在几小时内看到多个候选风格。

具体案例:某动画电影前期设计中,美术组用 MLSD 线稿控制生成 20 余张风格概念图,直接在构图不动的基础上比较配色方案,选型效率提升 5 倍。

Python 演示

python44 行
import cv2import numpy as npimport torchfrom diffusers import (    StableDiffusionControlNetPipeline,    ControlNetModel,    UniPCMultistepScheduler,)from diffusers.utils import load_image  def run_controlnet(prompt="a girl standing, best quality, masterpiece",                   weight=0.8, steps=25, seed=42):    controlnet = ControlNetModel.from_pretrained(        "lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16    )    pipe = StableDiffusionControlNetPipeline.from_pretrained(        "runwayml/stable-diffusion-v1-5",        controlnet=controlnet,        torch_dtype=torch.float16,    )    pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)    pipe.enable_model_cpu_offload()     ref = load_image("input.png")    ref = np.array(ref.convert("RGB"))    gray = cv2.cvtColor(ref, cv2.COLOR_RGB2GRAY)    edges = cv2.Canny(gray, 50, 150)    cond = cv2.cvtColor(edges, cv2.COLOR_GRAY2RGB)     g = torch.Generator(device="cpu").manual_seed(seed)    image = pipe(        prompt,        image=cond,        controlnet_conditioning_scale=weight,        num_inference_steps=steps,        generator=g,    ).images[0]    image.save("output.png")    print("done: output.png")  if __name__ == "__main__":    run_controlnet()
目的:演示从一张参考图提取 Canny 边缘,再用 ControlNet 引导 Stable Diffusion 生成构图一致的新图像。
  1. controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", ...)加载 Canny 版本的 ControlNet 模型,它专门理解“边缘线稿”这种图纸。
  2. pipe = StableDiffusionControlNetPipeline.from_pretrained(..., controlnet=controlnet, ...)把 ControlNet 装进生成管线,相当于给画师配好项目经理。
  3. cv2.Canny(gray, 50, 150)用 OpenCV 从参考图提取边缘条件图,阈值大小决定线条多少。
  4. pipe.enable_model_cpu_offload()显存紧张时把不用的模块卸载到 CPU,这是最常见的显存优化手段。
  5. controlnet_conditioning_scale=weight控制权重 β,对应正文里“盯场强度”的调节旋钮。
  6. image.save("output.png")保存最终受控生成图,构图会严格贴合 input.png 的轮廓。

常见误区

误区把 `controlnet_conditioning_scale` 拉到 1.0 甚至更高,生成效果一定最符合预期。很多人觉得“控制嘛,越强越好”。

正解权重过强时,修正信号会淹没主网络的细节生成能力,画面像复印图纸一样僵硬,光影、材质、皮肤质感全部丢失。合适的做法是从 0.6 起步,结构要求高的调到 0.8,艺术创作则降到 0.4 左右——盯场太紧,画师连呼吸都不敢用力。

为何常见:初学者容易把“控制”理解为音量旋钮,以为拧到底就是满血。实际上 β 是“约束力”而非“增强力”,约束和自由度此消彼长,需要平衡。

误区以为 ControlNet 像魔法一样,输入一句提示词,它就能凭空把任意结构画得严丝合缝。

正解ControlNet 必须有一张条件图作为输入——它做的是“对已有结构的精细化约束”,而不是“从零生成结构”。没有参考图,就没有边缘、骨架、深度这些条件,控制分支无米下锅。条件图的来源(预处理器)直接决定了控制效果。

为何常见:很多教程直接给“生成结果图”,没有展示背后的条件图,让人误以为结构是模型凭空想出来的。

误区既然一张图纸有用,那就把边缘、姿态、深度、分割全部叠上去,条件越全效果越好。

正解多个条件可能互相矛盾——姿态图说“抬手”,语义分割又把手部区域涂成“背景”,模型会左右为难,出现器官错乱或区域混叠。正确做法是分层授权:给关键条件高权重,辅助条件低权重,必要时用“注入时机”让不同条件在不同采样阶段分别生效。

为何常见:人们容易把多条件类比为多传感器融合,忽略了扩散模型是逐层逐步生成的,同一时刻收到矛盾指令必然顾此失彼。

误区认为接上 ControlNet,出图分辨率变高、细节变丰富,模型画质得到了提升。

正解ControlNet 只负责结构约束,不负责画质。最终质感由基座模型、采样器、步数和 VAE 决定。一个 512 分辨率的基座模型加上 ControlNet,输出仍是 512 级别;要高清细节得搭配放大模型或高分辨率基座,而不是靠 ControlNet。

为何常见:ControlNet 让画面“看起来更专业”是因为构图规整了,观感提升被误判为画质提升。

面试题

Q1. ControlNet 的核心思想是什么?

单选题 · easy

  • A.直接修改提示词让模型更听话
  • B.用可训练副本注入外部控制条件← 正确答案
  • C.用更多 GPU 加速扩散采样过程
  • D.替换 Stable Diffusion 的 VAE 模型

答案:B。ControlNet 的核心是复制 U-Net 编码器作为可训练副本,把外部条件图经零卷积注入主网络。它不修改提示词,不动 VAE,更与 GPU 数量无关。想成“项目经理递图纸给画师”,而不是换掉画师或加大嗓门。

Q2. 想让生成的人物做出精确的舞蹈动作,应选哪类 ControlNet?

单选题 · easy

  • A.Canny 边缘结构控制
  • B.OpenPose 姿态条件控制← 正确答案
  • C.深度图结构条件控制
  • D.语义分割区域条件控制

答案:B。动作由骨骼决定,OpenPose 专门提取人体关键点和骨架连线,是姿态控制的“火柴人图纸”。Canny 管轮廓、深度管空间、分割管区域,都不能直接给出动作姿态。

Q3. 在 ControlNet 工作流中,预处理器的主要职责是什么?

单选题 · easy

  • A.把参考图变成条件特征图← 正确答案
  • B.把提示词编码成文本向量
  • C.把输出图像超分辨率放大
  • D.把随机噪声逐步降噪成图

答案:A。预处理器相当于项目经理的“扫描仪”,把参考照片转成模型能读的条件图(边缘、骨架等)。文本编码是 text encoder 的事,超分和去噪分别是放大模型与 U-Net 的职责。

Q4. 当 controlnet_conditioning_scale 设置为 0 时,会发生什么?

单选题 · mid

  • A.条件不再注入退化回纯文生图← 正确答案
  • B.条件全部丢失生成全黑图像
  • C.边缘约束保留但风格自由发挥
  • D.采样过程不稳定导致花屏

答案:A。权重 β=0 意味着控制分支的修正信号被完全屏蔽,模型退化为普通 Stable Diffusion,仍能正常生成,只是没有任何结构约束。不会黑屏、不会花屏,风格也更自由。

Q5. 关于零卷积(zero convolution)的初始化,正确的是?

单选题 · mid

  • A.卷积权重和偏置均初始化为 0← 正确答案
  • B.权重初始化为 0 但偏置随机
  • C.权重随机但偏置设为 0
  • D.权重偏置都用正态分布初始化

答案:A。零卷积的权重和偏置都初始化为 0,使训练初期控制分支输出为零、不干扰主网络,随着训练逐渐学会注入信号。这是 ControlNet 能保持原模型能力的关键设计,其他初始化方式都会在起步阶段破坏原画风。

Q6. 使用多张 ControlNet 条件图时,推荐做法是什么?

单选题 · mid

  • A.全部同时开启且权重拉满
  • B.权重分层错开并避免冲突← 正确答案
  • C.用条件图直接替换掉提示词
  • D.换用更大的模型来硬吞条件

答案:B。多条件要分层授权,主条件权重高、辅助条件权重低,必要时错开注入时机;条件之间语义矛盾会让模型左右为难。提示词仍负责“神”,不能丢;换大模型不解决条件冲突问题。

Q7. ControlNet 可训练副本的结构特点是什么?

单选题 · hard

  • A.每层都要用零卷积连接主网络← 正确答案
  • B.复制全部主网络并全层微调
  • C.只复制 U-Net 解码器部分
  • D.用额外 VAE 替代主 U-Net

答案:A。ControlNet 复制 U-Net 编码器作为可训练副本,且副本通过零卷积与主网络对应层连接;主网络保持冻结而非全层微调;复制的是编码器而非解码器;VAE 的角色没有被替代。

Q8. 下面哪些属于 ControlNet 常见的控制条件?

多选题 · easy

  • A.Canny 边缘条件图← 正确答案
  • B.OpenPose 姿态骨架图← 正确答案
  • C.LoRA 权重微调文件
  • D.单目深度估计条件图← 正确答案

答案:ABD。Canny 边缘、OpenPose 骨架、深度图都是 ControlNet 的条件输入。LoRA 是模型微调权重文件,不属于“控制条件图”,注入方式和作用机制完全不同。

Q9. 以下哪些方法能有效提升带 ControlNet 的生成速度?

多选题 · hard

  • A.换用蒸馏采样器并减少采样步数← 正确答案
  • B.使用 torch.compile 加速推理← 正确答案
  • C.降低批大小并放大生成图像尺寸
  • D.关闭 VAE 编码解码相关全部模块

答案:AB。蒸馏采样器(如 LCM)能在少步数下出图,torch.compile 能优化计算图,二者都是有效提速手段。放大图像只会更慢,关闭 VAE 会导致无法编解码,都不合理。

Q10. 多 ControlNet 用于数字人视频生成时,正确的说法有哪些?

多选题 · extreme

  • A.骨架条件时变可驱动连续动作← 正确答案
  • B.表情与姿态叠加需权重重排← 正确答案
  • C.ControlNet 直接输出三维网格
  • D.权重过高会抹平服装材质细节← 正确答案

答案:ABD。逐帧变化的骨架图可以驱动数字人连续动作,表情与姿态同时叠加时需要通过权重平衡主次;控制权重过大会牺牲材质细节。ControlNet 生成的是二维图像引导特征,不是三维网格,C 错。