MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【NovelAI Diffusion】絵や人形を使った画像生成のやり方

人形を使ってポーズ指定

絵や人形を使った画像生成

NovelAIDiffusionは、生成される絵に対して絵や写真で指示を与える「img2img」(image to imageの略語)の機能も搭載している。img2imgに絵を与える主な方法は3つある。

  • ①既存の絵を与える
  • ②手書きで絵を与える
  • ③3Dモデルでポーズを与える

img2imgは絵の一部修正の目的でも利用する。

それでは最初に3つの絵を与える方法を説明し、次にimg2imgの重要なパラメータであるstrengthとnoizeが与える影響、最後に絵の一部を修正する目的で行うimg2img(インペインティング)のやり方を説明する。

 

①既存の絵を与える

メジャーな「イラストや」の絵を使ってみる。

盾を持つ女性のイラストと階段を降りる女性のイラストをそれぞれ絵の入力とし、初音ミクをプロンプトで与えた。一番左が「イラストや」の元の絵で、右二つは生成された絵だ。

盾を持つ女性のイラストを入力(初音ミク

階段を降りる女性

ほぼ元の絵の構成で絵が生成されるのが分かる。この様に元の絵の情報を利用しての画像生成が可能だ。なおパラメーターのstrengthの数字を上げると元の絵の忠実度が下がり連想した様な生成になる(パラメータ詳細の章で説明、大抵は美しい生成になる)。

strengthを上げて生成

こちらは元々AIに生成させた漫画の絵を入力し、プロンプトに初音ミクを入力した例。

漫画の絵から生成

元の絵の良さを残しつつ、初音ミクっぽさをブレンドできている。この様な調整も色々とできる

 

②手書きの絵を与える

次に手書きの絵を与える方法を説明する。画面左上にある「Paint new image」をクリックと下記の編集画面が現れる。

手書き用の編集画面

とりあえずマウスで金髪、ショートヘア、水着の女性を適当に書いてみた。

そして生成すると、元の絵に比較的忠実な絵が生成される。

元の絵に忠実な絵が生成された

ここで手書きの絵をタブレットなどで精密に描かれる方はこれでも良いだろうが、通常は雰囲気を指定する程度でもっと綺麗な絵が生成されて欲しいと思うはず。その希望は同様にパラメーターのstrengthの数字を上げることで(元の絵の忠実度が下がるが)解決する。下の絵は実際にstrengthを0.9まで上げて改めて生成したもの。

strengthを0.9に上げて再び生成
 

この場合strength 0.9はやや上げ過ぎで元のイラストのイメージ(金髪ショートヘア)が薄れている

 

③3Dモデルでポーズを与える

3Dモデルをソフト上で作って与えるのも良いが、実際の人形を使うと手軽だ。そこでバンダイが販売しているモデル用フィギュアを使ってポーズなどを教示できるかやってみた。

バンダイの男女モデル

まずフィギュアをiPhoneの充電器に座らせて写真を撮り、それをupload imageで読み込ませて生成したのが下の写真。

モデルの座ったポーズで生成

座っている位置や角度など正確だ。次にハイキックさせてみた。

モデルにハイキックさせて生成

体の向きが違うが雰囲気的には良さそうだ。

次に男女の人形で女性が椅子に座って男性が側に立つポーズでやってみた。

男女のポーズで生成

微妙にモデルのポーズとは異なるが、右に男性が立ち、左に女性が座って何やら関係がありそうな画像が生成できた。

最後に二人の闘いで、パンチをしゃがんでかわすシーンを生成した。

闘うシーンを生成

概ね人形のポーズ、配置が再現されている様だ。

いずれの生成も人形のみならず、背景の色や配置なども反映されている点にご注意。

 

img2imgの重要なパラメータ

通常のtxt2img(プロンプトだけで画像生成)のモードの時には現れない2つのパラメータが登場する。strengthとnoizeだ。それぞれの役割を説明する。

  • strength:元の絵に対する忠実度
  • noize:新たな要素を加える度合い

strengthの実証

では再びイラストやの盾の女性の絵を使って、strengthの値を振ってみる。数字が下がる程、元の絵の忠実度が上がる。

まず0.5と0.7を比較する。0.5の方は元の絵が強く、ほとんど初音ミクの要素がない。0.7は元の絵の構成に近く、初音ミクも綺麗に描けている。

strength値 0.5と0.7

次に0.75、0.8を見てみる。0.75では盾の位置が自由化し、0.8ではギターを新たに持っている。

strength値 0.75と0.8

さらに0.9まで上げると盾なのか分からない程で、ある意味元の絵の意味がないとも言える。

strengthを0.9に上げて生成

この様に元の絵の忠実度とプロンプトで生成する絵のバランスをstrengthで取ることができる。

noizeの実証

AI画像生成におけるnoizeは元の絵に無い要素の追加、という意味合いで理解しても問題ないと思う。例えば先ほどの初音ミクの盾を持った絵は、元の絵の背景が真っ白だったため、常に白い状態だった。noizeの値を調整することでそこに背景を追加できる。

今度の例は上でも説明した人形を使って戦わせた写真を使う。strengthはの0.8程度で、noizeの値を0.8-0.9まで調整してみると元のモデルの構成や背景の影響が薄れ、リングの絵が追加された。

noize 0.8-0.9に変更した例

以上説明した様に絵を入力するimg2imgではstrengthとnoizeの影響が大きく、調整しがいがある所でもある。

 

絵を修正する(インペインティング)

生成された絵の一部を変更したい場合、元の絵に対して加工を行う「インペインティング」という手法が使える。実際にやってみよう。

例として「夕日を受けて海岸に立つ女性」のプロンプトで生成した絵を読み込む。

元の絵を読み込む

読み込むと画面の一番左上にその絵のアイコンが登場してすぐ下に「Edit image」があるのでそこをクリックする。すると読み込んだ絵の編集(加筆)が行える様になる。今回はロングスカートにすべく、読み込んだ絵のスカートを伸ばしたい部分を同じような色で塗りつぶす。

伸ばしたいスカート部分を塗りつぶす

塗り終わったら、プロンプトに元の絵と同じプロンプト「A girl standing on the beach in the backlight of the setting sun」を入れて生成する。するとスカートが長くなった絵が生成された。

しかし元の絵と違う女性になっている(下図の真ん中)。そこで先ほど説明したstrengthの値を0.3程度に落とすことで(元の絵に対する忠実度を上げる)、元の女性に近い絵が生成できる様になる(下図の右)。

左から元の絵、strength0.7(標準)、strength0.3

この様にパラメータ調整をうまく使うことで意図する編集も可能になる。

 

関連:漫画を作ってみる

漫画を描いたこともない筆者がNovelAIDiffusionの力を借りて漫画を作った方法の説明

programmingforever.hatenablog.com

 

関連:SEEDを利用したキャラ固定

NovelAIDiffsionではシードも重要だ。同じキャラを出現させ易くするSEEDの利用記事

programmingforever.hatenablog.com

 

関連:パラメータ調整による変化

NovelAIDiffsionでSEEDを固定して各パラメータを色々と調整した実証記事

programmingforever.hatenablog.com