一切细分稳定扩散 WebUI
该扩展旨在连接 AUTOMATIC1111 稳定扩散 WebUI 和 Mikubill ControlNet 扩展,结合 segment anything 和 GroundingDINO,以增强 Stable Diffusion/ControlNet 的修复功能,增强 ControlNet 的语义分割,自动化图像抠图并创建 LoRA/LyCORIS 训练集。
新闻
2023/04/10
:v1.0.0 发布 SAM 扩展!您可以点击图像生成分割掩码。2023/04/12
:v1.0.1 发布掩码扩展和 API 支持,由 @jordan-barrett-jm 发布!您可以扩展掩码以克服 SAM 的边缘问题。2023/04/15
:v1.1.0 支持 GroundingDINO!您可以输入文本提示生成边框和分割掩码。2023/04/18
:v1.2.0 发布 ControlNet V1.1 修复支持!您可以将 SAM 生成的掩码复制到 ControlNet 进行修复。请注意,您 必须 更新 ControlNet 扩展 才能使用它。相比于通用模型,ControlNet 修复性能要好得多,您无需再下载特定的修复模型。2023/04/24
:v1.3.0 发布自动分割支持!带有 * 的功能需要安装 ControlNet 扩展。此更新包括以下支持- *ControlNet V1.1 语义分割
- EditAnything 非语义分割
- 图像布局生成(单个图像 + 批处理)
- *带类别的图像掩码(单个图像 + 批处理)
- *在 txt2img 面板上对 ControlNet 修复进行非掩码修复
2023/04/29
:v1.4.0 API 已完全重构。您可以通过 API 访问所有 单图像处理 功能。API 文档已移至 wiki。2023/05/22
:v1.4.1 EditAnything 准备就绪!您可以生成随机分割并将输出复制到 EditAnything ControlNet。2023/05/29
:v1.4.2 您现在可以通过勾选“使用 CPU 进行 SAM”在 CPU 上进行 SAM 推理。这适用于某些无法在 GPU 上进行 SAM 推理的 MAC 用户。不建议其他用户使用此功能,因为它比 CUDA 慢得多。2023/06/01
:v1.5.0 您现在可以选择使用本地 GroundingDINO 以绕过 C++ 问题。详见 FAQ-1。2023/06/04
:v1.5.1上传掩码到 ControlNet 修复
应对 ControlNet 修复改进 回归。在更新扩展后,您应看到AutoSAM
旁边出现一个新选项卡。一旦 ControlNet 扩展有自己的上传功能,该功能将再次被移除。2023/06/13
:v1.6.0 SAM-HQ 由 @SpenserCai 和我支持。这是 ETH Zurich & HKUST 的研究人员创建的“升级版” SAM。不过,我不能保证哪一个更好,您应根据自己的实验来选择。请前往 安装 获取模型链接。2023/06/29
:v1.6.1 支持 MobileSAM。这是由 Kyung Hee University 的研究人员创建的 SAM 小版本。访问 此处 了解更多信息。2023/08/31
:v1.6.2 支持 WebUI v1.6.0,Gradio v3.41.2
请注意,对于某些其他 SAM 变体的支持,如 Matting-Anything 和 FastSAM 仍在进行中。与 MobileSAM 不同,这些模型的支持并不简单,尤其是 FastSAM,它使用完全不同的管道,ultralytics/YOLO。将这些新工作引入当前代码库将使原本已经很丑的代码库更加丑陋。一旦我完成当前代码库的重大重构,它们将被支持。
常见问题
感谢 github issues、reddit 和 bilibili 的建议,使这个扩展变得更好。
已经有至少两个关于如何使用该扩展的绝佳教程。请查看这个视频(中文)作者为 @ThisisGameAIResearch 和这个视频(中文)作者为 @OedoSoldier。你也可以查看我的演示。
在提交问题前,你应该了解以下内容:
-
由于关于 GroundingDINO 安装的无数投诉及缺乏类似高性能文本到边界框库的替代,我决定修改 GroundingDINO 的源代码并推送到此存储库。**从v1.5.0起,您可以通过在
Settings/Segment Anything
中勾选Use local groundingdino to bypass C++ problem
来选择使用本地 GroundingDINO。**此更改应解决所有与 C++/CUDA 编译相关的问题,包括 ninja、pycocotools 和 _C 等。如果你没有修改上述设置,此脚本将首先尝试安装 GroundingDINO 并检查你的环境是否成功构建了 C++ 动态库(烦人的
_C
)。如果是,本脚本将使用 GroundingDINO 的官方实现。这是为了表示对 GroundingDINO 作者的尊重。如果脚本未能安装 GroundingDINO,它将改用本地 GroundingDINO。如果你还想解决 GroundingDINO 的安装问题,我发现 Windows 用户的一些常见问题:
pycocotool
:[此处](https://github.com/cocodataset/cocoapi/issues/415#issuecomment-627313816)。_C
:此处。不要跳过步骤。
如果你仍无法在 Windows 上安装 GroundingDINO,并且在尝试查找 此处、IDEA-Research/GroundingDINO/issues 和 IDEA-Research/GroundingDINO/issues 中的问题后无法解决问题,你可以参考#98 并观看那里的视频。 请注意,我是在 linux 上开发的,所以我不能保证任何视频教程可能奏效或不起作用。
-
如果你
- 安装此扩展后无论是否使用此扩展无法使用 ControlNet/WebUI
- 观察到来自 ControlNet 的 AttributeError: 'bool' object has no attribute 'enabled' 和 TypeError: 'bool' object is not subscriptable 等问题
- 当你禁用 SAM 扩展时问题消失
问题很可能是由于其他一些扩展也改变了扩展列表内的 ControlNet 位置。最简单的解决方案是 此处。此更改将 SAM 扩展置于 ControlNet 之前,绕过内部优先代码,并不会妨碍你收到我的任何更新。我不打算重构我的代码来绕过这个问题。我在创建此扩展时并未预料到需要控制 ControlNet,但 ControlNet 的发展速度确实超出了我的预期。
-
该扩展几乎进入了维护阶段。尽管我认为在可预见的未来不会有重大更新,但 Mikubill ControlNet 扩展仍在快速发展,我期待更多机会将我的扩展与 ControlNet 连接。尽管如此,我将继续处理问题,并监控新的研究工作以确定它们是否值得支持。我欢迎任何社区贡献和功能请求。
-
要使用此扩展,你必须使用 gradio>=3.23.0 和 WebUI>=
22bcc7be
。A1111 WebUI 稳定,并且一些集成包作者也更新了他们的包(例如,如果你使用的是@Akegarasu 的包即秋叶整合包,它已经根据此视频进行了更新)。此外,支持不同版本的 WebUI 将花费大量时间,在此期间,我可以创建更多功能。请更新你的 WebUI,并且使用它是安全的。我不打算支持某些旧版本的 WebUI,例如a9fed7c3
。 -
由于 gradio/A1111 的限制,至少目前不可能支持以下功能。我将密切关注 gradio/A1111 更新,看看是否有可能支持它们:
-
支持 Inpaint-Anything 和 EditAnything 以及许多其他流行的 SAM 扩展。对于 Inpaint-Anything,你可以查看此问题了解如何使用。对于 EditAnything,请查看使用说明。我随时准备支持任何其他有趣的应用程序,如果你发现其他有趣的应用程序,请提交功能请求。
-
如果你有工作机会并认为我适合,请随时给我发送电子邮件。
-
如果你想赞助我,请前往赞助部分并扫描相应的二维码。
安装
通过你喜欢的任何方式(git clone 或从 UI 安装)将此扩展下载到 ${sd-webui}/extensions
选择以下一个或多个模型并将其放到 ${sd-webui}/models/sam
或 ${sd-webui-segment-anything}/models/sam
(选择一个,不要选择两个。如果选择使用后者,请删除前者文件夹)。不要更改模型名称,否则由于 segment anything 内的一个错误,此扩展可能会失败。
我们支持几种不同的分割模型:
-
SAM 来自 Meta AI.
我自己在 NVIDIA 3090 Ti 上测试了 vit_h,效果很好。如果你遇到显存问题,你应该切换到更小的模型。
-
SAM-HQ 来自 SysCV.
-
MobileSAM 来自 Kyung Hee University.
我们计划在对代码库进行重大重构后(尚未支持)支持一些其他变体的分割模型:
-
Matting-Anything 来自 SHI-Labs. 这是一个用于任何 SAM 变体的后处理模型。将模型放置在
${sd-webui-segment-anything}/models/sam
下 -
FastSAM 来自 CASIA-IVA-Lab. 这是一个 SAM 的 YOLO 变体。
GroundingDINO 包,GroundingDINO 模型和 ControlNet 注释器模型将在你首次使用它们时自动安装。
如果你的网络不允许你通过终端访问 huggingface,请从 huggingface 下载 GroundingDINO 模型并将其放置在 ${sd-webui-segment-anything}/models/grounding-dino
下。请注意,GroundingDINO 仍然需要访问 huggingface 下载 bert 词汇表。目前没有其他替代方案。请阅读 此处 以找到解决办法。我会在不久的将来寻找替代方案。
GroundingDINO
此扩展中已支持 GroundingDINO。它具有以下功能:
- 你可以使用文本提示自动生成边界框。你可以用
.
分隔不同类别的名称。SAM 可以将这些边界框转换为遮罩 - 你可以使用一个边界框内的点提示生成遮罩
- 你可以进入
Batch Process
标签批量处理图片抠图并获得 LoRA/LyCORIS 训练集
然而,GroundingDINO 存在一些问题:
- 当你首次使用 GroundingDINO 功能时会安装 GroundingDINO,而不是在你启动 WebUI 时。确保你的终端能够访问 GitHub,否则你必须手动安装 GroundingDINO。GroundingDINO 模型将自动从 huggingface 下载。如果你的终端无法访问 HuggingFace,请手动下载模型并将其放在
${sd-webui-segment-anything}/models/grounding-dino
下。 - 如果你想使用本地 groundingdino 来绕过所有这些 C++/CUDA/ninja/pycocotools 问题,请阅读 FAQ-1。 GroundingDINO 需要你的设备编译 C++,这可能需要很长时间并且会抛出大量异常。如果你遇到
_C
问题,很可能是因为你没有安装 CUDA Toolkit。按照 此处 描述的步骤进行操作。不要跳过步骤。否则,请前往 Grounded-SAM 问题页面 并提交问题。尽管如此,即使你无法安装 GroundingDINO,你仍然可以使用此扩展进行点提示->遮罩分割,不用担心。 - 如果你想使用点提示,SAM 最多只能接受一个边界框。此扩展会检查是否有多个边界框。如果有多个边界框,此扩展将忽略所有点提示;否则所有点提示将生效。你可以始终选择你想要的一个边界框。
AutoSAM
此扩展中已支持自动分割。它具有以下功能:
- 你可以使用 SAM 增强语义分割并将输出复制到 control_v11p_sd15_seg
- 你可以生成随机分割并将输出复制到 EditAnything ControlNet
- 你可以生成图像布局并在 PhotoShop 中进行编辑。支持单张图像和批量处理。
- 你可以根据类别 ID 生成遮罩。如果你想要一个大的对象,这比单纯的 SAM+GroundingDINO 分割更准确。
然而,AutoSAM 存在一些问题:
- 你需要安装 Mikubill ControlNet Extension 才能使用功能 1 和 4。请不要更改目录名称 (
sd-webui-controlnet
)。 - 如果你使用的是 Windows,首次访问此功能时需要以管理员模式打开 WebUI。因为 Windows 不允许通过 python 创建符号链接。
- 如果你结合
seg_ufade20k
和 SAM,你会观察到显著的改进。如果你仅结合一个Oneformer
预处理器 (seg_ofade20k
&seg_ofcoco
) ,你可能只会观察到一些微小的改进。这是因为 Oneformer 在语义分割方面已经非常强大,而不是语义可识别模型。 - 图像布局生成在动漫图像上表现相当差。如果你的处理对象是动漫图像,我不建议你使用此功能。我不确定真实图像的表现如何。
如何使用
如果你之前在使用此扩展时启用了其他副本,你可能希望点击此扩展 UI 底部的 Uncheck all copies
,以防止其他副本影响你的当前页面。
单张图片
- 上传你的图片
- 可选地在图像上添加点提示。左键单击以添加正点提示(黑点),右键单击以添加负点提示(红点),再次左键单击任何一点取消提示。如果你不希望使用 GroundingDINO,必须添加点提示。
- 可选地勾选
Enable GroundingDINO
,选择你想要的 GroundingDINO 模型,写入文本提示(用.
分隔不同类别)并选择一个边界框阈值(我强烈推荐默认设置。高阈值可能导致无边界框)。如果你不希望使用点提示,必须写入文本提示。 - 可选地启用预览 GroundingDINO 边界框并点击
Generate bounding box
。你必须写入文本提示以预览边界框。在看到有编号标记在左上角的边框后,取消勾选所有你不想要的边框。如果你取消所有边框,你将不得不添加点提示以生成遮罩。 - 点击
Preview Segmentation
按钮。由于 SAM 的限制,如果有多个边界框,生成遮罩时你的点提示将无效。 - 选择你喜欢的分割。
- 可选地勾选
Expand Mask
并指定数量,然后点击Update Mask
。 - [非常重要] 更新你的 ControlNet 并勾选
Allow other script to control this extension
(必须)在你的 ControlNet 设置中。
txt2img
- 你可能只需将图像和遮罩复制到 ControlNet 修复。
- 可选地勾选
ControlNet inpaint not masked
以反转遮罩颜色并在遮罩外的区域进行修复。 - 选择你使用修复的 ControlNet 索引,如果你希望使用 Multi-ControlNet。
- 配置 ControlNet 面板。点击
Enable
,预处理器选择inpaint_global_harmonious
,模型选择control_v11p_sd15_inpaint [ebff9138]
。无需在 ControlNet 修复面板上传图像。 - 写下你的提示,配置 A1111 面板并点击
Generate
。
img2img
- 勾选
Copy to Inpaint Upload & ControlNet Inpainting
。无需选择 ControlNet 索引。 - 配置 ControlNet 面板。点击
Enable
,预处理器选择inpaint_global_harmonious
,模型选择control_v11p_sd15_inpaint [ebff9138]
。无需在 ControlNet 修复面板上传图像。 - 点击
Switch to Inpaint Upload
按钮。无需上传其他图像或遮罩,只需保持空白。写下你的提示,配置 A1111 面板并点击Generate
。
批量处理
- 选择你的 SAM 模型,GroundingDINO 模型,文本提示,边界框阈值和遮罩扩展量。输入源图像和目标目录。
- 选择
Output per image
以配置每个边界框的遮罩数量。我强烈建议为 3,因为某些遮罩可能会很奇怪。 - 点击/取消点击几个复选框以配置你想要保存的图像。见 演示 以了解这些复选框代表什么类型的图像。
- 点击
Start batch process
并等待。如果你在此按钮下看到“完成”,说明一切就绪。
AutoSAM
- 在使用前安装并更新 Mikubill ControlNet Extension。
- 根据 此处 的描述配置 AutoSAM 可调参数。如果不明白就用默认值。
ControlNet
- 选择预处理器。
seg_ufade20k
、seg_ofade20k
和seg_ofcoco
都来自 ControlNet 注释器。我强烈推荐seg_ofade20k
和seg_ofcoco
之一,因为它们的性能远远优于seg_ufade20k
。它们都兼容control_v11p_sd15_seg
。可选地启用 pixel-perfect 以自动选择最佳预处理器分辨率。如果你希望启用 pixel perfect,请在预览前配置你在 txt2img/img2img 默认面板上的目标宽度和高度。否则,你需要手动设置预处理器分辨率。random
是为 EditAnything 而设计的。随机预处理器不包含语义分割,因此无需设置预处理器分辨率,但你需要从 AutoSeg 输出库中选择一个图像复制到 ControlNet。1 代表不同遮罩区域的随机着色,预留给未来的 ControlNet;2 代表固定着色,可以是 EditAnything ControlNet 控制图。
- 点击预览分割图像。对于语义分割,你会看到 4 张图像,左边 2 张没有 SAM,右边 2 张有 SAM。对于随机预处理器,你会看到 3 张图像,左上是混合图像,右上是随机着色的遮罩,左下是为了 EditAnything ControlNet。
- 勾选
Copy to ControlNet Segmentation
并选择你使用 ControlNet 分割模型的正确 ControlNet 索引,如果你希望使用 Multi-ControlNet。 - 配置 ControlNet 面板。点击
Enable
,预处理器选择none
,模型选择control_v11p_sd15_seg [e1f51eb9]
。无需在 ControlNet 分割面板上传图像。 - 写下你的提示,配置 A1111 面板并点击
Generate
。 - 如果你想使用 EditAnything,你需要修改一些上述步骤:
- 在步骤 1:你需要选择
random
预处理器。 - 在步骤 3 和 4 之间:下载
- 在步骤 4:模型选择
control_v11p_sd15_seg [e1f51eb9]
- 在步骤 1:你需要选择
图片布局
- 对于单张图片,只需上传图片,输入输出路径并点击生成。你将在输出目录中看到很多图片。
- 对于批量处理,只需输入源目录和目标目录并点击生成。你将在
${destination}/{image_filename}
目录中看到很多图片。
按类别生成遮罩
- 选择与 ControlNet 步骤 1 类似的预处理器。这是纯语义分割,因此没有随机预处理器。
- 输入用
+
分隔的类别 ID。点击这里 查看 ade20k 和这里 查看 coco 以获取类别 -> ID 映射。请注意,coco 略过了一些编号,因此实际 ID 是 line_number - 21。例如,如果你想要 bed+person,ade20k 的输入应该是 7+12,coco 的输入应为 59+0。 - 对于单张图像,上传图像,点击预览,并按照 txt2img 这里 和 img2img 这里 类似的配置进行拷贝。
- 对于批处理,与 批处理 的步骤 2-4 类似。
演示
点提示演示(也称为移除/填充任何内容)
GroundingDINO 演示
批处理演示
输入图像 | 输出图像 | 输出掩模 | 输出混合 |
---|---|---|---|
语义分割演示
按类别掩模演示(也称为替换任何内容)
按类别批量掩模演示
输入图像 | 输出图像 | 输出掩模 | 输出混合 |
---|---|---|---|
贡献
免责声明:我没有对这个扩展进行彻底测试,所以可能会有漏洞。请耐心等待我修复它们 :)
如果你遇到bug,请提交一个 issue。请至少提供你的 WebUI 版本、扩展版本、浏览器版本、浏览器控制台日志中的错误(如果有)、终端日志中的错误(如果有),以节省我们双方的时间。
我欢迎任何贡献。如果你想贡献,请提交一个 pull request。
星级历史
赞助
你可以通过微信、支付宝或者 PayPal 赞助我。
微信 | 支付宝 | PayPal |
---|---|---|