見出し画像

【see-through】自動PSDレイヤ分割ツール「See-through」を2D画像で試してみた

こんにちは、かみもとです!

ローカルLLMや画像生成AIなど、触れば触るほど沼にハマっていく今日この頃ですが、今回は少しユニークで実用的なツールを触ってみたので、その評価レポートをお届けします。

今回テストしたのは、画像から自動的にPSDレイヤへと切り分けてくれるツール「see-through」です。

キャラクターイラストをパーツ(前髪、後髪、服、顔、腕など)に自動で分割し、さらにオクルージョン(隠れている部分)を裏側まで自動で補完してPSD形式で出力してくれるという、Live2D制作やイラスト加工をする人にとっては夢のようなツールです。

今回はこの「See-through」を私のローカルPCに導入し、処理時間やVRAMの使用量、精度を徹底検証してみました。


評価環境と準備

テストとして、手持ちの画像から8枚を選んで入力用として使用しました。なお、ComfyUI用のノードも用意されているようですが、今回はシンプルにCLI(コマンドライン)から実行しています。

PCスペック

  • OS: Windows11 Pro

  • CPU: Core i3 12100F

  • MEM: DDR4 48GB

  • GPU: RTX4070 12GB

環境構築

公式のREADMEではPython 3.12が推奨されています。ただ、私のPCに入っていたPythonが3.10.6だったため、今回はclone先のリポジトリ内にPython 3.10の仮想環境(venv)を作成して実行してみました。もちろん、グローバル環境は綺麗に保ちたいので、すべて仮想環境内に pip install を行っています。

具体的には、以下の手順で構築しました。

git clone https://github.com/shitagaki-lab/see-through.git see-through
cd see-through
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install torch==2.8.0+cu128 torchvision==0.23.0+cu128 torchaudio==2.8.0+cu128 --index-url https://download.pytorch.org/whl/cu128
.\.venv\Scripts\python.exe -m pip install -r requirements.txt

また、モデルのキャッシュについてもユーザー共通のHugging Face cacheに溜まるのを防ぐため、リポジトリ内に専用の `.cache/huggingface` を作成してそちらを使うように設定しました。

$env:HF_HOME="$PWD\.cache\huggingface"
$env:HUGGINGFACE_HUB_CACHE="$PWD\.cache\huggingface\hub"
$env:TORCH_HOME="$PWD\.cache\torch"
$env:CUDA_VISIBLE_DEVICES="0"

使い方

使い方は非常にシンプルです。単体の画像を処理する場合は、以下のようなコマンドを実行します。多分、AIに先ほどのリポジトリ読ませればコマンド作ってくれると思います。

.\.venv\Scripts\python.exe inference\scripts\inference_psd.py --srcp path\to\image.webp --save_dir eval\runs --resolution 1024 --resolution_depth 768 --inference_steps 20 --save_to_psd --tblr_split --group_offload --disable_progressbar

フォルダ内の画像を一括処理したい場合は、以下のように入力フォルダを指定するだけでOKです。

.\.venv\Scripts\python.exe inference\scripts\inference_psd.py --srcp eval\inputs --save_dir eval\runs --save_to_psd --group_offload

今回の計測では、評価用スクリプトを使って5枚の画像を同一プロセス内で順番に処理し、処理時間、VRAM使用量、プロセスRSS(メモリ)を測定しました。また、PSDからレイヤ比較画像(グリッドシート)を作成する処理は別途スクリプトを使用しています。


主なパラメータ

See-throughで指定できる主なパラメータをまとめてみました。ここを調整することで、解像度やVRAM使用量をコントロールできます。

設定一覧

なお、低VRAM環境向けには inference_psd_quantized.py(量子化版)や inference_psd_blockswap.py(ブロック入れ替え版)も用意されていますが、今回は標準の inference_psd.py に --group_offload を指定して検証を行いました。


今回の実行設定

今回の測定では、以下の設定をベースに実行しています。


処理時間とリソース計測結果

前置きが長かったですが、いよいよ結果!

初回のモデルロードとダウンロードは事前準備(warmup)で済ませておき、5枚の画像を順番に処理した結果がこちらです。

1枚目は同一プロセス内での初回ロード処理が含まれるため、VRAMピークやシステムメモリ(RAM)が少し高めに出ています。

合計の処理時間は 1324.526秒(約22分)、1枚あたり平均で 264.774秒 でした。1枚4分ほど。結構かかりますねー。

VRAMの増分はおよそ 9GB、RAMピークは平均約 16.7GB で、12GB VRAMのグラボであれば十分に実用範囲内で動くことが分かりました!


分割結果と評価(通常画像5枚)

それでは、実際の分割精度を見ていきましょう!

各画像の分割結果シートと、使用した感想です。ちなみに、見やすいように1枚にまとめていますが、普通にsee-throughを使うと、それぞれのパーツの画像と、psdが出てきます。こんな1枚シートにはならないので注意。

  • 良かった点: 人物の服、腕、前髪や後髪、耳、そして手前にある観葉植物までかなり自然に切り分けられました。背景のオブジェクトも自動的に `objects` として抽出されています。

  • 惜しかった点: 顔レイヤの裏側補完(塗りつぶし)が少し強く、目、眉、口といった顔パーツ単体で見ると、かなり薄くて小さいパーツになってしまっています。また、脚やボトムスの境界線については、用途によっては手作業でのクリンナップが必要そうです。

  • 良かった点: チャイナ服、腕、髪、耳飾りの分離が非常に綺麗です。左右の手や腕もしっかりと独立して分かれているので、PSDアセットとしてかなり扱いやすい仕上がりです。

  • 惜しかった点: 髪飾りが `headwear` としてかなり細切れに分離されてしまっています。顔パーツは位置こそ合っていますが、やはり眉や口は薄く、目だけで見ると一部欠けている部分がありました。

  • 良かった点: 全身絵のイラストですが、服、ブーツ、脚、ソファなどの分離状態が良いです。袖や手など、他のパーツと重なっている(オクルージョンがある)部分も比較的綺麗にまとまっています。

  • 惜しかった点: キャラクターの背後にあるソファが `objects` として一緒に抽出されてしまうため、もし「キャラクター単体のLive2D素材」として使いたい場合は、手動で不要レイヤを削除する手間が発生します。首飾りや眉などの細かな装飾も不安定な箇所があります。

  • 良かった点: 扇子、服、脚、靴、角、そして髪の毛の分離が良好です。扇子のように手前に大きく出ているアイテムが独立したレイヤとして扱えるのは非常に便利ですね。

  • 惜しかった点: 耳が左右別々に分かれず、まとめて `ears` レイヤになってしまいました。また、眉や鼻、口といった顔のパーツはかなり薄くなっています。衣装の細い紐などの装飾や、背景の細い枝は十分には分離されませんでした。

  • 良かった点: 腕、トップス、脚、ボトムス、髪の毛といった大きなパーツは安定して分割されています。ショートヘアですが、前髪と後髪もしっかり分離できており、実用的なレベルです。

  • 惜しかった点: キャラクターの頭上にある「天使の輪」のような特殊なアクセサリーが、独立レイヤとして見つかりませんでした。このような非典型的なアクセサリは取りこぼしやすいようです。顔ベースの塗りつぶしは綺麗ですが、表情パーツ自体は小さめです。てかなんだろこの天使の輪‥。


評価結果の総評

今回の通常画像5枚をテストしてみて、キャラクターの主要な衣装、腕脚、前髪・後髪、顔、目周りなどをPSDレイヤとしてしっかりと出力できることが確認できました。出力レイヤ数は21〜24枚と多く、2.5Dアセット(Live2Dなど)を作る際の「初期の分解作業」としては、手作業の手間を大きく減らせる非常に有用なツールだと感じます。

しかも、見えていない部分の補間までされているのがすごい。psdとして作業しやすそうです。

ただし、そのまま完全なアセットとしてポン出しで使えるわけではなく、手直しが前提となります。特に以下の点に注意が必要です:

  1. 顔ベースの補完が強い: 顔の裏側(目や口の奥)の塗りつぶしが強いため、表情パーツ単体(目、眉、口など)が非常に薄く、一部欠けることがあります。

  2. 細かな装飾や特殊パーツの取りこぼし: 頭上の輪や細いリボンなど、典型的な「人体パーツ」ではないものは、うまく分離されずに背景や他のレイヤと一体化しやすいです。

  3. 背景オブジェクトの混入: キャラクターが座っているソファや近くの観葉植物などもレイヤとして切り出されるため、キャラクターのみの素材にする場合は整理が必要です。

結論として、See-throughは「手作業で行う面倒なPSD切り分けや、裏側の塗りつぶし補完作業を大幅に時短するアシスタント」として非常に優秀です。完璧なLive2D用アセットにするには、PSD上でレイヤを整理し、マスクを微修正し、顔や目周りの欠けた部分を描き足すという仕上げ作業が必要になりそうです。


追加評価: 顔アップ生成画像での検証

全身のイラストだと顔まわりのパーツが小さくなってしまい、結果として目や眉の切り分けが薄くなってしまう傾向がありました。

そこで、「顔アップの画像を使えば、表情パーツのクオリティが上がるのでは?」と考え、追加の検証を行ってみました!

anima-base-v1を使用し、オリジナルのLoRAを適用した顔アップ画像を3枚生成(サイズは 1024 x 1024)、それを同じ設定(resolution=1024, resolution_depth=768, inference_steps=20, group_offload=true)でSee-throughに通します。

プロンプトは、正面寄りの顔、斜めを向いた顔、首を少し傾げた顔の3パターンを用意しています。

顔アップ画像の処理時間とリソース計測

1枚あたりの処理時間は全身絵とほぼ同等の処理時間で動作しました。

各画像の分割結果シートと評価

  • 良かった点: 思惑通り、顔のアップにすることで、目、まつ毛、眉、さらには虹彩や白目といった細かいパーツが全身絵より格段に大きく、はっきりと実用的なレベルで分離されました!耳、前髪、服の襟なども綺麗に分かれています。

  • 惜しかった点: 後ろ髪については、やはり頭部の裏側の塗りつぶし(補完)の影響で、やや丸いベタ塗りのような面が強く出てしまいます。また、鼻や口は単体レイヤとしてはかなり小さく、少し薄い印象です。

  • 良かった点: 斜め向きの顔であっても、顔のベース、耳、目、前髪はおおむね実用に耐えるクオリティで分割できました。特に虹彩やまつ毛のディテールが綺麗に残っています。

  • 惜しかった点: キャラクターの服や袖にあたる領域が、なぜか `handwear`(手袋・手)として誤認識され、別レイヤに分離されてしまいました。また、顔の角度のせいか、片方の耳や髪の境界線に少し揺らぎが見られます。

  • 良かった点: 目、まつ毛、眉、前髪、耳の分離が非常に安定しています。今回検証した顔アップ3枚の中では、最もレイヤ整理がしやすく完成度が高い結果になりました。

  • 惜しかった点: 他の2枚と同様、後ろ髪の補完面が強く出ており不自然さが残ります。また、鼻と口は相変わらず小さく、もしLive2Dなどで「表情の差分」をしっかり作り込みたい場合は、手作業での描き足しがほぼ必須となります。

顔アップ検証のまとめ

顔アップ画像を使ってSee-throughを動かすと、全身絵に比べて目周り(虹彩、白目、まつ毛、眉など)の切り分け精度が劇的に改善することが分かりました。表情パーツの初期素材としてはかなり手作業を減らせそうです!

ただし、See-through特有の「頭部の自動補完」がかなり強く働くため、後ろ髪や顔ベースをそのまま完成アセットにするのは難しく、不要な境界のマスク処理や描き足しは依然として必要です。


まとめ

今回は「See-through」のインストールから基本的なキャラクター切り分けの評価を行いました。

ローカルでこのレベルのレイヤ分割が、しかも補間ありでできるのは凄いですね。色々と応用ができそうです。例えばチャットアプリとかで、キャラクターを微妙に動かしてみたり。

例えば852話さんのXポストを見ると、このツールを使ってもちょもちょできるアプリが公開されています。

こんな感じで、色々と応用アプリが作れそう!AIエージェントでバイブコーディングすれば、個人でもアプリを作れる時代なので、夢は広がるばかりですねー。

ちなみに、自宅のPCにGPUなんてない!という方はオンラインのデモサイトもあります。1日2,3件くらいしかレイヤ分割できないようですが、お試しする分には十分と思います。画像をセットしてRunボタンを押すだけの簡単なお仕事です。

ちなみに、このサイトで切り出したpsdをAnime2.5DRigに入れるとこうなります。まぁまぁ良いんですけど、首と服がおかしいの気付きますよね?

服の上に首がある

これは See-Through が「パーツの見えていない部分も補間」してしまうため、普通に重ねるとこういう感じになるケースがあるのです。今のところ手動でなんとかするしかないですねー。とはいえ、面白い!皆さんも一度使ってみてくださいー。


最後まで読んでいただき、ありがとうございました!

もしこの記事が「参考になった」「開発のヒントになった」と感じていただけたら、画面下の【スキ(ハートマーク)】を押していただけると、検証の苦労が吹き飛ぶほど励みになります!

今後も泥臭い技術検証や仕事効率化のワークフローをガシガシ公開していきますので、フォローもぜひよろしくお願いします!

いいなと思ったら応援しよう!

かみもと|ローカルAI生成 若輩者ですが、サポートいただけると、もっとがんばって記事作成します!