ねらい・対象・ゴール・TL;DR
ねらい: Meta AIの最新セグメンテーションモデル「SAM3」を使おうとしたときの地獄体験と、Ultralytics経由なら天国だったという話を共有する
対象:
- SAMシリーズを使ってみたいけどインストールで詰まっている人
- CUDA、PyTorchのバージョン地獄に苦しんでいる人
- 「もっと楽にAIモデル使いたいんだけど」と思っている人
ゴール: SAM/SAM2/SAM3の公式インストール地獄を理解し、Ultralyticsという救済措置の存在を知る
TL;DR: Meta AI公式のSAMリポジトリからインストールしようとするとCUDA、PyTorch、NumPyのバージョン地獄に陥る。Ultralyticsならpip install ultralyticsしてからfrom ultralytics import SAMで3行で動く。SAM3もUltralytics 8.3.237で統合済み。
はじめに:「SAM3動かしたい」から始まった地獄の1日
2025年11月19日、Meta AIがSAM3(Segment Anything Model 3)をリリースした。
"SAM 3 was released by Meta on November 20th, 2025 and is fully integrated into Ultralytics as of version 8.3.237"
— Ultralytics SAM3ドキュメントより
テキストプロンプトで「yellow school bus」って打つだけで、画像内の全ての黄色いスクールバスをセグメンテーションしてくれる。これは面白そうだ。
よし、動かしてみよう。
公式リポジトリをクローンして...
git clone https://github.com/facebookresearch/sam3.git
cd sam3
pip install -e .
ここから地獄が始まった。
地獄その1:CUDA_HOME環境変数
最初に出てきたエラーがこれ。
"OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root."
— GitHub Issue #41より
「CUDA_HOMEが設定されてないぞ」と怒られる。
よし、設定しよう。
export CUDA_HOME=/usr/local/cuda-12.1
再実行。まだダメ。
echo $CUDA_HOME # 設定されてる
nvcc --version # CUDA 12.1
環境変数は正しく設定されてるのに、なぜ?
答え:pipのビルド環境が隔離されているから。--no-build-isolationフラグが必要だった。
pip install --no-build-isolation -e .
...まだエラー。
地獄その2:NumPyがない(?)
"UserWarning: Failed to initialize NumPy: No module named 'numpy'"
— GitHub Issue #172より
「NumPyがない」と言われる。いや、入ってるって。
python -c "import numpy; print(numpy.__version__)"
# 1.26.4
入ってる。なのに「No module named 'numpy'」。
これはpipのビルド時に一時的な仮想環境が作られて、そこにNumPyがインストールされていないために起きる。
解決策:
pip install numpy # 念のため再インストール
pip install --no-cache-dir --no-build-isolation -e .
...次のエラー。
地獄その3:PyTorchのバージョン不整合
"This usually happens because you have multiple versions of dependencies (PyTorch or CUDA) in your environment."
— SAM2 INSTALL.mdより
PyTorchとCUDAのバージョンが合っていないらしい。
undefined symbol: _ZN3c1015SmallVectorBaseIjE8grow_podEPKvmm
こんなシンボルエラーが出る。
SAM2/SAM3はPyTorch 2.5.1以上を要求する。でもCUDA 12.1用のPyTorch 2.5.1がうまく動かないことがある。
"We have been building SAM 2 against PyTorch 2.5.1 internally. However, a few user comments (e.g. #22, #14) suggested that downgrading to PyTorch 2.1.0 might resolve this problem."
— SAM2 INSTALL.mdより
和訳: 内部ではPyTorch 2.5.1でSAM2をビルドしている。しかし、いくつかのユーザーコメント(#22、#14など)によると、PyTorch 2.1.0にダウングレードすると問題が解決する可能性がある。
最新版を使えって言ったり、ダウングレードしろって言ったり。どっちなんだ。
地獄その4:CUDAカーネルのアーキテクチャ
CUDA error: no kernel image is available for execution on the device
今度はCUDAカーネルがGPUアーキテクチャに対応していないと言われる。
"A possible cause could be that the CUDA kernel is somehow not compiled towards your GPU's CUDA capability."
— SAM2 INSTALL.mdより
和訳: 考えられる原因として、CUDAカーネルがGPUのCUDA Capabilityに対してコンパイルされていない可能性がある。
解決策として、環境変数でアーキテクチャを明示的に指定する必要がある:
export TORCH_CUDA_ARCH_LIST="9.0 8.0 8.6 8.9 7.0 7.2 7.5 6.0"
どのアーキテクチャを指定すればいいかは、自分のGPUによる。RTX 4090なら8.9、RTX 3090なら8.6...。調べるのも面倒くさい。
地獄その5:Windowsユーザーへの仕打ち
"If you are installing on Windows, it's strongly recommended to use Windows Subsystem for Linux (WSL) with Ubuntu."
— SAM2 INSTALL.mdより
和訳: Windowsにインストールする場合、WSL(Windows Subsystem for Linux)とUbuntuの使用を強く推奨する。
Windowsネイティブでの動作はほぼ保証されていない。WSLを使えと。
Windows勢、切り捨てられてる。
累計5時間、結局動かなかった
振り返ってみると:
- CUDA_HOME設定 → 30分
- NumPy問題 → 1時間
- PyTorchバージョン試行錯誤 → 2時間
- CUDAアーキテクチャ問題 → 1時間
- その他細々としたエラー → 30分
累計5時間。そして結局、安定して動く環境を構築できなかった。
救世主登場:Ultralyticsという選択肢
疲れ果てた頃、ふとUltralyticsのドキュメントを見た。
"SAM 3 is fully integrated into the Ultralytics package as of version 8.3.237 (PR #22897). Install or upgrade with pip install -U ultralytics to access all SAM 3 features including text-based concept segmentation, image exemplar prompts, and video tracking."
— Ultralytics SAM3ドキュメントより
和訳: SAM3はUltralyticsパッケージのバージョン8.3.237(PR #22897)で完全に統合された。pip install -U ultralyticsでインストールまたはアップグレードすれば、テキストベースのコンセプトセグメンテーション、画像エグゼンプラープロンプト、ビデオトラッキングを含むすべてのSAM3機能にアクセスできる。
...え、それだけ?
Ultralyticsでのインストール
pip install -U ultralytics
これだけ。CUDAの設定?PyTorchのバージョン?全部Ultralyticsがよしなにやってくれる。
SAM3を動かす
from ultralytics import SAM
# SAM3モデルをロード
model = SAM("sam3.pt")
# 画像に対してテキストプロンプトでセグメンテーション
results = model("image.jpg", text=["yellow school bus"])
3行。たった3行で動いた。
あの5時間はなんだったんだ。
UltralyticsでSAM/SAM2/SAM3を使う完全ガイド
Ultralyticsには歴代のSAMモデルが全て統合されている。
対応モデル一覧
| モデル | ファイル名 | 特徴 |
|---|---|---|
| SAM (オリジナル) | sam_b.pt, sam_l.pt, sam_h.pt | 2023年リリース、画像のみ |
| Mobile-SAM | mobile_sam.pt | 軽量版SAM |
| SAM2 | sam2_t.pt, sam2_s.pt, sam2_b.pt, sam2_l.pt | 2024年、動画対応 |
| SAM2.1 | sam2.1_t.pt, sam2.1_s.pt, sam2.1_b.pt, sam2.1_l.pt | 改良版SAM2 |
| SAM3 | sam3.pt | 2025年、テキストプロンプト対応 |
SAM2の使い方(画像)
from ultralytics import SAM
# SAM2モデルをロード
model = SAM("sam2.1_b.pt")
# バウンディングボックスでプロンプト
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
# ポイントでプロンプト
results = model(points=[900, 370], labels=[1])
# 複数ポイント
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
"from ultralytics import SAM"
— Ultralytics SAM2ドキュメントより
SAM2の使い方(動画)
from ultralytics import SAM
model = SAM("sam2.1_b.pt")
# 動画全体をセグメンテーション
model("path/to/video.mp4")
動画にも対応。フレームごとの処理をUltralyticsが勝手にやってくれる。
SAM3の使い方(テキストプロンプト)
from ultralytics.models.sam import SAM3SemanticPredictor
# 設定
overrides = dict(
conf=0.25,
task="segment",
mode="predict",
model="sam3.pt",
half=True, # FP16で高速化
)
predictor = SAM3SemanticPredictor(overrides=overrides)
# 画像を設定
predictor.set_image("path/to/image.jpg")
# テキストでクエリ
results = predictor(text=["person", "bus", "glasses"], save=True)
# 複雑な記述も可能
results = predictor(text=["person with red cloth", "person with blue cloth"], save=True)
"Find and segment all instances of a concept using a text description."
— Ultralytics SAM3ドキュメントより
和訳: テキスト記述を使用して、コンセプトの全てのインスタンスを検出してセグメンテーションする。
「赤い服を着た人」と「青い服を着た人」を別々にセグメンテーションできる。これがSAM3の真骨頂だ。
なぜUltralyticsは楽なのか
理由1:依存関係の解決を自動化
Ultralyticsパッケージは、PyTorch、NumPy、OpenCVなどの依存関係を適切なバージョンで管理している。ユーザーが手動でバージョンを合わせる必要がない。
理由2:モデルの自動ダウンロード
model = SAM("sam2.1_b.pt") # 初回実行時に自動ダウンロード
チェックポイントファイルを手動でダウンロードする必要がない(SAM3は例外で手動ダウンロード必要)。
理由3:統一されたAPI
YOLO、SAM、FastSAM、RT-DETR...。全て同じようなAPIで使える。
from ultralytics import YOLO, SAM, FastSAM
# どれも同じパターン
model = YOLO("yolov8n.pt")
model = SAM("sam2.1_b.pt")
model = FastSAM("FastSAM-s.pt")
# 推論も同じ
results = model("image.jpg")
理由4:本番環境向けの最適化
"The SAM 2 model you downloaded from Ultralytics is optimized for size and performance, which is why it is smaller than Meta's original release."
— Ultralytics GitHub Discussionより
和訳: Ultralyticsからダウンロードしたモデルは、サイズとパフォーマンスのために最適化されており、Meta公式リリースよりも小さい。
Metaの公式sam_hiera_large.ptが857MBなのに対し、Ultralytics版は429MB。半分のサイズで同等の性能。
公式 vs Ultralytics:比較表
| 項目 | Meta公式リポジトリ | Ultralytics |
|---|---|---|
| インストール難易度 | 地獄 | 天国 |
| CUDA設定 | 手動で必須 | 自動 |
| PyTorchバージョン管理 | 手動 | 自動 |
| チェックポイントダウンロード | 手動 | 自動(SAM3除く) |
| Windows対応 | WSL推奨 | ネイティブ対応 |
| ドキュメント | 研究者向け | 実用向け |
| API統一性 | なし | YOLO等と統一 |
| サポート | GitHub Issue | Discord + GitHub |
"The fastest and highest-performance way to deploy SAM2 to Modelbit is using the Ultralytics package to run SAM2."
— Modelbit Documentation より
和訳: SAM2をModelbitにデプロイする最も速くて高性能な方法は、UltralyticsパッケージでSAM2を実行することだ。
本番環境へのデプロイでもUltralyticsが推奨されている。
SAM3の凄さ:何ができるようになったのか
せっかくなので、SAM3で何ができるようになったか整理しておこう。
SAM1(2023年)
- ポイント、バウンディングボックス、マスクでプロンプト
- 単一オブジェクトのセグメンテーション
- 画像のみ対応
SAM2(2024年)
- SAM1の機能 + 動画対応
- フレーム間でオブジェクトを追跡
- オクルージョン(遮蔽)にも対応
SAM3(2025年)
"SAM3's breakthrough takes it from a geometry-focused tool into a concept-level vision foundation model."
— Edge AI and Vision Alliance記事より
和訳: SAM3のブレークスルーは、幾何学に焦点を当てたツールからコンセプトレベルのビジョン基盤モデルへと進化させた。
新機能:
- テキストプロンプト: 「yellow school bus」と入力するだけ
- コンセプトセグメンテーション: 同じカテゴリの全インスタンスを一括検出
- 画像エグゼンプラー: 「この画像のこの部分と似たもの」で検索
- 27万コンセプト対応: 従来ベンチマークの50倍以上
"The system handles 270,000 unique concepts over 50 times more than existing benchmarks"
— AI Films記事より
和訳: このシステムは27万のユニークなコンセプトを扱う。既存のベンチマークの50倍以上だ。
実践:Ultralyticsで今すぐSAMを動かす
理論はいい。今すぐ動かそう。
環境構築(3分)
# 仮想環境作成
python -m venv sam-env
source sam-env/bin/activate # Windows: sam-env\Scripts\activate
# Ultralyticsインストール
pip install ultralytics
これで完了。
SAM2で画像セグメンテーション
from ultralytics import SAM
import cv2
# モデルロード(初回は自動ダウンロード)
model = SAM("sam2.1_b.pt")
# 画像読み込み
image_path = "your_image.jpg"
# ポイントプロンプトでセグメンテーション
results = model(image_path, points=[[500, 300]], labels=[1])
# 結果を保存
for result in results:
result.save("output.jpg")
YOLOとSAMの連携
YOLOで物体検出 → SAMで精密セグメンテーション、という連携も簡単。
from ultralytics import YOLO, SAM
# YOLOで検出
yolo = YOLO("yolov8n.pt")
detections = yolo("image.jpg")
# 検出結果からバウンディングボックスを取得
boxes = detections[0].boxes.xyxy.tolist()
# SAMでセグメンテーション
sam = SAM("sam2.1_b.pt")
for box in boxes:
results = sam("image.jpg", bboxes=[box])
まとめ:依存関係地獄からの解放
SAMシリーズを使いたいなら、Meta公式リポジトリに手を出す前にUltralyticsを試そう。
公式リポジトリの場合:
- CUDA_HOME設定
- PyTorchバージョン調整
- NumPy互換性問題
- CUDAアーキテクチャ設定
- Windowsは実質非対応
- 累計数時間〜数日の試行錯誤
Ultralyticsの場合:
pip install ultralyticsfrom ultralytics import SAM- 終わり
この差は歴然だ。
研究者が最新のモデルをすぐに使えるようにする。それがUltralyticsの哲学なんだと思う。
依存関係地獄で泣いた僕からのアドバイス:Ultralyticsを使え。
君の大切な時間を、環境構築ではなくモデルの活用に使ってほしい。
参考リンク
この記事が役に立ったら、ぜひフォローといいねをお願いします。依存関係地獄で苦しんでいる仲間がいたら、この記事をシェアしてあげてください。