
これが何がすごいの?
SAM 3(Segment Anything Model 3)の一番のポイントは、**「テキストで指定した“概念”に当てはまる物体を、画像・動画の中から見つけて、マスクで切り抜き、動画では追跡までやってくれる」**ところです。
従来の「物体検出=決め打ちクラス(例:COCO80)」とは違い、SAM 3は **open-vocabulary(オープン語彙)**の方向に寄っていて、単純な名詞句(例: “yellow school bus” など)で概念を指定できます。
何ができるの?(動画で)
UltralyticsのSAM 3には「テキストで指定した概念を動画内で追跡する」ためのAPIが用意されています。
- 動画の全フレームで 概念に合う対象を検出
- セグメンテーション(ピクセル単位のマスク)
- 対象をフレーム間で 追跡(トラック)
save=Trueで結果の保存、r.show()で表示(※環境によって表示不可の場合あり)
注意(大事):今回は例として
boyを使いますが、これは**“性別判定AI”ではありません**。
open-vocabularyの概念一致なので、状況次第で混ざります。安全・評価・意思決定に使う用途には向きません(デモ・研究用途向け)。
Windowsで最短実行(YOLO12記事と同じ流れ)
前提(これだけ)
- Windows 10/11
- NVIDIA GPU(あると快適)
- NVIDIAドライバ導入済み
- Python 3.10〜3.12 推奨
1) 作業フォルダ作成 + 仮想環境
PowerShellで実行:
mkdir windows_sam3
cd windows_sam3
py -m venv .venv
.\.venv\Scripts\activate
python -m pip install -U pip
2) GPU版PyTorchを入れる(重要)
ここを間違えるとGPUが使えません。
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
GPU確認:
python -c "import torch; print('torch', torch.__version__); print('cuda', torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'no gpu')"
Ultralytics + OpenCV を入れる
(表示にOpenCVを使うので一緒に入れます)
pip install -U ultralytics opencv-python
簡易チェック(任意):
yolo checks
まずは「自分の動画」で boy を追跡して表示する(保存もOK)
SAM 3モデル(sam3.pt)のダウンロード方法
SAM 3の重みファイル sam3.pt は自動ダウンロードされません。最初に Hugging Face上でアクセス申請 → 承認後に手動ダウンロードして、ローカルに置く必要があります。
Ultralyticsの SAM 3ドキュメントを開き、案内されている Hugging Faceのモデルページで **アクセス申請(Request access)**を行います。
承認されたら、sam3.pt をダウンロードする。私の場合、承認は一瞬で終わりました。
ダウンロードした sam3.pt を、以下で説明する作業フォルダに配置しましょう。
使い方
- 作業フォルダに
track_boy.pyを作る video_pathを自分の動画パスに変える- 実行
python track_boy.py
track_boy.py(表示しながら実行・保存)
Ultralytics docsの SAM3VideoSemanticPredictor を使う形です。
from pathlib import Path
import cv2
from ultralytics.models.sam import SAM3VideoSemanticPredictor
def main():
# ========= ここを自分の環境に合わせて変更 =========
video_path = "9.mp4" # ←自分の動画
out_dir = "sam3_out" # ←出力先フォルダ
# ==============================================
video_path = Path(video_path)
out_dir = Path(out_dir)
out_dir.mkdir(parents=True, exist_ok=True)
predictor = SAM3VideoSemanticPredictor(
overrides=dict(
model="sam3.pt",
conf=0.53,
imgsz=1024,
half=True,
device=0, # GPUが無いなら "cpu"
save=True, # 保存もしたいなら True(不要なら False)
project=str(out_dir),
name="car",
exist_ok=True,
vid_stride=1,
verbose=False,
)
)
text_prompts = ["boy"] # まずはこれで
results = predictor(source=str(video_path), text=text_prompts, stream=True)
win = "SAM3 - Tracking (press q to quit)"
cv2.namedWindow(win, cv2.WINDOW_NORMAL)
for r in results:
# r.plot() は注釈付きフレーム(numpy配列)を返す
frame = r.plot() # たいていBGRで返ります(環境によってRGBの場合あり)
# もし色が変(青っぽい/赤っぽい)なら次の1行を有効化して調整
# frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
cv2.imshow(win, frame)
# q で終了(EscでもOKにしたければ条件追加)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cv2.destroyAllWindows()
print("Done.")
print(f"Output folder: {out_dir / 'girl_track'}")
if __name__ == "__main__":
main()
調整ポイント(うまくいかない時はここだけ触る)
「女の子っぽい子も混ざる」→ conf を上げる
conf=0.35→0.45へ(拾う数は減るが誤検出も減る)
YOLO同様にconfの考え方は同じです。
「重い・遅い」→ imgsz と間引き
imgsz=640にする(軽い)- さらに軽くしたいなら
vid_strideを追加して間引き(例:2)
(※間引くと追跡が荒くなることがあります)
「表示がエラーになる(cv2)」→ OpenCVの入れ直し
opencv-python-headless が入っていると表示できないことがあります。
その場合は headless を消して opencv-python を入れ直します。
pip uninstall opencv-python-headless
pip install -U opencv-python
よくある詰まり(動画)
- 動画が読み込めない(形式/コーデック) → まずは mp4(H.264)など一般的な形式で試す
- FileNotFoundError → パスが違うのでフルパス指定が確実
まとめ
boy はデモとして分かりやすい一方で、概念の境界は曖昧なので conf調整が効く
SAM 3は、テキストで指定した概念を動画から拾い、マスクで切り抜きつつ追跡できるのが強い
Windowsでも、YOLOと同じノリで venv → GPU版PyTorch → ultralytics で試せる
ぜひ試してみてください。






LEAVE A REPLY