📘
layerdivider(レイヤー分けツール)導入&使い方解説
1枚絵をレイヤー分けしてPSDファイルに変換するシステムを作りました。
この記事は、layerdividerの導入方法と使用方法について説明する物となっています。
得られる情報
- layerdividerの導入方法
- layerdividerの使用方法
導入方法(画面の起動まで)
公開NoteBookを利用する場合
- github上のlayerdivider公開ページから、open in colabボタンをクリック
- セルを上から順に実行
- 表示されるURLをクリック
- Segmentモデルを指定フォルダに格納
- 以下のリンクからViT-H SAM modelを取得
- layerdivider/segment_model配下にダウンロードしたモデルを格納
SDWebUIの拡張機能を使う方法
基本的なインストール方法は以下の記事にもまとめられています(Gigazine様ありがとうございます)
以下、導入手順になります。
前準備
- stable-diffusion-webuiのインストール
- Microsoft C++ BuildToolsのインストール
- onnx環境の整備
- SegmentAnythingを内部で使っている関係で、onnx RuntimeとcuDNNのバージョンを合わせる必要があります。
リンク先の対応表から、自分の環境に合わせてバージョンを合わせていただければと思います。 - https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements
- 筆者環境はonnx Runtimeが1.14, CUDAが11.8(ただし、Nvidiaの対応表見る限りは11.6推奨)
- SegmentAnythingを内部で使っている関係で、onnx RuntimeとcuDNNのバージョンを合わせる必要があります。
導入
- sd-webuiのExtensionタブから、install from URLタブをクリックして、githubのURLを貼り付け、Installボタンをクリック
- 再起動もしくはExtentionタブのInstalledタブからApply and restall UIボタンをクリック
(注意!最新バージョンでは以下の作業(モデルの格納)は基本的に不要となります)
- Segmentモデルを指定フォルダに格納
- 以下のリンクからViT-H SAM modelを取得
- リンクをクリックするとモデルがダウンロードされる
- ダウンロードが完了したらlayerdivider/segment_model配下にアップロードする
- VScodeやGoogle Colabを使っている場合はドラッグ&ドロップで配置可能
- Jupyter notebookを使っている場合はUploadボタンを押してダウンロードしたファイルを選択
使い方
SAMを使う場合
-
divide_modeをsegment_modeで指定
-
レイヤー分けしたい画像をImageにドラッグ&ドロップ
-
Segmentボタンを押すとSAMによる領域分け処理が行われる
- 設定できるパラメータは以下(SAMのパラメータと同じ)
- pred_iou_thresh
- A filtering threshold in [0,1], using the. model's predicted mask quality
- stability_score_thresh
- A filtering threshold in [0,1], using. the stability of the mask under changes to the cutoff used to binarize.
- min_mask_region_area
- マスクとして採用するピクセル数の閾値
- pred_iou_thresh
- デフォルト値である程度レイヤー分け向けの領域分けができるため、弄らなくても問題ない
- 設定できるパラメータは以下(SAMのパラメータと同じ)
-
Segment Settingsを設定
- area_threshold
- 実際にレイヤーとして分けるピクセル数の閾値
- ピクセル数が閾値を下回る領域は全て一つのレイヤーに集約される
- この値を0にするとセグメント後に表示される色分けされた画像とほぼ同じ構成でレイヤーが生成される
- area_threshold
-
CreatePSDボタンをクリックするとPSDファイルが生成される
- ※注意: 現在、WebUI利用時のみOutOfMemoryErrorが発生しやすい現象が確認されています。原因は調査中ですが、WebUI起因の可能性が高く、修正に時間がかかる見込みです。demo.py経由での利用の場合は問題ないため、そちらで実行いただくか、以下の記事を参考にVRAMの消費を抑えてWebUIを利用いただければと思います
- https://freeblog-video.com/stable-diffusion_error/
-
ファイルが生成されるとPreviewが表示される。色分けされた部分ごとにレイヤーが分かれて出力されるため目視で確認し、問題がなければdownloadボタンを押すとPSDがDLできる
-
もし結果が細かすぎる場合は、area_thresholdを大きくすることでおおざっぱな分け方に変更することができる(逆により細かくした場合はarea_thresholdを小さくする)
色情報を使う場合
色情報のみを使用
-
divide_modeをcolor_base_modeで指定
-
ColorBase Settingsを設定
- loops: 処理2-4を繰り返す回数
- init_cluster: 処理1で生成するクラスタの数(大きいほど細かくレイヤー分けされる)
- ciede_threshold: 処理2でどの程度色が類似していたらクラスタを結合するか決める閾値
- blur_size: 処理3でかけるブラー処理の大きさ(大きいほど強くぼかす)
- output_layer_mode
- normal: 通常レイヤーのみで出力されるPSDを構成
- composite: 通常レイヤー、スクリーンレイヤー、乗算レイヤー、減算レイヤー、加算レイヤーを組み合わせて出力されるPSDを構成
-
CreatePSDボタンをクリックするとPSDファイルが生成される
-
ファイルが生成されるとPreviewが表示される。色分けされた部分ごとにレイヤーが分かれて出力されるため目視で確認し、問題がなければdownloadボタンを押すとPSDがDLできる
背景と人物の切り分けのみ領域情報を用いる場合
-
BG Settingsのsplit bgにチェック
-
BG Settingsを設定
- horizontal split num: Number of horizontal tile divisions.
- vertical split num: Number of vertical tile segments.
- n_cluster: Number of clusters based on color information.
- alpha threshold: Transparency of the mask considered as foreground.
- mask content ratio: Threshold for how much mask a cluster should contain to be considered foreground.
-
CreatePSDボタンをクリックするとPSDファイルが生成される
Discussion
SDWebUIで使用させてもらっております
色分けのところまではいけるのですが
PSDボタン押すとエラーが出ます何が原因でしょう?
TypeError: divide_folder() missing 1 required positional argument: 'mode'
tsusasamisan
私も同じエラーが出て以下のURLを参照してエラーに対処できました。 抹茶さんが保守されるまではmain.pyを直接書き換えるのが良さそうです。
ありがとうございます!解決しました!!