見出し画像

【中級】AI生成の手・指の修正方法(Krita AI diffusion編)

はじめに

指は生成AIの最も苦手とするところであり、どの生成システムもあまり進歩していません。苦手な理由は、2次元の拡散法だから、数の概念を理解していないから、人間側の認識(不自然を感じやすい)が原因、等さまざまあるようですが、拡散法の学習だけでは難しく、手の処理だけをAI側で特別扱いしなければ正しく表現できないというのが現状です。

Stable Diffusion では、ControlNet で手の形を誘導させる方法が一般的に利用されています。しかしながら、この方法で上手くできるのは単純な手のポーズだけで、背景と干渉していたり両手が重なっていた場合は、まず失敗します。

現状で、どんな状況でも必ず修正できるやり方は、手だけを3Dレンダーで合成させる事ですが、非常に面倒です。

もうひとつはインペイントを利用するやり方です。手を”手書き”して img2img するやり方です。しかし一回で成功する事はなく、3Dモデルほどではないですが面倒です。

そこで、基本的にはインペイントですが、ペイントソフトの Krita プラグイン krita-ai-diffusion で LCM+live 機能を利用すると、リアルタイムに手の修正が可能になります。しかも Krita の豊富な画像編集機能も同時に利用できるので、通常のインペイントと比較にならないほど効率的に作業できます。リアルタイムに確認できるわけですから。

この記事では Krita (krita-ai-diffusion)を利用した手の修正の紹介をします。

前準備

もちろんKrita を利用するので、ペイントソフト Krita と そのプラグインである krita-ai-diffusion をインストールする必要があります。それなりに面倒ですが、実践的な事に集中するために、説明は割愛させてもらいます。(※ たぶん別記事に書くと思います。krita-ai-diffusion を利用した事がない方は、何の事かわからないと思いますので)

指を修正すべき生成画像

上画像を修正していきます。指の重なりがあると、ControlNet の手法では非常に困難です。

Stable Diffusion では、学習時の解像度で生成すると最も綺麗になります。Krita の生成機能はキャンパス全体を必ず生成するので、修正すべき場所だけを作業前に切り取ります。

修正すべき場所

生成対象にするオブジェクトを 512x512 解像度(学習時の解像度)にするのが良いです。学習時に 512x512 または 768x768 解像度で学習されているからです。筆者のやり方は、アップスケーラを利用した画像全体の拡大を行い、対象が 512x512 近くの大きさになるように拡大してから切り取っています。先に全体を拡大する手法をとると、AIが画像の量子化度合(鮮明さ)を一致させてくれるので、品質も良くなり、元に戻す時も楽になるからです。

本来は、krita-ai-diffusion が生成解像度を動的に変更できる機能があればいいのですが、現状はキャンパスサイズに固定されているようです。

Krita(krita-ai-diffusion)

Krita に読み込ませます。

Krita-ai-diffusion ①

修正すべき範囲を指定して、必要であれば、ブラシでレタッチしていきます。範囲を指定しない場合は全体が生成されてしまいます。

krita-ai-diffusion ②
krita-ai-diffusion ③

基本的にはただの img2img インペイントですが、リアルタイムに反映されることと、レイヤー機能が便利なので、効率的に作業できると思います。

完成

切り取った部分を元の画像に戻して完成です。


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