/stable-diffusion-anime-tag-benchmark

stable diffusion 动漫标签自动化评测

Primary LanguagePython

stable diffusion 动漫标签自动化评测

大家在用stable diffusion的时候,有没有遇到过你用的模型总是不能理解你要的标签的情况?

前几天我就想试试XL模型是不是能解决这类问题。按理说模型更大了,应该更聪明1点。可是下了几个动漫的XL模型,手动测试了1下,好像不仅没有解决不理解标签的问题,还更坏了?

不过感觉毕竟是不准的,1个1个用眼睛看也看不完,不如我来发明1个测试工具,直接把各种模型×各种标签统统测试1遍,这样就知道它们到底准不准了!

单标签测试

第1项测试比较简单,我们来测试1下模型是否能正确地画出各种类的标签。横座标是模型的名字,纵座标是标签分类,表格的数值是准确率。

  • 准确率的意思是,假如我用AOM3A1模型,生成了n张包含人物-动作tag的图片,即每张的prompt中包含1个随机的人物-动作tag,然后用ML-Danbooru检测这n张图片,能被预测出和prompt中相同的tag的张数为k,那么AOM3A1×人物-动作的准确率就是k/n

  • 采样方法是选择使用率最高的前1500个标签,然后用每个模型给每个标签生成16张图,再把标签分到对应的分类里。因此标签的样本数是均匀的,但是分类的样本数不是均匀的。

评测的模型是这样挑选的,在Civitai上选了比较热门的模型系列,然后从每个系列中选出几个下载量较大的模型来测试,也测了几个我自己比较喜欢的模型。

  • 表格长度不够,因此挑了1些模型出来展示,并且同1系列的模型里只显示了效果最好的那个,比如Counterfeit3.0比Counterfeit2.2好,所以2.2就没有显示。

  • 如果你想看完整的表格,在测试结果里,因为它太大了所以就不贴上来了。

  • 如果你有什么想试的模型也可以告诉我,我1起加进来。

A5Ink AL AOM3A1 BP10 CF3.0 CM4 CYS KW70 SF1.0 CXL3.0 KXLB7 NAI3 NAXL10
艺术破格 0.151 0.132 0.092 0.188 0.18 0.147 0.125 0.121 0.195 0.379 0.18 0.213 0.331
人物-动作 0.493 0.531 0.511 0.58 0.557 0.538 0.555 0.495 0.543 0.823 0.539 0.637 0.718
人物-全身装饰 0.664 0.602 0.734 0.773 0.758 0.719 0.789 0.773 0.695 0.984 0.875 0.68 0.953
人物-胸部 0.419 0.431 0.497 0.457 0.458 0.413 0.431 0.358 0.418 0.756 0.374 0.578 0.64
人物-衣装 0.751 0.777 0.783 0.804 0.802 0.802 0.773 0.718 0.785 0.895 0.771 0.804 0.816
人物-摆位 0.514 0.509 0.491 0.604 0.616 0.535 0.562 0.528 0.613 0.838 0.701 0.56 0.701
人物-耳朵 0.845 0.848 0.842 0.839 0.884 0.866 0.815 0.815 0.914 0.938 0.821 0.842 0.905
人物-面部 0.436 0.426 0.414 0.503 0.514 0.458 0.419 0.432 0.462 0.784 0.457 0.584 0.672
人物-头发 0.633 0.606 0.581 0.678 0.678 0.634 0.555 0.546 0.597 0.888 0.61 0.688 0.846
人物-头部饰品 0.736 0.741 0.705 0.814 0.814 0.778 0.77 0.729 0.82 0.911 0.782 0.715 0.868
人物-类型 0.661 0.649 0.644 0.725 0.688 0.651 0.67 0.596 0.68 0.817 0.763 0.616 0.779
人物-下身装饰 0.71 0.726 0.749 0.76 0.781 0.747 0.742 0.698 0.74 0.918 0.748 0.769 0.801
人物-脖子 0.768 0.794 0.786 0.814 0.808 0.822 0.75 0.724 0.753 0.918 0.74 0.806 0.898
人物-鞋袜 0.679 0.696 0.681 0.732 0.742 0.732 0.708 0.699 0.726 0.874 0.713 0.77 0.818
人物-上身装饰 0.728 0.769 0.737 0.79 0.783 0.77 0.747 0.698 0.758 0.916 0.728 0.717 0.84
人文景观-建筑物 0.938 0.966 0.903 0.96 0.886 0.932 0.955 0.943 0.966 0.938 0.989 0.415 0.966
人文景观-谷制品 0.688 0.713 0.713 0.825 0.8 0.787 0.938 0.825 1.0 1.0 1.0 0.325 1.0
人文景观-饮料 0.836 0.859 0.781 0.898 0.812 0.844 0.914 0.844 0.938 0.961 0.977 0.586 0.945
人文景观-水果 0.868 0.868 0.889 0.847 0.889 0.896 0.931 0.854 0.986 0.965 0.993 0.368 0.972
人文景观-主食 0.762 0.787 0.725 0.825 0.8 0.775 0.875 0.838 0.825 1.0 0.988 0.287 1.0
人文景观-肉类与海鲜 0.922 0.734 0.906 0.891 0.984 0.953 0.906 0.828 1.0 1.0 0.984 0.453 0.984
人文景观-糖果零食 0.8 0.819 0.722 0.878 0.859 0.825 0.863 0.838 0.894 0.944 0.866 0.566 0.972
人文景观-蔬菜与香料 0.938 0.906 0.896 0.969 0.938 0.885 0.979 0.948 0.979 0.969 0.896 0.802 1.0
人文景观-室内 0.991 1.0 0.991 1.0 0.92 0.991 1.0 0.973 0.991 1.0 1.0 0.812 1.0
人文景观-室外 1.0 1.0 0.958 1.0 1.0 1.0 1.0 1.0 1.0 0.99 1.0 0.417 0.99
构图-背景 0.861 0.885 0.803 0.933 0.894 0.904 0.899 0.856 0.827 0.947 0.875 0.774 0.938
构图-打码方式 0.151 0.219 0.359 0.198 0.219 0.135 0.312 0.151 0.193 0.391 0.266 0.245 0.339
构图-色彩 0.442 0.388 0.304 0.721 0.704 0.517 0.421 0.358 0.492 0.738 0.787 0.613 0.542
构图-构图方式 0.276 0.344 0.292 0.396 0.339 0.375 0.375 0.26 0.339 0.62 0.328 0.526 0.604
构图-制图特效 0.551 0.643 0.467 0.713 0.776 0.643 0.662 0.592 0.68 0.794 0.673 0.449 0.801
构图-图片类型 0.435 0.386 0.332 0.416 0.383 0.397 0.41 0.429 0.351 0.617 0.448 0.435 0.573
构图-视角 0.651 0.618 0.588 0.713 0.706 0.654 0.662 0.706 0.71 0.824 0.662 0.632 0.732
构图-画风 0.221 0.138 0.192 0.275 0.283 0.2 0.229 0.217 0.175 0.471 0.533 0.483 0.425
物品 0.792 0.765 0.804 0.881 0.878 0.893 0.824 0.735 0.839 0.976 0.845 0.812 0.902
自然景观-花卉 0.895 0.92 0.855 0.989 0.943 0.972 0.949 0.852 0.983 0.997 1.0 0.668 0.989
自然景观-室外 0.943 0.953 0.927 1.0 0.995 0.964 0.958 0.969 0.99 0.995 1.0 0.484 0.99
自然景观-气象 0.891 0.922 0.87 0.974 0.87 0.885 0.906 0.891 0.901 0.964 1.0 0.578 0.984
限制级-成年限定 0.288 0.268 0.518 0.379 0.371 0.211 0.392 0.241 0.347 0.689 0.387 0.349 0.485
限制级-限制级 0.504 0.444 0.597 0.532 0.58 0.442 0.539 0.403 0.442 0.735 0.621 0.457 0.619
总体 0.607 0.613 0.613 0.671 0.667 0.631 0.629 0.586 0.64 0.84 0.652 0.635 0.765

为了在Github上显示好看点就缩写了1下。模型的全名可以在common.py里看。

加粗表示它是当前标签的top3。

多标签测试-准确度

接下来是测试模型在单张图片的标签数变多时,是会顾此失彼,还是能把这些标签都画出来。同上,横座标是模型的名字,纵座标是标签分类,表格的数值是准确率。

  • 准确率的意思是,假如我用AOM3A1模型,生成了n张包含m个tag的图片,即每张的prompt中包含m个随机的tag,然后用ML-Danbooru检测这n张图片,每张图片中能被预测出和prompt中相同的tag的数量总和为k,那么AOM3A1×n tags的准确率就是k/(n*m)

  • 采样方法是每次从使用率最高的前1500个tag中随机抽取m个,然后用每个模型给这1次的m个tag生成16张图。

A5Ink AL AOM3A1 BP10 CF3.0 CM4 CYS KW70 SF1.0 CXL3.0 KXLB7 NAI3 NAXL10
2 0.477 0.497 0.481 0.546 0.54 0.513 0.513 0.487 0.527 0.703 0.494 0.576 0.616
4 0.431 0.448 0.439 0.484 0.482 0.465 0.461 0.454 0.473 0.682 0.451 0.539 0.556
8 0.346 0.381 0.363 0.409 0.406 0.391 0.385 0.395 0.393 0.608 0.375 0.459 0.464
16 0.275 0.303 0.287 0.333 0.328 0.324 0.312 0.317 0.318 0.508 0.302 0.352 0.356
32 0.207 0.232 0.221 0.253 0.245 0.245 0.24 0.245 0.243 0.384 0.212 0.235 0.254
64 0.152 0.171 0.166 0.186 0.181 0.179 0.179 0.179 0.176 0.294 0.154 0.15 0.178
128 0.118 0.131 0.129 0.144 0.142 0.138 0.139 0.138 0.136 0.221 0.121 0.106 0.134

多标签测试-多样性

接下来来测试模型生成图片的多样性。横座标是模型的名字,纵座标是标签分类,表格的数值是多样性。

  • 多样性的意思是,假如我用AOM3A1模型,在相同tag下生成了n张图片,将每1张图和它的后1张图过CLIP之后计算embedding的余弦相似度,1-这些余弦相似度的平均值即为AOM3A1×n tags的多样性。
A5Ink AL AOM3A1 BP10 CF3.0 CM4 CYS KW70 SF1.0 CXL3.0 KXLB7 NAI3 NAXL10
2 0.147 0.142 0.146 0.13 0.136 0.143 0.147 0.148 0.137 0.127 0.12 0.184 0.192
4 0.136 0.132 0.131 0.121 0.129 0.134 0.143 0.144 0.129 0.121 0.126 0.178 0.184
8 0.129 0.13 0.122 0.117 0.126 0.127 0.143 0.136 0.126 0.119 0.13 0.183 0.185
16 0.129 0.125 0.116 0.115 0.125 0.12 0.143 0.137 0.123 0.12 0.13 0.186 0.189
32 0.121 0.126 0.112 0.117 0.127 0.127 0.145 0.146 0.126 0.124 0.134 0.192 0.201
64 0.131 0.131 0.112 0.121 0.135 0.13 0.154 0.151 0.14 0.135 0.141 0.203 0.211
128 0.127 0.132 0.11 0.125 0.142 0.137 0.159 0.162 0.143 0.131 0.135 0.194 0.215

画了1张图,表示当tag数量为32时,各个模型的准确度和多样性,是这样——

生成人物测试

这个测试是指,模型在没有LORA,仅使用人物prompts时,是否能画出对应的人物。

这里的准确率比较简单,对生成的图片使用wd-swinv2-tagger-v3模型检测,能检测到prompt中的人物就算+1。

测试范围是danbooru中出现次数多的人物。不过如果按全期抽样角色出现的频率,早期作品的角色就会偏多(比如东方和舰娘),所以实际的测试范围是把近期的角色和全期的角色分别抽样后取了并集。

A5Ink AL AOM3A1 BP10 CF3.0 CM4 CYS KW70 SF1.0 CXL3.0 KXLB7 NAI3 NAXL10
蔚蓝档案 0/17 0/17 0/17 0/17 0/17 0/17 0/17 0/17 0/17 16/17 0/17 15/17 16/17
fate 4/11 5/11 4/11 5/11 4/11 5/11 3/11 5/11 5/11 9/11 2/11 10/11 9/11
原神 4/13 5/13 6/13 5/13 6/13 6/13 3/13 6/13 5/13 13/13 0/13 13/13 13/13
hololive 0/18 1/18 0/18 2/18 1/18 3/18 0/18 1/18 0/18 15/18 0/18 14/18 16/18
偶像大师 1/9 1/9 1/9 2/9 2/9 3/9 0/9 4/9 1/9 2/9 0/9 8/9 2/9
舰娘 17/31 15/31 16/31 16/31 16/31 17/31 21/31 21/31 19/31 2/31 0/31 30/31 0/31
东方 30/52 27/52 27/52 31/52 33/52 35/52 31/52 38/52 37/52 12/52 9/52 50/52 7/52
总体 79/221 77/221 75/221 89/221 90/221 96/221 81/221 104/221 93/221 115/221 21/221 194/221 102/221

属性偏好测试

顺便测了1下,模型在没有收到特定的prompt时,会倾向于生成什么样的角色。

数据是将「单标签测试」的模型预测结果中每张图片的标签统计之后的结果。因为这个是搞笑的,所以就不解释计算规则了。画了一张图,是这样——

圆形的颜色代表的是,在生成的图片中出现次数最多的头发颜色标签。

画风测试

画风量化起来不是很方便。不过好在这个东西用眼睛看也不难,所以用相同的prompt为每个模型生成了几张样例图片。

我先放1个「街上的双马尾JK」在这里,其他的样例大家可以到img文件夹里面看。

使用方法

  • 首先你要有1个stable-diffusion-webui。运行webui-user.bat,启动参数需要加上--api

  • 安装依赖: pip install -r requirements.txt

  • 运行评测代码: python 评测单标签.pypython 评测多标签.py。会生成记录.json记录_多标签.json文件,包含1个巨大的list。

  • 导出表格: python 导出表格.py。会读取记录文件,生成好.md文件,里面就是以表格形式打出的指标了。

结束

顺便说1下,标签目录是从https://github.com/wfjsw/danbooru-diffusion-prompt-builder扣出来的,但是因为我是傲娇所以不会感谢她!

就这样,大家88,我要回去和GPT亲热了!