想象你是一位舞台导演,面前是空荡荡的剧场。要让演员站得错落有致,你会提前画一张“走位图”:主角站在台前,配角退后半步,背景板摆在最后。AI 绘画也有同样的尴尬——提示词写“走廊尽头的背影”,它却把背影和走廊贴在同一平面。ControlNet 深度图控制,就是给 AI 递上一张黑白走位图,用深浅灰阶告诉它“谁在前、谁在后、谁隔着一段距离”。这篇内容会用“导演排戏”的比喻,带你从深度图长什么样、如何获得,到怎么在 ControlNet 里调参,最后完成一张空间层次清晰的作品。你会发现,控制画面纵深并不需要学三维建模,一张灰度图就能让 AI 不再“前后不分”。

岗位关联

掌握深度图控制,你就能在 AI 绘画中精准拿捏画面纵深感,把“平面拼贴感”变成“电影镜头感”,这是 AIGC 创作者从入门到进阶的必备技能。

目录
  1. 可视化演示
  2. 深度图基础
  3. 深度图生成原理
  4. ControlNet控制流程
  5. 参数调节技巧
  6. 应用场景实战
  7. 问题排查
  8. 实战操作步骤
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示ControlNet深度图控的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。

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

ControlNet深度图控:深度图原 深度图原理与ControlNe 深度图生成方法与工具 核心机制可视化 ControlNet深度图控整体架构与关键组件

深度图基础

排练日,导演助理给每位演员发下一张走位图:主角贴在台口,配角退到中线,群演贴着天幕。大家一看图就知道自己该站在哪。AI 绘画里的深度图,扮演的正是这张走位图,只不过它服务的对象是扩散模型背后那个“什么都不懂”的 AI 导演。

如果只告诉 AI“一个人站在走廊尽头”,它大概率会把人和走廊画在同一个平面上。深度图把“远近”这个抽象关系变成一张图片,每个像素都记录对应的物体到镜头的距离。常见约定是白色代表近、黑色代表远,中间由灰阶过渡。这张图不需要颜色、不需要纹理,只需要告诉 AI:哪里是前景,哪里是中景,哪里是背景。

从数据角度看,一张彩色图是三个通道,深度图却可以压缩成单通道。它不关心墙是红是白,也不关心裙子是丝绸还是棉布,它只保留空间位置的骨架。正是因为这种“去装饰化”的信息,AI 才不会被颜色和纹理干扰,老老实实按照远近关系来排布画面。

所以,ControlNet 深度控制的第一步,永远是先准备一张正确的走位图。走位图清楚,演员才不会站错位;深度图准确,AI 才不会被“贴在一张纸”上的错觉带偏。

深度图生成原理

过去剧组里有一位测距员,负责用激光笔或卷尺量出每个位置离观众席多远。现在的 AI 也有自己的测距员,但它只看一张二维照片,就能猜出画面里的前后顺序,这个本领叫单目深度估计。

所谓“单目”,就是只靠一只眼睛看世界。人类闭上一只眼也能大致判断东西谁近谁远,靠的是遮挡关系、物体大小、透视线条和阴影。深度估计模型 MiDaS、DPT 等,就是从海量图片里学会这些视觉线索,再把它们换算成一张深度图。

为了让不同镜头拍出来的深度能够比较,模型通常会把距离归一化到 0 到 1 之间。最远的点记为 0,最近的点记为 1,乘上 255 就得到灰度图的灰阶。这个归一化过程可以写成:

每当 ControlNet 需要产生一张深度图时,测距员就会用这套逻辑把照片变成黑白图纸。图纸给出的不是精确的厘米数,而是相对的前后顺序,这对 AI 绘画来说已经足够了。

dnorm=d−dmin⁡dmax⁡−dmin⁡d_{\text{norm}}=\displaystyle\frac{d - d_{\min}}{d_{\max} - d_{\min}}
  1. 分子当前点相对最近距离:用当前深度值减去整张图的最小深度值,得到这个点相对最近处的偏移量。
    d−dmin⁡d - d_{\min}
  2. 分母整个场景的距离跨度:最深和最浅的差值代表场景纵深范围,相当于把“舞台宽度”量出来。
    dmax⁡−dmin⁡d_{\max} - d_{\min}
  3. 归一化到 0 到 1两者相除后,最远处是 0,最近处是 1,方便后续映射成黑白灰阶。
    d−dmin⁡dmax⁡−dmin⁡\displaystyle\frac{d - d_{\min}}{d_{\max} - d_{\min}}

ControlNet控制流程

有了走位图,还得有人把它交给演员;这个人就是执行导演。ControlNet 干的就是执行导演的活:它手里攥着深度图,在 AI 每一次“落笔”时,通过耳麦提醒画面里每个元素“你太靠前了”或“你太靠后了”。

ControlNet 的工作流程并不神秘。首先,原始图片经过一个预处理器,例如 depth_midas,被翻译成深度图。然后 ControlNet 复制一份扩散模型的主干网络参数,用深度图作为输入,在去噪过程的每个时间步计算出“空间约束信号”。

这组信号会和文本提示词的特征一起,注入到生成模型的 UNet 主干中。可以这样理解:文本提示词负责“演什么、穿什么、什么氛围”,深度图负责“谁站前、谁站后、距离多远”。两者并行走完整个去噪过程,最终拼出一张既有内容又有空间的图像。

所以 ControlNet 不是简单地叠加滤镜,而是在扩散模型作画的整个过程中持续盯场。只要深度图给的方位合理,执行导演就会一遍遍提醒 AI 守住空间关系,这也是它能稳定控制纵深的原因。

参数调节技巧

执行导演并非嗓门越大越好。如果一个导演每秒钟都在演员耳边吼“往前!”“往后!”,演员反而没法正常表演。ControlNet 的深度控制也有类似的关键参数:预处理器、控制强度、起止步。

预处理器解决的是“走位图从哪里来”,常见的有 depth_midas、depth_leres、Zoe。对于真实照片,depth_midas 通常足够稳定;对于结构复杂的室内图,depth_leres 可能保留更多细节。控制强度则控制执行导演的“嗓门大小”:0 表示完全不干预,1 表示严格按走位图执行。实际使用时常从 0.7 起步,再根据结果微调。

起止步参数告诉 ControlNet“什么时候开始管、什么时候收手”。通常让它在生成早期介入,因为那时构图还没有定型;等到中后期,AI 开始刻画光影和材质时,可以逐步松开约束,避免生成结果僵硬。这种“前紧后松”的节奏,可以用下面这个简化公式来理解。

记住这个直觉,你就明白为什么控制强度不是越高越好。w 过大时,AI 会变成没有感情的复读机,画面层次虽然对了,颜色和笔触却容易碎掉。合适的 w,是让演员知道站位,同时又保留自己的发挥空间。

xout=xunet+w⋅cdepthx_{\text{out}} = x_{\text{unet}} + w \cdot c_{\text{depth}}
  1. 基础画面特征扩散模型当前步骤生成的图像特征,相当于演员此刻的表演状态。
    xunetx_{\text{unet}}
  2. 深度引导信号从深度图里提取的条件信号,相当于走位图上的坐标提示。
    cdepthc_{\text{depth}}
  3. 强度权重执行导演的介入程度,w 越大,AI 越严格照着深度图来画。
    ww

应用场景实战

走位图练熟之后,就可以正式排戏了。不同题材的“戏”,都能从深度图控制里受益。我们来看三场最常遇到的戏。

第一场是人像写真。照片里的模特站在街道中央,背景是虚化的楼房和路灯。如果没有深度约束,AI 可能把模特的身子和身后墙面粘在一起。生成一个人物深度图后,ControlNet 会保住“模特在前、楼房在后”的距离感,头发边缘也不会融进背景里。

第二场是室内设计效果图。客厅的沙发、茶几、窗帘和落地灯,各自都有明确的前后位置。用预处理器从粗糙的 3D 草稿或照片中提取深度图,AI 就能在保持透视不变的前提下,重新设计墙面材质和软装细节。

第三场是电商产品展示。一只手表放在台面上,背后是光滑的渐变背景。深度图让产品保持“悬浮在前景”的空间位置,AI 生成的倒影和光晕也跟着符合物理关系,不会出现产品被压扁或背景穿帮的问题。这三场戏的共同点,都是先用深度图钉住空间,再让 AI 自由发挥画面细节。

问题排查

再老练的导演也可能收到一张画错的走位图。只要深度图出了问题,后面的一切都会跟着翻车。第一个常见坑,是把普通灰度图当成深度图。灰度图记录的是亮度,深度图记录的是距离,两者可能完全相反;走廊的白墙和黑地板灰度差异巨大,距离却几乎相同。正确做法是用预处理器重新提取深度图。

第二个常见坑是生成结果边缘破碎。画面里的物体轮廓出现锯齿,或者像被图章盖过一样生硬,往往是预处理器选错、输入图像有遮挡或控制强度过高。此时可以换成更稳的 depth_midas,或者把控制强度从 0.9 回落到 0.6 左右。

第三个常见坑是层次感不足。人物和背景还是挤在一起,这通常因为控制强度太低,或者结束步设得太早,深度约束在生成早期就被丢掉了。可以试试把强度提到 0.8,结束步从 0.5 拉长到 0.7,让执行导演多盯一会儿场。

总之,排查顺序应该是:先确认深度图本身是准的,再检查 ControlNet 有没有被正确启用,最后才动参数。走位图没错,演员的走位才有救。

实战操作步骤

现在,让我们把整套排练流程串成一份可执行的操作单。假设你想把一张普通照片改造成空间感更强的 AI 绘画作品,可以按照下面几步走。

第一步,准备一张底图,在 ControlNet 面板里选择 Depth 预处理器,例如 depth_midas,现场生成一张深度图。生成后先看一眼预览图,确认近景是亮的、远景是暗的,如果反过来就检查预处理方向。第二步,把这个深度图作为 ControlNet 的输入条件,加载对应的深度控制模型,保持“启用”状态。

第三步,填写提示词并开始生成。建议把控制强度设为 0.7,起始步设为 0,结束步设为 0.65,让深度约束在构图期充分作用,在细节期逐渐退场。第四步,生成后对比两批图:一批开深度控制,一批关掉。如果开深度控制的那批空间关系明显更好,而关掉的那批出现前后粘连,说明参数方向是对的。

最后,根据结果小幅调整强度和起止步。这个过程就像导演彩排,第一次走位不满意,就调整走位图或喊话力度,多试几轮,总能找到演员最舒服的站位。实战中没必要一次追求完美,关键是把“深度图检查”这个动作养成习惯。

AI 应用场景

人像写真空间增强

阶段:条件生成与构图控制

解决的问题:传统文生图只能靠提示词描述“背景虚化”“人在前面”,AI 仍然可能把人与背景压在同一平面。深度图提前规定人物和背景的距离,生成结果更接近摄影镜头感。

具体案例:一张模特的半身照片,用 depth_midas 提取深度图后输入 ControlNet,新生成的作品里模特站在花丛前,花朵有前后虚实,肩膀后的背景也不再“贴”在脖子上。

室内设计透视控制

阶段:空间布局约束

解决的问题:室内效果图必须符合透视关系,否则沙发、灯具会像悬浮贴画。深度图可以锁住房间的纵深结构,让 AI 只替换材质和软装,不破坏空间逻辑。

具体案例:设计师用一张粗糙的手绘线稿生成深度图,再让 ControlNet 配合提示词“奶油风客厅”,完成的效果图墙面、地砖、家具前后关系清晰,可以直接向客户提案。

电商产品场景合成

阶段:产品图背景生成

解决的问题:电商详情页需要产品在画面中占据明确前景,背景可替换但不能抢夺主体。深度图把产品位置钉在前景,AI 再生成背景光影和倒影,避免产品被背景吞掉。

具体案例:一张香水瓶照片,先提取深度图,再在 ControlNet 中生成“晨光下的丝绒背景”,产品始终保持在视觉重心,瓶身反光也符合新场景的光源方向。

Python 演示

python24 行
# 用 transformers 深度估计模型生成灰度深度图import numpy as npfrom PIL import Imagefrom transformers import pipeline  def estimate_depth(image_path):    # 载入单目深度估计模型    estimator = pipeline("depth-estimation", model="Intel/dpt-large")    image = Image.open(image_path).convert("RGB")    result = estimator(image)    depth = np.array(result["depth"])    # 归一化到 0 到 255    depth_min = depth.min()    depth_max = depth.max()    depth_norm = (depth - depth_min) / (depth_max - depth_min)    depth_8bit = (depth_norm * 255).astype(np.uint8)    return Image.fromarray(depth_8bit)  if __name__ == "__main__":    depth_img = estimate_depth("input.jpg")    depth_img.save("depth_map.png")    print("深度图已保存为 depth_map.png")
目的:用现成深度估计模型把普通照片变成灰度深度图,供 ControlNet 作为“走位图”使用。
  1. estimator = pipeline("depth-estimation", model="Intel/dpt-large")加载预训练的单目深度估计模型,相当于请来一位测距员。
  2. image = Image.open(image_path).convert("RGB")打开输入图片并统一为 RGB 格式,避免通道数不一致导致报错。
  3. depth = np.array(result["depth"])把模型输出的深度图像转成 NumPy 数组,方便做数值计算。
  4. depth_norm = (depth - depth_min) / (depth_max - depth_min)实现深度归一化公式,把距离范围压缩到 0 到 1。
  5. depth_8bit = (depth_norm * 255).astype(np.uint8)把 0 到 1 的深度值映射到 0 到 255 的灰阶。
  6. depth_img.save("depth_map.png")保存为 PNG 图片,之后可以直接导入 ControlNet 的深度控制单元。

常见误区

误区我把照片去色,再把亮部调暗,是不是就得到深度图了?AI 应该能看懂吧。

正解不对。深度图记录的是空间距离,灰度图记录的是亮度。一堵白墙和它前面的黑沙发,灰度差异很大,但深度相差很小。直接把去色照片扔进 ControlNet,AI 会被亮度骗得前后颠倒。正确做法是使用 ControlNet 的预处理器重新提取深度图。

为何常见:因为人眼看深度图时,第一反应就是“黑白灰照片”,很容易把亮度和距离混为一谈。

误区想让空间感最强,就把控制强度拉到 1.5 甚至 2.0,深度图越“听话”越好。

正解控制强度过高时,AI 会过度模仿深度图的结构,边缘出现钢印感、弧形伪影,颜色和光影也会僵硬。一般从 0.7 起步,如果层次不足再慢慢加到 0.9,而不是一步拉满。

为何常见:初学者习惯把控制强度当作“效果强弱”开关,忽略它其实更像导演的耳麦音量,过大反而会盖过演员自己的表演。

误区手绘插画没有真实距离信息,所以不能使用深度图控制。

正解深度学习模型可以从动漫、插画甚至设计草图中估计相对深度,只是效果会有差异。对于复杂机械结构,还可以手动绘制黑白渐变深度图,或者用 3D 软件渲染深度通道。ControlNet 只需要空间形状,不关心画风。

为何常见:人习惯觉得测距需要真实相机,忽略深度估计模型实际上是在“猜空间关系”,而不是物理测量。

误区只要有一张黑白图就能控制深度,白近黑远和黑近白远应该没区别。

正解方向反了,条件特征会跟着反转,AI 会把前景画成背景,空间层次整个颠倒。主流预处理器输出一般遵循白近黑远,如果你手动生成深度图,一定要先做一张小图测试,确认方向正确再大批量使用。

为何常见:因为深度图在预览时太像普通灰度图,初学者很少会主动检查灰阶方向,直到生成结果出现明显的空间翻转。

面试题

Q1. 深度图中,像素越亮通常表示?

单选题 · easy

  • A.离镜头更近← 正确答案
  • B.离镜头更远
  • C.颜色更鲜艳
  • D.边缘更锐利

答案:A。主流深度图采用“白近黑远”的约定,亮色代表更靠近镜头,暗色代表更远。这个方向决定 ControlNet 能否正确理解空间关系。

Q2. ControlNet 深度控制最核心的输入条件是?

单选题 · easy

  • A.一段文本提示
  • B.一张深度图← 正确答案
  • C.一个随机种子
  • D.一个蒙版图层

答案:B。深度控制的核心就是一张深度图,文本提示负责内容和风格,随机种子负责采样变化,蒙版负责局部替换,都不负责空间深度约束。

Q3. 深度估计模型的主要任务是什么?

单选题 · mid

  • A.推断物体的远近关系← 正确答案
  • B.给图片提升清晰度
  • C.将图片分辨率放大
  • D.自动生成提示词文本

答案:A。深度估计模型从二维图片中推测每个像素的相对距离,输出深度图。清晰度、分辨率、提示词都不是它的职责。

Q4. 生成画面层次感不足时,优先尝试的操作是?

单选题 · mid

  • A.降低深度控制强度
  • B.调高深度控制强度← 正确答案
  • C.删除所有提示词
  • D.更换一套配色方案

答案:B。空间感不足通常意味着深度约束太弱,优先把控制强度从 0.5 上调到 0.7 或 0.8,而不是胡乱删除提示词或换配色。

Q5. 关于 ControlNet 起止步参数的推荐做法是?

单选题 · mid

  • A.只在最后一步介入
  • B.早期介入中段退出← 正确答案
  • C.完全不用深度图
  • D.每步都强行输出

答案:B。深度控制适合在生成早期锁定构图,中后期逐步退场,把细节交给文本提示词主导。全程强控或只在最后一步介入都容易破坏画面自然度。

Q6. 人像类作品使用深度控制,主要为了解决?

单选题 · mid

  • A.面部五官不够精细
  • B.人物背景前后混乱← 正确答案
  • C.画面整体颜色偏暗
  • D.生成速度不够理想

答案:B。人像作品最常见的空间问题是人物和背景贴在一起。深度图可以明确人物在前、背景在后,从而提升照片的镜头感。

Q7. ControlNet 的预处理器主要负责?

单选题 · easy

  • A.将输入图转为深度图← 正确答案
  • B.把输出图存成 PNG
  • C.计算显卡显存占用
  • D.修改随机种子数值

答案:A。预处理器把普通图片翻译成深度图,这是 ControlNet 深度控制的第一步操作。保存图片、显存管理都不属于预处理器的工作。

Q8. 以下哪些场景适合使用深度图控制?

多选题 · hard

  • A.人像写真层次增强← 正确答案
  • B.室内设计透视控制← 正确答案
  • C.音频降噪处理
  • D.电商产品空间合成← 正确答案

答案:ABD。深度图控制只作用于图像空间关系,人像、室内设计、电商产品都有明确的远近需求。音频降噪是信号处理任务,和图像深度无关。

Q9. 关于深度图控制的理解,正确的有哪些?

多选题 · hard

  • A.深度图可人工绘制或 3D 渲染获得← 正确答案
  • B.控制强度越高画面层次越完整
  • C.深度控制不约束画面颜色风格← 正确答案
  • D.深度图完全可以替代文本提示词

答案:AC。深度图不仅来自照片,也能手工绘制或 3D 渲染;它主要约束空间位置,不管颜色和风格。控制强度过高会破坏画面,深度图也不能替代文本提示词。

Q10. 深度图预处理出现边缘破碎,下列排查手段有效的是?

多选题 · extreme

  • A.更换更强的深度估计模型← 正确答案
  • B.检查输入图像是否有遮挡← 正确答案
  • C.适当调低深度控制强度← 正确答案
  • D.把深度图换成彩色原图

答案:ABC。边缘破碎通常来自深度估计不准、输入遮挡或控制强度过大,所以换模型、查遮挡、降强度都可能有效。把深度图换成彩色原图会丢失空间约束,反而更糟糕。