🚀 RobustSAM: 劣化画像に対する強力なセグメンテーションモデル (CVPR 2024 Highlight)
RobustSAMは、劣化した画像に対しても強力なセグメンテーション能力を持つモデルです。SAMの性能を低画質画像で向上させ、プロンプト性とゼロショット汎化性を維持します。

プロジェクトページ | 論文 | データセット
🚀 クイックスタート
Segment Anything Model (SAM) は画像セグメンテーションにおいて画期的なアプローチとして登場し、強力なゼロショットセグメンテーション能力と柔軟なプロンプトシステムで評価されています。しかし、画質が劣化した画像に対しては性能が低下するという課題があります。この制限を解決するために、Robust Segment Anything Model (RobustSAM) を提案します。RobustSAMは、低画質画像に対するSAMの性能を向上させると同時に、プロンプト性とゼロショット汎化性を維持します。
当社の手法は、事前学習されたSAMモデルを活用し、パラメータの増加と計算コストを最小限に抑えています。RobustSAMの追加パラメータは、8台のGPUで30時間以内に最適化できるため、一般的な研究室でも実用的です。また、異なる劣化を持つ688Kの画像-マスクペアからなるRobust-Segデータセットを導入し、モデルのトレーニングと評価を最適化します。様々なセグメンテーションタスクとデータセットに対する広範な実験により、RobustSAMの優れた性能、特にゼロショット条件下での性能が確認されており、実世界での広範な応用が期待されます。さらに、当社の手法は、単一画像のヘイズ除去やブラー除去などのSAMベースの下流タスクの性能を効果的に向上させることが示されています。
免責事項: このモデルカードの内容はHugging Faceチームによって作成され、一部は元の SAMモデルカード からコピー&ペーストされています。
✨ 主な機能
モデルの構成
RobustSAMモデルは3つのモジュールで構成されています。
VisionEncoder
: VITベースの画像エンコーダです。画像のパッチに対するアテンションを使用して画像埋め込みを計算します。相対位置埋め込みが使用されています。
PromptEncoder
: ポイントとバウンディングボックスの埋め込みを生成します。
MaskDecoder
: 画像埋め込みとポイント埋め込みの間、およびポイント埋め込みと画像埋め込みの間でクロスアテンションを実行する双方向トランスフォーマーです。出力はNeck
に入力されます。
Neck
: MaskDecoder
によって生成された文脈化されたマスクに基づいて出力マスクを予測します。
📦 インストール
このセクションでは、RobustSAMモデルを使用するためのインストール手順は特に記載されていません。モデルの使用に必要なライブラリは、コード例の中でtransformers
などが使用されていますが、これらのライブラリのインストール方法は省略されています。
💻 使用例
基本的な使用法
プロンプト付きマスク生成
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModelForMaskGeneration
processor = AutoProcessor.from_pretrained("jadechoghari/robustsam-vit-large")
model = AutoModelForMaskGeneration.from_pretrained("jadechoghari/robustsam-vit-large")
img_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png"
raw_image = Image.open(requests.get(img_url, stream=True).raw).convert("RGB")
input_points = [[[450, 600]]]
import torch
inputs = processor(raw_image, input_points=input_points, return_tensors="pt").to("cuda")
with torch.no_grad():
outputs = model(**inputs)
masks = processor.image_processor.post_process_masks(outputs.pred_masks.cpu(), inputs["original_sizes"].cpu(), inputs["reshaped_input_sizes"].cpu())
scores = outputs.iou_scores
マスクを生成するための他の引数として、関心対象の物体の概略位置の2D座標、関心対象の物体を囲むバウンディングボックス(バウンディングボックスの右上と左下の点のx, y座標の形式)、セグメンテーションマスクを渡すことができます。執筆時点では、公式モデルではテキストを入力として渡すことはサポートされていません 公式リポジトリ。詳細については、モデルの使用方法を視覚的な例とともに示すこのノートブックを参照してください。
自動マスク生成
from transformers import pipeline
generator = pipeline("mask-generation", model="jadechoghari/robustsam-vit-large", device=0, points_per_batch=256)
image_url = "https://huggingface.co/ybelkada/segment-anything/resolve/main/assets/car.png"
outputs = generator(image_url, points_per_batch=256)
生成されたマスクを画像上に表示するには、以下のコードを使用します。
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
def show_mask(mask, ax, random_color=False):
if random_color:
color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)
else:
color = np.array([30 / 255, 144 / 255, 255 / 255, 0.6])
h, w = mask.shape[-2:]
mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)
ax.imshow(mask_image)
plt.imshow(np.array(raw_image))
ax = plt.gca()
for mask in outputs["masks"]:
show_mask(mask, ax=ax, random_color=True)
plt.axis("off")
plt.show()
高度な使用法
高度な使用法に関する具体的なコード例は提供されていません。
視覚的な比較
📚 ドキュメント
このセクションでは、RobustSAMモデルの詳細なドキュメントは特に記載されていません。コード例やモデルの構成に関する説明は、他のセクションで行われています。
🔧 技術詳細
このセクションでは、RobustSAMモデルの技術的な詳細については、モデルの構成や使用方法に関する説明が含まれています。具体的なアルゴリズムやパラメータの調整方法などの詳細は記載されていません。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。
参考文献
もしこの研究が役に立った場合、以下の文献を引用してください。
@inproceedings{chen2024robustsam,
title={RobustSAM: Segment Anything Robustly on Degraded Images},
author={Chen, Wei-Ting and Vong, Yu-Jiet and Kuo, Sy-Yen and Ma, Sizhou and Wang, Jian},
journal={CVPR},
year={2024}
}
謝辞
当社のリポジトリは SAM をベースにしています。SAMの著者の皆様に感謝いたします。