Uni-ControlNetはT2I-Adapterよりも低コストで処理可能

T2I-Adapterよりも低コストで処理が可能なUni-ControlNet 画像生成

「T2I-Adapterは処理が重い・・・」
「Multi ControlNetは組み合わせがイマイチ・・・」

このような場合には、Uni-ControlNetがオススメです。
この記事では、Uni-ControlNetについて解説しています。

本記事の内容

  • Uni-ControlNetとは?
  • Uni-ControlNetのシステム要件
  • Uni-ControlNetのインストール
  • Uni-ControlNetの動作確認

それでは、上記に沿って解説していきます。

Uni-ControlNetとは?

GitHub - ShihaoZhaoZSH/Uni-ControlNet: [NeurIPS 2023] Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models
Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models - ShihaoZhaoZSH/Uni-ControlNet

Uni-ControlNetとは、新しい制御可能な拡散モデルです。
公式ページでは、次のような図で説明されています。

ポイントとしては、次の二つの制御で処理を行うということです。

  • ローカル制御
  • グローバル制御

画面を見た方が、わかりやすいと思います。
次の画面は、用意されているサンプル画面になります。

この画面上では、ControlNetの各制御が存在しています。
以下の7つですね。

  • canny
  • mlsd
  • hed
  • sketch
  • openpose
  • midas
  • seg

これらのすべての制御が、ローカル制御となります。
そして、雪山の画像がUPされている「content」がグローバル制御です。

例えば、AUTOMATIC1111版web UI上でhed・sketch・midasの制御を処理するとします。
Multi ControlNetを利用すると、3つのアダプターで処理が実行されます。

それに対して、Uni-ControlNetの場合はローカル制御アダプターの利用だけで済みます。
だからこそ、処理コストはUni-ControlNetの方が少なくなります。

コストについて、次の図で表現しています。

この図を見ると、Multi ControlNetでは「Composable Control」にチェックが入っていません。
Multi ControlNetでは、同時に処理しているだけで統合されてはいないということですね。

これに対して、T2I-Adapterでは複数の制御を統合することが可能です。
「Composable Control」にチェックが入っていますね。

「Composable Control」については、次の記事内で解説しています。
「Composable Guidance with multiple adapters」という箇所において。

つまり、機能的にはT2I-AdapterとUni-ControlNetは同等です。
その点、Multi ControlNetは格下扱いになります。

ただ、Uni-ControlNetの方がコストは低く済みます。
「2」で固定ですからね。
T2I-Adapterは、制御数を増やせば増やすほどコストは増えていきます。

以上、Uni-ControlNetについて説明しました。
次は、Uni-ControlNetのシステム要件を説明します。

Uni-ControlNetのシステム要件

GitHubの公式ページでは、情報が少ないです。
ただ、以下のOSでは動くだろうと思われます。

  • Linux
  • Windows

開発自体は、Linuxで行われていたようです。
environment.yamlに「cudatoolkit=11.3」と記載されていることからの推測になります。
Windowsに関しては、実際に動作確認ができました。

あと、マストな要件はPyTorchです。
environment.yamlには、次のように記述されています。

正直、古過ぎです。
今は、PyTorch 2系が主流になってきています。

そのため、ここではPyTorch 2のインストールを推奨します。
もちろん、GPU版のPyTorchになります。

以上、Uni-ControlNetのシステム要件を説明しました。
次は、Uni-ControlNetのインストールを説明します。

Uni-ControlNetのインストール

Uni-ControlNetのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。

検証は、次のバージョンのPythonで行います。

> python -V  
Python 3.10.4

まずは、GitHub上からダウンロードします。

git clone https://github.com/ShihaoZhaoZSH/Uni-ControlNet.git

公式では、condaを利用する方法が記載されています。

ただ、それでインストールできるのか怪しいです。
そもそも、PyTorchが古い問題があります。
加えて、各種ライブラリのバージョンも固定されており、なかなか厳しいのではないでしょうか?

environment.yaml

name: unicontrol
channels:
  - pytorch
  - defaults
dependencies:
  - python=3.8.5
  - pip=20.3
  - cudatoolkit=11.3
  - pytorch=1.11.0
  - torchvision=0.12.0
  - numpy=1.23.1
  - pip:
      - gradio==3.16.2
      - albumentations==1.3.0
      - opencv-contrib-python==4.3.0.36
      - imageio==2.9.0
      - imageio-ffmpeg==0.4.2
      - pytorch-lightning==1.6.0
      - omegaconf==2.1.1
      - test-tube>=0.7.5
      - streamlit==1.12.1
      - einops==0.3.0
      - transformers==4.19.2
      - webdataset==0.2.5
      - kornia==0.6
      - open_clip_torch==2.0.2
      - invisible-watermark>=0.1.5
      - streamlit-drawable-canvas==0.8.0
      - torchmetrics==0.7.0
      - timm==0.6.12
      - addict==2.4.0
      - yapf==0.32.0
      - prettytable==3.6.0
      - safetensors==0.2.7
      - basicsr==1.4.2
      - datasets==2.10.1
      - pathlib==1.0.1

そのようなこともあり、ここではpipによるインストールをオススメします。
もともと、私はpipで頑張る派です。

上記記事の内容に基づいて、environment.yamlから次のファイルを作成します。

requirements.txt

numpy
gradio
albumentations
opencv-contrib-python
imageio
imageio-ffmpeg
pytorch-lightning==1.6.0
omegaconf
test-tube
streamlit
einops
transformers
webdataset
kornia
open_clip_torch
invisible-watermark
streamlit-drawable-canvas
torchmetrics
timm
addict
yapf
prettytable
safetensors
basicsr
datasets
pathlib

PyTorchのインストールは済んでいる前提です。
pytorch-lightningだけは古いモノをインストールします。
あとは、最新でOK。

このファイルをもとに一括でインストールします。

pip install -r requirements.txt

あとは、インストールが無事に終わることを祈りましょう。
インストールできたら、モデルのダウンロードを行います。

https://drive.google.com/file/d/1lagkiWUYFYbgeMTuJLxutpTW0HFuBchd/view?usp=sharing
上記ページにアクセスして、ダウンロードボタンをクリック。

「このままダウンロード」をクリックします。
5.7Gあるので、そこそこ時間がかかります。

ダウンロードできたら、「ckpt」ディレクトリに保存します。
「ckpt」ディレクトリは自分で作成する必要があります。

以上、Uni-ControlNetのインストールを説明しました。
次は、Uni-ControlNetの動作確認を説明します。

Uni-ControlNetの動作確認

公式では、次のコマンドでデモ画面を起動できると記載されています。

Windowsの場合だと、このままだとデモ画面にアクセスできません。
「test.py」に次のようなコードがあるからです。

ブラウザでは、「http://0.0.0.0」にアクセスできません。
そのため、次のように修正します。

これでデモ画面を起動させると、コンソールに以下が表示されます。

Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

ブラウザで「http://127.0.0.1:7860」にアクセスします。
そうすると、次のような画面を確認できます。

「sample」フォルダの下に画像が用意されています。

それを用いて、次のようにアップロードします。
鹿とソファは用意するのが若干面倒(配置位置の調整が面倒)のため、利用します。

プロンプトは、次のように入力。

a sofa and a deer in the city

あとは、「Run」ボタンをクリックして待ちます。
処理が完了すると、次のように画像が表示されます。

以上、Uni-ControlNetの動作確認を説明しました。

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