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
- Depth
人体透视
通常情况下,我们使用 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 中扮演着至关重要的角色,它不仅能够传递空间信息以指导图像生成,还广泛应用于多种场景,如空间场景生成、风格转换、人体透视、矫正手指以及艺术字创作等。通过合理选择预处理器和控制权重,可以在保持原始构图的同时,实现高度可控且富有创意的图像生成效果,为我们提供了更多的可能性和灵感。
参考
ai-illust-kouryaku.com/?p=12450
www.wehelpwin.com/article/422…