Anima Tile & Repair ControlNet-LLLiteを使ったTileアップスケール
先日、Anima Tile & Repair ControlNet-LLLite(以下、Anima Tile & Repairと省略)について紹介する記事を書きました。
その記事ではAnima Tile & RepairのうちのRepair(修復)のみを対象としましたが、Tileアップスケールにも使えることを確認できたため本記事ではそちらを解説します。
本記事で扱う「アップスケール」について
本記事で扱う「アップスケール」は、特に言及しない限りアップスケーラーによるアップスケール後の再描画 (img2img) も含むものとします。
Stable Diffusion WebUIのtxt2imgタブにおいてHires.fixと呼ばれている機能の処理と同等ということです。
Anima Tile & Repair ControlNet-LLLiteとは
Anima Tile & RepairはCivitaiで配布されているAnima ControlNet-LLLite用のモデルです。
詳しくは以前の記事を参照してください。
Tileアップスケールとは
Tileアップスケールは、画像生成においてはSD1.5の時代から使われている手法です。「Tileアップスケール」という定まった用語や定義は無いようなので、本記事では以下のいずれかを表すことにします。
単純なTile分割との組み合わせ(SD型)
画像をTileに分割 → Tile毎にバラバラに処理 → Tileを結合
機能例:SD Upscale, Ultimate SD Upscaleなど
```mermaid
%%{init: {
'themeVariables': { 'commitLabelFontSize': '18px' }
} }%%
graph LR
classDef class1 fill:#ffa23e,fill-opacity:0.5
A(画像):::class1 --> B
subgraph Hires_fix [SD Upscale]
B[アップスケール] --> C[画像分割]
C --> D[img2img]
C --> E[img2img]
C --> F[img2img]
C --> G[img2img]
D --> H[画像結合]
E --> H[画像結合]
F --> H[画像結合]
G --> H[画像結合]
end
H --> I(画像):::class1
```MultiDiffusionまたはMixture of Diffusersとの組み合わせ(Region型)
画像をRegion(領域)に分割 → Region毎に全体となじませながら処理
機能例:MultiDiffusion Integrated, Tiled Diffusionなど
```mermaid
%%{init: {
'themeVariables': { 'commitLabelFontSize': '18px' }
} }%%
graph LR
classDef class1 fill:#ffa23e,fill-opacity:0.5
A(画像):::class1 --> B
B[アップスケール] --> C["分割画像生成<BR>(MultiDiffusion<BR>or Mixture of Diffusers)"]
subgraph Hires_fix [MultiDiffusion Integrated]
C
end
C --> I(画像):::class1
```後者は個人的に "Tile" ではなく "Region" 分割のほうが分かりやすいと思うのですが、Tiled Diffusionという機能で有名になったためかTile分割として扱われています。本記事では区別のためRegion型と呼ぶことにします。
過去記事でも紹介、比較しています。
方式的にはRegion型のほうが高度かつ複雑で、前提条件を揃えればRegion型のほうがSD型よりも良い仕上がりになるはずです。
しかしRegion型を使う場合でもプロンプトをRegion毎に別々の内容にすることが困難だったり、1girl画像では画像生成モデルが特定部位のみを描けるよう学習されていなかったりするため、処理内容ほどの効果がないことが多いです。
特にDenoiseが0.2~0.3以下の場合はそもそも元画像からの変化が少ないため、SD型もRegion型も仕上がりにほとんど差がありません。
そのため現在は、理解が難しく設定が面倒なRegion型よりもSD型、特にUltimate SD Upscaleを使ったり勧めたりする人が多いです。
ちなみにRegion型は処理方式的にはDetailer (ADetailer) が近いと思います。Detailerは特定部位に特化したプロンプトとモデルを利用するので、文字通り詳細化としては強力です。Denoiseを大きくするとその部位だけ画風や色が変わってしまうのが難点ですが。
TileアップスケールとCN Tileの組み合わせ
SD型もRegion型も、Denoiseを大きくすると破綻します。
画像生成モデルによって多少異なりますが、Denoiseが0.7~0.8以上になるとSD型とRegion型のいずれも元画像の構図から逸脱してバラバラの画像になってしまいます。

以下は上図の4分割Tileアップスケールにおいて、SD型、Region型いずれもDenoise=0.8で構図が破綻した例です。
Prompt, Sampler, Model, etc.: txt2imgと同一
Upscaler: RealESRGAN_x4plus_anime_6B
Scale: x2
Steps: 10
Denoising strength: 0.8
tile_width: 1024
tile_height: 1280
tile_overlap: 64


これを防止して元画像の構図から逸脱しないようコントロールするのがControlNet Tileです。
SD/SDXLではSD型、Region型のいずれについてもControlNet Tileと組み合わせることで、たとえDenoise=1.0(元絵を100%描き直し)にしても構図が破綻せずアップスケールすることができます。
以下はillustrious用のControlNet Tile (ControlNetillustriousXL_tile_v2.5) を組み合わせ、SD型、Region型それぞれDenoise=1.0でも構図が破綻しなくなった例です。


しかしSD型ではTile間の色の違いが大きくなり、Tileの継ぎ目がハッキリ分かってしまいます。Region型も右上は色変化が大きいのですが、SD型よりも目立たないよう処理されています。
Seedが変わっても同じ傾向で、Region型はControlNet Tileと組み合わせてDenoiseを大きくしたときに真価を発揮すると思います。
Anima Tile & RepairとTileアップスケールの組み合わせ
前置きが長くなりましたがここからが本題です。
結論を先に書くと、Anima Tile & Repair、というかAnima ControlNet-LLLiteを組み合わせ効果があるのはSD型のみです。前節で持ち上げましたが、現時点ではRegion型にAnima ControlNet-LLLiteを組み合わせても効果がありません。
ComfyUI、Forge Neoそれぞれでの使い方を解説します。
ComfyUIでの使い方
ComfyUIのワークフロー (WF) はCivitaiで公開されています。
執筆時点で以下のバージョンが公開されています。
USDU+CNtile
ComfyUI Ultimate SD Upscale FLS LLLiteとAnima Tile & Repairを組み合わせたWFCNTile
ComfyUI_essentialsのImage TileおよびImage UntileとAnima Tile & Repairを組み合わせたWFUSDU
ComfyUI Ultimate SD Upscaleのみ、Anima Tile & Repairは利用しないWF
このうち3.USDUは、ComfyUI Ultimate SD UpscaleがAnima ControlNet-LLLiteに対応していないためAnima Tile & Repairは利用されていません。本記事の内容とは無関係なWFです。
1.USDU+CNtileは、ComfyUI_UltimateSDUpscaleをAnima ControlNet-LLLiteに対応するよう改良したようなカスタムノードを利用しています。私はリリースされたばかりで利用者の少ないカスタムノードをインストールしたくないため、2.CNTileで試して期待どおりに動作することを確認しました。
2.CNTileも私の環境にインストールしていないカスタムノードを利用していたため、それらを利用しないよう少し改修しましたが、下図がWFを実行した際の主要部分のスクリーンショットです。

Denoise=1でもAnima Tile & Repairのコントロールにより破綻せずTileアップスケールされていることが分かると思います。
Forge Neoでの使い方
Forge Neoは簡単です。
ControlNet IntegratedでAnima Tile & Repairを使いつつ、SD UpscaleでTileアップスケールするだけです。
Tileサイズの指定方法は "Upscale the image by the selected Scale Factor; use the Width and Height to set the tile size" というメッセージのとおりです。

なお、Ultimate SD Upscale extensionとの組み合わせでは良い結果が得られませんでした。
作例
せっかくAnimaで再描画するので、プロンプトに以下の自然言語指示を追加してTileアップスケールしました。
黒板の文字のuがおかしかったので改めて "Hatsune Miku" と指定
網タイツを細かいメッシュに指定
CN_strength / Control Weightが大きいと入力画像からほとんど変わらないため、変化が必要な場合は0.5~0.6で調整するとよいです。ただしTileに跨って変化させる場合は、変化がTile間で整合するまでかなりSeedガチャが必要になるので、アップスケール前に書き換えたほうが早いです。

Animaのアップスケール方法の正解は?
ユーザーの環境や嗜好によってアップスケールに求めるものは異なるため、アップスケール方法にそもそも正解はありません。
(ただし明らかな失敗、または失敗しやすい方法はあります。)
Animaの場合はbase-v1.0でも1536 x 1536 以上の高解像度での再描画 (img2img) でノイズが出やすいため、そのような高解像度へアップスケールしてAnimaで再描画する場合はTIle分割が必須です。Tileサイズが小さく分割数が多い場合やDenoise値が大きい場合には、今回解説した方法が役に立つと思います。
しかし私自身は今回解説した方法を使うことは無いような気がしています。
Animaの良さは、自然言語を含めたプロンプトへの追従性と構図の自由度の高さ、総合的なバランスの良さだと思うので、仕上げ(再描画)はAnimaよりも速くて上手い他のモデルに任せたほうがよいと思うためです。
現時点のAnimaでtxt2imgして最終的に2048 x 2048クラスの解像度で画像を完成させたい場合、私は以下のいずれかを使います。
方法1.アップスケールを使わず、2048 x 2048で直接txt2imgする。
方法2.アップスケール後の再描画はDenoise=0.2~0.3を使うためControlNetは不要。モデルはAnima、Illustrious、Z-Image-Turboから仕上げたい絵柄などによって選択する。
方法3.SeedVR2でアップスケールする。
場合によってDetailerを併用する
最初に書いたとおり、人によって異なると思います。
まとめ
Anima Tile & Repairを使ってTileアップスケールする方法について、その意味と手順を解説しました。
2048 x 2048以上の解像度へTileアップスケールしつつAnimaで再描画する場合に役立つと思います。
このような感じで、技術的な内容を分かりやすく基本無料で解説しています。「スキ」「フォロー」「チップ」で応援よろしくお願いします。質問がありましたら遠慮なく「質問箱」へどうぞ。
