画像生成AIはほとんど"共産主義"だ。2022年の夏から(本当は、もっと前からそこにいたのだけれど)インターネットを徘徊し始めたこの妖怪の理論的な仕組みでさえも理解している人間はそう多くないのだけれど、何やら大きな力を、いくつかの権益を永久に破壊し、昨日まで生きていた世界を否応なしに過去にしてしまうような力を持っていること、しかもその力は凡そ社会の最底辺にしか見えなかったクズどもにも分け与えられてしまうらしいぞ、ということを大体の人々がわかっているために、みんながみんな銘々勝手に床屋政談をやるネタになっている。実に好ましい状況だ!彼らが本当に画像生成AIのことを理解しているんなら、闊達な議論が起こること間違いないんだからな。
君!君もこのテの議論に参画したいこと請け合いだろう。自分の依って立つべき論拠を憶測で埋め合わせる無責任な恥知らずとしてではなく、実際に、人間の手がどのように動いて(驚くべきことに、今日の社会をつくる人工物のうち、人間の行動から生み出されていないものなど一つもないのだ!)この状況を作り出しているのか、まあ多少なりとも知っている側の人間として。そこでここでは、インターネットをより衛生的な場所にするためのひとつの努力として、Nijijourneyを用いた画像生成、いわゆる「AI絵」の作業に存在している細部とノウハウについて、具体的な工程を辿るAfter Action Report: AARの形で紹介させていただくことにする。
じゃ、ちょっと付き合ってくれ。
目標設定
使用する手法
こういう感じの下半身多脚メカニカル・ケンタウロス美少女を作りたい。かっこよさとかわいさが合わされば最強に見えるだろうから。しかし、ここには一つ克服するべき課題がある。Nijijourneyのt2i*1は複合的なコンテクストを同時並行して処理するのが苦手で、単にプロンプトで「上半身が人間、下半身が機械」と指定するだけでは両方の指令が画像全体で"混合"してしまい、求める結果は得られない。
そこで今回はinpaintingを用いる。これはもともと欠損・劣化などによって一部が欠けている写真や絵画を復元することを指す用語だが、AIによる画像生成の文脈では、このように、画像の一部を選択的にそぎ落とし、それ以外の部分のコンテクストを元に適当な生成画像で穴を埋める手法のことを意味する。
これを応用すれば、下絵生成時と、inpaintingによる部分の書き換え時に異なるテキストプロンプトを投入することで、画像の部分ごとに異なるコンテクストを持つ複合的な画像の生成が可能になる。
今回はこの手法を用い、ロボの下半身を生成してからinpaintingで美少女の上体を生やすことで、所定のメカニカル・ケンタウロスを生成することを目標とする。
実工程
多脚ロボットの出力(1回目)
プロンプト発掘
まずは下絵にあたる多脚ロボットを出力しよう。上半身の美少女を先に出力してもよさそうなところではあるが、先に画面に美少女が存在すると、萌え絵出力に特化しているNijijorneyは美少女の文脈を優先してしまい、機械的な要素を後から追加することが難しくなってしまうのだ。
後から上半分を置換する画面構成を考えて、出力画像は縦長にする。
まずは適当にやってみよう。普段使っているnijijourney.v5のcuteスタイルで試しに出力してみる。
てんでダメ。ここで使用モデルを切り替えて、新しく追加されたv6を用いてみる。
悪くない。が、多脚にしたい。
プロンプトを多少弄ってもうまくいかないのでアスペクト比を変えてみる。nijijourneyは画面全体の構成を考えて出力を行ってくれるので、これで結構結果が変わったりする。
悪くない。が、25%では歩留まりとしては低い。やはりプロンプトの側からのアプローチが必要そうだ。ここで、"quaduped"や"four legs"のような間接的な形容*3ではなく、より直接的に画像のイメージと結びついた"spidertron"を入れてみる。nijijourneyのデータセットがウェブ全体からのスクレイピングで構成されているならFactorioなどに出てくるspidertronの画像を学習したことがあるかもしれないし、そうでなくてもspiderとあの特徴的な多脚の骨格は結び付けて考えられるはずだからだ。
うまくいったようだ。アスペクト比を戻してみる。
こりゃあいい。方針はおおむね定まったので、プロンプトを微調整しながら大量に生成を繰り返し、偶然いいものが出てくるのを待つ。
いろいろできる
これだ!
脚部が画面の下半分に寄っていて上半分を書き換えるのに十分な余白があり、デザインとしても悪くなく、画角も高すぎず低すぎずで等身大感があってちょうどいい。
なのでこれを書き換えようとしたのだが──nijijourney.v6はまだアルファ版で、inpaintingは利用できなかった。
なのでどうすればいいかというと、つまり、モデルをnijijourney.v5に変更したうえで全部作り直せばいいのだ。これは失敗ではありません、画像生成をやるうえでは何だって楽しいアクシデントなんですからね。
プロンプト発掘(2回目)
ゼロからの再出発ではない。"spidertron"がカッコイイ多脚ロボを吐かせるのに有効だったという発見はあるし、v5でもそれは変わらないみたいだ。
……ある程度は。
プロンプトは既に固まっている。このままいくつか生成してみよう。
あまりいい画像が出ない。上半身を後から書き換える都合上、脚部が画面の下半分に収まってくれないと余白が確保できなくて困るのだ。ここはあえて発想を逆転し、アスペクト比を横に伸ばしてみる。ロボが潰れてイイ感じになるかもしれない。もちろんならないかもしれないが、その場合は「この方法ではうまくいかない」ということがわかるので、決して失敗ではない。
悪くない。続けよう。
これ、かなりいいんじゃないか。このままだと余白が確保できないので1回outpaintingをかませて周りを広げる。
準備は整った。いざ、脚部にツインテ美少女を据え付けるときだ!
上半身の出力(1回目)
プロンプト発掘
とりあえずは適当なプロンプトを突っ込んでみる。ここでいう"適当"はproperの意であり、数十回の美少女生成(の背後に潜む無数のプロンプト廃坑)を経て私が構成した秘伝のタレである。
きっしょ
問題点を整理しよう。下半身のメカ部分と上半身にあたるべき部分の接合がなめらかに生成されていないのが一番の問題で、それの大きな理由は、顔が大きく生成されすぎ、胴体を生成する余白が確保されていないことにある。生成AIは中途半端に人間的なので、twintailとかbangsなどで頭周辺の情報を多く指定すると、頭が主題だと理解するのか(非自明な擬人化)、頭を大きく書くようになるのだ。
このような問題はプロンプトで解決できる。今回の場合は"folded arm"を組み込み、腕の生成を強要すればいい。そうすれば連結して胴体部分も生成されることだろう!
ごくわずかに可能性は感じるし、素晴らしい結果だ。これ以上ここにリソースを追加しても無意味だろうという有意義な情報が得られたからだ。
もちろんこれは失敗ではない。アスペクト比が1:1では、やはり上半身を書き換えるのに十分な余白を確保するのが難しいことがわかっただけだ。
多脚ロボットの出力(2回目)
プロンプト発掘
アスペクト比を2:3に戻し、一歩戻ってロボットの生成を再開する。どうしてもロボの背が高くなるので下半身の脚部も長くなりがちだという問題があるが、問題をプロンプトの試行錯誤で解決できないと断言するほどにはリソースを投下していないので、する。
こいつはなかなかいいんじゃないか。上方向に十分な余白があり、上半分と下半分がくびれた関節でつながれているので、inpaintingの境界線をうまく決めればいい感じに接合できそうだ。
上半身の出力(2回目)
プロンプト発掘
まずは試行。
folded armの知見は生きている。アス比が長くなったことで構図の幅も申し分ない。プロンプトもこれでいいだろう。このままいくつか回してみて、いいのをツモらないか見てみよう。
いまいちパッとしない。
これは経験から来る勘でしかないが、ここでさらに何十回粘っても満足する品質のものは得られないと思った。理屈づけはできる。まず、元絵の上半身と下半身の境目がくっきりしすぎている。ために、上半身だけを挿げ替えても、雑コラのような、非連続性が目についてしまう。次いで使用モデルも下がv5のoriginal、上がv5のcuteと違うので、そこでも非連続性が生じている。何より、脚が二次元的にのぺっとしすぎていて、構図として面白みがない。
もちろんこれも失敗ではない。全ては楽しいアクシデントなんですからね。
多脚ロボットの出力(3回目)
プロンプト発掘
下半身と上半身で同じモデルを使った方がよいということがわかった。上半身の美少女をoriginalで生成してもはっきり言ってかわいくないので、やはりcuteモデルでロボットを吐かせるしかないようだ。最初はcuteでやったら破綻したが、今回はspidertronがある。
試してみよう。
さっきまでと違ってロボットの絵として見たら全然かっこよくないが、下半分の脚だけを見るなら悪くないものが出てくる……気がする。まだ楽しいアクシデントではない。プロンプト鉱山を掘削しながら粘ってみよう。
i9.png
これがいいだろう。
邪魔な人間が映りこんでいるし、胴体部分の形状もなめらかではないので接合には不安が残るが、構図には文句が無い。上記の問題はinpaintingで部分的に再生成をかけて解決してしまえばいい。
プロンプトも十分に洗練されていると感じるし(非自明)、あとは試行回数をかければ解決できるはずだ。何枚になるのかわからないが、ちょっと付き合ってもらおうか。
人が映り込みすぎている。たぶんfat thick legが悪さをしているので、取り除いてみる。
出力の質が変わった。これはゴーサインと見ていいだろう。
これでいいだろう。
脚の下の人がいた空洞がうまく処理されているし、脚部のコア上部、側面のあたりがなめらかな曲線になっている。これが腰になるようにうまく接合させてやればなめらかに人間の上半身と機械の下半身を繋げられるはずだ。たぶん。おそらく。もしかすると。
上半身の出力(3回目)
では実際にやってみる。そろそろ終わらせたくなってきたところだ。プロンプトももうある程度は練られているが、試行回数を重ねながら調整していく。ロボットのような無機物に比べて人間はわずかにタッチが変わる、あるいは乱数がズレるだけでも絵の印象が大きく変わるので、プロンプトの修正作業にもある程度の試行回数を割いていく必要が出てくる。
まだ粘れるので粘っていく。
なんか物足りず、面白くない。たぶん下半身がグワーッと開いてるのに対して上半身が腕を組んで縮こまっているからバランスが崩れていて面白くないんだと思う。腕を組ませるのをやめてV signを入れ、動きをつけてみる。
なんかよくわからないけど接合部の具合がめちゃくちゃ悪化してるのでfolded armを戻し、ついでにcyborgを入れてみる。
なんかよくわからないけどよくなった。interpretability(解釈可能性)が無い挙動を示して人間様をいじめるのをやめてほしい。こっちはイオンチャネルとか動かしてなんとか頑張ってるんだぞ……
こいつめちゃくちゃ顔がいいのに骨格が崩壊してて勿体ないな。こういうときは画像全体をi2iにかけてやれば……
やはりfolded armにも未来はないのではないか?そう思った私はプロンプト鉱山の奥地に向かった。次はleaningで動きをつけてみる。実際のところ、これがダメだったとしてもまだまだ試せる他の単語が脳内のプロンプト工学辞典にいくらでも蓄積されているので、この程度は楽しいアクシデントに過ぎないのだ!
楽しくはない
行けそうな気がする。接合部が不自然だが、そこさえinpaintingで部分的に修正してやればもう妥協できるくらいの出来栄えにはなるのではないか?
何故かよくわからないがうまくいかない。どうやら楽しいアクシデントだったようだ。
これ、かなりいいんじゃないか?
モニター様の構造物が邪魔だが、まあそれはブルートフォース・修正を掛ければいいだけの話だ。
これで完成!(AI画像生成においては、妥協できるだけの品質が確保された瞬間を完成とする)
加筆修正
仕上げにちょっとだけGIMPで加筆修正。指と影を弄った。
これで本当に完成、ではなく、最後に重要なステップがある。
https://twitter.com/Tsiolkovsky1961/status/1759805574466961722
いいねたくさんもらえてうれしい!
ん?
修正前の画像が投稿されてるーッ
あとがき
今回紹介したのはNijijourneyを用いた画像生成作業フロー、その一つの例だ。Nijijourneyはいわゆるプロプライエタリ式で、モデルはMidjourney.incに独占されており*4、実際の計算自体はMidjourneyのサーバで行われ、一定の課金と引き換えに出力をやってもらう形式になる。そのため、利用可能な手法は公式に提供されているt2iやi2i、outpaintingやinpaintingなどに限定されている(ことを差し引いても圧倒的に出力の品質がいいので使っている)。自前でモデルを動かすなら、ControlNetを用いた構図の制御など、より複雑な工程を踏めるだろう。あるいは102枚、103枚と生成数を増やして、試行回数によって品質向上を目指すこともできるはずだ。が、私はテキストプロンプトを単語単位で書き換えていって出力物を調整していくこの"昔気質"なやり方が好きなので、今回提示したような手段をこね回し続けることに特に困難は見つけていないし、まだまだ深められるだけの厚みがあるようにも思う。そうであるから、来年の今頃の私が、ここに上げたのと全然違うやり方で仕事をしていたとしても全く不思議には思わない。だから、これはほんの一例に過ぎない。しかも実際のところ、AAR化にあたってまだわかりやすくなるよう枝葉末節を色々切り落としている。とはいえ、2024年初頭における一つの標準として参考にできるくらいのものではあるつもりだ。
実際の作業フローを見てみてどう感じただろうか?AI画像生成のプロセスにおける人間の作為、その中核は、出力画像全体を総合的に概観しての価値判断にあると思う。その価値判断を通じてどのようにフィードバックを掛け、出力を修正していくべきか、というノウハウの部分、例えばプロンプトの調整のやり方なんかにはいくらでもノウハウが宿りうるだろうし、技術的な方法でAIと脳髄の間に異なるインターフェースを作る(例えばt2iでなくi2iとか)こともできるだろうが、いずれにしても、統計的な推定が機能しないくらいの細部は全て見落とされる、というよりも仕組み上干渉できない。後から指の本数程度を描きかえることはそこまで難しくないにせよ、AIによる画像生成で生み出せるのは学習されたデータから圧縮された情報の潜在空間における線形結合だけで(といっても、その線形空間は今までに描かれたもの全て以上に広大だろうけど)例えばSNSのアイコンとして、例えば物語に必要な挿絵として、例えばスライドに貼りつけるいらすとやの素材として、機能する絵を代替することはできるだろうが、「描く」という画像生成のための一つのプロセスと、そこに組み上げられたノウハウの体系を飲み込むことは現時点ではできないだろうし、鱗の一枚一枚の艶の乗り方までを指定して、まだ私の頭にか存在していないドラゴン(西洋のそれとも東洋のそれとも違い、26本のZ型の脚と対になった翼を丸めて公転軌道を飛び、好きな総菜を発表する)を描くこともできない。が、そこまで遠くない未来にそのような仕事が為されるような気もする。
疑いようもなく、我々は巨人の肩の上に立っている。そしておこがましいことに、巨人にも見えぬものを見ようとしている──肩の上で懸命に背を伸ばすのか、くるりと背を向け後ろを見るかの違いはあれど。何にせよ、昨日まで誰も見たことの無かったものに光を落とし、自分のやり方で/を耕し続けているのには間違いないのだし、そうして耕されていったものの集積を後から文化とまとめることもできるだろう。