2月号です。
前回:

あけましておめでとうございます。 LuppetCafeを終了して忙しさが減ったこともあり、2023年はまた今まで通り作業の合間に勉強したこととか考えていることを書いていければなと思います。 今年もどうぞよろしくお願いします。 以下本題 AIで3Dモデルの写真をイラスト化する実験 AIに興味が出た年明け、3Dモデルの写真をイ...
3Dモデルのイラスト化をなぜこんなに頑張っているかというと、お仕事で使えないかな~という応用をかんがえていたからです。
例えばWebページの404テンプレートのページとかランディングページとか…。
そうなってくると自分としてはある程度のクオリティが求めていきたいわけですが、先月投稿したような生成画像では納得のいかない部分が出てきます。
それは例えば:
・服装が出力のたびに異なってくる
・髪飾りがAIでうまく再現できず、出力のたびに異なってくる
・指の破綻が割とある
そういった部分を解消するたびに、「AIはあくまでイラストっぽさを出すだけで、改変させない」ということをする必要があるなぁと思って、あの記事を書いたあと試行錯誤していました。。
まず結果から話すと、image2imageで、微小なノイズを与えてほとんど改変を起こさないようにしながらイラスト化するパラメータを見つけました。
このパラメータは、使ってるCheckpointによって人それぞれ違うのでパラメータを書いてもあまり意味がないかもしれませんが、以下となります。
Prompt:(無記入)
Negative Prompt: (nsfw:1.1),(worst quality:1.4), (low quality:1.4), (monochrome:1.1), (bad_prompt:0.8)
CFGScale: 8
Denoising strength:0.22~0.23
大体このあたりの値を使うと、上記の問題をある程度解決しつつイラスト感のある画像が出てくる結果となりました。
ニアちゃんは服の構造や色、質感など結構特殊な部類だろうとは思いますが、ノイズが小さいことによってうまくそれを落とし込めているのが良~!ってなりますね。
まぁ胸のマークは完全再現できてはいませんが、人の手で描くにしてもおそらく許容される範囲だろうと思ってスルーしています。
ちなみに同パラメータでの他の生成例はこんな感じ。
解決できなかった点について:
上のニアちゃんの画像を見て気づいた方もいるかもしれませんが、残念ながら髪飾りはどうしようもなかったです。
なので、教師データの段階から髪飾りを外して撮影したものを使っています。
髪飾り付きの生成例を以下に貼ります。
パッと見悪くないですが、拡大するとあまりうまく表現できているとはいえません。
キャラクターにあまりにも特徴的な飾りや模様がついていると、それを完全再現しながらイラスト化するのは厳しい。
でもそれを解決すれば良い精度でイラスト化できる。
ただ、まだまだ人間が描いたものには及ばない印象です。
パッと見では良いものができますが、眉や指、口形状、マークなど、小さいところまでは完全再現できないので、細かい部分までユーザに見せるような場面では人間の勝ちです。
逆にTwitterのアイコン画像とか、Webの404ページ用のイラストとか、そういう「なんか絵があるだけで良い」という場面では威力を発揮するかと思いますね!
そんなわけで、i2iでニアちゃん画像を生成していければいいな~なんて思って1ヶ月ほど放置していたのですが、ある日Twitterを見てたら面白いものを発見しました。
これ、俺もやりたーい!と思っていたのですが、こんな複雑なキャラクターのディテールを壊さず、ねんどろいど風やFigma風に落とし込んでいるのを見て最初はなんでできてるの!?ってびっくりしていましたね。
というのも、t2i(text2image:呪文を書いてAIイラストを生成するやつ)だとクオリティが安定せず相当大変だし、i2iだとそのベースになる教師データがないし…ということで完全に詰んだわけです。
ジェネレーティブAI界隈は最近技術革新の速度が異常で、自分のようにトレンドを追いかけず1ヶ月も放置してたら技術がもう別物になっています。
そんなわけで完全に宇宙猫になってしまったので、直接彼に聞きました。
↓
調べてみると、どうやら1~2週間前にLoRAという新技術がStable Diffusion WebUIに実装されていたらしいです。
LoRAとは(個人的な解釈)
例えばNovelAIで呪文によって画像を生成する際に、Hatsune Mikuと入れるとなんだかミクさんっぽい絵が生成される現象があります。
これはおそらくNovelAIの学習モデルの中にミクさんの画像が含まれているからですが、NovelAIに自分のキャラ名である「nearchan」を入力してもニアちゃんの画像は出てきません。なぜならニアちゃんの画像は事前に学習されていないからです。
なので、t2i(呪文からのイラスト生成)でニアちゃんの画像を出力しようと思ったらニアちゃんの画像を含めたどデカい学習モデルを作り直さなくちゃいけないので、かなり大変ですよね。
LoRAというのは、t2i(呪文からのイラスト生成)において「nearchan」というタグを入力した時に、自分が事前に学習させたニアちゃんの画像を呼び出すための追加学習技術ということです。
巨大なAIの学習モデルに対して、自分の画像の学習モデルがあたかも追加されたような使い方できます。
これなら、どデカい学習モデルはそのままに、人それぞれが思い思いの学習モデルを追加できるので、これによりジェネレーティブAIのできることが広がって、界隈がざわついていたということですね。
生成物の例:
Prompt:(nearchan:1.1),masterpiece, (nendoroid:1.1)
Negative Prompt:nsfw,(worst quality:1.4), (low quality:1.4), (monochrome:1.1), (bad_prompt:0.8)
CFG Scale:8
Additional Networks:
Model1:ニアちゃんLoRA(UNet:0.65, TEnc: 0.6)
Model2:ねんどろいど風LoRA(UNet:0.75, TEnc: 0.7)
Promptのところにある通り、ニアちゃんLoRAを組み込むことで呪文に「nearchan」を指定できるようになったので、t2iで呪文からニアちゃんを生成できる用になりました!
しかも呪文から生成できるということは、i2iと違ってポーズ指定やその他のディテールなどを呪文から調整できるということなんですよね。
(真ん中と右の画像はポーズ指定のPromptを追加しています。)
i2iよりも生成物の柔軟性があって非常に強力…。
最終的にこのニアちゃんLoRAにねんどろいど風LoRAを組み合わせることで、ニアちゃんのねんどろいど風画像が生成できたというわけですね。
ねんどろいどLoRAの代わりにFigmaLoRAがあれば、Figmaニアちゃんが生まれています。
そういう部分学習モデル付替えや重み調整の容易さがLoRAの魅力ですね。
そりゃ界隈がざわつくわ…。
余談:LoRAを作るための素材あつめはどうしたの?
Unityでキャラクターモデルにポーズを取らせて撮影するプロジェクトをむかーし作っていたので、それを改良してLoRA撮影プロジェクトに昇華させました。
学習のために512x512かつ透明付きPngを大量に与えると良いらしいということが書かれていたので、そのように自動で撮影して出力する機能を作っています。
ねんどろいどの画像を作るのに使ったニアちゃん画像はこのツイートにあるもので全部(1ポーズを20枚)なので、どれだけ簡単に作れてしまうのかがわかってもらえると思います。
というわけでLoRAすげ~ってなってたところにもう一個すごい爆弾が生まれていました。それがControlnetです。
すごくざっくり説明すると、棒人間や線画、深度情報からそれに従って画像を生成できる機能です。
凄さがわかりやすいツイート↓
左の教師データから骨格を抽出して、それにそってt2iで画像を生成しているようです。
骨格を抽出しなくても、最近ではBlenderと連携する技術が生まれていました。
うみゆきさんのツイートにもありますが、もう構図やポーズの呪文を書く必要がなくなって、生成物のクオリティが安定することがめちゃくちゃ強い…。
そのうち、将来的に指ボーンまで指定できたらAI特有の手が爆発する問題も解決するのかなぁ…。
と思ってしまうくらいの革命的な機能です。
これを先述のLoRAと組み合わせることで、うまくいけば自分のオリジナルキャラクターで構図やポーズを指定しながら安定してイラストを生成できる可能性が出てきたのも非常にデカい。
界隈で既に言及されていますが、Controlnetは機能があまりにも強力すぎて、モラル0の人が使った時に手がつけられないことも含めて正直様々な反感を食らいそうな機能だと思います。
自分としては今は状況を注視しつつ、一旦ニアちゃんLoRAの生成をもうちょっと煮詰めて時期が良くなったら改めて良い出力ができるように備えておこうと思います。
---
というわけで今月は以上です!
今月もお読みいただきましてありがとうございます。
ジェネレーティブAIに興味を持った人はStable Diffusion WebUIを導入して始めてみると良いと思います!
それでは~