WSL+DockerでSAM3の環境構築をしてお試し実行

お疲れ様です。

SAM3の実行環境をWSL+Dockerで作成し、実際に実行して試してみた記録です。

2025年11月にリリースされたSAM(Segment Anything Model)シリーズの最新モデルです。 SAM3では、プロンプトで画像内の検出したい物体を指示することで目的の物体のセグメンテーションとBBoxの出力ができます。

(他にも3Dオブジェクトに対応したSAM3Dもありますが今回は扱いません。)

環境構築

  • 実行環境

OS: Windows 11 Pro
CPU: Intel Core i7-13700
メモリ: 32GB
GPU: NVIDIA GeForce RTX 4060 Ti (VRAM: 16GB)

環境は上述の通りWSL+Dockerを使用しました。また、Python環境はuvを使用しています。
ベースの環境の作成については過去記事をご参考ください。

fallpoke-tech.hatenadiary.jp

Windows環境の場合、一部のライブラリがLinuxでしか使えず自前でビルドする必要があるのでWSLを使う方が良いと思います。

今回使用した環境設定を含めたリポジトリをGitHubに残しています。 SAM3の公式リポジトリをforkして環境設定ファイルを追加したのみですが…。

github.com

実行

公式があげているデモ用のコードを参考に作成した下記のソースコードを実行しました。

注意点として、モデルの重みのダウンロードにはHuggingFaceのモデルページで利用申請が必要になります。

import os

from PIL import Image
import matplotlib.pyplot as plt
from sam3.model_builder import build_sam3_image_model
from sam3.model.sam3_image_processor import Sam3Processor
from sam3.visualization_utils import plot_results
from huggingface_hub import login
from dotenv import load_dotenv

load_dotenv()

login(token=os.getenv("HF_TOKEN"))

# モデルの準備
model = build_sam3_image_model()
processor = Sam3Processor(model)
# 画像の読み込み
image = Image.open("data/1624777685449_985774_photo1.jpeg")
inference_state = processor.set_image(image)
# テキストプロンプトを設定して推論を実行
output = processor.set_text_prompt(state=inference_state, prompt="tomato")

plot_results(image, output)
plt.show()
plt.close()

上記を実行するとこんな感じで出力されます。
tomato

プロンプトの指示である程度検出したい物体を絞ることも可能です。例えばprompt="red tomato"と変更すると出力が変わります。
red tomato

私の環境での話にはなりますが、VRAMを大体5GBくらい使用しているので比較的軽そうです。
また、画像1枚あたりの推論時間は0.20sほどだったのでこちらもなかなか速いです。
gpu state

参考サイト