3月号です。
前回の記事から1ヶ月経つわけですが、AI界隈の1ヶ月というのは1年に相当するのでは…みたいなレベルで発展が劇的すぎますね。
前回の記事を読み直していましたが、書いている内容がちょっと古かったです…。
そして前回、前々回とイラスト化する実験の記事を書いていますが、どうやら自分の思っている以上に色んな方に参考にしていただいているようです。
ありがとうございます!ということで今回は力を入れて書いてみます。
今月もよろしくお願いします。
前回:

2月号です。 前回: イラスト化ニアちゃんのクオリティをもっと上げたい… 3Dモデルのイラスト化をなぜこんなに頑張っているかというと、お仕事で使えないかな~という応用をかんがえていたからです。 例えばWebページの404テンプレートのページとかランディングページとか…。 そうなってくると自分としてはある程度のク...
前回はi2iで、3Dモデルの写真に微小なノイズを与えてイラスト化するという手法をとっていましたが、結論から言うとちょっとそれはもう"過去"の手法になりましたね。
今のところはLoRAでキャラクターを固定+Controlnetで書かせたい内容を固定した上でのt2i(text to image)が最適解なのかなと思っていますので、その話をします。
アウトプット解像度:
512x512
Prompt:
nearchan,masterpiece, best quality,green hair, aqua eyes, masterpiece, best quality,
Negative Prompt:
EasyNegative
Step:
20
CFG Scale:
8
Method:
DPM++SDE
Additional Networks:
Model1:40_nearchan(Weight=0.7) ※自作のLoRA
LoRAをつくるにあたって、何のパラメータを何で作れば良いのか…という話がありますが、正直何度か検証した自分でも未だに難しいなと思います。
何パターンか試してみた結果として一番生成物のクオリティが良くなったものについて書いてみます。
学習枚数とパラメータについて
・学習のベースとなるCheckpointはACertainly.ckpt
・40枚
・4epoch.
・tagは最初の1つのみ保持(Taggingした際にnearchanという独自のタグが付いています。)
・他のパラメータはデフォルト
学習した画像について
・ポーズ10種
・512x512の背景透過済みpng
・-60~60度の間で、1ポーズに対して4種類の角度から撮影
・全身ではなく上半身を中心に撮影
学習時間
大体30分くらいで終わりました。
(Ryzen 9 3950X,RTX3080のWindowsマシンです。)
撮影に利用したコード
Unityにて行っていますが、Gistにそれを貼っておきます。
Cameraコンポーネントに貼ってInspectorを埋めれば動きます。
https://gist.github.com/negipoyoc/71c894eccb0cae442a6007408edc700f
その他の感想:
・正直作りたい絵として全身を作りたいわけではなかったので、もうちょっと顔のアップを撮影して素材にしたほうが良かったかも。
・DPM++SDEが個人的に一番クオリティの高いサンプリング手法だった。
LoRAについてはキャラの特徴をある程度保持しておきたい…くらいでとどめておくのが良いので、特にepoch数については、少なめで良さそう。
120枚を20epochで12時間かけて学習したら過学習気味だったのか、こういう変な画像しか出てこなくなった。↓
t2iで絵を生成するにあたって、普通にやると彩度が低いことが多々あります。
それを補正して彩度高めに調整したい場合はイラスト生成時にVAEを使いましょう。
どのVAEを使えば良いなどは場合によって異なるので自分で最適解を見つけていくしかないかも。いくつかの知見がこの記事に書かれていました。
塗りにも影響してくるので、他人のAIイラストを見て「いくら頑張ってもこんな絵出てこないよ~」って人はここを突き詰めると良いのかもしれないなと思っています。
また、学習モデルを自前でマージする時にVAEを焼き込んで自動で彩度の高いイラストを生成させるという時短方法もありますが、上級者向けです。
AIによるイラスト生成においてガチャ要素が減ってきて段々と人間の意志を伝えられる余地が増えてきています。
それによって、前回の記事のようなi2iをするよりも、LoRA+Controlnet でAI側に書いてほしいものの意図を伝えてt2iで生成するほうが時間的なコストが安いということがわかりました。
いくつか紹介します。
MultiControlnet
AIイラストといえば、指が破綻していることがほとんどですが、それをどうにかする技術も発明されました。
これは、
・1枚目で手形状の輪郭を抽出(Controlnet:canny)
・2枚目で人物のポーズを定義(Controlnet:openpose)
という2つのControlnetをかけ合わせることによって、指の破綻を抑えつつ任意のポーズをさせることに成功しています。
toyxyzさんの例:
Controlnetにはいくつか種類がありますが、例えば輪郭を抽出するCannyの代わりにDepthでも問題ありません。
その場合にこういう手形状のDepthデータ(.png)セットがあるので便利です。↓
ZoeDepth
そのdepth imageを高精度で出せるもの。
(この方の例だとリソースにイラストを指定してるけど、実写を使ってDepthを求めた後、それをControlnetに活かしてAIで絵を作るとか効果的なんじゃないだろうか。)
LLuL - Local Latent upscaLer
指定部分に限って、ディテールを追加する拡張機能も出てきています。
このように、AIに意図を伝えやすくする手法が開発されると同時に、それをかなり簡単に行えるようにする手法もまた開発されます。
以下はOpenPose用の骨格画像と、手形状のDepthを一度に出力するBlenderアドオンに関するツイートです。※
(※この方が確かそういうツイートをされている覚えがあるのですが、間違ってたらごめんなさい。)
じゃあこれをVTuber向けモーキャプでパターンを大量に撮影して、みんなが使えるようにすると良さそう、みたいな発想にもつながってきます。
こういうオープンな流れをみるにつけ、やがてはAIが生成できるものの幅は1年後には爆発的に増えているだろうなと思っています。
自分のキャラのLoRAさえ持っておけば自分の思ったような絵が生成される世界が来るんじゃないかなと思っていて、自分はとりあえずニアちゃんLoRAの生成について頑張って検証していたのでした。
正直Controlnetが偉大すぎて、これ以上のブレイクスルーは起きるのか本当に何もわかりません。来月は生成AIについて何を書いているのか全く想像ができませんが、また面白いものが見つかったら試してFanboxにまとめられたらなと思います。
AIの話題を必死に追いかけていく必要性
「AIはこれができないから大丈夫」とか「結局人間の労働を代替するものじゃない」などの否定的なことをツイートする人を見て、最近はその考え方はちょっと危ういんじゃないかなと思うようになりました。
まぁ昔の自分がそうだったので気持ちは分かるのですが…。
---
最近ならテキストであればChatGPT API、イラストならControlnetが出ました。
人々は簡単にAIサービスを立ち上げたり、破綻がないイラストを作れるようになりました。
具体例で言えば、GateboxさんがChatGPTと連携してクラファンで2000万円集めてたり、LINEからChatGPTを叩けるようにしたサービスが20万ユーザを獲得していたりしましたね。
ジェネレーティブAIに対する人々の熱量も世界中で高まっており、ブレイクスルーがとにかく異常な頻度で起きているのが現状です。
(これは先程のイラスト生成のお話を見ていただければ、この感覚がちょっとわかってもらえるものと思います。)
それをふまえて、現状のAIができることだけを見て未来を判断するのは非常に危険なことだと思います。
個人的には、今AIができないことは明日にはできているのかもしれない…というワクワクと危機感をごちゃ混ぜにした感情が常にあります。
(そもそもGPT-4が今年中に出る予定ですからね。)
じゃあどうするのが良いの?ということですが以下のことを真剣に考えておくのがこれからの時代に必要なことかなと思います。
・AIが○○をできるようになった時に自分はどうするべきか、
・AIが今○○できないのは△△が理由だから、では△△を解消するにはどのくらいの時間がかかりそうで、それまでに自分は今から何を準備しておくべきなのか
いずれAIが実現できてしまった方向へ考え方の舵を切っておくべきといいますか…。
AIの威力に飲み込まれるんじゃなくて、AIの威力を使いこなす側に回ろうとする気持ちです。
例:ChatGPTが最高品質のコードを出力するようになるなら自分はどうするか?
最初からChatGPTにやりたいことを投げて、コードのチェックしつつそれをつなげていき、最速でものを完成させて、1人で人力の10倍くらいの成果を上げるエンジニアになると思います。
(人間がコードを書くこと自体が危険かつ時間がかかる手法になるのかも)
現状、ChatGPTをプログラミングで使うことを考えると、例えば2023年になって出たライブラリの内容なんかは学習していないので、そういった情報には追従できません。
でも、例えばLangchainか何かで自前でその内容を組み合わせて活用することで、そういった情報にも回答できるようになります。
そういうことができるエンジニアに先んじてなっておくことに、注力しておきたいですね。
参考:
他にもデータサイエンティストとかコンサルとか、「データを整理して回答を出していく」というものは人間はAIに勝てなさそうです。
なのでAIを使いこなして、最速で自分だけの用途にAIをチューニングして成果を出せる人が将来生き残っていくのだと思います。
そんなわけで、AIの情報は必死に追いかけないといけないなと決意したのでした。
(書いてて思ったけど、エンジニアの仕事は案外近い将来なくなってるかもしれないですね。割と真面目に。)
話題になったものはとにかく全部触っていく
AI界隈は進化が早いので1ヶ月前(あるいは早ければ1週間前)の知識はもう古いという現象が起きます。
するとどうなるかというと、後から学ぼうと思ったときにGoogle検索しても古い知識のまま掲載されている記事があったり、新しいけどそれを理解するための基礎知識が膨大すぎてめっちゃ苦労する…という現象が起きます。
なので自分はとにかく話題になった瞬間にそれに触れて理解するのがAIを学ぶ上で一番楽だなと思って毎日何かしら作って知見を積み重ねています。
情報の時系列をちゃんと自分の中で持っておかないといずれ理解できなくなってしまう。
最悪な話をすると、AI関連は今何をツイートしてもバズるので、誰かがやった知見や記事をまとめてる(+誇張表現する)だけのインフルエンサーがヤバいくらい湧いています。
そういう意味でもちゃんと手を動かして情報に触れることが重要で、できることできないことを常にアップデートして誇張表現に騙されない+ちゃんと手を動かしてる本物の人間を見極めて適切に最新情報にアクセスしていくということができます。
自分の現在の興味の方向(テキスト・画像生成)
テキスト方面:
これをやっていましたが、今はこれを発展させて、「自分との会話から自動的に学んでいくAIエージェント」を作れないかということで色々調べています。
Langchain+faiss+Firestoreでそれなりのことができそうだな~くらいのことを考えていますがまだ頭の中だけで手は動かせていません。
そもそもFaissを動かすにあたり、まずPythonを学ぶところからなんですよね。Pythonからは逃れられなさそうなので諦めてChatGPTに聞きながら勉強したいと思います。
画像生成方面:
2月の半ばごろ、"AIコスプレイヤー"という単語が一時期話題になりましたが自分も裏でこっそりやっていました。
イラストと違って手が破綻しやすいしControlnetでも補正がうまくいかずなかなかの苦労があります。でもこれまでの知見を活用できてかわいい画像が生成できるので楽しい。
(補足:学習モデルにChilloutMixは使っていません。)
俺はミクコスがめっちゃ好きなので裏でこっそり作っていきたい気持ち。
というわけで今月は以上です。
AIは本気で向き合う価値があると思っているので、来月もAIの話を書いてると思います。
それでは、お読みいただきましてありがとうございました!