Part 2: Nano Banana Virtual Try-On — 16テストケースの実験記録
![]()
はじめに
Part 1では、GANから生成AIへの移行の理由と新しいアーキテクチャの設計を解説しました。本記事では、そのシステムを実際にテストした結果を記録します。
1日のうちに、難易度の段階的に上がる3フェーズにわたって16のテストケースを実行しました。テストは明確な疑問に答えるために設計されています。Geminiは体型の多様性に対応できるか。衣服のディテールは保持されるか。アクションポーズではどうか。そして最も重要なのは——GANアプローチが必要としていた前処理パイプラインは必要なのか。
答えは明確で、時に驚くべきものでした。
ソースコード: github.com/matu79go/metafit
テスト環境
すべてのテストでGemini 3 Pro Image Previewモデル(gemini-3-pro-image-preview、通称Nano Banana)を使用。明示的に記載がない限り、前処理(OpenPose、Graphonomy、MediaPipe)は一切使用していません。
すべてのテストで同一のパイプラインを使用しました。
# clothingモード(商品画像 → 人物)
python try_on_test.py --mode clothing \
--person test_data/person/target.jpg \
--clothing test_data/clothing/item.png
# transferモード(人物 → 人物)
python try_on_test.py --mode transfer \
--person test_data/person/target.jpg \
--source test_data/person/source.jpg
2つのモードをテストしました。
- clothingモード: 商品画像(白背景の黒Tシャツなど)を人物写真に適用
- transferモード: ある人物(ソース)から衣服を抽出し、別の人物(ターゲット)に着せる
Phase 1: ノイズ入り画像での初期テスト
最初の4つのテストでは、PASTA-GAN++時代のデータセットと同じ、身体計測のテキストラベル(身長、胸囲、ウエスト、ヒップ)が写真上に直接描画された画像を使用しました。
Test 1: clothingモード — 女性 + 黒Tシャツ

- 入力: 160cm女性(茶色Tシャツ着用、計測テキストあり)+ 黒Tシャツ商品画像
- 結果: 衣服のフィットは自然。体型・ポーズは保持された。
- 課題: 顔が若干変化し、元画像にないアクセサリーが追加された。
Test 2-3: clothingモード — 男性 + 黒Tシャツ(プロンプトの反復)

- 入力: 178cm男性(がっしり体型)+ 黒Tシャツ商品画像
- Test 2: 体型保持は良好だが、構図が全身からバストアップに変化。
- Test 3: 顔保持のプロンプトを強化すると顔の品質は改善。しかし元画像の計測テキスト(胸・腹・腰)が衣服のデザインとして描画されてしまった。
最初の重要な発見でした。入力画像のノイズはフィルタリングされず、コンテンツとして解釈されます。モデルは計測ラベルを衣服デザインの一部として扱いました。
Test 4: transferモード — 異性間着せ替え

- 入力: 178cm男性(ターゲット)+ 160cm女性の茶色Tシャツ+デニムショーツ(ソース)
- 結果: 衣服のデザイン、色、ロゴが男性体型に正しく転写された。フィットは自然。
- 課題: 計測テキストが残存し、靴まで転写された(衣服だけでなく)。
Phase 1まとめ
| 観点 | clothingモード | transferモード |
|---|---|---|
| 衣服フィット | 自然 | 自然 |
| 体型保持 | 良好 | 良好 |
| 顔の同一性 | やや変化 | やや変化 |
| 構図 | ずれることあり | おおむね維持 |
| 入力ノイズ耐性 | 低い — テキストを誤認識 | 低い — テキストが残存 |
結論: モデルは機能するが、入力品質が重要。クリーンな画像が不可欠。
Phase 2: クリーン画像テスト
Phase 1の課題はすべて一つの根本原因に帰着しました。ノイズのある入力画像です。Phase 2では計測テキストのないクリーンな写真を使用しました。
Phase 2のテストはすべてtransferモード——衣服をある人物から抽出して別の人物に着せるという、より困難なシナリオで実施しました。
Test 5: 男性 → 男性(標準体型)

- 入力: 立っている男性(ターゲット)+ ボーダーセーターとカーキショーツの細身男性(ソース)
- 結果: 優秀。衣服のデザインと色が正確に転写された。体型・顔ともによく保持。
- 課題: なし。
Test 6: 子供 → 子供

- 入力: 子供A(ターゲット)+ 子供B(ソース)
- 結果: 優秀。衣服が子供の体のプロポーションに自然に適応。デザインの忠実度が高い。
- 課題: なし。
Test 7: 女性 → サッカー選手(アクションポーズ、低解像度)

- 入力: 女性サッカー選手(ターゲット:アクションポーズ、320px解像度)+ 立っている女性(ソース)
- 結果: 衣服は転写されたが、顔の品質が明らかに劣化。アクションポーズが精度を下げた。
- 課題: 顔の再生成が目立った。この結果がMediaPipe前処理の実験を促した。
LAB色空間補正と楕円フェザーマスクを用いて、元の顔を生成画像にブレンドする顔復元後処理を試みました。

復元により顔の品質は改善しましたが、根本原因は後に低解像度であることが特定されました。モデルの根本的な限界ではなかったのです。
Test 8: スリム → 大柄(体型多様性テスト)

- 入力: 大柄な男性(ターゲット)+ ボーダーセーターの細身男性(ソース)
- 結果: 優秀。ボーダーセーターが大柄な体に自然にストレッチして描画された。体型差にもかかわらず歪みなし。
- 課題: なし。
これは決定的に重要なテストでした。PASTA-GAN++は学習データに少ない体型で一貫して失敗していました——衣服がアーティファクトに崩壊し、モデルが被写体を学習データの分布に向けて「スリム化」していました。Nano Bananaにはそのようなバイアスが見られませんでした。
Phase 2まとめ
| テスト | 衣服 | 体型 | 顔 | ポーズ | 総合 |
|---|---|---|---|---|---|
| Test 5: 男性→男性 | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 6: 子供→子供 | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 7: 女性→サッカー | ○ | ○ | △ | △ | △ |
| Test 8: スリム→大柄 | ◎ | ◎ | ◎ | ◎ | ◎ |
結論: クリーン画像 + 静止ポーズで高品質な結果が得られる。唯一の失敗(Test 7)は低解像度画像で発生——前処理ではなく解像度が真の変数ではないかという疑問が浮上した。
Phase 3: 高解像度アクションポーズテスト
Phase 2で残った疑問:Test 7の品質劣化はアクションポーズが原因か、それとも320pxの入力解像度が原因か。Phase 3は、Unsplashの高解像度画像(1000〜6000px)と激しいアクションポーズを使って、この問いに決定的な答えを出しました。
Test 9: 男性ダンス(激しい動き、6193×9290px)

- 入力: 激しく踊る男性(ターゲット:6193×9290px)+ ボーダーセーターの細身男性(ソース)
- 結果: 優秀。激しいダンスポーズにもかかわらず、ボーダーセーターとカーキショーツが正確に転写された。すべての四肢の位置が維持された。
- 課題: なし。高解像度入力により、Phase 2で見られた品質問題が解消された。
この1つのテストが、アクションポーズが本質的に問題であるという前提を覆しました。Phase 2のサッカー選手テストが失敗したのはアクションポーズのせいではなく、320pxという解像度のせいだったのです。
Test 10: 女性パンチポーズ + タイトトップ/ルーズボトム

- 入力: パンチポーズの女性(ターゲット:3024×4032px)+ ベージュクロップトップとスウェットパンツの立ち姿女性(ソース)
- 結果: 優秀。タイトなクロップトップとルーズなスウェットパンツの質感の違いが忠実に再現された。パンチポーズは維持された。
Test 11: クラブダンス(暗所 + カラフル照明)

- 入力: クラブで踊る女性(ターゲット)+ ピンクのプリーツドレスの立ち姿女性(ソース)
- 結果: 優秀。紫のクラブライティング下でピンクのドレスが自然に転写された。衣服と環境光の色の相互作用も適切に処理された。
Test 12: ビーチダンス(夕焼け逆光)

- 入力: 夕焼けの桟橋で踊る女性(ターゲット)+ 白Tシャツとスキニージーンズの立ち姿女性(ソース)
- 結果: 優秀。逆光の条件下でも衣服が自然に適応した。
Test 13: 座りポーズ ← ジャンプ中(最大のポーズ差)

- 入力: しゃがんだ男性(ターゲット)+ ジャンプ中の男性:白Tシャツ、黒スキニー、赤スニーカー(ソース)
- 結果: 優秀。白Tシャツ、黒スキニージーンズ、赤スニーカーがしゃがんだ状態に転写された。圧縮部位に自然なシワが現れた。
- ソースが空中、ターゲットが着席という、最も困難なポーズの組み合わせでしたが、モデルは問題なく処理しました。
Test 14: ストレッチ + 複雑柄(タイダイ + キャラクタープリント)
- 入力: 体を横に倒してストレッチする女性(ターゲット)+ ケアベアのタイダイTシャツの女性(ソース)
- 結果: 良好。複雑なタイダイ柄は正確に転写された。ただしソース画像では手で顔を覆っていたのに、生成画像では顔が見える状態に。モデルは顔を隠すポーズよりも顔を見せることを優先する傾向がある。
Test 15: 異性間着せ替え — 男性スーツ → 女性ダンス

- 入力: ダンスポーズの女性(ターゲット)+ ブラウンスーツの男性(ソース)
- 結果: 良好。スーツが女性体型に自然にフィット。シャツの袖口も再現された。ただし脚のポーズが元画像と異なった。
IMAGE_SAFETYフィルター

いくつかのテストでGeminiのIMAGE_SAFETYフィルターが発動しました。
- ダンスポーズやランニングポーズの3枚の画像(ソースとして使用時)がブロックされた
- 共通因子:ソース画像に露出の多い衣服(スポーツウェア、ダンスウェア)が含まれていた
ファッションアプリケーションでは、さまざまな露出度の衣服は一般的かつ正当なコンテンツであるため、これは実用上の制約となります。
Phase 3まとめ
| テスト | 衣服 | 体型 | 顔 | ポーズ | 総合 |
|---|---|---|---|---|---|
| Test 9: 男性ダンス | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 10: 女性パンチ | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 11: クラブダンス | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 12: ビーチダンス | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 13: 座り←ジャンプ | ◎ | ◎ | ◎ | ◎ | ◎ |
| Test 14: ストレッチ+複雑柄 | ◎ | ◎ | ◎ | △ | ○ |
| Test 15: スーツ→女性 | ◎ | ◎ | ◎ | △ | ○ |
14の主要な発見
3フェーズ・15テストケースから、以下のパターンが浮かび上がりました。
- Nano Banana単体で仮想試着は実現可能 — OpenPose、Graphonomyなどの前処理は不要
- transferモードもプロンプトだけで動作 — PASTA-GAN++の機能(モデル間着せ替え)が学習済みモデルなしで実現
- プロンプトエンジニアリングが品質に大きく影響 — 顔保持の明示的な指示で結果が改善
- 入力画像の品質が重要 — ノイズ(計測テキスト等)はフィルタリングされず、コンテンツとして解釈される
- ライセンスは完全にクリーン — 非商用コンポーネントを一切使用していない
- クリーン画像で大幅に改善 — ノイズ除去により顔・体型の保持が改善
- 体型差への適応力が高い — スリムから大柄まで、衣服が自然にストレッチしてフィット
アクションポーズは課題→ 高解像度入力ならアクションポーズも問題なし- 解像度が品質の最大の決定要因 — 320pxで品質低下、1000px以上で優秀な結果
- 前処理(MediaPipe)は基本不要 — 高解像度入力ならGemini単体で十分
- 手足の末端ポーズが変わることがある — 顔を隠す手、脚の角度など
- 異性間着せ替えも可能 — 男性スーツ→女性で自然な結果
- IMAGE_SAFETYフィルターが露出の多い衣服をブロック — ファッション用途でのGeminiの制約
- 衣服の物理的な挙動を理解 — タイト/ルーズの質感差、重力による垂れ、圧縮シワが正確に描画
最も重要な発見は#9でした。前処理ではなく解像度が品質を決定する。この1つの知見が、MediaPipe前処理ステップと顔復元後処理の必要性を排除しました。本番環境では、高解像度の入力画像を確保するだけで十分です。
次回予告
16のテストでNano Bananaが仮想試着を効果的に実行できることが確認されました。しかし、専用モデルであるVertex AI Virtual Try-Onと比較するとどうか。そして両者を元のPASTA-GAN++と比較すると?
Part 3では、追加12テストケースによる直接比較を記録します。3エンジンの対決で、GANと生成AIの世代差が決定的に示されます。
META FIT GenAIシリーズ:
- Part 1: GANから生成AIへ
- Part 2: Nano Banana Virtual Try-On — 16テストケース(この記事)
- Part 3: 3エンジン対決