💻

創薬ちゃん生成チャレンジ参加記

2022/10/07に公開

はじめに

去る9月12日、Twitterでこんな投稿を目にしました。

https://twitter.com/souyakuchan/status/1569302448820621312

創薬ちゃんさん[1]は兼ねてからフォローしており、いろいろと勉強させていただいてたのですが、ちょうど「最近何かと話題の画像生成AIを勉強してみよっかなぁ」と思っていたところで、こうした渡りに船なコンペが開催されるということで、参加してみようと思い至りました。

が、自分自身はAIについてはちょろっとだけ知識はあるものの、生成モデルについては使ったこともないし原理についてもほとんど理解できてない、という状況でした。なので、まずは手を動かして使い方を覚え、その上で原理や理論を学んでいく方針で進めていきました。

ということで参加記を書いていこうかと思いますが、以下注意です。

創薬ちゃん生成チャレンジ (09/12~09/19)

ことはじめ

右も左も分からない状況で、唯一認識できていたのは以下くらいでした。

  • Midjourneyってやつがある (友人とオンライン飲みをしている時に軽く触った)
  • ただしMidjourneyは有償であり、課金しないと生成数に上限がある
  • 何やら無償で使える他のやつもあるくさい

ということで、まずはその辺の調査を実施。
結果、Stable Diffusionがローカル環境でも動かせる無償利用可能な画像生成AIであることが分かり、それを使うため準備に取り掛かりました。

環境準備

ローカル環境で動かすための GUI はいくつか見つかり、その中でも特に手間がかからなそうなNMKD Stable Diffusion GUIを選択しました。
導入手順については以下サイトを参考にしました。
https://pajoca.com/stable-diffusion-gui-nmkd-1-3-0/

つつがなくインストールし、さっそく動かしてみるとエラーが発生。
端的に言えばVRAM 足りなくて枯らしたわと怒られていました……実は、準備の段階でこうなることは予想していました。なぜなら、上記サイトに以下のような記述があったからです。

少ないVRAM使用量で動作するオプションが追加。VRAM 4GB でも512×512画像が生成可能に

誇張して逆に言うと、こういうことになるのかなと。

VRAM 4GB もないクソザコマシンでも動かせるようにしといたぞ!ありがたく思えウジ虫ども!

そして私のマシンのスペックは以下の通りです。

  • OS : Windows 11 Pro
  • CPU : Intel Core i7-7700HQ
  • RAM : 16 GB
  • GPU : GeForce GTX1060 (VRAM: 3GB)

VRAMが4GBにすら至っていないという……
GUI には「低VRAMモードをオンにする」という設定があり、エラー発生時はこれをオンにしていなかったので、設定した後にダメもとで実行してみました。

なんと普通に動いてくれました!
ただし、画像サイズは512x512までしか対応できず(大きくするとVRAM枯れが起こる)、画像1枚の生成時間も3分とかなりカツカツな状況です。とはいえ、これで手元で好き放題生成させられるようになったので、ここから色々と試していくことに。

試行錯誤

この段階での知識としては「プロンプトに欲しい画像の情報を入れればよい」くらいのレベルで、他のパラメータの意味やプロンプトの入れ方のコツなどは皆無。ただ、謎のプライドで「自分が納得できる画像を出すまでは他の参加者のプロンプトは見ない!」と誓っていました。
そんなこんなで暗中模索のままプロンプトをいじくりまわし、ようやく初submitしたのがこちら。


えらくくたびれてる創薬ちゃん

プロンプトは以下の通り。

a beautiful anime girl standing in laboratory, wearing white coat and white shirt and red long tie and black short skirt, black hair, long hair, red streaks of hair, red eyes, highly detailed, digital painting, full body, human face head hair forehead temple face eye eyebrow eyelash eyelid eyeball iris cornea nose cheek mouth lips ear jaw neck upper hand palm finger arm elbow wrist shoulder chest finger

他の参加者のプロンプトは見ない代わりに、プロンプトのコツなどについてまとめたブログなどを(よく考えもせず)参考としていたので、なんかおまじないみたいな単語が羅列されてます……
そして初submitを終えたので、他の参加者の作品もじっくり見てみることにしました。

な、なんだこのkawaiiイラストは!
プロンプトはどうなって……え、え、何この魔法!アタイ知らない!
あとモデルって他にも種類あるの!?

みたいな感じで、私の作品とはまったくレベルの違う、超ステキな作品ばかり。
なんでこうも違うのかと、submitされた画像のALTを見ていると、どうもみんなWaifu Diffusionなるものを使っているらしい、ということを発見。
あっしも使いたいでやんす!ということで調査し、モデルを置き換えて改めて生成。


切れ目がクールな創薬ちゃん

kawaii創薬ちゃん

ちゃんとラボ感のある創薬ちゃん

めっちゃいい画像出ますやん!SUGOI !!
二次絵の出力にフォーカスするため、そういったデータを大量に食わせたモデルであると知り、やはり学習データが重要だなと再認識。
が、残念ながらWaifuの実力に気づいた時にはすでにsubmit期限間近。
本当は色々と試行錯誤してブラッシュアップしたかったものの、最終的にはシードガチャで引けた良作のうち、個人的にもっとも良かったものを最終submitとしました。


『スゴ味』がある創薬ちゃん

a beautiful anime girl in laboratory, wearing white coat and white shirt and red long tie and black short skirt, black hair, long hair, red streaks of hair, red eyes, highly detailed, digital painting

そして結果発表。
https://twitter.com/souyakuchan/status/1572594045242978305

予想通り入賞できなかったものの、多くの知見と好奇心の種をもらいました。
今回はtext2imgのみというレギュレーションだったので使えなかったimg2imgなんかも非常に面白そうだし、これからも学んでいこうと感じました。

ありがとう、創薬ちゃんさん!

ありがとう、Stable diffusion!

……

…………

………………

そして去る9月23日。

https://twitter.com/souyakuchan/status/1572994222063783936

な、なんだってー!
NSFW画像生成とな!ということは、そっ、創薬ちゃんの、あんな姿っ、とか、こんな、姿とかを、作ってもいい、ってこと?ですかい?ハァハァハァハァフォカヌポゥ

……とエキサイトしたものの、さすがに(ワァ~オ💕)な絵を公開するのは気が引けたので、いったんは参加を見送ることにしました。
ただ、後になって「冷静に考えて、露骨にエッチな画像でなくてもNSFWは満たせるよな…?」と気づき、過剰な表現は抑えた形で参加することを決意しました。

環境変更

この段階で、ほかの人の作品や実行環境についてかなり調べており、どうやら今のGUIよりAUTOMATIC1111 WebUIなるものが多機能でよさげだぞ、ということに気づいていました。
ということで、さっそく環境構築。このあたりのサイトを参考にしました。
https://ossan-gamer.net/post-82301/

環境は整ったものの、webui.bat で起動させると通常モードで起動してしまうため、画像生成を実行するとVRAM枯れが発生してしまう状況でした。
調べたところ、webui.pyの起動引数で指定できる(--medvramオプションを入れる)らしいので、結局は以下のような手順で起動するという手段を取りました。

1.venv/Scripts/activate.batを実行して仮想環境に入る
2.python webui.py --medvramで起動

AUTOMATIC1111版の使い方は、例えば以下のサイトでお勉強。
https://gigazine.net/news/20220909-automatic1111-stable-diffusion-webui-prompt-matrix/

XY Plotとかめっちゃ便利。かなりお世話になりました。

試行錯誤(NSFW)

環境も整ったので、どんな絵にするかを検討し始めました。
色んなアイディア(というか妄想)が膨らみましたが、最終的には以下のようなイメージで行こうと決めました。

  • 水着姿のグラビア
    • これくらい普通の絵としてあるけど、まぁ職場で堂々とは見ないよね、くらいのNSFW度
    • オリジナルが着ている白衣を模した、白地に青ラインが入ったデザイン
  • ちょっと照れ気味の表情でこっちを見ている感じで
  • 創薬感は、なんか、ワンチャンついてくれ(お祈り)

ということで、お試しでプロンプトを入れて生成。
ひとまず創薬ちゃんさんの特徴は入れず、上記のイメージが手軽に出せそうかを確認する目的。なお、このタイミングで、実は512x512よりもう少し大きくしても問題ないということに気づき、縦長で出力するようにしています。

唐突に現れた当たりシード。もちろん無加筆無修正

upper body portrait bishoujo 1girl standing wearing blue athletic one-piece swimsuit medium hair collarbone wet water highres

え、すごくない?こんなクオリティで出てくる?
これは期待できる!うおおお!何かしらがパキってきたあああああ!

……と大興奮していたのですが、この後バチコリと壁にぶち当たります。
それが「色指定」の問題です。

色指定に苦しめられる

今回生成しようと試みている画像には4つの色が含まれます。

  • 髪の毛のベースの色 = 黒
  • メッシュの色や目の色 = 赤
  • 水着の下地 = 白
  • 水着のワンポイント = 青
    ということで、プロンプト内に "black", "red", "white", "blue" という色が含まれることになりますが、これが大いに厄介。
    「違うそうじゃない」とばかりに、指定した色が意図しない対象に作用するという現象が発生しまくりました。


下地の色も違うし、青はそこじゃない


質感めっちゃいいけど、意図した配色とはかけ離れてる


惜しいけど青はどこいった?あと水着の形が変

こんな感じで、あっちを立てればこっちが立たず……という状況が続きました。
プロンプトの並び順を変えてみたり、色を示す単語を減らすよう試したり (bacl hair → dark hair みたいな感じ) と試行錯誤しましたが、ほとんど意味を成しませんでした……

そうこうしているうちに期限も近づいてきたため、生成しまくった結果から最もよさそうだったものをSUBMIT。


プールサイドの創薬ちゃん

((black and red multicolored medium hair)) ((streaked hair)) full body of beautiful anime girl standing, :> smile partial lips blush, ((medium breast)), collarbone, groin, thighs, bare legs, covered nipples navel, looking at viewer, water dripping, wet, ((white blue white blue white competition one-piece swimsuit)) poolside

((white blue white blue white competition one-piece swimsuit)) あたりに執念が見え隠れしていますね。残念ながらその願いは届かなかったのですが、表情や構図、破綻のなさなどがもっともよかったので、これを採用しました。
Sampling StepやCFGの値をXY Plotで振ってワンチャン色指定がいい方向に化けないかな、とか試しましたが、あまり奏功しませんでした。ただ、髪色の再現度に関しては、パラメータを振ると改善されることが多かったかな、という印象。


画像サイズがデカくて申し訳ない

今回はルール上、text2imgのみを使うという縛りがあったので大変でしたが、正直、色指定に関してはimg2img使えば一発で解消できるので、プロンプトをいじくりまわす必要はないはず。せっかくなので、おいおい今回生成した画像をベースにimg2imgで理想の画像を作る、というのも試してみたいなぁ。

そんなこんだで結果発表。
Twitterのリンクを張り付けたいのですが、NSFWチャレンジに関してはサークル機能で公開制限されているため叶わず。結果だけ記載すると、準佳作顔面部門に入賞できました!(顔面て)

今回はコンペ参加者が少なめだったということもあってか、何とか滑り込むことができました。煩悩と執念にまみれ、出力フォルダも水着姿の女の子の画像だらけになってしまいましたが(人に見せられない……)最終的な結果につながって非常に満足しています。


煩悩と執念の果て

その他の試行錯誤

色指定のままならなさを実感した検証

1girl wedding dress gloves highres short hair smile

ウェディングドレスを身にまとった女性を描くためのシンプルなプロンプト。
(関係ないけど、これすごくいい絵じゃない?)

1girl blue wedding dress gloves highres short hair smile

青いドレスにしたかったので、プロンプトにblueを追加したところ、手袋だけ青くなって、急に実験感が出てきてしまう悲しい結果に。
これは恐らく、学習データの中で "wedding dress" に紐つく画像のほとんどが白のドレスのものであり「blueのwedding dressって何?ちょっとよくわかんないので取り敢えず白にしときますね」という感じになっちゃったのかと。
一方で "gloves" については実験用のディスポのやつみたいな青い手袋の画像が学習データ内にそれなりにあって「blueのglovesね!それならワイ知ってますわ!」と気を効かせて描いてくれる、という感じなのかなと勝手に想像しています。
逆にwhite wedding dressとわざわざ色指定しなくても、wedding dressとだけ書いておけば勝手に白のものを出力してくれるので、出したい色がモデルのデフォルトの認識みたいな状況であれば、色指定なんて必要ないのかもしれない。

創薬感を出したくて試した検証

苦し紛れですが、六角形の模様が見えたりしてると何となくケミストリーな感じがあるよね!と思い、プロンプトに"hexagon"とか"honeycomb pattern"などをぶっこんで試行。


全然キャラ違うけど、雰囲気はいい感じ


水着の柄として埋め込み成功

お祈りしてシードガチャすればたまによさげな画像が出ますが、だいたい一番大事なキャラの造形が乖離してしまうので、これに関しては早々にあきらめました。無念。

所感

コンペの開始時点でほぼ無知の状態から触り始めたのですが、おかげさまで多くのものを得ることができました。

  • Stable diffusionの使い方
  • 画像生成AIに対する好奇心
  • 創作意欲と学習意欲
  • 副賞でもらった創薬ちゃんさんの秘蔵イラスト
    • ガチNSFWでした。ごっつぁんです🤤

こうした機会がなければ、恐らく「なんか流行ってんだなぁ」くらいで実際に触れることはなかったかと思います。本当にいい経験ができた。感謝します。
ネットを見ていると、img2imgを使った優れたワークフローなども紹介されていたので、今後はそうしたテクニックも学んでいきたいなと思います。

一方で、AIにより生成された画像の扱いや、モデル生成に使われた画像の出自など、何かと問題も残っているのかなと認識しています。
あくまで個人が楽しむ範疇であれば問題ないように思いますが、あとあと困ったことに巻き込まれないよう、技術的な側面だけでなく、法的な面に関してもキャッチアップが必要だなと考えています。

むすびに

本当に技術の進歩は目覚ましく、ついていくのが精一杯です。
この画像生成AIに関しても、そのままだったらビューンとどこかに飛んでいくのを眺めるだけだったかのですが、今回の機会があったおかげで追いかけるモチベーションがわきました。
コンペを開いてくださり本当にありがとうございました、とお伝えしたい。

以上、参加記でした。
読んでいただき、ありがとうございました。

脚注
  1. こういう時「さん」をつけるべきか否かが悩ましい……所謂さかなクン問題。 ↩︎

Discussion