目次 (クリックで展開)
これさえ集めてしまえばほぼ勝ち。だが、場合によってはめちゃくちゃ集めるのがつらい。苦しい。無理。
なので、同様に学習素材を集めるのに困っている人に役に立つことを願って、学習素材を集めるいくつかの方法を書いておくことにした。
小規模というのは 4枚~1000枚程度である。
美的で高品質な画像を集めるのに使うサイトといえば、たとえばこういうものが馴染み深いと思う
有名所のサイトならここらへんが多いだろう。ちなみに、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: 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. 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 というアカウントは、ロリータファッションの服を販売している店の広報アカウントで、非常に面白い服の画像をツイートしている。
Know Myself And Rule My World #MilitaryLolita
— LolitaWardrobe (@LolitaWardrobe) March 30, 2023
◆ Outfits Shopping Link >>> https://t.co/3Ox78exbpx pic.twitter.com/NzRvLEOy2Z
このユーザーのツイートの画像を取得すれば、ロリータファッションの学習素材に使うことができるだろう。
先程のツールを使って以下のようにできる。
twimedia user "LolitaWardrobe" --max 50 --dump -o ./output.json
そして、
twimedia download ./output.json -o ./output --min-favorites 10 --min-retweets 1
とすれば50枚のロリータファッションの画像がダウンロードされる。特定ユーザーのツイート画像のダウンロードは、未ログイン時でもほぼすべてのツイートが取得できるため、検索と比べて多くの画像が取得できる。
このように、探し方を少し工夫するとより効果的にTwitterから画像を取得できる。
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
と検索した場合、
このようになるが、Yandex では、
このようになる。
日本語の検索は弱い部分があるが、写真などを少ない規模で集めたい場合は適しているかもしれない。
一応ダウンロードツールは作ってあるのだが、実装が雑すぎる(のと、多分簡単につくれるので)ちょっと公開しない。気が向いたら gist に上げるかもしれない。
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が向上する。
API が公開されているので、それ使ってダウンロードするのが良いと思う。
私はこのサイトが嫌い。重いし非常に使いづらい。なぜトップページにアクセスしたときに、検索ボックスがないの?検索させる気はないの?そんなにログインして欲しいの?ログイン大好きなの??
検索をするには https://www.pinterest.jp/ideas/ にアクセスする必要がある。
また、ブラウザを日本設定でアクセスすると、.com
の方に強制的にリダイレクトされてしまう不親切設計となっている。
danbooru と同じく、利用者がいいと思ったものをピンする仕組みなので、普通の検索エンジンで出てくる写真と比べれば美的な感じのものが多い。
とまあ、小規模の画像を探すならここらへんが手軽だろう。
さて、(個人的に)わりと難しいのが大規模なデータセット(数万枚以上)の用意だ。
ControlNet などをちゃんとトレーニングしたいとなると、結構画像を集めるのに苦労する。
なので、私の知っている大規模なデータセットとその取得法を書いておく。
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
wandb でこのようにダウンロードされた画像数が記録されて、オンラインから確認できる。
実行中はめちゃくちゃ帯域が圧迫されるので少し注意。他のファイルのダウンロードはできなくなると思っていい。
実行してしばらく放置(マジでこの間全然ログが出ないので不安になるが、放置して良い)すると、こんな感じで .tar
ファイルがいっぱい作成される。
この.tar
ファイルを解凍すると、中に画像とキャプション、メタデータが書かれたJSONが入っている。
一つの .tar
ごとに大体 3000 枚ちょいが入っていた。ただ、画像の解像度がわりと低くて、512x512 以上に絞ったらそれぞれ 1000 枚ちょいずつになった。
ちなみに ControlNet の学習には Canny に 3M つかわれてる。やべーよ。圧倒的ストレージと計算資源... 欲しい...
GitHub - timothybrooks/instruct-pix2pix
Contribute to timothybrooks/instruct-pix2pix development by creating an account on GitHub.
github.com
InstructPix2Pix をトレーニングするのに使われたデータセット。
変換前と変換に使うキャプション、変換後の画像が含まれる。
ControlNet の InstructPix2Pix はこれを使ってトレーニングされた。
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 ある。
とりあえず今はこれくらい。あとでなにか思い出したら追加する。