ControlNet,使得 Stable Diffusion 可以接受条件输入来指导图像生成过程,从而开启了AI生图的可控时代。其中,开源的 ControlNet 模型包括如 OpenPose
姿势识别、Canny
边缘检测、Depth
深度检测 等等,每种模型都有其独特的特性。本文将深入探索 Depth 深度检测 的工作流程和应用实例,展示其如何帮助我们控制姿势、转换性别或物种、修改材质以及创建艺术字等等。
Depth 深度图
Depth
预处理器可以根据参考图像估计基本 深度图,深度图是对 3D 场景的 2D 灰度表示,每个像素的值对应于从观察者视点看场景中物体的距离或深度。白色 代表近距离,黑色 则表示远距离。通过深度图可以向AI传递图片的空间信息,从而指定构图、姿势和3D结构等。在保持原始构图的同时,可以生成各种新颖创意的图像。
相似类型对比
每种 ControlNet 都有其独特的特性和差异,和 Depth
类似的还有如 法线贴图(NormalMap)和 语义分割(Seg)等。
法线贴图
法线贴图 是将 3D 结构信息映射到 RGB(红、绿、蓝)图像。通过 ControlNet 推断并提取法线贴图,可以在图生图的时候保留原图的三维结构。相较于 Depth
,Normal Map
可以更为精细地提取不均匀性。
然而,如果想更改脸部或背景等细节,则深度图可能会更为合适。
语义分割
语义分割 可以在检测内容轮廓的同时,将画面划分为不同的区块,并为每个区块赋予语义标注,从而实现更加精准的控图效果。然而,分割仅提取画面的平面构成,无法提取 3D 结构信息。因此,在需要重点关注 3D结构 的场景中,建议使用 Depth
或 Normal Map
。另一方面,若无需提取 3D 结构,Seg
则是一个更为合适的选择。
使用步骤和参数
- 在 ControlNet 选项卡中上传参考图像。
- 勾选 “Enable” 并选择 “Depth” 作为控制类型,选中后 Preprocessor 和 Model 会自动配置为对应的默认项。
- 如果想查看预处理的效果,点击特征提取按钮 “
💥
”,即可提取特征并显示结果。
通过从左侧的原始图像中提取景深信息,生成中间的黑白预处理器图像,在此基础上进一步生成右侧的新图像。可以看出,depth
在保留参考图像中的空间信息方面非常有效。
控制权重
需要注意的是,使用 Depth 描绘人像可能会带来一个副作用,即人物和背景间的深度差异会限制人物形象的自由度,使人体的形状过于固定,甚至可能影响人物的服饰。
如果影响到了期望实现的效果,可适当降低 Control Weight
,以获得更灵活的图像生成结果。
数值越低,效果越弱;数值越高,效果越强。测试下来 0.5
是个较适中的数值,可以在保持较好的控图效果的同时,保留 lora 模型角色的服饰特征。此外,还可以选择将 Control Mode 设置为 “My prompt is more important”,也有助于降低 depth 控图的限制。
预处理器
- Depth Midas:默认选项,是经典的深度信息估算预处理器,在细节方面相对较少。适用于具有较大纵深的风景画面,能够更好地表示出远近关系。它更注重近景内容的提取,虽然也包含远景内容,但整体细节不太丰富。
- Depth Zoe:中等细节水平的预处理器,其细节程度介于 Midas 和 Leres 之间。结合了相对深度估计和度量深度估计的新算法,可广泛应用于不同领域,相较于其他预处理器,具有更少的误差和更准确的结果。在较大纵深的场景下,它的远景效果优于 Midas。
- Depth Leres:相比前面两种预处理器,具有更丰富的细节表现。其成像焦点在中间景深层,这样的优势在于可以获得更广泛的景深范围,且中距离物体的边缘更清晰,但近景图像的边缘可能会相对模糊。此外,其微调选项的能力有所增强,这对于控制将对象放置在“近处”或“远处”特别有用。
- Depth Leres++:生成最多细节且效果最为精细的。可以将其看作是 Depth Leres 的改进版本,在细节表现和处理效果上都有所提升。
- Depth Anything:由香港大学和字节跳动提出的旨在处理各种任务环境下任意图像,简单且强力的基础深度模型,相对较新,适用于广泛的场景。
- Depth Hand Refiner:专为改善深度图中的手部细节而设计的预处理器,特别适用于手部定位至关重要的场景。可以获得更精确的手部深度信息,从而在图像生成过程中实现更高质量的手部表现。
需要根据具体需求和应用场景来选择适合的 Depth
预处理器,主要取决于希望新图像与原始图像的接近程度,以及所需的细节强度。
Remove Near/Background %
- Remove Near%:逐渐从最近处(白色)到最远处将画面中不同深度的人物/物体移除深度,直到完全变为白色(平面无深度)。
- Remove Background%:逐渐从最远处(黑色)到最近处将画面中不同深度的人物/物体移除深度,直到完全变为黑色(平面无深度)。
Remove Near% 会将较亮的区域处理为全白色,有效地将图像中较近的部分"压平",就像卡通人物撞到玻璃一样。数值越高,深度图中近处部分的效果就越趋于扁平化。
Remove Background% 会将较暗的区域处理为全黑色,使其在阴影中消失。数值越高,深度图中远处部分消失得越多。这对于去除背景中不需要的元素非常有用。相反,降低数值可以呈现更多的背景细节。
SDXL
由于 SDXL 的模型架构相比 SD 1.5 存在明显的变更,因此无法兼容以往的 ControlNet 模型。要解决这个问题,首先需将 Stable Diffusion Web UI 更新至 v1.6.0 或更高版本,同时将 ControlNet 扩展更新至 v1.1.400 或更高版本。
git pull
从 Hugging Face 下载任意 Depth XL
模型,其中前三个模型是由 diffusers 团队发布的,该团队是一个非盈利组织,由多名 AI 热衷者自发组建而成,发布过多款与 diffusion 相关的模型。
- diffusers_xl_depth_full.safetensors
- diffusers_xl_depth_mid.safetensors
- diffusers_xl_depth_small.safetensors
- kohya_controllllite_xl_depth.safetensors
- kohya_controllllite_xl_depth_anime.safetensors
- sai_xl_depth_128lora.safetensors
- sai_xl_depth_256lora.safetensors
- sargezt_xl_depth.safetensors
- sargezt_xl_depth_faid_vidit.safetensors
- sargezt_xl_depth_zeed.safetensors
- t2i-adapter_diffusers_xl_depth_midas.safetensors
- t2i-adapter_diffusers_xl_depth_zoe.safetensors
下载完成后,把文件移动到 webui/models/ControlNet
模型文件夹中。使用的基本方法与 SD1.5 相同,首先,在 checkpoint 中确保选择了 SDXL
大模型。然后,Control Type 选择 Depth
,此时下拉菜单会自动筛选出 Depth XL
模型。若为空,可以尝试点击右下角的 🔄 刷新图标。
从出图结果来看,small 版本具有更快的生成速度和更高的自由度,适合快速创作和较低细节要求的场景;full 版本生成速度较慢,但能够保留原图的细节最多,适用于对画面控制要求较高的场;而 mid 版本介于两者之间,可根据实际需求进行选择。
ComfyUI
除了使用 Stable Diffusion Web UI,同理地可以在 ComfyUI 中设置工作流程,使用 SDXL
和 ControlNet
生图。
ControlNet应用
关键节点一个是 ControlNet应用,负责接收预处理图像的信息,并根据加载的模型来实现各项控制要素。普通版的节点上只有一个参数 强度
,用于控制 ControlNet 的权重。值越大,生成的图像越贴近参考效果。
如果想进一步控制它的开始、结束时间,则需要使用标有 高级(Advanced)的进阶节点。
ControlNet加载器
另一个关键节点是 ControlNet加载器,其参数为 ControlNet名称
,用于加载所需的模型。正如前面强调的,这里的 ControlNet 模型版本,需要与所选的 Checkpoint 模型版本相匹配。
预处理器
注意, 图像
的输入需要连接到预处理器,ControlNet 的预处理器种类非常多,和 Stable Diffusion Web UI 一样,在选择时,需确保所选预处理器与加载的 ControlNet 模型相匹配。
或者,可以使用多合一的自定义节点,例如 Aux集成预处理器,包含了各种控制类型,且在持续迭代更新,可以更方便地选择和使用。
整个工作流:
应用
空间场景
对于需要生成富有空间感的多层次场景图像,Depth 尤为有用,例如以下参考图所示的建筑内部空间。相较于直接使用 图生图,Depth 能够更准确地传递参考图的空间信息,从而实现更为精确的生成效果,能够更好地保留原始构图的空间层次感。
风格转换
可使用 img2img
在保持相同构图的同时进行风格转换,例如最常见的 2D 转 3D 等。如果想增强转换的风格程度,可搭配各类 LoRA 模型,例如 blindbox 手办风格、goldcarvingcd 黄金雕像、DUANMAO 毛绒玩具等。
以下是可供参考的一些参数:
- checkpoint:revAnimated
- Denoising strength:1
ControlNet
Depth
- Preprocessor:depth_anything
- Control Weight:单独用 1.2,搭配其他 ControlNet 可适当降低
Tile(可选搭配),控制颜色,如果是黄金或者玻璃材质等则忽略
- Preprocessor:tile_colorfix
- Control Weight:0.3
Canny(可选搭配),加强边缘和细节控制
- Preprocessor:canny
- Control Weight:0.5
人体透视
通常情况下,我们使用 OpenPose 来进行动作还原,是一种知名度较高的开源人体姿态估计系统,能够从图像或视频中准确地检测并估计人体的关键点位置。然而,当涉及肢体交叠或人体透视等复杂场景时,OpenPose 的准确性可能会降低。
增加权重(Control Weight
)可在一定程度上提高姿势控制的效果。
结合深度图可以清晰地获取肢体前后的结构,这使得 AI 能够更好地理解动作的层次关系和空间信息。因此,当 Openpose 无法准确地还原动作时,可以尝试结合 Depth,以实现更精确的动作还原。
另外,还可以使用 Magic Poser 等 3D 模型创作工具,允许用户操纵 3D 人偶模型,从而创建出各种想要的姿势。
矫正手指
手部畸形、手指缺失或多余等手部问题,可通过结合 depth 修复。
方法1: Depth Library
- 点击 Add Background Image 选择要修改的图像;
- 在 Hands 模型库中选择适当的添加;
- 通过移动和旋转调整手部对象的大小、角度和适当位置;
- 点击 Save PNG 保存。
回到文生图和原图保持相同的参数:
- 勾选 Enable 以开启 ControlNet;
- 在选项卡中上传刚保存的手部参考图像;
- Control Model 选择
depth
; - 将 Starting Control Step 调整至
0.3
。
修复后效果对比:
方法2: 局部重绘 ➕ depth_hand_refiner
- 切换到 img2img 的 inpaint 面板;
- 手动涂抹需要修改的手部区域;
- 勾选 “Enable” 并选择 “Depth” 作为控制类型,选中后 Preprocessor 和 Model 会自动配置为对应的默认项。
- 选择
depth_hand_refiner
作为预处理器。
修复后效果对比:
方法3: ADetailer ➕ depth_hand_refiner
- 勾选 Enable 以开启 ADetailer;
- 模型选择
hand_yolov8n.pt
或者PitHandDetailer-v1-seg.pt
(C站上下载); - Inpaint denoising strength 调整到
0.4 ~ 0.7
; - ControlNet model 选择
depth
; - ControlNet module 选择
depth_hand_refiner
。
修复后效果对比:
logo / 艺术字
可以生成基于文本的图像,即独特而富有创意的视觉效果的艺术字:
- 使用 PS 或其他图形处理工具创建黑白素材图;
- 将黑白素材图导入 ControlNet 中并选择
All
; - Preprocessor 选择
invert (from white bg & black line)
; - Model 选择 depth 类型的模型;
- 适当调低 Control Weight 以使图像背景与文字相融合。
另外,需要注意不同的字体对于某些实体元素可能效果更好,而对于其他则相反。例如 细长的字体 比较适合搭配纤细的元素比如面条、巧克力、灯管等物品。而 粗壮的字体 比较适合岩石、冰块、饼干等块状的元素。
总结
Depth 深度检测在 Stable Diffusion 的 ControlNet 中扮演着至关重要的角色,它不仅能够传递空间信息以指导图像生成,还广泛应用于多种场景,如空间场景生成、风格转换、人体透视、矫正手指以及艺术字创作等。通过合理选择预处理器和控制权重,可以在保持原始构图的同时,实现高度可控且富有创意的图像生成效果,为我们提供了更多的可能性和灵感。
参考
https://www.youtube.com/watch?v=qG6OI7zmkxg
https://creatixai.com/controlnet-depth-tutorial-stable-diffus...
https://kindanai.com/manual-controlnet-depth/
https://huggingface.co/lllyasviel/sd-controlnet-depth
https://ai-illust-kouryaku.com/?p=12450
https://www.ipentec.com/document/software-stable-diffusion-cr...
https://www.bilibili.com/video/BV1Ds4y1e7ZB/
https://civitai.com/articles/6559/comfyui-sdxl-control-net-de...
https://kurokumasoft.com/2023/09/05/stable-diffusion-xl-contr...
https://www.wehelpwin.com/article/4223
https://www.runcomfy.com/zh-CN/tutorials/mastering-controlnet...
https://www.cnblogs.com/joy99/p/18402051
https://ai-wonderland.com/entry/cntrolnetguide#depth
https://github.com/Mikubill/sd-webui-controlnet/discussions/2400
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。