在量子位上看到了这个AI,觉得蛮有意思的,体验下来准确率也不错,分享给大家。
开源代码地址:https://github.com/KichangKim/DeepDanbooru
在线测试地址:http://kanotype.iptime.org:8003/deepdanbooru/
数据集下载工具:https://github.com/KichangKim/DanbooruDownloader
该程序使用python 3.6与tensorflow编写
数据集与结构
作者使用的数据集是danbooru网站上爬下来的数据,该网站对每个二次元画像都贴上了标签,因此将标签与图片一一对应,存到数据库(sqlite)中,就可以进行训练了。
你可以使用作者提供的一个下载器(有releases版本,无需编译),自动生成所需要的数据集,也可以使用自己的数据集,但是文件夹结构必须如下:
MyDataset/
├── images/
│ ├── 00/
│ │ ├── 00000000000000000000000000000000.jpg
│ │ ├── ...
│ ├── 01/
│ │ ├── ...
│ └── ff/
│ ├── ...
└── my-dataset.sqlite
其中,sqlite数据库结构如下:
posts
├── id (INTEGER)
├── md5 (TEXT)
├── file_ext (TEXT)
├── tag_string (TEXT)
└── tag_count_general (INTEGER)
这里需要注意一点,MyDataset
中的图片名一定要是[md5].[file_ext]
格式,使用自己的数据集时不必使用真实的md5值,但也要保证一一对应。tag_count_general
用于项目设置,会使用超过tag_count_general值的数据进行训练。
项目(project)结构如下,可调整project.json
里的各项设置进行训练。
MyProject/
├── project.json
└── tags.txt
当然,如果你只是想体验一下不想训练,作者提供了一个在线测试网站,你可以直接上传图片获取标签。或者,作者也提供了一个预训练的模型,可以直接使用。详细使用过程见下文。
环境配置
首先我们要配置好环境,我们直接下载release版本即可,其中deepdanbooru-v1-20191108-sgd-e30.zip
是预训练模型,Source code
是源代码,前一个是可选的。但是因为我太懒了电脑性能不够好,所以直接使用他的模型了。
据量子位说作者用的是Ryzen 7 1800X + Geforce 1070,花了28天才训练成功,我觉得我电脑撑不住……
把源代码下载下来,解压缩并重命名为DeepDanbooru,然后cd到该文件夹。
因为第一个发行版本作者并没有把requirements.txt
打包进去,所以我们需要手动新建一个txt文档,把以下内容复制进去
Click>=7.0
numpy>=1.16.2
scikit-image>=0.15.0
tensorflow>=2.1.0rc1
requests>=2.22.0
six>=1.13.0
然后运行pip install -r requirements.txt
就可以安装所有需要的包了,当然,你也可以手动一个个pip安装。
安装tensorflow时可能会遇到这两个错误,使用相应的解决方案即可。
ERROR: google-auth 1.10.0 has requirement setuptools>=40.3.0, but you'll have setuptools 39.1.0 which is incompatible. # 错误代码,原因是setuptools版本过低,升级一下即可
pip install --upgrade setuptools # 解决方案
ERROR: Cannot uninstall 'wrapt'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall. # 错误代码
pip install -U --ignore-installed wrapt enum34 simplejson netaddr # 解决方案
然后单独安装tensorflow
pip install tensorflow
ok,环境已经基本配置完毕。接下来就是添加数据集文件夹和项目文件夹。为了图省事,我们就直接把预训练模型deepdanbooru-v1-20191108-sgd-e30.zip
解压到根文件夹,并重命名为project
,不需要数据集了(毕竟也不需要训练)
然后新建一个test
文件夹,作为待检测妹子图存放地,随便放两张进去,运行下面的代码:
# python program.py evaluate-project [your_project_folder] [image_file_path]
python program.py evaluate-project project test
即可享用。
如果你机器够厉害也够有耐心,也可以自己训练,具体来说就是按照第一节所说的在根目录下添加一个数据集文件夹,然后修改project/project.json
中的database_path
这一项,运行下面代码:
# python program.py train-project [your_project_folder]
python program.py train-project project
就可以进行训练。
使用
选了两张图,运行代码测试一下。等待了7、8秒的样子(看来CPU在这方面真的不行啊),结果如下(左边是测试图片,右边是结果):
[album type="photos"]
[]
[/album]
[album type="photos"]
[
]
[/album]
这标签打得还是挺详细的,准确率也蛮高。比如场景元素:katana(武士刀),black_legwear(黑板);服饰:black_legwear(黑色腿袜),school_uniform(学校制服);发型:ponytail(马尾辫);身体:upper_body(上半身)、,crossed_legs(交叠的双腿);动作:unsheathing(出鞘),sitting;表情:smile;甚至还能识别出signature(签名)。
但是第一张图识别成男性是不是有点离谱?在作者的在线测试网站上测试了一下
好吧,置信度更高了,而且标签也变少了……大概网站用的是最早一版训练模型?
看评论区,有人说这个模型大概给服饰分配的权重特别高,而面容的权重不高,所以大概女装大佬会难到AI吧。不过想想现在动漫里画女硬说男的现象也不少见,根据面容来判断性别似乎也有一定问题。
(不是很懂你们二次元.jpg)
后续:突然发现这个模型对于风景图识别也挺好的,感觉可以用来给我收集的其他图片全贴上标签啊。
版权属于:作者名称
本文链接:https://www.sitstars.com/archives/72/
转载时须注明出处及本声明
请问那个program.py是从哪冒出来的
liudao 2022-10-17
作者把文件名改了。
湛师 2023-07-10 回复 @liudao