見出し画像

続・画像生成AIに自分の絵を描かせた

2023年の5月の連休の前後より、自作イラストの追加学習データ(LoRA)を元にローカル環境のStable Diffusion (SD1.5)を使ってAIに"自分の絵"を描かせるようになってから、おおよそ一年が経ちました。当時そのことについて書いた記事は、比較的多くの方に読んでいただけたようで、SNSなどを通じて今も時々リアクションがあります。

この一年間、多少の波はあっても、自分としてはこつこつとコンスタントに同じテーマに取り組んできました。成果の一部はX(@epxstudio_ai)で発表していましたが、その過程で新たに得られた知見や、画像生成AIの活用方法についてぼんやり考えたことなどがあるので、件の記事の続編として少し書いてみようと思います。

前提として

わたしはGペンとスクリーントーンの時代からの20年来のアマチュア同人作家で、普段絵とはまったく関係ない仕事をしており、かつ、イラスト制作における画像生成AIの活用については肯定的な立場です。イラスト界隈においてしばしばセンシティブな議題となるその是非に関しては、この記事の終わりのほうで触れるつもりなので、一旦ここでは置いておきますね。

最近主に取り組んでいるのは二次創作ジャンル、特に小説『ニンジャスレイヤー』のファンアートで、この作品の第3部以降に登場する「ユンコ・スズキ」のイラストをよく描いています。

ユンコ・スズキ(『ニンジャスレイヤー:死神の帰還』より)

このキャラクターは、事故死した大学生が生前の自身の姿を克明に模した100%機械のドロイドに、生前の自我と記憶を移植されて復活した女性で、しかもことあるごとに自分の体を支配しようとするAIに対して常に抗っている、という境遇の持ち主です。わたしがこのキャラを好きになったのはずっと前のことで、画像生成AIのモチーフに彼女を使っているのはただの偶然なのですが、ここへ来て不思議な因果を感じています。
このキャラが初めて登場するお話は、ニンジャスレイヤーの『レプリカ・ミッシング・リンク』という一話完結の読み切りエピソードとして、note上で無料で全編読めますので、良かったらこのご縁にぜひ読んでみてください。

さて、わたしの描くユンコ・スズキのイラストは、小説版の公式デザインを大幅に簡略化して、言ってしまえば自分の手癖で描きやすくアレンジしたものです。ありがたいことに、ニンジャスレイヤーという作品自体がこうした独自の解釈を交えた二次創作の発表に寛容であることもあって(「ニンジャスレイヤーなどの二次創作活動やファンイベントに関するガイドライン」)、10年以上もの間、楽しくファン活動をさせてもらっています。

わたしの「手描き」の絵柄のユンコ

今回、Stable Diffusionのファインチューニングにおける追加学習モデル、いわゆるLoRAの作成においては、自分の描いたイラスト「のみ」を学習素材として使用しており、公式の画像や、ましてや他の方の描いたファンアートなどを一切用いていません。悲しいかな、一般にはまだまだマイナーなキャラクターであるため、LoRAや専用に用意したマージモデルのような追加学習なしにプロンプトのみで再現できるキャラクターではありません。そのため、独自に作成した追加学習LoRAが結果に顕著に影響します。以下の画像が同一プロンプト・同一seedでのLoRAの適用なし/ありの比較です。

【右のプロンプトおよびパラメータ、左は<lora:r9junko:0.75>を省いたもの】1girl, solo, looking at viewer, upper body, >:), closed mouth, arms behind back, simple background, white background, <lora:r9junko:0.75> junko suzuki, heterochromia, goggles, multicolored hair, black tank top, Negative prompt: (worst quality, low quality, bad anatomy, extra digit, bad hand:1.3), monochrome, greyscale Steps: 40, Sampler: DDIM, CFG scale: 5, Seed: 3556648922, Size: 512x512, Model hash: cbfba64e66, Model: CounterfeitV30_v30, VAE hash: f921fb3f29, VAE: Counterfeit-V2.5.vae.pt, Clip skip: 2, Version: f0.0.7-latest-41-g6aee7a20

このLoRAモデルはローカル環境で独自に作成したもので、わたしのみが使用しており、今後も特に公開する予定はありません。

また画像生成AIに関して様々な意見がある点を踏まえ、現状、出力したイラストは専用のXアカウントからのみ投稿し、ファンアートタグ(ウキヨエ)もつけないという形で最小限のゾーニングをするようにしています。これは何かコミュニティのルールに沿っているわけではなくて、自主的にやっています(なので別に他の人にも同じことを強いるつもりはない)。

なお、ローカル環境のマシンスペックは2019年に組んだ自作Ryzenマシンで、グラボは3060Ti。VRAMが8GBと頼りないため最新のSDXLには手を出せず、SD WebUI Forgeの1.5で頑張っています。ベースモデルはいろいろ試した結果、この一年間ずっとCounterfeit-V3.0に落ち着いています。

【5月4日追記】誤解があるといけないので補足ですが、学習素材として「自作のイラストのみ」を使用しているのは、追加学習モデルにあたるLoRAのみについてです。ベースとして使用しているモデルCounterfeit-V3.0はCreativeML Open RAIL-Mライセンスで公開されているもので、モデルを使用した生成物の公開などを許可されていますが、このモデルが学習元データセットとして何を参照しているかをわたしが検証したものではありません。

今回の記事の前提となるような話はここまで。

画像生成の流れ

いくつか作例を交えて、普段どういうふうに「描かせたい」画像を生成しているかを紹介します。

1girl, solo, looking at viewer, facing viewer, (angry:0.9), confident, smile, riding, mecha, in the cockpit, battle, cyborg, neon lights, backlighting, headlight, dust, light particles, horizontal flash lights, rain, <lora:r9junko:0.65> <lora:r9style:0.1> junko suzuki, heterochromia, goggles, multicolored hair, crop top, halterneck, bare shoulders, detached arm cover, midriff, navel, shorts, thighhighs, Negative prompt: (worst quality, low quality, bad anatomy, extra digit, bad hand:1.3), monochrome, greyscale Steps: 40, Sampler: DDIM, CFG scale: 5, Seed: 3285750051, Size: 512x704, Model hash: cbfba64e66, Model: CounterfeitV30_v30, VAE hash: f921fb3f29, VAE: Counterfeit-V2.5.vae.pt, Variation seed: 346306919, Variation seed strength: 0.1, Denoising strength: 0.1, Clip skip: 2, Hires upscale: 2, Hires upscaler: 4x-UltraSharp, Version: f0.0.7-latest-41-g6aee7a20
1girl, solo, looking at the monitor, upper body, focus face, angry, screaming, (steam:1.3), leaning forward, (blurry foreground:1.1), steaming body, blush, sweatdrop, in the dark room, sitting on gaming chair, computer, (fisheye:1.1), monitors, (cables, wires:1.3), wired, neon lights, cyberpunk, BREAK <lyco:r9junko:0.8> junko suzuki, heterochromia, dots on one eye, red eye, blue hair, goggles, multicolored hair, bare shoulders, crop top, halterneck, detached sleeves, fingerless gloves, nail polish, fingers, typing, Negative prompt: (worst quality, low quality, bad anatomy, extra digit, bad hand:1.3), monochrome, greyscale Steps: 40, Sampler: DDIM, CFG scale: 5, Seed: 1948557315, Size: 704x512, Model hash: cbfba64e66, Model: CounterfeitV30_v30, Variation seed: 3450941715, Variation seed strength: 0.1, Denoising strength: 0.1, Clip skip: 2, Version: v1.2.1, Hires upscale: 2, Hires upscaler: 4x-UltraSharp

キャラクターの特徴である、「ターコイズとクリーム色のショートヘア」「青と黄色(または赤)のオッドアイ」「額に装着したゴーグル」「ホルターネックのトップスとアームカバー」などは安定して出せるようになりました。2枚目は原作のワンシーンを再現しようと試みたもので、表情を含めて特にイメージに近い絵になりました。一方で、「バーコード状の眉」「左目の瞳の中の三点ドット∴」など、追加学習をもってしても再現の難しいパーツはまだあります。これらはプロンプトでは再現不能であるものの、学習素材にその特徴は含まれているから、稀に再現されます。

絵柄の特徴をどの程度捉えているかというと、上記の作例のとおり、わたしの素の画力よりもはるかに上手いので何とも言いにくいのですが、少なくともわたしの好きな絵柄、志向するベクトルに限りなく近いものです。端的に言って、理想の絵。こうしたパキッとした漫画的な線やアニメ塗りはプロンプト内で特に指定していないし、ベースの学習モデル(Counterfeit)の特徴とも異なるもので、やはり自作のLoRAがキャラだけではなく絵柄にも方向性を与えているのは明らかであるように見えます。

1girl, solo, looking at viewer, >:, confident, smile, (half-closed eyes:1.1), cowboy shot, dutch angle, standing, leaning to the desk, hands in pockets, computer room, wires, cables, neon lights, dark room, doctor, blurry background, blurry foreground, <lora:r9junko:0.7> <lora:r9style:0.1> junko suzuki, heterochromia, goggles, multicolored hair, crop top, halterneck, white long lab coat, (lab coat:1.2), shorts, thighhighs, Negative prompt: (worst quality, low quality, bad anatomy, extra digit, bad hand:1.3), monochrome, greyscale, cleavage, Steps: 40, Sampler: DDIM, CFG scale: 5, Seed: 2756447781, Size: 512x704, Model hash: cbfba64e66, Model: CounterfeitV30_v30, VAE hash: f921fb3f29, VAE: Counterfeit-V2.5.vae.pt, Variation seed: 1319694246, Variation seed strength: 0.1, Denoising strength: 0.1, Clip skip: 2, Hires upscale: 2, Hires upscaler: 4x-UltraSharp, Version: f0.0.7-latest-41-g6aee7a20

プロンプトはLoRAを呼び出してキャラの基本的な特徴を描写させるものに加えて、追加の服装、キャラの表情やポーズに関するもの、背景やシチュエーションに関するもの、撮影効果やポストエフェクトに関するもの、という具合に列記していて、特別なテクニックはないと思います。敢えて言うならば、クオリティタグ(masterpieceなど)やTextual Inversion(EasyNegativeなど)は一般的にはよく利用されているようですが、絵柄に影響するため使用していません。絵柄LoRAの効果が弱まるのです。

Clip Skipは2、サンプラーはDDIMでステップ数は40、CFGスケールは5で、このあたりは使用するモデルによって大きく変わる内容のようで、あれこれ試してこの数値に落ち着いています。つまり今はもうほとんど固定。

画像サイズは、目指す構図にもよりますが、512x704ピクセルが最も安定した結果を得られます。この場合、1枚生成するのにかかる時間はおよそ5~6秒で、少しずつプロンプトを変えながら繰り返し生成し、イメージする絵に近づけて行きます。惜しいけどこの部分のこの色が違う、とか、指が失敗して描写されちゃった、とかの場合は、Seed値を固定してVariation seedをランダムにしたままVariation strengthを0.1くらいで再度試してみると、微調整の範囲内でいい結果が得られることがあります。

Seedが決まったら、Hires.fixを使ってアップスケール(高解像度化)します。アップスケーラーは4x-UltraSharpを使い、Denoising strengthは0.1くらいにしておくと、元の絵のニュアンスを保ったまま細部を描き込んでくれます。単に引き延ばすだけでなく、程よく詳細を描き込んでくれる。とはいえ2倍解像度までが関の山で、最終的な解像度は1024x1408ピクセルというところ。これ以上はグラボのメモリ不足で処理が止まってしまうことがある。

おおよそ以上のような流れで作っています。ご覧の通り、ControlNetもほとんど使わない素のtxt2imgがメイン。で、これでどんなシチュエーションや構図でも何でも思いのままに「描ける」かというと、まったくそんなことはなくて…やはりAIにも得意なものと苦手なものがある。

よく言われる指の数なんかもそうだし、グラスや銃など何かを持たせること、天地逆さのポーズや大胆な画角や構図も苦手。これは学習素材の不足というよりもSD1.5の限界であるらしく、後継のSDXLやそのモデルであるPonyなどではある程度解消されつつあるとのことですが、おそらくまだ完全には解決していない。

なので、周囲を見渡しても体感としてこの一年間、最初にStable Diffusionが来たときのようなドラスティックな技術革新は起こっていなくて、じわじわマイナーアップデートしているという感じです。意外と進化のスピード遅いのかな? みたいな。それとも、またいずれかのタイミングで一気にドバッと降りてくるのかな。総じてこの一年は、技術の進化を追うというよりも、人間(わたし)が慣れていく過程であったと言えると思います。

LoRAを作って使うコツ

ところで、たぶんローカルのStable Diffusionを触ったことのない方には、この追加学習モデルであるところのLoRAというのが一体なんなのか、今ひとつイメージしにくいままなのではないかと思います。

いわゆるLoRAは、ファイルサイズ数十MBからなる拡張子.safetensorsの単一ファイルで、例えば所定のディレクトリに格納したr9junko.safetensorsを、プロンプトから<lora:r9junko:0.7>のようにして呼び出して使用します。この「0.7」という数値は、いわばそのLoRAの「効きかたの強さ」で、大きいほど強くなる。通常は0.1から1くらいまでの間で指定します。

じゃあそのLoRAファイルをどうやって作るかというと、512ピクセル四方のjpgやpngの画像素材と、それぞれの画像の内容を示したカンマ区切りの単語群(「タグ」と呼んでいる)のテキストファイルとを対にした学習データセットを元に、専用のバッチプログラムを走らせて作成します。素材の量と設定値にもよりますが、作成にかかる時間は20~30分くらいです。

r9junko.safetensorsの学習元データセット(絵はすべて自分の手描き)

r9junko.safetensorsの場合は、上記の14枚の素材から作成しています。このうち1.pngのタグファイルにあたる1.txtの中身は、次のようなものです。

junko suzuki, 1girl, bare shoulders, black shorts, black thighhighs, crop top, detached sleeves, fingerless gloves, gloves, looking at viewer, midriff, navel, open mouth, shorts, simple background, solo, thighhighs, white background, from above, messy hair, cowboy shot, outstretched arms

先頭の「junko suzuki」はLoRAを呼び出すときに使用するトリガーワードで、それ以外は「その画像に何が描かれているか」を説明する言葉。これは自分で好きなように書いてもいいし、WD1.4 Taggerという拡張を利用すると、なんとAIが勝手にその絵に何が描かれているかを判断してテキストに起こしてくれます(これが地味に驚く)。手描きの拙いイラストからでも、その絵の人物が何を着てどんなポーズでどんな表情をしているかをAIが理解してくれるの、少し嬉しくなってしまうよ。

さて、AIはその学習プロセスにおいて、上記のデータセットのうちの画像ファイル群から、「すべての画像に共通する特徴」を見出して学習するようです。しかもこのとき、画像と対になっているタグファイルがある場合はその文字列を参照して「この絵にはこれが描かれている」ということを踏まえてくれるので、そうした明示的にユニークな特徴を除き、タグに含まれていない特徴を学習するようになっている(らしい)。

上記の例で言うと、キャラの特徴であるオッドアイ(heterochromia)やゴーグル(goggles)は学習してほしいので、タグには含めていません。タグに含まれる文字列は、先頭のトリガーワードを除いて、すべてLoRAに「学習してほしくない要素」ということになります。経験上、ここがけっこうLoRA作りの勘所になる部分。手を伸ばしているポーズの画像素材にoutstretched armsというタグをつけていない、というように素材のタギングが不十分だと、そのLoRAを適用するたびに同じポーズの絵が出てきてしまう、という結果になりがち。柔軟なLoRAにしたいなら、なるべくこのタグの言葉選びを細かく検証することが効いてくるようです。

完成したLoRAの適用方法に関して、わたしの場合、r9junko.safetensorsのように絵柄とキャラをセットで学習させた絵柄・キャラLoRAと、自分で描いた雑多なキャラ、つまり絵柄のみを学習させた絵柄LoRAを組み合わせて使う形が多い。前者だけでも良いのですが、例えば、ポーズを指定するプロンプトの効きが悪いのでウェイトを0.5くらいまで下げたいが、自分の絵らしさは保ったままにしたい、といったようなときに絵柄LoRAを併用すると期待した結果が得られることがあります。

【絵柄・キャラLoRA:0.9】
元の学習素材に引っ張られてかポーズが硬い
【絵柄・キャラLoRA:0.5】
効果を弱めると自分の絵柄からかけ離れてしまう
【絵柄・キャラLoRA:0.5+絵柄LoRA:0.1】
絵柄LoRAをごく弱く掛け合わせることで自分の絵柄に寄せる

画像生成の手順などについての話はこういったところです。

AIの使いかたの理想と現実

ところで、前回の記事のなかでは、クリエイターの理想のAIの使いかたについて次のような展望を書きました。

前々から考えているのは、好きなこと・得意なことはこれからも人間が楽しんでやり、苦手なこと・面倒なことだけをAIに任せられないかということ。(中略)こんな感じで、人間は美味しいところだけやっていきたい。好きで描いているのだから、全部は取り上げられたくない。

あれから一年経って、実際にこのように「苦手な部分だけをAIに任せる」という使いかたができるようになったかというと…残念ながらまだそうなってはいません。

使いかた次第で、塗りだけをAIに任せるみたいなことは多分できなくもないんですね。AIが描いたラフを元に人間が頑張る、みたいなこともできなくはない。イラストレーターさんや漫画家さんの中には、たぶんもう実際に工夫してやっている人もけっこういるはず。

1girl, solo, looking at viewer, facing viewer, (angry:0.9), confident, closed mouth, riding, mecha, in the cockpit, battle, cyborg, neon lights, backlighting, headlight, dust, light particles, horizontal flash lights, <lora:r9junko:0.9> <lora:r9style:0.1> junko suzuki, heterochromia, goggles, multicolored hair, crop top, halterneck, bare shoulders, detached arm cover, midriff, navel, shorts, thighhighs, Negative prompt: (worst quality, low quality, bad anatomy, extra digit, bad hand:1.3), monochrome, greyscale

なんだけど、作例で示したように、自分の絵柄LoRAを使ったtxt2imgの生成だけで95点くらいの理想の絵が出てしまうと、もうそれでいいじゃん、みたいな感情もある。仮にAIがうまく描けなかった指を修正するとかしたとして、それを自分が「描いた」ものとして発表する気にはならないし、であればその時点で完成にしちゃう。誰に見せるためのものではなく、自分のためのものならば尚更、そこで満足することができてしまう。

他方、AIの絵が理想の完成形であるからといって、その絵をお手本にして手描きで練習を頑張れるかというと、正直なところそんなモチベーションは湧いてこないわけです。それよりもわたしの場合、更に深刻なフィードバックがありました。

「絵が描けなくなった」

Stable Diffusionを触り始めた去年4月末以降、手描きのイラストがめっきり描けなくなってしまったんですね。ほとんど落書きのようなものとはいえ、それまで年に150~200枚ほどのペースで描いていたのが、10分の1以下になってしまった。アウトプットが思うようにいかない。お絵描きが楽しめない。長年やっているとスランプのようなテンションの浮き沈みはもちろんあるんですが、今回はそういったものとも違って、いつも描く前から八方塞がりのような感じ。自分にとってはそれなりに由々しき事態でした。

これは仮説ですが、自分の絵柄を学習させて、それを使ってAIで出力していると、「自分の絵柄に似ているけど自分よりも上手い絵」を日常的に、しかも大量に見続けることになる。そうすると何が起きるか。描くというのは、自分の脳内にあってまだ自らも形が見えていないものを形にすることなので、この場合、いざペンを握って描こうとするものが、おおよそ「既に見たもの」になってしまうのです。自らのイマジネーションの限界が、描く前に分かってしまう。これは恐ろしいことですよ。

ただ、わたしの場合、今年に入ってからは多少はこのショック症状から持ち直しつつあります。だんだん、以前のような感覚で描けるようになってきた。というのは、突き詰めるとAIの絵と自分の絵の隔たりは大きすぎて、両者の間を目指すというのではなくて、むしろ人間は人間で描きたいように描く、という割り切った付き合いかたができるようになってきたからなのかも。AIみたいに上手く描けないけど、それはそれとして自分の作品は好き、という、そのマインドが揺るがない限りはまだ大丈夫な気がしています。

AIイラストは簡単か

このように、絵描きが画像生成AIに入れ込むことにリスクもあるとは思うのですが、それでもなお、わたしは絵を描く人にこそAIを触ってみてほしいと思っています。無論、ローカル画像生成にはデスクトップPCと高価なグラボが必要になるというハードルはある。でも、お絵描き界隈におけるAIに対する認識の乖離は、無料のWebサービスでお試しでできるようなものと、ローカル環境を使って自作の追加学習モデルを使えるようなものとの環境の差異によっても生じているような気がする。見えている世界が違いすぎる!

一年間、実際に画像生成AIを触ってみて感じたことは、AI、簡単に絵が出てきてずるいみたいなことを言われがちだけど、難しいのです。いいものを作るには普通に技術が要る。それは単に知識や小手先のテクニックというようなオペレーションの話だけではなくて、作品制作におけるディレクション能力というか、もっとシンプルに言うと「最終的にこういう絵にしたい」という強力なパッションの有無です。漫然とガチャを回すように生成していても、永遠に魅力的な絵は出てこない。そういうふうにできている。

そしてまた、AIによって出力された大量の絵の良し悪しを判断することも、たぶんある程度「自分で描く人」でないと不可能のように思います。審美眼というほど大げさなものではないけど、物差しというか。世のAI絵のほとんどが凡庸な"マスピ顔"で溢れている理由がまさにそれで、あれはAIだからああなるのではなくて、良し悪しの物差しを自分のなかに持たない人が大半で、そういう人たちがAIで作るから、ああなってしまうんだろうなというのが今はよく分かる。

絵を描く人ならば、おのおの今までに培ったパッションと物差しをそのままAIにも持っていけると思うし、個人的にはそうして生まれる優れた作品をもっともっと見てみたいという思いです。

ただし、成果物としてのAI生成作品をどのように扱うべきかは、正直なところ自分のなかでもまだ答えが出ていません。AIを使った方法でしか超えられない壁とか、生まれ得ない作品がおそらくある。しかしそれをそのままその人の作品として発表していいものか。そうではなく、人の手を加えてあくまでシナジーを図るべきなのか。その場合、人間何パーセント・AI何パーセントなら妥当なのか。
様々な側面から、AIイラストはまだまだ難しいなと思います。

「学習」をめぐって

画像生成AIの利用に関して取り沙汰されるのは、やはり今も「学習」の是非に関するものが多いようです。自分としては、人間であっても機械であっても、学習には許諾も規制も不要という考えかた。どちらの立場を想像してみても、学習することもされることも制限されたくない。

むしろわたしは学習されたい。他の誰のものでもない、誰がどう見てもこの絵はこの人の作品だと言われるような突出した個性。わたしのあとに続くほかの誰かの学習欲の対象となるような個性は、創作に携わる自分が長年追い求めてやまないものです。

なので、わたしは自分の作品をAIに学習されても一向に構わないけれども、しかしそれによって生成された絵を作者を偽って発表されたら普通にイヤだし、なんか無断で良くないことに利用されたらそれは困る。そういうことはされたくない。

するとやはり、これは学習云々といったインプットの問題ではなく、アウトプットの倫理の問題であると言えないでしょうか。美大生が美術館で模写することが許されても、贋作絵師が模造品で商売することが許されないのと同じように。あるいは、ファンが絵柄を真似ても問題ないのが、その絵柄で作者を騙ることが問題なのと同じように。

倫理にもとる行為を未然に阻止したいという心情はもっともだと思うのですが、変な話、権利的にクリーンなモデルがあったとしても、メタ情報による学習トレーサビリティが確立したとしても、悪意のある人は悪いことをするのだし…。もう背後に現実の虎がうろついているのに、屏風絵のなかの虎を縛り付けようとしていない? たった512x512ピクセルの画像10枚から、顕著な特徴を抽出した追加学習データが20分で作れてしまうことを踏まえると、尚更そのように思います。

新しい道具

いま改めて考えることは、画像生成AIはどこまで行っても「道具」だなあということです。たとえ熟練の大工さんから大工道具一式を譲り受けたとしても、それで立派な家が建つわけじゃない。道具だから、うまく使うのには技術が要る。道具だから、使いようによっては凶器にもなりうる。あくまで道具であって、魔法のようなものではないということです。

新しい道具が真に優れたものなら、古い道具に取って代わることもあるかもしれない。そのときは、次の世代がわれわれよりもうまくその道具を使いこなすのだろうし、そうあってしかるべき。そんな中でも、自分は自分なりに、引き続きうまい使いかたを探っていきたいなと思います。

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