Zero-Shot Image Classification
OpenCLIP
Japanese
clip
bridge-inspection
infrastructure
image-text-retrieval
zero-shot-classification
Instructions to use t-seino-ml/BridgeCLIP-japanese with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- OpenCLIP
How to use t-seino-ml/BridgeCLIP-japanese with OpenCLIP:
import open_clip model, preprocess_train, preprocess_val = open_clip.create_model_and_transforms('hf-hub:t-seino-ml/BridgeCLIP-japanese') tokenizer = open_clip.get_tokenizer('hf-hub:t-seino-ml/BridgeCLIP-japanese') - Notebooks
- Google Colab
- Kaggle
BridgeCLIP(日本語版)— 橋梁点検画像の分類と検索のための CLIP ファインチューニング
OpenCLIP ViT-B/32 を全国道路施設点検データベース(xROAD)の橋梁点検画像と日本語所見テキストのペアでファインチューニングしたモデル。分類(4 カテゴリ)と画像⇔テキスト検索を 1 つの埋め込み空間で同時に実現します。
- コードリポジトリ: t-seino-ml/BridgeCLIP-japanese
- 英語キャプション版: 別 repo として準備中(
t-seino-ml/BridgeCLIP-english、Coming soon)
モデル概要
| 項目 | 値 |
|---|---|
| ベースモデル | OpenCLIP ViT-B/32 (laion2b_s34b_b79k) |
| 画像エンコーダ | Vision Transformer (ViT-B/32) |
| テキストエンコーダ | Transformer (GPT-2 ベース) |
| 射影次元 | 512 |
| 学習データ | 130,930 件(橋梁点検画像-日本語所見テキストペア) |
| バッチサイズ | 128 |
| 学習率 | 1e-4(warmup 1000、weight decay 0.1、AMP) |
| エポック | 100(best = epoch 5、val_loss = 2.5242) |
| 損失関数 | コントラスティブ損失(CLIP loss) |
使い方
インストール
pip install open_clip_torch torch huggingface_hub
モデルの読み込み
from huggingface_hub import hf_hub_download
import open_clip
import torch
from PIL import Image
# ベースモデル構造
model, _, preprocess = open_clip.create_model_and_transforms(
"ViT-B-32", pretrained="laion2b_s34b_b79k"
)
tokenizer = open_clip.get_tokenizer("ViT-B-32")
# Hugging Face Hub から ckpt をダウンロード
ckpt_path = hf_hub_download(
repo_id="t-seino-ml/BridgeCLIP-japanese",
filename="epoch_5.pt",
)
ckpt = torch.load(ckpt_path, map_location="cpu", weights_only=False)
state_dict = ckpt.get("state_dict", ckpt)
state_dict = {k.replace("module.", ""): v for k, v in state_dict.items()}
model.load_state_dict(state_dict, strict=False)
model = model.eval()
# 画像特徴の抽出
image = preprocess(Image.open("bridge_image.jpg")).unsqueeze(0)
with torch.no_grad():
image_features = model.encode_image(image)
image_features /= image_features.norm(dim=-1, keepdim=True)
# テキスト特徴の抽出
texts = tokenizer(["主桁にひびわれが見られる", "鋼部材の腐食が進行している"])
with torch.no_grad():
text_features = model.encode_text(texts)
text_features /= text_features.norm(dim=-1, keepdim=True)
# コサイン類似度
similarity = image_features @ text_features.T
print(similarity)
k近傍分類
完全な分類パイプライン(学習DB の特徴抽出、k近傍多数決)は GitHub リポを参照:
代表的なコマンド:
CUDA_VISIBLE_DEVICES=0 python -m classification.models.clip_finetuned_knn \
--train_csv classification/results/unified_train_user.csv \
--val_csv classification/results/unified_val_user.csv \
--ckpt_dir logs_classification/bridgeclip_vitb32_unified/checkpoints \
--out classification/results/clip_finetuned_knn_preds.csv \
--k 10
性能(検証データ 2,679 件)
分類 — Macro-F1
| カテゴリ | CLIP-FT + k-NN(提案) | CLIP-FT + 線形分類器 | 教師あり最強ベースライン (ResNet50 weighted finetune) |
|---|---|---|---|
| 健全度判定 | 0.4170 | 0.3879 | 0.6106 |
| 対策区分 | 0.2415 | 0.2273 | 0.3293 |
| 損傷種類 | 0.5115 | 0.4939 | 0.5379 |
| 損傷部位 | 0.4904 | 0.5021 | 0.4640 |
| 平均 | 0.4151 | 0.4028 | 0.4855 |
本モデル(CLIP-FT k-NN)は 損傷部位の macro-F1 / macro-Precision で首位を維持しつつ、単一の埋め込み空間で分類と検索を同時にこなせる点が利点。
特徴量の比較(同じ supervised 線形プローブヘッド、backbone のみ違う)
| Backbone | 平均 macro-F1 |
|---|---|
| ResNet50 (ImageNet) | 0.3278 |
| ViT-B/16 (ImageNet) | 0.3496 |
| CLIP-base (LAION-2B) | 0.3304 |
| CLIP-FT(本モデル) | 0.4028 (+21.9% 相対改善) |
橋梁ドメインでのコントラスティブ学習は ImageNet / LAION-2B 事前学習を +21.9% 相対 で上回ることを実証。
検索(Recall@k)
| 方向 | Base CLIP | CLIP-FT(本モデル) |
|---|---|---|
| Image→Text R@1 | 0.0004 | 0.0370 |
| Image→Text R@10 | 0.0037 | 0.2251 |
| Text→Image R@1 | 0.0011 | 0.0493 |
| Text→Image R@10 | 0.0045 | 0.2437 |
属性ベース検索 (Text → Image, AttrMatch@1)
クエリテキストの属性ラベルと検索画像の属性ラベルが 1 つでも一致すれば hit。
| カテゴリ | Base CLIP | CLIP-FT | 倍率 |
|---|---|---|---|
| 健全度判定 | 0.3502 | 0.7043 | ×2.01 |
| 対策区分 | 0.3101 | 0.6281 | ×2.03 |
| 損傷種類 | 0.1248 | 0.6667 | ×5.34 |
| 損傷部位 | 0.1252 | 0.6397 | ×5.11 |
損傷種類・部位の T2I 検索で 5 倍超の改善を確認。これは ResNet50/ViT のような教師あり分類器には原理的に不可能な能力。
学習データ
全国道路施設点検データベース(xROAD)から抽出した橋梁点検画像と日本語所見テキストのペア。
| Split | サンプル数 |
|---|---|
| Train | 130,930 |
| Validation | 2,679 |
| k-NN データベース(4 カテゴリすべて有効な行のみ) | 90,987 |
分類カテゴリ
| カテゴリ | クラス数 | タイプ |
|---|---|---|
| 健全度判定 | 4 (Ⅰ / Ⅱ / Ⅲ / Ⅳ) | 単一ラベル |
| 対策区分 | 9 (A / B / C1 / C2 / E1 / E2 / M / S1 / S2) | 単一ラベル |
| 損傷種類 | 15 | マルチラベル |
| 損傷部位 | 20 | マルチラベル |
ファイル構成
.
├── README.md # このファイル
├── epoch_5.pt # ファインチューニング済みチェックポイント(約 1.7 GB)
└── config.json # モデル設定
引用
論文準備中。
ライセンス
MIT License。データセット本体は配布しません(GitHub リポの「データ」セクション参照)。
- Downloads last month
- -