こんばんは、スタジオ真榊です。今夜は2023年4月25日付で完成したばかりのControlnet1.1用モデル「Tile」についての報告です。Controlnet1.1で使えるものの中でもひときわ異質なこのモデル。アップスケール用なのか?それともCannyやDepthのように構図を写し取るためのものなのか?いろいろと検証してみました。

※Controlnet全体についての基本的な使い方や各モデル紹介については、こちらの記事(▼)をご参照ください。

Tileってどんなモデル?

Controlnet1.1が公開された当初、Tileは「未完成」という注釈つきのモデルでした。モデル一覧では「control_v11u_sd15_tile」が公開され、プリプロセッサ一覧には入力画像にガウスぼかしを掛ける「Tile gaussian」というものが掲載されていました。その後、2023年4月25日に「完成」がアナウンスされ、新たなモデルとして「control_v11f1e_sd15_tile」が公開。「Tile gaussian」は「tile resample」に姿を変えた…という経緯があります。

一体、何ができるモデルなのか?公式に書かれている説明は下記のようなものです。

・このモデルはさまざまな方法で使用できますが、大きく分けて、次のような2 つの動作をします。

1.入力画像の細部を無視して、新しいディティールを生成する

2.分割したタイルのsemantics(データが意味するもの)とプロンプトが一致しない場合、プロンプトを無視して生成を行う

入力画像の細部を無視できるため、低品質なディティールを洗練されたものに置き換えることができます。

わかるような、わからないような。

例えば、64×64の小さな犬のアイコンをそのまま8倍の512×512にズームすると、

Tileってどんなモデル?:図版1
Tileってどんなモデル?:図版2

このようにぼやけてしまいます。これは元画像のディティールが画像縮小の影響で失われてしまっているためですね。これを入力画像にしてi2iで高品質にしようとしても…

Tileってどんなモデル?:図版3

元画像の「低品質な細部」にひっぱられて、このように低品質な画像ができてしまいます。Tileはこうした「低品質な細部」を無視しつつ、もとのアイコンの犬の全体の形を保ちながら、アイコンに存在しない詳細な毛並みに置き換えてくれるというものです。

こちらの画像をご覧ください。

Tileってどんなモデル?:図版4

これは、i2iではなくt2iで、先程の64x64pxの画像をTileで読み込ませて512x512で生成したもの。元画像になかったディティールが追加されていることが分かると思います。

「おお、じゃあこれ、アップスケール用のモデルなんですね?」と思うところですが、公式はあくまで「アップスケールもできるが、本来はディティールの置き換え(または追加)を行うモデル」だと念を押しています。

公式が提案する「Tileの使い方」は次の5つ。

①2倍、4倍、または8倍のアップスケールができる

②入力した画像のディティールを追加、変更、または再生成できる

③RealESRGANなどのアップスケーラーによって崩壊してしまったディテールを修正、改良、改善できる

④ノイズ除去強度を最強の「1」にしても、タイルごとに別の絵になることを防げる

⑤簡単に色分けされた下書きイラストを完成させられる

このうち、①のアップスケールについては、ほかのアップスケーラーのようにイラストを高解像度化するのではなく、「イラストに描かれたものを認識し、より高い解像度でゼロから描き直す」のだというのです。一体どういうことなのか?それを今回検証していきたいと思います。

インストール上の注意

他のモデルと同じように、こちらの一覧から「control_v11f1e_sd15_tile」をダウンロードして、「stable-diffusion-webui\models\ControlNet」もしくは「stable-diffusion-webui\extensions\sd-webui-controlnet\models」に格納すればOK。

もし未完成品の「control_v11u_sd15_tile」がcontrolnetのフォルダに入っている人は削除しましょう。また「control_v11u_sd15_tile.yaml」がフォルダ内にある場合は、「control_v11f1e_sd15_tile.yaml」をダウンロードして置き換えます。Tileを使っても入力した画像と似ても似つかない画像が生成されてしまう場合は、モデルと同名のyamlファイルが同じフォルダにあるかどうかをまず確かめてください。

置き換えとは何か

さて、ここまででわかったことは、Tileが「画像の全体構造を維持しながら、ディティールを置き換える」ことができる、入力した画像の「詳細描き直し」とでも言うべき機能だということです。i2iやSDUpscaleとどう違うのかといえば、それらで8倍サイズに拡大するときは、ノイズ除去強度を低くしないと崩壊してしまうわけですが、Tileは全体像を守りながら「似たものを詳細に」描けるというのです。

Tileという名前から思いつくように、これまでも入力した画像をタイルのようにいったんバラバラにして、それぞれを高解像度化し、再び同じように接着する試みが行われてきました。「SD Upscale」や、拡張機能の「TiledDiffusion」などがそうですね。入力した画像をタイルのように分割し、おのおののタイルの細部を高精細に置き換えてから、また元の形にくっつける。通常、これをノイズ除去強度高めで行うと、こちらの右側の画像のようにプロンプト指示がそれぞれのタイルに個別作用して、イラストがバラバラになってしまいます。

置き換えとは何か:図版1

これは「2girls,maid,cith,sky」で生成した絵を横4つ✕縦6つのタイルに分割し、それぞれ高精細化しようとしたとき、プロンプトにある「2girls」が効きすぎてしまい、それぞれのタイルが2girlsに化けてしまっています。ノイズ除去強度が控えめならこうした問題は起こりませんが、0.5を超えるとすぐにこうした不都合が起きてしまうのが難点です。

「Tile」が独特なのは、分割されたタイルそれぞれに何が描かれているかを自分で認識して、指示されたプロンプトと異なる場合はその影響を弱めてくれる点。さきほどの失敗例で言えば、「ここを2girlにしちゃだめだな」と空気を読み、プロンプトを意図的に無視して「化け」を防いでくれるというのです。

この「タイル式アップスケール+プロンプト取捨選択」が可能になったことで、元画像から2倍~8倍サイズにアップスケール&高精細化しても全体の構図が崩壊しないで済むわけです。ただ、入力イラストと全く同じサイズで生成しても「詳細の置き換え」は行われるので、厳密にはアップスケーラーというわけではありません。

また、開発者であるlllyasviel氏は「理由がわからないが、このモデルは基本的にcfgスケールが15以上で利用する必要があるようだ。とても不思議」とも書いています。実際には15未満でもうまくいくのですが、学習モデルによるのかもしれません。ヒントとして覚えておきましょう。