見出し画像

WindowsでPaints-Undoから派生したSketch-Genを試す(VRAM 6GB以上?)

Last update 7-18-2024
※(7-18)本文を若干変更しました(線画は3種類のモデルを使用、Num Setsはバリエーションの数、微修正)。
※Sketch-Gen(Sketch/Lineart extractor)はPaints-Undoをベースにしているため、利用前にそちらの免責事項を必ず確認してください。




▼ 0. 本記事について

0-1. 概要

 本記事では、Sketch-Gen(Sketch/Lineart extractor)をインストールして実行する手順を紹介します。こちらの作者は、LyCORISを手がけられた琥珀青葉氏です。ベースとなっているPaints-Undoについては、下記の記事を参照してください。

 Sketch-Genは画像から線画やスケッチを生成することができ、これをImage-to-Sketchと呼んでいます。画像と線画・スケッチのペアを作成する目的でも利用できます。

0-2. 動作環境

 Geforceで必要なVRAMは6GB以上とみられます(未確認、後述)。CUDA Toolkitは12.1以上とします(筆者は12.5にて確認、11.xは未検証)。Pythonのバージョンは3.10です。

0-3. 公式リポジトリ等

https://github.com/KohakuBlueleaf/Paints-UNDO 
https://huggingface.co/spaces/KBlueLeaf/Sketch-Gen (動作デモ)

0-4. GPUメモリの使用量

 起動前の専用GPUメモリの使用量は0.7GB程度です。生成開始時に一瞬だけ9GB程度まで上昇しました。それ以外の場面では、おおむね6GB未満でした。

生成時のGPUメモリ使用量



▼ 1. インストール

 説明はある程度省きます。また、作業ディレクトリを「C:\aiwork」としていますので、適宜読み替えてください。基本的にはPaints-Undoの手順と同様です。

1-1. 本体のダウンロード

 コマンドプロンプトを開いて、ディレクトリ「C:\aiwork\Sketch-Gen」が無い状態で下記のコマンドを順に実行してください。

cd \aiwork
git clone -b sketch-gen https://github.com/KohakuBlueleaf/Paints-UNDO Sketch-Gen
cd Sketch-Gen

 Gitを導入していない方は、リポジトリにアクセスすると緑色の「Code」というボタンがありますので、クリックして「Download ZIP」を選択し、ファイルを適当なディレクトリに解凍してください。

1-2. 環境の構築

 下記のコマンドを順に実行してください。仮想環境を作って入ります。構築の途中で、bitmathのインストールに関するWarning(黄色のメッセージ)が出たので、pipのupgradeで対応しました。行わなくても問題無いかもしれません。

python -m venv venv
venv\Scripts\activate
python -m pip install --upgrade pip

 次に、下記のコマンドを順に実行してください。1行目と4行目は少々時間がかかります。念のため、PyTorchとxFormersのバージョンを決め打ちしています(執筆時点の最新版)。なお、onnxruntime(ONNX RuntimeのCPU版)のインストールは公式には無い手順です。

pip install torch==2.3.1 torchvision --index-url https://download.pytorch.org/whl/cu121
pip install xformers==0.0.27
pip install onnxruntime
pip install -r requirements.txt

メモ:ONNX Runtime
https://onnxruntime.ai/



▼ 2. 起動

2-1. 起動方法

 下記のコマンドを実行してください。モデルのダウンロードが発生するため、初回のみしばらく時間を要します。

python app.py

 起動が完了すると、下記のメッセージが表示されます。Webブラウザで http://127.0.0.1:7860/ へアクセスしてください。無いとは思いますが、何らかの理由で中断された場合は再度起動してみてください。

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

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

2-2. 2回目以降の起動

 新規にコマンドプロンプトを開いた場合は、下記のコマンドを順に実行してください。バッチファイルを作る場合は「call venv\Scripts\activate.bat」に変更します。

cd \aiwork\Sketch-Gen
venv\Scripts\activate
python app.py



▼ 3. 操作手順

3-1. 情報

 リポジトリの導入手順に従うと、生成を行っている最中にWarning(黄色)やError(赤色)のメッセージが表示されます。動作に影響は無いようですが、本記事ではonnxruntimeをインストールする手順を追加して対応しました。

3-2. 画像の生成

 任意の画像をドラッグ&ドロップして少し待つと、画像を解析して得られたプロンプトが表示されます。ドラッグ&ドロップがうまく出来ない場合は、入力欄をクリックしてファイルを選択します。

 次に右側の「Generate Sketch」をクリックして少し待つと、「Sketch Outputs」と「Line Art Outputs」にそれぞれ生成された画像が表示されます(筆者の環境ではデフォルトの設定で1分程度)。

生成が完了したところ

3-3. 画像の保存

 生成された画像は自動的に保存されないので、手動で行ってください。WebP形式です。

スケッチの一覧
線画の一覧

3-5. Tips

  • 「Line Art Outputs」の出力は、入力に応じて一定となっています。

  • 別の画像を入力したい場合は、入力欄の右上にある [×] をクリックするとクリアされます。

  • 「Target size」を変更すると、GPUメモリの使用量と出力画像の解像度が増減します。また、「Sketch Outputs」の内容も変化します(Stable DIffusionの性質)。

3-6. パラメーターの説明

設定が変更できる箇所

 設定は基本的に「Sketch Outputs」に関するものです。「Line Art Output」は設定によって変化しません(解像度のみ反映)。

  • Output Prompt / Negative Prompt
    Stable Diffusionと同様の設定です。「Generate Sketch」を実行する前に変更できます。

  • Operation Steps
    完成から白紙までの行程を1000分割して、完成から指定した回数アンドゥした時点に相当する状態を指定します。複数の値を指定できます。
    基本的には900以上または950以上とします。値が低いと入力画像に近づき、変化に乏しくなります。
    数値によって実行時間が変わることはありません。

  • Num Sets
    出力するスケッチのバリエーションの数です。例えば3から4に変えると、3の時の出力内容に新しい1枚が追加されます。値が1の場合は変化に乏しいようなので、生成時間を見ながら適当な値に増やしてください。
    また、設定した「Operation Steps」の数と、「Num Sets」の数をかけた枚数が、「Sketch Outputs」として出力されます。その枚数によって生成時間も増減します。

  • Seed / Target size / Steps / CFG Scale
    Stable Diffusionと同様の設定です。「Target size」は出力画像の解像度です。

3-7. 終了

 開いているページを閉じ、コマンドプロンプトのウインドウを閉じるか、Ctrl+Cで停止してください。

3-8. アンインストールの方法

 必要なファイルがあれば移動してから、起動していない状態でSketch-Genのディレクトリを削除してください。



▼ 4. 生成された画像

4-1. 入力画像

 Paints-UNDOの記事にて、詳細を含め掲載しています。

4-2. Line Art Outputs

 入力に応じた一定の内容です(それぞれ使用モデルが異なる)。解像度の設定が反映される理由として、線画を利用してスケッチを生成していることが考えられます。

線画の出力

4-3. Sketch Outputs

 ここではOperation Stepsを単一に、Num Setsを10にして10枚のバリエーションを出力しました。Num Setsを下げていくとバリエーションが減っていきます。なお、画像の並びが必ずしも描画順に見えない理由は、Paints-Undo自体の挙動(描画の手順が行ったり来たりする)に起因しているのかもしれません。

スケッチ(Operation Steps:995, Num Sets:10)
スケッチ(Operation Steps:990, Num Sets:10)
スケッチ(Operation Steps:975, Num Sets:10)
スケッチ(Operation Steps:950, Num Sets:10)
スケッチ(Operation Steps:925, Num Sets:10)
スケッチ(Operation Steps:900, Num Sets:10)

 Operation Stepsの値を下げると、変化が減っていくことがわかります。

 次は、Operation Stepsの値を2つにして、Num Setsを半分にした例です。この場合、Steps:995単一の場合と同じに見える画像が含まれるほか、Steps:990単一とSteps:995単一のどちらでも生成されない画像も含まれていました。この挙動についてはよく分かっていません。

Operation Steps:[900,995], Num Sets:5

 もっとも、必要とする画像が取り出せることが最も重要なので、パラメーターを変化させて色々試してみてください。



▼ 5. その他

 私が書いた他の記事は、メニューよりたどってください。

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。

この記事が気に入ったらサポートをしてみませんか?