Skip to content

WSH032/image-deduplicate-cluster-webui

Repository files navigation

image-deduplicate-cluster-webui

A A1111-WebUI extension for deduplicates images or cluster images.

一个用于图像查重和图片聚类的 A1111-WebUI 扩展

现在我们有什么?

  • 基于imagededup库,进行图片去重的WebUI
  • 基于sklearn库,以tags文本为特征,或者以WD14 tagger模型提取的特征向量进行图片聚类WebUI
  • 高效的 WD14 图片标记脚本及WebUI

部分展示

查重演示

旧版查重演示

deduplicate_demo

deduplicate_demo

聚类演示

images_cluster_show_0

WD14-Tagger 演示

wd14_show_1

其他

另一张复杂情况的8聚类效果请看这里images_cluster_show_1

聚类-Tagger说明 title_show

Credit

  • 我不训练模型,WD14模型来自于这个项目SmilingWolf/WD14
  • 聚类方法和特征提取来着于sklearn库
  • 查重方法来自于imagededup库
  • tag_images_by_wd14_tagger来自kohya/sd-scripts

Change History

如果你不会使用git命令,可以运行update.ps1完成更新,并再次运行install.ps1来更新依赖环境

V 2.0.1

05 Aug.2023 2023/08/05

Other Changes:

  • 为解决做为 SD-WebUI 扩展运行时潜在的包名冲突问题,重命名 ./ui -> ./img_dedup_clust

V 2.0.0

01 Aug.2023 2023/08/01

New Features:

  • [破坏性] 大更新,优化并调整几乎全部WebUI部分代码结构、组织
    • 所有ui界面和几乎所有后端函数被移至 ./ui 文件夹下
      • 在V 2.0.1 被更名为 ./ui -> ./img_dedup_clust
  • 为聚类增加更多参数
    • 支持自定义的 tag文件npz矩阵文件 扩展名选择
    • 增加SVD降维功能
    • 聚类分析中增加样本分布可视化图,帮助确认n值
    • wd14聚类支持更多参数
  • 为查重增加更多参数
    • 增加 js 的支持
      • 可通过键盘快捷键 EnterBackspace 来进行选择和取消
    • 支持 CNN模型 查重
      • 如果有GPU的支持,CNN模型查重将会比原来的 Hash查重 更快
    • 增加查重阈值设置
    • 查重结果新增 移动重命名 选项
      • 现在查重结果的操作将采用和聚类一样的操作方式
      • 增加附带文件处理功能,可以一起 移动重命名删除 附带文件
  • 重构 WD14-taggertag_images_by_wd14_tagger 为类
    • 将直接下载huggingface上编译好的onnx模型,不再进行编译
    • 删除 tensorflow, onnx, tf2onnx 等和编译模型有关的部分
    • 增加离线模式选项
    • 增加 wd-v1-4-convnextv2-tagger-v2 模型
      • 除此,还有先前的 wd-v1-4-moat-tagger-v2 模型可以选择
    • 暂时弃用并删除命令行WD14-tagger脚本 run_tagger.ps1
      • 可能会在未来回归
  • 不再支持只安装部分模块,默认安装全部依赖

Other Changes:

  • 优化UI显示
  • A1111-WebUI中现在聚类-WD14查重被分为两个选项卡
    • 聚类-WD14 对应 Cluster-Tagger
    • 查重 对应 Deduplicate
  • 删除 ./docs 中所有展示图片,更换为 github/assets 链接以减小仓库体积
    • 使用 git clone --depth=1 时,将不再下载多余图片,以方便快速克隆
  • 调整部分logging日志等级
  • 在使用WD14-Tagger时,对于重名但扩展名不同的图片,其的标签文本将会被相互覆盖,此时会发出警告

Bug Fixes:

  • 为所有后端函数添加异常处理装饰器,以避免未知错误造成 A1111-WebUI 中永久无返回结果
  • 当缓存图片失败时,将自动退回到原图模式
  • 修正特征重要性分析算法中的错误
    • 现在,在某个聚类结果中,只有某个特征tag占比超过或低于设置的阈值时,才会被判断为 promptnegetive

以前的更新内容请查看CHANGELOG.md

安装 Install

Colab使用

(一)做为AUTOMATIC1111/stable-diffusion-webui的扩展使用

请尽量在gradio>=3.31.0的版本下使用,此扩展在 2023年第22周 SD-WebUI v1.3.1下经过测试

https://github.com/WSH032/kohya-config-webui.git

将这个仓库连接复制到SD-WebUi的扩展 extensions->从网址安装 Install from URL界面下载完成后,重启SD-WebUI即可,会自动安装所需依赖

  • 中国区用户可尝试用https://ghproxy.com/https://github.com/WSH032/kohya-config-webui.git代理加速下载
  • 在SD-WebUI中使用本扩展的WD14tagger功能时,若出现模型下载失败情况,可以按照本扩展WebUI内的指示从https://huggingface.co/WSH032/wd-v1-4-tagger-feature-extractor手动下载模型并放入WebUI内指定的文件夹中
  • tensorrt自动增量脚本utils/run_install_tensorrt_lib.ps1在此仓库做为扩展使用时不被支持,但你仍可以自行手动安装tensorrt环境来使用加速功能 Install-SD-WebUI-extension

关于依赖环境

做为SD-WebUI扩展使用时,会自动安装和使用SD-WebUI的依赖环境本项目的三个模块都会被安装,不需要任何操作

首次安装时,中国区用户可能会因网络原因安装较久,请耐心等待

(二)独立使用

[2323/07/04] 在独立使用时,强烈建议使用此整合项目WSH032/sd-webui-fast-dataset-maker,以获得更好的体验

图示为整合了zanllp/sd-webui-infinite-image-browsing sd-webui-infinite-image-browsing

在python3.9下完成编写,可能之前版本也可以使用,不保证

克隆本仓库

git clone https://github.com/WSH032/image-deduplicate-cluster-webui.git  # --depth=1

每个模块所需的依赖已经写在requirements.txt

一键运行install.ps1即可

旧版 install.ps1 界面

install

install

关于 TorchCUDA 环境

requirements.txt中并没指定 Torch 的版本,请根据你的需求自行决定并修改

推荐安装带有cuda依赖的torch版本

torch==2.0.0+cu118  --extra-index-url https://download.pytorch.org/whl/cu118

涉及到深度学习模型的部分,可以进行CPU或者GPU的推理,其中GPU的推理速度快,但是要求 CUDA 环境

运行install.ps1时会提问你是否需要安装 Torch==2.0.0 + cuda118,其能够在虚拟环境中配置 CUDA 环境

如果你配置过系统级的 CUDA 环境,或者你不需要使用GPU进行推理,可以选择否

关于WD14模型下载失败

请按照本项目 Tagger WebUI 中的 模型下载说明 选项卡指示进行操作 model_download_info

使用Tips

SD-WebUI内使用演示

与独立使用方法相同

图片查重

图片查重不依赖任何tag文本或者WD14模型

一键运行run_deduplicate_images.ps1,或在 A1111-WebUI 中以扩展形式使用,其将会生成一个WebUI,进行操作即可

deduplicate_tips

deduplicate_demo

图片聚类

一键运行run_cluster_images.ps1,或在 A1111-WebUI 中以扩展形式使用,其将会生成一个WebUI,进行操作即可

图片聚类依赖与图片同名的 txt文本 或者 npz文件 进行聚类,这取决于你在WebUI中选择的特征提取方式

vectorize_method

选择 tf-idf 或者 countvectorizer 提取特征,则需要 txt文本

其中txt内容为与图片对应的booru风格的tag标签,例如 1girl, solo, yellow eyes

image_with_tag

wd14 提取特征,则需要 npz文件

其中 npz文件 储存着WD14模型提取的特征向量矩阵,其的生成必须使用本项目自带的 tag_images_by_wd14_tagger.py ,或者在 WD14-Tagger WebUI中生成

image_witg_npz

WD14 tagger

本项目自带的WD14 tagger模型来自于SmilingWolf/WD14,我对其结构进行了调整,增加了后四层的输出,并采取倒数第三层做为特征向量

你可以使用tag_images_by_wd14_tagger.py进行图片打标,获取txt文本,这与toriato/stable-diffusion-webui-wd14-tagger的打标结果并无太大差异

同时其会输出同名的npz文件,其中包含了WD14模型的倒数前四层的输出,你可以在聚类模块中使用

run_tagger(弃用)

2023/06/6,新增WD14的WebUI界面

wd14_show_1

Todo

  • 在Colab上部署
  • 完成本地部署封装
  • 完成A111-SD-WebUI部署
  • 增加WD14提取特征和生成tags文本
    • 使用WD14生成特征向量到npz文件,避免多次聚类时重复运行耗时
    • 增加释放模型功能
    • 增加使用倒数第三层模型
  • 聚类
    • 为图片聚类增加SVD降维
    • [ ] 增加tags文本字符串预处理(如将空格变为逗号)
      • 已经取消,因为Gelbooru-API-Downloader已经自带了这个功能
    • 为聚类文件夹增加标签
    • 修正特征重要性分析的标签错误(应用占比50判断)
    • 增加手动选择是否应用某个聚类的功能
    • 增加更多分析方法
      • 现在有轮廓系数和Davids系数
    • 更多聚类方式
      • 现在有kmeans,谱聚类、层次聚类,OPTICS聚类
      • 为不同聚类方式增加参数选择功能
      • [ ] 将聚类方法选择独立出来
        • 已经取消,因为使用npz文件后,读取特征向量已经很快了
  • 查重
    • 为查重添加选择全部选项
    • 为查重添加更多查重方式和查重阈值
    • 重写查重启发式选择算法
    • 为查重添加移动图片功能
    • 为查重删除添加删除tag文本功能

结尾

考虑使用onnx加载模型,两个方案

  • 先把keras模型下载,调整输出后再本地导出onnx格式
  • [ ] 直接下载onnx模型,用onnx库来调输出层(似乎层不一样)

About

A WebUI script that deduplicates images or clusters them by tags or WD14. 一个用于图像查重和基于tags或者WD14提取的特征进行聚类的WebUI脚本

Resources

License

Stars

Watchers

Forks

Packages

No packages published