Stable Diffusionのimg2imgで思い通りの構図を手に入れる

img2img

これまで、stable diffusion web uiを使って画像生成を行ってきましたが、その手順は画風についてはモデル(checkpoint)を変更したり、パラメータを変更を行いました。絵の内容についてはプロンプトに「性別」、「髪型」、「服装」、「ポーズ」、「背景」などを細かく指示を行って、理想の絵に近づくまで繰り返し生成(ガチャを回す)を行ってきました。

思い通りの構図や、ポーズにするために、プロンプトの記述を試行錯誤したとしても中々どのようなを出せないことの方が多かったです。自分はまだまだ未熟で、素晴らしい絵師の方はどんなプロンプトを描いているのだろうと、いつも疑問に思っていました。

Stable Diffusionはプロンプトの記述から生成するツール(txt2img)だけではなく、その他のツールとの組み合わせ技で作成することができます。その一つがimg2imgです。以前から、stable diffusion web uiで画像生成に慣れてきたら使ってみたいと思っていました。

今回はimg2imgについて触れていきます。

img2imgとは

img2imgとは、「image to image」つまり「指定した画像を参考に、新たな画像を生成」します。これまで使用してきましたtxt2imgは「text to image」で、「text(プロンプト:呪文)から画像を生成」しました。

冒頭でも述べましたが、プロンプトでの指示は、伝え方によって誤解を招く可能性があります。その結果、想像している画像が得られないことが多くなります。

言葉での指示よりも、絵を描いてこんなイメージと伝えた方が、情報量が多く、認識齟齬が起こりにくいことは、日常生活でもよく経験するのでわかりやすいですが、AIの世界でも同じというところが面白いところですね。

前置きは、この辺にして、

img2imgの使い方

img2imgの使い方は、大まかに言うと「txt2imgのやり方に画像の指定を追加」します。さらに追加の機能としては画像でマスク(塗りつぶし)した部分のみ書き換えたりする機能もあります。

まずは、設定する箇所を確認します。上部は、txt2imgと類似しています。プロンプトネガティブプロンプトのテキスト入力のエリアがあり、その横にGenerate(生成)ボタンがあります。

違いはその下の画像を指定するエリアになります。当たり前ですが、画像を参考に画像を生成する機能がimg2imgですので、画像を指定する必要があります。画像を指定するエリアの上がタブになっていて、img2img、Sketch、Inpaint、Inpaint sketch、Inpaint upload、Batchと、見慣れないタブ名が並んでいます。後半でInpaintという機能について説明しますので、ここではさらっと見た目の確認に留めておきます。

指定する画像は、無料の画像サービスpixabayから拝借した画像を使用します。

①海でサーブボードを抱えて海に向かう男性

1つ目の画像は、「男性がピンクのサーフボードを抱えて海に向かって歩いている」画像です。プロンプトで指定する場合は、金髪のショートカットの男性、ウェットスーツを着て、荒い波の、天気は曇りで・・・のような説明をするでしょう。

プロンプトに何も指定せず生成

プロンプトを全く指示せず、上の画像を指定(ドラッグ&ドロップ)しただけで生成した画像がこちらになります。

雰囲気は何となく合っているようですが、気になる点はいくつかありますね。

  • こちらに向かってきている
  • 変な赤い鞄を持っている
  • 場所が砂浜、海ではなく、雲海と草原のようになっている
  • 服装がウェットスーツではない

ただ、何の設定もせず、プロンプトを何も指定をしなかったのに、これだけの画像を生成するのは凄いと思いました。

生成される画像に大きな影響を与える「Denoising strength」(デノイジング ストレングス:ノイズ除去の強さ)は重要なパラメータです。

  • 小さい:元の画像に忠実で、あまり変化がない
  • 大きい:元の画像からかけ離れた絵になり、自由度が増す

X/Y/Z plotを使って、Denoising strengthの違いで生成される画像がどのように変化するかを確認してみます。Denoising strength=0.7では、クッションのような物を持っています。AIに自由度を与えすぎたようです。逆に、値が小さいと元画像と変化がない画像が生成されました。

Denoising strength=0.5では、元画像を意識しつつ、書き換えています。

プロンプトを使用して女性に変えてみる

画像を与えてガチャを回して(ランダム生成:Seed=-1)も、それなりに良い画像が生成されることが分かりました。

img2imgには、画像の指定だけではなく、txt2txtのようにプロンプトの指定ができます。

男性の画像を指定して、プロンプトで女性と指定するとどうなるか見てみたいと思います。
ガール・長い黒髪(1girl 、long hair、black hair)が特徴的なキーワードです。

1girl, solo, walking, barefoot, from behind, long hair, black hair, full body

指定した「ガール・長い黒髪」は、しっかり反映して生成されています。ただ、持っているものがサーフボードではなくクッションのようなものになりました。

1girl, solo, walking, barefoot, from behind, long hair, blonde hair, full body, red surf board

プロンプトの変更点は、髪色がイメージと違ったのでブロンド(blonde hair)に変更しました。また、持っているものがサーフボード(surf board)であることを明示的に指示してみます。

足のつま先がおかしいですが、髪色、赤いサーブボードがしっかり反映されました。

おもしろいのが、サーフボードを指定したことにより、サーフィンをする人の服装だと判断してウェットスーツに自動的に書き換えてくれているところが素晴らしいです。

画像で雰囲気を伝えて、詳細強調したい部分プロンプトで指示することで、欲しい画像に近づけることができますね。img2imgを使った画像生成の流れが見えてきました。

②猫が寝ている写真

何も指定せず実行した結果が下の画像です。耳が変ですね。

サーフィンの画像はAIからすると単純な画像なのか、1発でそれなりの画像が得られましたが、こちらの猫の画像は、目をつむっていたり、模様が複雑で、どこが顔なのかの認識が難しいのか、良い画像がなかなか得られませんでした。

また、このモデル(check point)が、美女に特化したモデルであり動物が苦手という可能性もあるかもしれません。

それでは、猫をトラに変えてみます

ぱっと見は、トラだと分かりますが、頭が尖っていたり、目がおかしかったりします。

部分的に修正を加えたい場合、先ほど少し触れた、Inpaint という機能を使います。
Inpaintでは、元画像を塗っていき(マスク)、マスクした部分を中心に変更を行います。

したがって、絵の構図としては概ね良いが、手の形だけが気になったりする場合に、マスクして書き換えが行えるので、少しずつ修正を加えられるのはありがたいです。

画像内にアイコンがあり、ペンの太さの変更、アンドゥのボタンがあります。触ればすぐ分かるので詳細は割愛します。

結果は、尖がりが丸い耳に変わりました。GPUの利用制限時間になってしまったので、ここで諦めてしまいましたが、パラメータ等を変え何度か修正すれば、うまくいくと思います。

まとめ

今回は、以前から使ってみたかったimg2imgを使って、画像から画像を生成してみました。

使う前は、難しい印象でしたが、少し触ればすぐに慣れます。Denoising strength(デノイジング ストレングス:ノイズ除去の強さ)の調整がうまくいけば、あとは指定するプロンプトもtxt2imgほど多く指定しなくてもよいので、もしかするとimg2imgを最初に触った方が取っ付きやすかったかもしれません。

img2imgの方が、ステップ数(計算量、収束する回数、ノイズ除去する回数)が少なくてもよい品質の絵を出すことができるので、時間短縮にもなります。

画像生成の流れも、画像を指定して大まかな構図やポーズを決め、プロンプトやinpaintで微調整をしていくのが良いと感じました。inpaintについては今回、機能を触る程度でしたが今後、作りこみの部分も記事にできるとよいかと思っています。

コメント

タイトルとURLをコピーしました