見出し画像

自分の絵でLoRAをつくってみた

Stable Diffusion、楽しいですよね。

なんかもう技術の進歩が早すぎて油断すると一瞬で取り残されてしまいがちです。この記事も書きながら「すぐに古くなってしまいそうだな……」と思ってます。

LoRAを使って自分の画風を学習させるまで

今回は追加学習の手法であるLoRAを試してみた内容を紹介します。
LoRAとは……いえ、なにも詳しくないので下手に説明すると嘘を書いてしまいそうですが、ざっくりいうと……。

Stable DiffusionのモデルデータはだいたいGB単位です。
一方、LoRAは元モデルとの差分データをつくるのでだいたい150MBくらいで済むという代物です。
追加学習で元モデルとマージする形だとGB単位のデータをたくさんつくることになってしまうので、LoRAが便利というわけです。

これでなにができるかというと、たとえば特定のキャラの特徴を学習させることができます。これは20枚くらいあれば可能らしく、私も自分のキャラを用いてそれなりの成果が出ました。

次に試みたのが、「饗庭淵の画風」を学習させることです。
どのくらいの枚数があればいいのかよくわからなかったので130枚ほど集めました。

aebafuti教師データ

横にあるtxtはタグ情報です。
data set tag editorを利用しました。
すべての絵の先頭に”art by aebafuti"のタグをつけ、自動で付与したタグを精査し、不要なものを削除していきます。

ちなみに「キャラの特徴」を学習させる場合は、その「キャラの特徴」にあたるタグを削除していくそうです。
追加するのではなく削除です。
たとえば黒先輩なら、"black sailor"とか"black hair"などを削除します。
こうすることで"kurosenpai"とプロンプトに"black sailor"や"black hair"といった特徴が紐づくという仕様……だそうです。

黒先輩

”art by aebafuti"の場合は?
うーん、aebafutiになくてはならない特徴ってなんでしょうね……?
"huge breasts"でない絵だって描くときは描きますからね……。

というわけで、今回はそのへんは特に気にせず明らかに間違ってるっぽいタグだけを消していきます(もしかしたらなにか気にした方がよかったのかもしれません)(なにもわからない)。

ちなみにLoRAについてもいい感じのGUIが出ています。
今回は私もこれを導入しました。
あれこれ苦戦して三日くらいかかってしまいましたが……。
導入手順についてはすでに様々な解説ページがありますし、公式のReadMeを読むとよいでしょう。
それで三日くらいかかってしまったわけですが……。
コピペ間違いの解説記事、ライブラリのバージョン違い、設定の問題なのか環境の問題なのかの切り分け……大変でした。
そのあたりの話は後述します。

さて、GUIを起動するといろいろ細かい設定があります。
このへんは公式の動画とか各解説サイトを参考にして……いざ学習!
とやると、エラーが起きて動かなくなってしまい……。

なんでや! 設定が間違っとるんか?!
とあれこれ見直したりしましたが、環境構築のミスだとわかりました。
環境構築でミスってると「起動できない」じゃなくてこの段階でエラーが起きるんですね。
エラーログを見ても具体的になにがなんだか……。
エラーログをコピペしてひたすらググり……ああでもないこうでもないとごちゃごちゃ……困ったときはアンインストールと再インストールを繰り返し……。

ようやく動いたときには魔銃が起動したときみたいな声が出ました。
そして137枚の画像を学習するのに一晩じっくり寝かせて……
いざLoRAを適用!

そして動き出すart by aebafuti

お前にふさわしいpromptは決まった! いでよ”art by aebafuti"

aebafutiっぽいアンドロイド

こんなん出ました。
うーん、それっぽい……。
AI生成と注釈を入れないと饗庭淵の新作描き下ろしだと勘違いされかねない出来です。脚の配色が左右で違ったり顔の崩れがAIっぽいですが。

<lora:aebafuti_v1.0:0.3>,((((masterpiece)))), (high quality), girl,art by aebafuti, ((beautiful deatailed shadow)), dynamic angle, sitting, angel, (((gigantic breasts))), [:hands finger mp joint finger hands:0.6],((perfect android)), (cyborg), robot, science fiction, ((shiny cloth)), (white latex suit), (((latex suits covering the entire body))), tight-fitting outfits, Nipples floating on clothes, (red cyborg eyes), cool, (expressionless),((mechanical parts)), (artificial hands), mechanical abs, (mechanical joint), (mechanical long boots),((black short hair)), ((cyberpunk Institute)) ,upper_body, top lighting, 3d background,
Negative prompt: (((nude))), ((((skin)))),three hands, ((elf ear)), teeth, (worst quality, low quality:1.3), (depth of field, blurry:1.2), (greyscale, monochrome:1.1), 3D face, nose, cropped, lowres, text, jpeg artifacts, signature, watermark, username, blurry, artist name, trademark, watermark, title, multiple view, Reference sheet,inaccurate limb and hand and finger and arm ,fused digit,fused hands,poorly drawn hands,poorly drawn leg,missing hands, missing digit, abnormal legs, missing legs, huge thighs, fused shoes, missing arms, poorly drawn face, blurred background, background without depth, lowres, bad anatomy,

ちなみにpromptはこんな感じです。
あるいは……

aebafutiっぽい暗黒騎士

暗黒騎士を生成してみました。

とかかなり「っぽい」ですよね。金属の質感もかなり「っぽい」
ランガードの位置とかだいぶ怪しいですが……。
マントもそれどうなってんの?
おい! ハイレグを蛇蝎のごとく憎んでいるaebafutiがハイレグなんて描くわけないだろ!

また、顔が崩れがちだったので、face editorというスクリプトを利用させてもらったり、顔認識がうまくいかない(アニメ顔の補正には不向きのようです)ときは手動で顔部分を切り取ってi2iで高解像度の顔をつくります。

元の顔はこんなん
そしてこう

で、こうしてできたものをもとの画像に縮小して貼り付けるわけです。
(この工程を自動でやってくれるのが上のface editorです)

aebafutiっぽいボーイッシュ女子

aebafutiっぽいボーイッシュ女子

背景までaebafutiっぽくしなくても……!
なんか描いたことあるような気すらしますね。
顔とか髪が若干aebafutiっぽくないですが、適用度を0.3~0.4くらいに下げているためです(1.0が最大)。

この適用度が大きすぎると絵が崩れてしまうのでだいたい0.4くらいが限界かなあという印象です。
ちなみに上の絵は狙って出したものではなく、「なんかでろー!」という気分だったのでdynamic promptsという拡張機能を利用しています。

たとえば髪の色は別に黒でも白でも赤でも青でもいいんだよな……という場合は{black|white|red|blue} hairと書けばランダムでどれかが選ばれます。
また、WILDCARDという機能を使うとあらかじめ用意したtxtデータからランダムに選ばれるというような使い方もできます。

いやぁ、拡張機能もいつの間にかいっぱい増えてますね。
私もまだまだ知らないものがあるかと思います。
というかcontrol netすらまだ試してません。次に試してみます。

上のとだいたい同じ手法で生成
建物と人物の比率が狂っとる
これもだいたい同じ手法で生成
顔と髪以外はそれっぽい

aebafutiLoRAおもしれえ……。
描いたことある気がする絵がどんどん出てくる。お前はおれ……?
特になにか使えるわけではないけど面白いぜ……。自分っぽい絵柄が出てくるからなんなんだよ……。でも面白いぜ……。

いえ、役には立ちます。立つはずです。
なんというか、自分自身がどこに「自分らしさ」を感じているのかを見つめ直す鏡のようですね。
おれの絵、塗りに特徴があったんだなあ……。
なんかマンネリしてる気もするのでそのへんを払拭する指標にも使えるかも。

aebafutiっぽい自堕落系少女

せっかくなのであまり描いたことなさそうなのを目指してみましょう。
あまり描いたことなさそうなのってなんだ……?
とりあえず目標は「自堕落系少女」です。

aebafutiっぽい自堕落系少女

残念ながら……汚部屋はaebafutiLoRAを適用した状態だとどうあっても出てきませんでした。汚部屋なんて描いたことないからね。
ので、背景だけはaebafutiLoRAを切ったうえで生成し、キャラをinpaintでaebafutiっぽく修正していく作業を繰り返しました。
顔についても上に書いたような手法を使ってます。

結構……手間が、かかる……!
眉毛がなぜか二本になったりね……!
上の絵も鎖骨当たりおかしいの誤魔化しきれてません。
乳ももう少し大きくしたかったけどこれが限界……!
おい! aebafutiのデータいっぱい食わせただろ!

まあ、手修正を加えれば楽なんですが、それはレギュレーション違反ですので。手修正はルールで禁止スよね。
いえ、どうあっても無理だったのでちょっとだけ手を加えました
なんだかんだ最後は温かみのある人間の手作業なんだなあ。

あとは友人の絵を勝手にaebafuti化する遊びなんかもやってみました。
めちゃくちゃ手間がかかりました。
友人なんで許可を取れば載せることはできますが……まあええか……。

遊びとしては楽しいですが、「作品」を目指すなら自分で描いた方が早いな……! という気はしてます。

導入で躓いた点

さて、冒頭にも書いたように一瞬で時代に取り残されて不要どころかノイズ情報になりそうですが、環境構築において私が躓いた点と解決策についても書いておきます。

この手の失敗談が誰かの役に立つと信じて……。

・Pythonのverがなぜか古かった

なぜか古かった。これが重要です。
だって私は最新の3.10系のPythonをインストールしたはずなんですから。

 python --version

ですが、コマンドを打ってPythonのverを確認してみると3.9なんです。
なんでや!!

原因はパスが通っていないことでした。
インストールの際にそういうチェック項目がありますのでみなさんは忘れないようにしましょう。

ちなみに、Pythonのverが古いとxforderのインストールに失敗します。

ERROR: xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl is not a supported wheel on this platform.

こういうエラーメッセージが出るはずです。

・PyTorchとCUDAのver違い

それぞれなんなのかよくわかってません(ライブラリ?とか?)が、最新だと2.0だったり1.18のverが出ています。
よくわかんないけど最新でええやろ! をしたのがすべての間違い……!
kohya_ssの導入手順には以下のようにあります。

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116

Pytorchのverは1.12.1、CUDAは1.16と……!

で、このへんはvenvとかいう仮想環境にインストールすることになるわけですが、CUDAだけは外にインストールするわけですね。
あれこれ試行錯誤して、なにをやってもうまくいかないので私はここになにが書かれてあるのかを理解しました。
だったらこの部分書き換えて最新のCUDAをいれて最新のPytorchをインストールすりゃええじゃん!

ダメでした。
ver1.16のCUDAをインストールしたうえで、書いてあるとおりにコピペして環境を構築するのが正解でした。
あるいは他にやりようはあるかもしれませんが、私はそれでうまくいきました。

・Pythonのverがなぜか古かった

またしても立ち塞がるのか、Python3.9……!!

先にも書きましたが、kohya_ssはなんかvenvとかいう仮想環境上で動かすようです(よくわかってない)。
そういうわけで、外の環境では3.10なのに仮想環境上では3.9とかいうよくわからないことが起きてました。

python -m venv venv

これはここのコマンドをpythonではなくpyに書き換えることで解決しました。

なんで????
原因はまったくわかりませんが、そういうことがあるようです。
同じように仮想環境上のpythonのverがなぜか古い! という問題にぶち当たったときは試してみてください。

まとめてみると「これだけ?」という気がしますが、延々と紆余曲折回り道をしたのです……。
まったく関係ないのでここに書く意味のない間違いとか……。
環境構築って、大変ですよね。

まあ、しばらく待っていたらwebuiのバイナリ版みたいに一発で導入できるものが出てくるかもしれません。


この記事が気に入ったらサポートをしてみませんか?