どうも、ねへほもんです。

 

放置してから半年・・・

パワーアップして帰ってきましたよ!

 

 

AIイラスト

 

ゲーミングPC購入を機に、スペックを活かした活動をしたいと思いました。

過去の経験から着手しやすいものをと考えると、真っ先にAIイラストが浮かびました。

以前のNovel AIにプロンプトを入れてイラストを出力させた形式と異なり、PC上のローカル環境で動かすと何ができるのか?

可能性が広がると聞いて非常に楽しみにしていました。

 

実際使ってみて、いじれる項目の多さに驚きました。

こりゃ自由度高いわ、と。

使い始めてまだ数日で、未使用の機能も多数ありますが、ある程度ご報告できる成果が揃いましたので、ご報告します。

 

 

1.モデル、VAE、アップスケーラー、・・・

 

 

まずは新たに何ができるようになったかを、ざっくりと解説します。

 

①モデル

 

Counterfeit-V3.0と書いているのがモデルの名称です。

モデルによって二次元、実写、大人向け等得意分野が変わるため、用途に応じてモデルを使い分けることが重要です。

 

 

このようにモデルのサイズはゴギガ・ガガギゴレベルで重たいのですが、PCの容量にモノを言わせます。

 

②VAE

 

詳しくは知りませんが、絵をより鮮明に見せる機能らしいです。

上のツイートで出した絵はしょぼく見えますが、後でVAEを入れ替えた成果をお見せします。

聞いた感じ地味そうですがマジで変わります。

 

 

③アップスケーラー

 

絵を良い感じに拡大する機能です。

Novel AI時代はコインを消費するため、小さめの絵で我慢していましたが、ローカル環境だとお金を気にせず、PCのスペックのままにデカい絵を生成できます。

 

だったらとにかくデカい絵を狙えば良いのか?

 

そんなことはなく、アップスケーラーを使う方が良いらしいです。

例えば、最終的に1024×1024のサイズを目指す場合に、いきなり1024×1024を指定するのではなく、512×512のイラストを生成すると共に、縦横2倍に拡大するアップスケーラーを使った方がより仕上がりが良くなるそうです。

 

知らんけど。

 

他にもいじれる要素は多々ありますが、最重要なのはこの3つです。

では最後に、成果物をご覧ください。

 

 

 

 

以前生成し、今もTwitterアイコンとして愛用しているAlice × Butterflyを参考に生成しました。

蝶の紋様など、全体的に描写が細かくなっています。

特に意図した訳ではありませんが、「異議あり!」ポーズがビシッと決まっているのも良いですね。

 

 

2.推しを呼び出す魔法"LoRA"

 

ローカル環境(Stable diffusion WebUI)に徐々に慣れ、Alice × Butterflyを生成した後は、ただ絵の質を上げるのではなく、別路線の可能性を探ることにしました。

以前からローカル環境ならコレができる!と聞いていた機能があったので、やり方を研究していました。

 

LoRA

 

Low-Rank Adaptationの略で、既存のモデルに数十枚程度の画像を追加で学習させることができます。

これで何ができるかというと、推しキャラを学習させることができるようになりました。

 

昔は所定のキャラを出力させようと思ったら、"hatsune_miku"など名称をプロンプトで指定させるか、「ウマ娘というのは動物の耳と尻尾がある女の子で・・・」などプロンプト上で説明する必要がありました。

プロンプトに書いてバッチリ出力できれば良かったのですが、前者の名称を指定する方法は超有名キャラでないと学習元となる画像が少ないためマイナーキャラは出力されませんし、後者の説明文だけだと意図したキャラになかなか近づきません。

 

LoRAを使うと、学習データが少ないキャラでも特徴をバッチリ学習させられ、狙った推しを出力させることができます。

使ってみたい機能だったと書いた通り、僕には狙いのキャラが居ました。

 

 

キュアプリズム

 

です。

何でしょう、僕の好きな要素を全て詰め込んだ娘というのでしょうか、とにかく今年イチオシです。

日曜朝8時半が1週間で一番楽しみな時間になりました。

 

今年登場したばかりのキャラなので、学習データは少ないですが、LoRAを使えば呼び出せるはず、きっと来てくれると信じて挑戦しました。

 

LoRAの一番簡単な使い方は、ネットに転がっているLoRAのモデルをダウンロードして、所定のフォルダに設置する方法です。

プログラミングもコマンドプロンプトも要りません。

先人のモデルを使用する手法だと、結局マイナーキャラだと事例が無くて苦戦するという難点があります。果たしてキュアプリズムはどうか・・・

 

https://civitai.com/models/37410/cure-prism-hirogaru-sky-precure

 

ありました。僕以外にも今年の覇権キャラ認定している方が居て嬉しかったです。

早速試してみた結果がこちら。

 

 

おっ、再現できてる。

ロリ感があって僕好みです。

ただ、もうちょい鮮明なら嬉しかったかな?

 

再現できたことを嬉しく思いつつも、心の中では正直モヤっとした感触がありました。

より美麗に、より可愛く。

推しに妥協なんてできるはずがない。

覚悟が決まりました。

 

自作LoRAに挑戦

 

 

3.人生で一番コマンドプロンプトを使った日

 

参考となるサイトは当然ありましたが、まぁ苦労しましたよ。

 

 

言ってもサイトの指示に従えば大丈夫でしょと思われるかもしれませんが、そんなことはありません。

サイトの説明には無いような細かな部分でつまずきました。

 

・フォルダ名の半角スペースのせいで動かない(Stable diffusion→Stable_diffusionへ修正)

・コンフィグファイルが読み取れない(文字コードをUTF-8へ変更)

 

挙句の果てには、

 

Python再インストール

 

あぁぁぁぁあぁ面倒くせぇぇぇ。

エラーが出る度Chat GPTに入力して、考えられる原因をあれでもない、これでもないと潰しこんだ結果、最後に残ったのが「Pythonは正しくインストールされていますか?」でした。

 

いや、インストールに正しいも間違ってるもないやろ、と思いましたが、実際には正しくインストールされていませんでした。

再インストールは面倒だからと尻込みしていましたが、最後の可能性として実行して良かったです。

細かい手順は割愛しますが、ここではどういう流れでLoRAを制作してか、ざっくりとご説明します。

 

 

①コマンドプロンプト

 

サイトの説明に沿って、学習の事前準備をします。

 

 

sd-scriptsなるものをインストールしたり、Pythonの仮想環境なるものを構築したり、なにせ不慣れな身としてはここが一番苦労しました。

Python再インストールにまで及んだのは先述の通り。

 

 

②学習データの準備

 

ここも手間は掛かりますが、味気ないコマンド作業に比べれば格段にやる気が出ます。

なにせ推しの可愛い姿を堪能することができるのですから。

こんな感じのデータセットを作ります。

 

 

ググるなりTwitter検索するなり、アニメやグッズの画像を中心に漁ります。

後、必要に応じ画像を修正します。

 

 

こちらはお菓子のおまけについてくるカードのイラストですが、元の絵はサイズが小さく不鮮明だったので、アップスケーラーを使ってサイズを上げ、鮮明にします。

後、右下が少し汚れて見えますが、元々ここには"Cure Prism"という文字が書かれていました。

AIが文字を正しく書いてくれることはなく、ただ学習の邪魔になるだけなので塗りつぶしました。世間には綺麗に文字を消すツールがあるそうですが、学習用なら手で雑に塗るだけで十分でしょう。

 

画像は30枚用意しました。

キュアプリズムの姿が鮮明に写っていることは勿論、隣にキュアスカイが居ない(申し訳ないが学習の邪魔なので)とか、極力色々なポーズを集めるとか、色々条件が多くて画像選定も時間が掛かりましたが、まぁ推しを眺めながらなので楽勝です。

 

後は画像とセットでテキストファイルを用意しました。

画像にはどういう要素が含まれるかをタグ付けして説明するためのファイルです。

 

 

昔使ったDeep danbooruを使えばざっくりタグ付けしてくれます。

これをベースに、間違っているタグや不要なタグを消去します。

大半の画像でWhite dressやBow(リボン)というタグが出てきましたが、全て削除しました。

 

Cure Prism, White dress, Bowというタグで学習させると、「キュアプリズムが白いドレスを着てリボンを身に着けている」ことになりますが、これだと学習後に画像生成する時にもプロンプトにWhite dressとBowを付けないとキュアプリズムの衣装を着てくれません。

 

白いドレスで1か所だけアクセントにキラリと光る部分があって、頭にリボンを乗せてスカートの所にも青いリボンがあってというワンセットでキュアプリズムの魅力なのですから、それらをまとめてCure_Prismというタグに集約して学習させました。

顔だけ学習できればOKで、出力時はむしろ服を着せ替えたいという場合なら、服も学習時にタグに含めた方が良いです。

 

 

こんな感じで30枚の画像のタグ一覧表を作り、1行ずつ別々のテキストファイルに分けて、"Prism1.txt""Prism2.txt"という感じで名前を付けます。

画像もテキストファイルの通し番号と対応させる形で、"Prism1.png""Prism2.png"と名前を付けます。

この辺は手作業だと手間が掛かるので、Chat GPTに聞きつつ自動化しました。

 

 

LoRAの環境を整えて、30枚分のデータセットを揃えたら、LoRAの学習を開始します。

時間が掛かると聞いていたので、今日の朝一で学習を開始させ、PCを放置させている間に仕事を進め、学習が終わるのを待ちました。

 

③画像生成

 

ここまで紆余曲折ありましたが、最後に画像生成です。

最初はシンプルなプロンプトということで、(best quality_1.3),<lora:Cure_Prism:1> , 1 girlのみで。

果たしてどうなるのでしょうか・・・?

 

 

胸を盛るな警察

 

油断も隙もありません。

"flat chest"を追加しましょう。

 

昔は数十単語を繋げて長文プロンプトで勝負していましたが、最近はモデルの学習で大半をカバーできるようになったため、プロンプトは簡素なもので良いようです。

少し試行錯誤するだけで、"グッ"と来る1枚に巡り会えました。

 

Prompt:(best quality_1.3),<lora:Cure_Prism:1> , 1 girl, flat chest, white dress, bow, smile, blush, milky way

Negative: EasyNegative,  (worst quality,low quality:1.2), (bad anatomy:1.0), (realistic:1.0), nose, lips, adult, fat, monochrome, noise

 

理想の彼女

 

です。

素晴らしい。

 

オリジナルの衣装を再現しきれてはいませんが、海辺を歩く涼しい感じの服と考えれば場面設定に合っています。

スカートや髪がふわっとした感じも良いですし、絵柄が少し斜めに傾いているのもテクい表現だなと唸らされました。

キュアプリズムの魅力を引き出しつつ、絵としての芸術性も備えた大満足の1枚でした。

 

 

ちなみに、プロンプトに"precure"と"magical_girl"を追加するとこんな感じに。

プリキュアっぽさは増しましたが、ちょっと色が濃くて目が疲れます。

プリキュアは鮮やかで色彩がくっきりしたキャラが多い印象ですが、淡く優しい感じなのもキュアプリズムの個人的な推しポイントです。そういう意味でもさっきの方が好み。

 

最後に、AIイラストに好みの設定を盛り込んでみました。

ただ可愛い画像を拝むだけならネットを漁れば済む話です。

一歩踏み込んで、推しを自分好みの設定に当てはめてこそ、自前でイラスト生成する意義があるというものです。

 

キュアプリズムといえば、変身の時のあざといポーズが人気ですが、

 

(変身短縮版でも、毎週このポーズは拝めるので有難い)

 

ここから連想できるシチュエーションを設定しました。

 

 

いやー、絶対アイドル似合うって思ってたわ。

原案はこちら。

 

 

こちらはそこそこ手こずって、十数枚出力しましたが、失敗の大半は指4本とか指6本事案です。

今回のイラストも若干不自然さが残っており、相変わらず指は苦手なままのようです。

ただ、「名脇役」の異名を理解しているのか、しっかりを出してくれたのは高評価です。

 

LoRAという強力な武器を手に入れたことで、推しのキャラを狙って出力できるようになりました。

去年投稿した自分のPixivだけでも25枚のイラストがあり、それを焼き回せば場面設定には苦労しなさそうです。

設定を工夫して画質を上げるなり、推しのキャラを登場させるなり、アレンジを加えながらStable diffusion WebUIに慣れ親しもうと思います。

 

世間ではAIイラストへの批判とか、投稿禁止とか、色々言われている時期なので、生成した画像をどこかに上げたいと思いつつも、時勢やサイトの運営規則を見ながらアップ先を決める予定です。

ただのAIイラストではなく、版権キャラとなると更に考慮事項が増えそうですし。

完全に趣味の世界で、お金を稼ぐ気は一切無いのですから、ある程度自由を与えてもらえると有難いのですが。

 

しばらくはAIイラストを触り続ける予定なので、また進展あればご報告します。

では(^^)/