🌐

Stable Diffusion の追加学習に使う画像を集める

目次 (クリックで展開)


学習素材

これさえ集めてしまえばほぼ勝ち。だが、場合によってはめちゃくちゃ集めるのがつらい。苦しい。無理。

なので、同様に学習素材を集めるのに困っている人に役に立つことを願って、学習素材を集めるいくつかの方法を書いておくことにした。

小規模なデータセットの用意

小規模というのは 4枚~1000枚程度である。

美的で高品質な画像を集めるのに使うサイトといえば、たとえばこういうものが馴染み深いと思う

  • Danbooru: タグがすごいし、載っている画像も全体的に高品質(他のと比較するとすごく品質が高いのがわかる)
  • Twitter: 大抵なんでもある
  • Yandex: 比較的美的
  • Unsplash: 綺麗な写真がたくさんある
  • Pinterest: そこまでめっちゃ美的って感じのものが多い訳では無いが、一応使えなくはない(若干つらいが)

有名所のサイトならここらへんが多いだろう。ちなみに、DreamBooth のサンプルに使われている犬の写真は Unsplash の犬が使われている。

short-coated brown and white puppy sitting on floor photo – Free Dog Image on Unsplash

Download this free HD photo of dog, animal, pet and 3388 sichen hwy in Songjiang Qu, China by Alvan Nee (@alvannee)

unsplash.com

この程度であれば別に手動で右クリック→別名で保存してもいいのだが、ふつうにつらいので自動化したい。

Danbooru

Danbooru: Anime Image Board

Danbooru is the original anime image booru. Search millions of anime pictures categorized by thousands of tags.

danbooru.donmai.us

こういう Image Board 系のサイトには大抵ツールが存在するのでいくつか紹介する。

GitHub - mikf/gallery-dl: Command-line program to download image galleries and collections from several image hosting sites

Command-line program to download image galleries and collections from several image hosting sites - GitHub - mikf/gallery-dl: Command-line program to download image galleries and collections from several image hosting sites

github.com

gallery-dl といって、いろんなサイトに対応している画像ダウンローダー。Pixivとかも対応してる。

正直使ったことがないので詳しいことはしらない。

GitHub - Bionus/imgbrd-grabber: Very customizable imageboard/booru downloader with powerful filenaming features.

Very customizable imageboard/booru downloader with powerful filenaming features. - GitHub - Bionus/imgbrd-grabber: Very customizable imageboard/booru downloader with powerful filenaming features.

github.com

Grabber。こちらも同様に Image Board 系のサイトからダウンロードするツールだが、こちらは GUI がついているので扱いやすいかもしれない。使ったことないので知らないが。

GitHub - p1atdev/booru-wizard

Contribute to p1atdev/booru-wizard development by creating an account on GitHub.

github.com

booru-wizard。booru 系のサイトから画像とキャプションをダウンロードできるツール。自分はこれをたいてい使っている。動作確認してるのは danbooru と gelbooru のみ。ほかのサイトでの動作は保証しない (私に需要ができたら対応する)。

個人的にこのツールでおすすめしたい機能がキャプションのダウンロード機能で、ツールをわざわざ自作したのもここを快適にできるようにするためだった。このツールでダウンロードする際、自動ですべてのタグから _ が除去されたり、タグに関するオプションをいくつか指定できて、先頭にタグを追加したりタグを除外したりできる。

例えば、hatsune_miku solo score:>100 (ここは danbooru での検索と同様にする必要がある) という条件で 100枚 ダウンロードしたい場合はこのようになる。

./booru "hatsune_miku solo score:>100" --limit 100 \
    --tags --artist false --character false \
    --additional "miku" --exclude "solo" \
    --output ./hatsune_miku --batch 10

(--artist false はアーティスト名の除外、--character false はキャラクタータグの除外)

このように指定してダウンロードすれば、アーティストタグ、キャラクタータグ、solo を除外して、先頭に miku をつけた状態でキャプションファイルが作成される。

miku, sensitive, goodsmile racing, vocaloid, 1girl, alternate breast size, aqua eyes, aqua hair, 以下略

このように、カンマで区切られた状態で出てくるのでそのまま追加学習に使いやすいと思う。goodsmile racing, vocaloid は版権タグであり、これを除外したい場合は --copyright false を追加すると除外される。

(注意点として、 --artist--copyright--character--meta のオプションは danbooru でしか効かない。gelbooru などはタグが雑に一つに収まっているのでここの判定ができない)

Twitter

Twitter. It’s what’s happening / Twitter

From breaking news and entertainment to sports and politics, get the full story with all the live commentary.

twitter.com

Twitter はマジでいろんな画像があるが、目的の画像をたくさん集めたいとなるとちょっとむずかしい。
ハッシュタグや特定のワードで検索ワードを少し工夫する必要があったりする。

たとえば、アクリルフィギュアの画像を添付したツイートを検索したいとする。この場合検索したいのはアクリルフィギュアだが、単に「アクリルフィギュア」と検索しても、広報の「~のアクリルフィギュアが新規登場!」とか「アクリルフィギュア予約開始!」のようなツイートも含まれてしまうので、「アクリルフィギュア 届いた」や、「アクリルフィギュア できた」で検索をかけることで、誰かが実際にアクリルフィギュアを購入してそれを撮影したようなツイートが多くヒットすることが予想される。

このように若干検索ワードに癖があるが、そこをどうにかしたらかなりニッチな画像も取得することができるようになる。

また、画像の一括ダウンロードは自動化したいので、私はこのツールを使っている。自作。

GitHub - p1atdev/twimedia-wizard: Twitter Media Downloader

Twitter Media Downloader. Contribute to p1atdev/twimedia-wizard development by creating an account on GitHub.

github.com

このようにして使う

twimedia search "アクリルフィギュア 届いた" --max 50  --dump -o ./output.json

これで検索に引っかかったツイートの情報を一度JSONに出力して、

twimedia download ./output.json -o ./output --min-favorites 10 --min-retweets 1 

のように最低いいね数とリツイート数を指定しながら画像をダウンロードできる。

一応 --caption オプションをつけると、ツイートに付属しているテキストをキャプションとして使うことができるが、精度が悪いので非推奨。

また、この検索では実際の未ログイン時の Web アプリでの検索と同じ範囲までしか検索できないため、検索できるツイート数や、一部センシティブ設定されたツイートは取得できないようになっている。

上記では検索ワードに注目したが、他にも特定の種類のユーザーに注目すると検索をするよりも高精度に特定の種類の画像が手に入ることがある。

たとえば、@LolitaWardrobe というアカウントは、ロリータファッションの服を販売している店の広報アカウントで、非常に面白い服の画像をツイートしている。

このユーザーのツイートの画像を取得すれば、ロリータファッションの学習素材に使うことができるだろう。

先程のツールを使って以下のようにできる。

twimedia user "LolitaWardrobe"  --max 50  --dump -o ./output.json

そして、

twimedia download ./output.json -o ./output --min-favorites 10 --min-retweets 1 

とすれば50枚のロリータファッションの画像がダウンロードされる。特定ユーザーのツイート画像のダウンロードは、未ログイン時でもほぼすべてのツイートが取得できるため、検索と比べて多くの画像が取得できる。

このように、探し方を少し工夫するとより効果的にTwitterから画像を取得できる。

Yandex

Beautiful Free Images & Pictures | Unsplash

Beautiful, free images and photos that you can download and use for any project. Better than any royalty free or stock photos.

unsplash.com

Yandex はロシア製の検索エンジンだが、なぜか画像検索でかなり美的な画像が多く出てくる。

たとえば、Google で portrait と検索した場合、

スクリーンショット2023-04-14135703.png

このようになるが、Yandex では、

スクリーンショット2023-04-14135921.png

このようになる。

日本語の検索は弱い部分があるが、写真などを少ない規模で集めたい場合は適しているかもしれない。

一応ダウンロードツールは作ってあるのだが、実装が雑すぎる(のと、多分簡単につくれるので)ちょっと公開しない。気が向いたら gist に上げるかもしれない。

Unsplash

Beautiful Free Images & Pictures | Unsplash

Beautiful, free images and photos that you can download and use for any project. Better than any royalty free or stock photos.

unsplash.com

かなり美的な写真が沢山あるフリー画像サイト。追加学習目的ではなくても普通に便利なので知っておくとQOLが向上する。

スクリーンショット2023-04-14141513.png

API が公開されているので、それ使ってダウンロードするのが良いと思う。

Pinterest

私はこのサイトが嫌い。重いし非常に使いづらい。なぜトップページにアクセスしたときに、検索ボックスがないの?検索させる気はないの?そんなにログインして欲しいの?ログイン大好きなの??

検索をするには https://www.pinterest.jp/ideas/ にアクセスする必要がある。

また、ブラウザを日本設定でアクセスすると、.com の方に強制的にリダイレクトされてしまう不親切設計となっている。

スクリーンショット2023-04-14141933.png

danbooru と同じく、利用者がいいと思ったものをピンする仕組みなので、普通の検索エンジンで出てくる写真と比べれば美的な感じのものが多い。


とまあ、小規模の画像を探すならここらへんが手軽だろう。

大規模なデータセットの用意

さて、(個人的に)わりと難しいのが大規模なデータセット(数万枚以上)の用意だ。

ControlNet などをちゃんとトレーニングしたいとなると、結構画像を集めるのに苦労する。

なので、私の知っている大規模なデータセットとその取得法を書いておく。

img2dataset

GitHub - rom1504/img2dataset: Easily turn large sets of image urls to an image dataset. Can download, resize and package 100M urls in 20h on one machine.

Easily turn large sets of image urls to an image dataset. Can download, resize and package 100M urls in 20h on one machine. - GitHub - rom1504/img2dataset: Easily turn large sets of image urls to an image dataset. Can download, resize and package 100M urls in 20h on one machine.

github.com

img2datasetは大規模なデータセットをダウンロードするためのツールである。

標準で以下のデータセットのダウンロードに対応している。

(Kは1000、Mは100万、Bは1億、リンクはそれぞれの元プロジェクトへのリンク。一部のLAIONはダウンロード時間不明なので推測。)

名前 説明 ダウンロード所要時間
MS-COCO 600K Microsoft の作ったデータセットで、キャプションやセグメンテーションなどのいろいろなアノテーションがついている 10分
SBU Captions 860K 画像とキャプションのペア 20分
CC3M 3M Google の作ったデータセットで、画像とキャプションのペア 1時間
CC12M 12M 画像とキャプションのペア 5時間
LAION400M 400M LAION の画像とキャプションのペア (Common Crawlより) 3.5日
LAION5B 5B 同上 一週間
LAION-Aesthetic 120M LAION 5B の中から美的なやつに絞ったもの 多分1日?
LAION-Art 8M LAION-Aestheticと似た感じで、さらに美的なやつに絞ったもの 3時間くらい?
LAION-High-Resolution 170M LAION5B の中から1024x1024以上のサイズのものに絞ったもの 2日くらい?
LAION-Face 50M LAION5B の中から、人間の顔が写ったものに絞ったもの 16時間くらい?
COYO-700M 747M LAION系と同じように Common Crawl をもとにしているが、役に立たないキャプションがついているものを除外している 3日くらい?

画像量やダウンロードにかかる時間を見ればわかるだろうが、これは気軽にダウンロードできるようなものではない。

ためしに LAION-Art をダウンロードしてみることにした。SDv2.1向けの ControlNet を作っている thibaud さんはこれを使っているらしい。

ダウンロード方法の解説 に従ってダウンロードする。

まずは img2dataset ライブラリが必要になるのでインストール

pip install img2dataset

Hugging Face にある、画像の URL などが入ったファイルをダウンロードしてから、ローカルで実際にその URL にアクセスしてダウンロードするという形式になっている。

wget https://huggingface.co/datasets/laion/laion-art/resolve/main/laion-art.parquet

parquet という形式のファイルを初めてみたのだが、CSVやJSONよりもクエリ処理が高速なファイル形式らしい。(参考)

img2dataset を使ってダウンロードする

img2dataset --url_list ./laion-art.parquet --input_format "parquet" \
         --url_col "URL" --caption_col "TEXT" --output_format webdataset \
           --output_folder laion-high-resolution --processes_count 16 --thread_count 64 --image_size 384 \
            --resize_only_if_bigger=True --resize_mode="keep_ratio" --skip_reencode=True \
             --save_additional_columns '["similarity","hash","punsafe","pwatermark","aesthetic","LANGUAGE"]' --enable_wandb True

よくわからんがこんな感じでダウンロードできる。WandB を有効にしておかないと、どれくらいダウンロードされたのかわからなくてめちゃくちゃ不安になるので有効にするのを推奨する。

なお、事前にログインしておく必要がある

wandb login

スクリーンショット2023-04-14150444.png

wandb でこのようにダウンロードされた画像数が記録されて、オンラインから確認できる。

実行中はめちゃくちゃ帯域が圧迫されるので少し注意。他のファイルのダウンロードはできなくなると思っていい。

実行してしばらく放置(マジでこの間全然ログが出ないので不安になるが、放置して良い)すると、こんな感じで .tar ファイルがいっぱい作成される。

スクリーンショット2023-04-14150553.png

この.tar ファイルを解凍すると、中に画像とキャプション、メタデータが書かれたJSONが入っている。

スクリーンショット2023-04-14150753.png

一つの .tar ごとに大体 3000 枚ちょいが入っていた。ただ、画像の解像度がわりと低くて、512x512 以上に絞ったらそれぞれ 1000 枚ちょいずつになった。


ちなみに ControlNet の学習には Canny に 3M つかわれてる。やべーよ。圧倒的ストレージと計算資源... 欲しい...

InstructPix2Pixのデータセット

GitHub - timothybrooks/instruct-pix2pix

Contribute to timothybrooks/instruct-pix2pix development by creating an account on GitHub.

github.com

InstructPix2Pix をトレーニングするのに使われたデータセット。

変換前と変換に使うキャプション、変換後の画像が含まれる。

ControlNet の InstructPix2Pix はこれを使ってトレーニングされた。

DiffusionDB (14M)

poloclub/diffusiondb · Datasets at Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

Stable Diffusion で生成された画像と生成に使われたプロンプト、シード値などのセットが 14M ある。


とりあえず今はこれくらい。あとでなにか思い出したら追加する。