本日、Hugging Faceにて[Virtual Try-On Safety Classifier](https://huggingface.co/Genlook/tryon-safety-classifier)をApache-2.0ライセンスのもとで公開しました。これは商品画像を解析し、「ユーザーがこれを試着したら、生成される画像はどんなものになるか?」という1つの問いに答えるモデルです。

私たちは、このモデルを[バーチャル試着](/glossary/virtual-try-on)モデルに商品データを渡す前のフィルタリング機能として構築しました。任意の画像を扱うあらゆる試着サービスが同様の課題に直面しているため、モデル本体、ラベル付けのポリシー、そして評価結果をすべて公開することにしました。

![Genlookのデモカタログから抽出した8つの商品画像と分類結果。スポーツブラ、ボードショーツ、クロップドジャケットはok。水着3点はrevealing。犬用ハーネスはokかつpetタグ。ウィッグはokかつnot clothingタグ。](/blog-images/tryon-safety-classifier-examples.webp)

## 既存のNSFW検出がバーチャル試着で機能しない理由

バーチャル試着は、人物の写真と商品の写真を入力とし、その人物が商品を着用した画像を返します。リスクが生じるのは出力結果ですが、生成前に確認できるのは「商品の写真」だけです。

一般的なNSFW(職場閲覧注意)検出器は、与えられた画像のピクセルを判定します。しかし、商品画像に対してそのアプローチは適切ではありません。

- **ランジェリーの平置き画像にヌードは含まれない。** しかし、試着後の画像にはランジェリー姿のユーザーが写ります。
- **白背景のニップレスは数センチの布切れにすぎない。** しかし、試着後の画像はトップレス状態になります。
- **マネキンが被るフェティッシュフードに露骨な描写はない。** しかし、依然としてアダルト商品です。
- **ネックレスのみを身につけたヌードモデルの写真は露骨である。** しかし、ネックレス自体は通常の商品です。

3つの人気オープンNSFW画像分類モデル(NudeNet、nsfw-vit、Falconsai)を、ラベル付け済みの初期データ141点でテストしたところ、私たちが定義したラベルとの一致率はわずか48〜62%でした。一方、GoogleのShieldGemma 2にこの課題に特化したカスタムポリシーを与えた結果、71.6%に達しました。モデル自体は正常に機能しているのですが、「問われている内容が違う」のです。

## モデルが予測する内容

各商品は、深刻度順に以下のレベルに分類されます。

| レベル | バーチャル試着の出力結果 | 例 | 
|---|---|---|
| `ok` | 通常の服装 | 普段着、スポーツウェア、ウェットスーツ、服と同じ露出度のコスプレ、アクセサリー | 
| `revealing` | 水着レベルの露出 | ビキニ、水着、メンズ下着、補正下着、マイクロショーツ、大半のフェス用ウェア | 
| `lingerie` | 女性用下着(親密な部分が見えない) | ブラ、パンティー、ランジェリーセット、ボディスーツ、ガーター、ランジェリーとして着用するコルセット | 
| `adult` | 親密な部分が露出している、または性的な商品 | マイクロ水着、ニップレス、シースルー、オープンカップ、BDSMやフェティッシュウェア、セクシーなロールプレイ衣装 | 

レベルに加えて、以下の3つの追加出力が提供されます。

- **subject**:`human_clothing`、`pet`、または`not_clothing`。商品画像だけでは犬用ハーネスとボンデージハーネスは似て見えます。ウィッグ、化粧品、日用品は衣類ではない(not clothing)と判定されます。
- **swimwear**:`regular`、`near_micro`、または`micro`。regularとnear microは`revealing`、microは`adult`になります。商品名にある「マイクロキニ」という言葉は決定打にならず、写真で判断されます。
- **ravewear**:true または false(フェス用衣装向け)。レベルには影響しませんが、フェス用ウェアはモデルが最も迷いやすいカテゴリであるため、判断材料として役立ちます。

これらのレベルは、商品や店舗ではなく「出力結果」を説明するものです。どのレベルを許可するかはターゲット層によって異なります。ランジェリーブランドなら`lingerie`を許可しますが、子供向けマーケットプレイスなら`revealing`をブロックするかもしれません。また、このモデルは`blocked`フラグ(`adult`になる確率が0.3以上)も返します。わずかな誤判定の増加と引き換えに、トップレベル判定単独よりも多くのアダルト商品をブロックできます。

## 判断が難しいケース

大半の商品は簡単に分類できます。ポリシーが存在するのは判断に迷うケースのためであり、すべてのルールは実際の商品の判定から生まれたものです。

| 商品 | レベル | 理由 | 
|---|---|---|
| ジムウェアとして販売されているスポーツブラ | ok | 公の場でトップスとして着用される | 
| ランジェリーのブラレットとして販売されている同じカッティングのもの | lingerie | 女性用下着 | 
| 写真で乳首がはっきり見えるレースのブラ | adult | 乳首部分が透けている | 
| メンズボクサーパンツ | revealing | 水着レベルの露出 | 
| ウェットスーツ、ラッシュガード、ブルキニ | ok | 全身を覆っている | 
| レザーパンツ、ラテックス風ドレス | ok | ファッションアイテム | 
| フェティッシュウェアとして販売されているレザーやラテックスのキャットスーツ | adult | フェティッシュスーツ | 
| シャツの上に着用するレザーのチェストハーネス | ok | 服の上のアクセサリー | 
| 素肌に着用するストラップハーネス | adult | フェティッシュアイテム | 
| ハロウィンの動物マスク | ok | コスチューム | 
| パッププレイ用マスク | adult | フェティッシュマスク | 
| ドレスの上から着用するボディチェーン | ok | 服の上のジュエリー | 
| 素肌の胴体に着用するボディチェーン | adult | 何も着ていない上に着用 | 
| 服と同じ露出度のコスプレ | ok | コスチューム | 
| ランジェリー風のアニメ衣装 | adult | 性的対象化されたコスプレ | 

各レベルやタグのルールを網羅した完全なポリシーは、重みファイルとともに[LABELLING_POLICY.md](https://huggingface.co/Genlook/tryon-safety-classifier/blob/main/LABELLING_POLICY.md)として公開しています。

この記事の冒頭にある例は、私たちのデモカタログで公開モデルを実行した結果です。長袖の水着は良い例です。長袖でフロントジッパーが付いていますが、ボトムスがワンピースのようなカッティングになっているため、試着結果は水着レベルの露出となり、モデルは`revealing`と判定しました。カタログでその隣にあるホルターネックのスポーツブラは、0.97の確率で`ok`のままです。

## 構築プロセス

**データ。** 判定が難しいケース(ランジェリー、マイクロ水着、フェティッシュウェア、フェス用ウェア、コスプレ、ペットウェア)をカバーするため、オンラインショップのカタログから約2,600点(約5,000枚の写真)を厳選しました。モデルが過剰にブロックしないよう、日常的なファッションも多く含めています。使用するのは商品の写真のみで、ユーザーの写真は一切使用していません。未成年者が露出の高い、あるいは性的な文脈で表示される可能性のある商品は、データから完全に除外しました。

**ラベル付け。** ポリシーに基づき、Claudeにすべての写真、タイトル、説明文を読み込ませて全商品にラベル付けを行いました。その後、人間のレビュアーが各レベルのキャリブレーション用サンプルを確認し、境界事例を修正。その結果をポリシーにフィードバックしました。ポリシーは何度も改訂されました。例えば、大半の下着は露骨ではないことが明確になったため、`lingerie`レベルは`adult`から分離されました。

**モデル。** ベースモデルはGoogleのSigLIP 2(so400m、パッチ16、384px、Apache-2.0)です。2つのバリアントを提供しています。

| バリアント | サイズ | 内容 | 
|---|---|---|
| finetuned(デフォルト) | 約0.9GB | 最後の6つのTransformerブロックとプーリングヘッドをエンドツーエンドで学習。4つの線形ヘッド付き | 
| frozen | SigLIP 2の上に約120KB | 元のビジョンタワー。写真の埋め込みの平均と最大値に対するロジスティックヘッド | 

背面画像や生地のアップなど、1枚の写真では見えない情報が別の写真に隠されていることが多いため、1つの商品に対してすべての写真を使ってスコアリングします。

同じポリシーをプロンプトとして最先端のLLMにも試しました。精度は近かったものの、1回の呼び出しに約1.6秒かかり、タイムアウト時のフォールバックも必要でした。ビジョン分類モデルなら、GPU上で写真1枚あたり数十ミリ秒で実行でき、常に同じ回答を返し、ポリシー変更時の再学習も可能です。

## 精度評価

2,596件の商品データを用いた5分割交差検証を実施。各商品は、学習時に一度も見たことのないモデルによってスコアリングされました。

| | finetuned | frozen | 
|---|---|---|
| 4レベルの精度 | 94.6% | 94.2% | 
| `blocked`フラグにおけるアダルト商品の見逃し | 534件中34件 | 534件中39件 | 
| `blocked`フラグにおけるアダルトの誤判定 | 52件 | 55件 | 
| ランジェリーの再現率 | 90% | 89% | 
| subjectタグの精度 | 99.2% | | 
| swimwearタグの精度 | 90.0% | | 

商品カテゴリ別(finetuned、トップレベル):

| カテゴリ | 商品数 | 精度 | 
|---|---|---|
| 日常ファッションのカタログ | 1,032 | 97.5% | 
| ロープおよびボンデージ | 75 | 100% | 
| 水着ブランド | 230 | 95.2% | 
| ランジェリーブランド | 120 | 94.2% | 
| アニメ・コスプレ | 63 | 93.7% | 
| フェティッシュ、ランジェリー、ペット用カタログ | 631 | 92.6% | 
| エキゾチック・マイクロ水着 | 330 | 91.8% | 
| フェス・レイブウェア | 115 | 85.2% | 

真のマイクロ水着:95件中91件を検出。

このテストセットは意図的に難易度を上げています。多くの店舗が扱うような日常ファッションのカタログでは、97.5%の精度を達成しています。

## 制限事項

- **透け感のあるランジェリーが最も難しい境界線です。** 乳首や性器がはっきりと見えるかどうかが`lingerie`と`adult`の分かれ目となりますが、よく似た商品が両方に存在します。残るエラーのほとんどがここに集中しています。
- **フェス・レイブウェアが最も苦手なカテゴリです。** フィッシュネット、メッシュ、ラインストーンなどは、モデルを`adult`判定に傾かせます。
- **主に欧米のEC写真に基づいています。** 写真のスタイルが大きく異なる場合、精度が低下する可能性があります。
- **人物ではなく商品を分類するものです。** 個人の特定や、個人に関する意思決定には使用しないでください。

## 使い方

```python
# pip install torch open_clip_torch safetensors huggingface_hub pillow
from huggingface_hub import hf_hub_download
import importlib.util

spec = importlib.util.spec_from_file_location(
    "tryon_safety",
    hf_hub_download("Genlook/tryon-safety-classifier", "tryon_safety.py"),
)
tryon_safety = importlib.util.module_from_spec(spec)
spec.loader.exec_module(tryon_safety)

clf = tryon_safety.TryOnSafetyClassifier.from_pretrained(
    "Genlook/tryon-safety-classifier", revision="v1.0"
)
pred = clf.predict(["front.jpg", "back.jpg"])  # 1つの商品のすべての写真
print(pred.level, pred.blocked, pred.subject, pred.swimwear, pred.ravewear)
```

予期せぬアップデートによる結果の変動を防ぐため、`revision="v1.0"`を固定してください。推論に必要なのは`open_clip`と`torch`のみで、重みはsafetensorsフォーマットです。

誤検知、検知漏れ、次期バージョンへのアイデアなどがありましたら、[モデルリポジトリ](https://huggingface.co/Genlook/tryon-safety-classifier)のDiscussionsタブまでお気軽にお寄せください。

## Genlookのサービスへの適用

[Genlook Try-On API](https://platform.genlook.app)ではすでに、バーチャル試着結果を返す前にすべての商品をチェックしています。アダルトおよびフェティッシュ商品は拒否され、水着や下着、ランジェリーは有料アカウントが必要です。拒否されたバーチャル試着は`CONTENT_POLICY_VIOLATION`として失敗し、クレジットは返還されます([エラーリファレンス](/docs/tryon-api/errors))。この分類モデルは、まさにそのチェックのために私たちが構築したものです。

開発者にとっては、安全性への対応がAPIの一部として組み込まれていることを意味し、自前で構築する必要がなくなります。1つのエンドポイントであらゆる商品タイプをカバーし、有料プランでは1回のバーチャル試着あたり0.02ドル(大口の場合は0.015ドルまで低下)、従量課金では0.04ドルで利用可能です。新規アカウントには無料クレジットが付与されます。

## まとめ

- **今回のリリース:** 商品画像からバーチャル試着結果を予測する、SigLIP 2ベースのApache-2.0分類モデル。
- **開発の背景:** 一般的なNSFW検出は商品画像のピクセルを判定するため、バーチャル試着には適していません。既存の3モデルでテストしたところ、私たちの一致率は48〜62%にとどまりました。
- **出力:** 4つのレベル(ok、revealing、lingerie、adult)に加え、subject、swimwear、ravewearのタグを出力します。
- **精度:** 意図的に難易度を上げたデータセットにおいて、4レベル全体で94.6%。日常ファッションでは97.5%、ロープやボンデージでは100%の精度。
- **オープンソース:** 重み、推論コード、ラベル付けポリシーを公開しています。学習データは非公開です。

---

_[Hugging Faceでモデルを入手する](https://huggingface.co/Genlook/tryon-safety-classifier)|[platform.genlook.appでAPIキーを取得する](https://platform.genlook.app)|[ストアにバーチャル試着を追加する](/get-started)_

<Faq>
  <FaqItem
    question="Virtual Try-On Safety Classifierとは何ですか?"
    answer="GenlookがApache-2.0で公開したオープンソースの画像分類モデルです。商品の写真を解析し、その商品をバーチャル試着した際の結果(ok、revealing、lingerie、adult)を予測します。また、被写体(人間用衣類、ペット、衣類以外)、水着の露出度、フェス用ウェアのタグ付けも行います。"
  />
  <FaqItem
    question="バーチャル試着にNSFW検出モデルを使わないのはなぜですか?"
    answer="NSFW検出モデルは画像のピクセルを判定します。しかし、バーチャル試着では商品画像がそのまま出力されるわけではありません。ランジェリーの平置き画像にヌードは含まれませんが、試着結果にはランジェリー姿のユーザーが写ります。私たちのラベル基準で既存のオープンNSFW分類モデルをテストしたところ、一致率はわずか48〜62%でした。"
  />
  <FaqItem
    question="精度はどのくらいですか?"
    answer="判断が難しいケースを含む2,596商品を用いた5分割交差検証において、4レベル全体の精度は94.6%です。日常ファッションのカタログでは97.5%に達します。blockedフラグを使用した場合、534件のアダルト商品のうち見逃しは34件でした。"
  />
  <FaqItem
    question="商用利用は可能ですか?"
    answer="はい。ベースとなったSigLIP 2と同様に、モデルはApache-2.0ライセンスです。ただし、学習データは公開していません。"
  />
  <FaqItem
    question="Genlookのバーチャル試着APIにはセーフティチェックが含まれていますか?"
    answer="はい。バーチャル試着結果を返す前にすべての商品がチェックされます。アダルト商品やフェティッシュ商品は拒否され、水着や下着、ランジェリーは有料アカウントが必要です。拒否された場合はクレジットが返還されます。アダルト関連の小売業者は、support@genlook.appからアクセスの申請が可能です。"
  />
</Faq>