はじめに
- 本資料の狙い
- Diffusion Modelの一つである、Stable Diffusionの使い方や挙動をお伝えすること。
- お伝えした事柄をもとに、Diffusion Modelの詳しい理屈を学ぶ足がかりをつくること。
- Stable Diffusionに関する情報収集元をいくつかお知らせすること。
- 本資料で狙わないこと
- Diffusion Modelの詳しい動作原理を理解できるようになること。
(とはいえ、モデルを使うのに最低限必要だった部分は説明します)
- Diffusion Modelの詳しい動作原理を理解できるようになること。
最低限知るべきDiffusion Modelの理屈
以下のページを使って説明する。
https://eng-blog.iij.ad.jp/archives/14969
Stable Diffusionとは
- Stability.Ai社が作成したDiffusion Modelの一つであり、HuggingFaceで無償公開されているもの。
- Stable Diffusionでどんな絵がかけるかについては、日本語版Wikipediaが割によくまとまっている。
https://ja.wikipedia.org/wiki/Stable_Diffusion - この他、Stable Diffusionで描かれた絵はhttps://lexica.art/で検索できる。
- Stable Diffusionでどんな絵がかけるかについては、日本語版Wikipediaが割によくまとまっている。
stable-diffusion-webui-dockerとは
-
もともとstable-diffusion-webuiというGUIアプリが存在し、それをDockerで動かせるようにしたもの。
-
Docker環境さえあれば、Gitの内容をクローンしたあと何も考えずにインストールできる。CPUだけでも動くが、GPU対応済みの環境がベター。VRAMは8GBあれば十分。
- 環境構築コマンド
docker compose --profile download up --build
- 起動コマンド
- --buildオプションは更新時のみ必須。
docker compose --profile auto up --build
-
起動ができたら、http://localhost:7860/にアクセスする。
stable-diffusion-webuiの機能
stable-diffusion-webuiはSPA(single page application)になっており、各機能はページ内のタブに分かれて提供されている。
なお、このUIは機械学習ベースのアプリ向けのGUIフレームワークであるgradioで作られている。
以下、各機能でできることの概略を説明していく。
txt2img
txt2imgとは、入力文をヒントにして画像を生成する機能である。学習で用いたコーパスがほぼ英語なので、入力文も基本は英語にする必要がある。
日本の有名なネットミームを英訳してtxt2imgにかけたところ、下記のような絵が生成できた。
img2img
img2imgとは、ヒントの画像に似た色味の画像を生成する機能である。画像に加えてtxt2img同様の入力文を与えることもできる。
下記の例では、先のガンジーの絵に似た画像を生成している。
inpaint
img2imgにはinpaintという機能があり、元画像とそのマスキング範囲を白塗りにした画像を用意して、白塗り範囲を差し替えることもできる。
下記の例では、「いらすとや」のフリー素材にinpaintを適用し、メガネ姿に差し替えている。
- 元画像(https://www.irasutoya.com/2015/06/blog-post_332.html)
- マスク画像
- 【参考】マスク画像を元画像に重ねたイメージ(この説明のために作った画像で、実際には作成不要)
- 入力文
- The man wearing glasses
- inpaintでできた画像
その他の機能
その他の機能として、以下3点がある。
- Extras: 作った画像の超解像化
- PNG Info: PNG画像のメタデータ閲覧
- Setting: 出力画像のデフォルトフォーマットや、画像補正に使うアルゴリズムの設定などができる
実は22/11/9時点では既存機能のオプションが大幅に増えているが、基本的なところは変わらない。
もっと言えば追加学習などの新機能も相当増えているので、是非試していただきたい。(私もこれから試します)
各機能の詳細な使い方
以下のページを使って説明する。(古い版の内容に基づくのはご容赦ください)
https://note.com/npaka/n/nc8b0e9a91d97
さらなる使いこなしに必要な資料
- stable-diffusion-webuiの公式マニュアル
-
日本語版GIGAZINEの特集記事
- Stable Diffusionまわりの最新機能を詳しく追っており、週に何本も詳しい記事が出る。
- 特にStable Diffusionをうまく使いこなすための関連ツールの解説に詳しい。
-
日刊 画像生成AI
- Stable Diffusionに限らず、画像生成AI全般の最新ニュースが読める。
- 作者の「やまかず」さんと私は別人。念のため。
-
サイボウズラボ西尾さんのStable Diffusion解説資料
- 理論の話にちょっと踏み込んでいます。
Stable Diffusionの問題点
Stable Diffusionは非常に強力なモデルである一方、コーパスの内容に起因すると思しき問題もみられる。
ここでは私が見つけた問題点を2点取り上げる。
問題1.アジア人の生成が苦手
txt2imgに"〇〇 in a Kimono"というクエリを入れる場合を考える。
ここで〇〇の部分を色々と変えてみたとき、本人の顔の再現度合いに格差が生じる。
- "Emma Watson in a Kimono"
- "Takeshi Kitano in a Kimono"
- "Aragaki Yui in a Kimono"
人によって顔の再現度が異なる正確な理由は不明だが、おそらく学習に使われたLAION 5Bコーパスに含まれる当人データのサンプルサイズや、キャプションの正確さに由来するのではないかと考える。
- 顔の再現度がサンプルサイズに由来すると予想した理由
- キャプション自体が正しくても、サンプルサイズが少ないとその人固有の細かい特徴を学びづらくなり、そっくりな別人が生成されやすくなりそうだから。
- 同じく、キャプションの正確さに由来すると予想した理由
- ある人の名前が別人の写真に間違ってキャプションされているほど様々な人の特徴を誤って学んでしまい、誰にもあまり似ていない人が生成されやすくなりそうだから。
コーパスの調査
現状ではクエリに対応したデータのサンプルサイズ算出ができる機構がないので、キャプションの正確さについてのみ目視で調査を行った。
この調査では、有志作成のLAIONコーパス検索エンジン※を使ってローマ字の人名を検索した。
※https://rom1504.github.io/clip-retrieval/?back=https%3A%2F%2Fknn5.laion.ai&index=laion5B&useMclip=false
ここでは原則、コーパスの検索結果の内容を文章で紹介する。画像やキャプションに若干不適切なものが混ざっているため。
- Emma Watson(エマ・ワトソンさん)
- コーパスでは、雑誌の表紙や映画のレセプションパーティーでの本人画像が中心に見つかる。
- Kitano Takeshi(北野武さん)
- 宣材写真のような本人画像が殆どを占めるが、ときおり國村隼さんなど「たけし似」とされる人が混ざっている。
- Aragaki Yui(新垣結衣さん)
- コーパスには、吉岡里帆さんや波瑠さんといった本人と同年代の女優の画像が半数程を占めている。
他の人物についても同様に調査を行ったが、コーパスのキャプションに関しては欧米圏の有名人ほど正確であり、正確にキャプションされた人ほど生成画像でも正確に顔が再現される傾向があった。したがって、意図した構図・事物が生成されるかどうかを予め見積もる上では、入力文に含まれる語をコーパス検索にかけてその語にふさわしい画像がどれだけヒットするかを確認するのが有効ではないかと予想される。
以下、コーパスと生成画像の傾向をいくつか場合分けして詳述する。
-
欧米圏で著名な、欧米のセレブ・ハリウッドスター
-
欧米圏で著名な日本人
-
日本でだけ著名な人
問題2.倫理的な問題
現状のStable Diffusionをそのまま使うと、倫理的に不適切な出力をいくらでも出せてしまう。理由は以下2点。
- 1.学習に使われたコーパスであるLAION 5Gに、そもそも不適切な画像やキャプションが混在しているため。
- Stable Diffusion 2以降は、不適切な学習データを除去して学習することになった。
- 2.不適切な画像を学習しなくても、問題のある画像を作れてしまうため。
- 例:inpaintによる元画像の偽造
- 先に見せた通り、元ファイルの一部をマスキングしてinpaintをすれば簡単にフェイク画像が作れてしまう。
- 例:報道画像の偽造
- コーパスの段階で各国の水害の報道写真が含まれているので、"flooding in Japan"という入力文から簡単に浸水した日本家屋の画像が捏造できる(実際、これを公開して問題になった人もいる)
- 例:inpaintによる元画像の偽造
まとめ
- 無償・有償問わずDiffusion Modelが普及したお陰で、従来技術に比べて所望の画像を圧倒的に作りやすくなったのは確か。
- 他方、バージョン1系のStable Diffusionを業務でそのまま使うには倫理的な問題がありすぎる。
- バージョン2系からはいわゆるNSFW画像や有名人の画像がコーパスから除外されたが、これにより正確な人物描画がしづらいケースが増えることが懸念されている。
さらなる応用について
- 画像生成での応用
- 原理上は、画像に限らず多様なフォーマットにも応用できそう。
- Diffusion Model自体は元データに付加したガウシアンノイズを除去していく仕組みなので。
-
テーブルデータ合成に応用したとのプレプリントを早速発見。
- 合成データの学習にDiffusion Modelを使ったところ、従来技術であるTVAEで合成したデータを使うよりもテストの精度が全般的に上回る傾向があったとのこと。
追記
下記の参考記事に従って入力文を工夫したところ、雑誌やWeb広告に出てきそうな日本人女性を生成することができました。
Stable Diffusionでは日本の有名人の顔を再現しづらい傾向はありましたが、いわゆるモデル顔の特徴は掴めているように思います。
人物写真を広告に使うには、カメラマンや被写体の方が広告利用可としている原画を素材サイトで購入する必要がありますが、これからはAIで生成する時代になるのかもしれません。
以上