画像解析技術は、コンピュータビジョンや医療、自動運転などの分野で急速に進化しています。
そんな中、Metaが開発した SAM(Segment Anything Model) は、未知のオブジェクトも高精度にセグメントできる革新的なAIモデルとして注目を集めています。

AI技術が発達して大手IT企業が便利なツールをたくさん公開していますね!
画像から教師データを集める時に画像から欲しい部分を抜き出すのが大変なんですが何とかなりませんか..

それなら今回紹介する「SAM」を使うと良いですよ!
Meta社が公開しているAIツールで、未学習のものでも領域分割できます!
またプロンプトで指示をすることも可能なんです!
本記事では、SAMの特徴や技術的な強みを解説し、実際にPythonで使う方法も紹介します。
AIによる画像解析に興味がある方は、ぜひ最後までご覧ください!
1. SAMとは?
SAM(Segment Anything Model)は、あらゆる画像内のオブジェクトを自動的にセグメント(領域分割)できるAIモデル です。
🔹 主な特徴
- Metaが開発 した最先端のセグメンテーションモデル
- ゼロショット学習 により、未学習のオブジェクトも認識可能
- オープンソース で誰でも簡単に試せる
- プロンプト(入力指示) により、対象物を自由に指定できる
- 1,100万枚の画像+11億枚のマスク で学習済み
従来のセグメンテーションモデルは特定の物体やカテゴリに依存していましたが、SAMは未知のオブジェクトでも適応可能なため、応用範囲が広がります。
2. SAMの技術的な強み
(1) ゼロショット学習
SAMは特定のカテゴリに依存せず、事前に学習していないオブジェクトでも高精度にセグメントできます。
従来の画像セグメンテーションでは、あらかじめカテゴリごとに学習させる必要がありましたが、SAMでは 新しいオブジェクトでも即座に認識可能 です。
(2) プロンプトによるセグメンテーション
SAMでは、以下の 3種類のプロンプト を利用して対象を指定できます。
プロンプト | 説明 |
---|---|
ポイントプロンプト | 画像内の特定の点を指定 |
ボックスプロンプト | 対象物を囲む矩形を入力 |
フリーテキストプロンプト | テキストでオブジェクトを指定(CLIPと併用) |
この柔軟なプロンプト設計により、細かい調整が可能になります。
(3) 高速かつ高精度な処理
SAMは トランスフォーマーベースのアーキテクチャ を採用しており、並列計算が可能なため、大量の画像をリアルタイムで処理できます。
3. SAMの導入方法
(1) インストール
SAMはPython環境で簡単に導入できます。
以下のコマンドで必要なライブラリをインストールしましょう。
pip install segment_anything opencv-python matplotlib torch torchvision
(2) 実行環境
- Google Colab(GPU対応)で手軽に試せる
- ローカル環境(GPU推奨)でも動作可能
- Metaのデモ環境 も利用可能 👉 公式サイト
4. SAMの使い方
(1) モデルのセットアップ
まず、必要なライブラリをインポートし、SAMモデルをロードします。
import torch
import numpy as np
import matplotlib.pyplot as plt
import cv2
from segment_anything import SamPredictor, sam_model_registry
# モデルのロード
sam_checkpoint = "sam_vit_h.pth" # 事前学習済みモデル
model_type = "vit_h"
device = "cuda" if torch.cuda.is_available() else "cpu"
sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
sam.to(device)
predictor = SamPredictor(sam)
📌 事前学習済みモデルのダウンロード
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth -O sam_vit_h.pth
(2) 画像の読み込み
セグメンテーションする画像を読み込みます。
# 画像の読み込み
image_path = "sample.jpg"
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 画像をSAMにセット
predictor.set_image(image)
# 画像を表示
plt.figure(figsize=(10, 10))
plt.imshow(image)
plt.axis("off")
plt.show()
(3) セグメンテーションの実行
① ポイントプロンプト
画像内の特定の点を指定し、その領域をセグメントします。
# セグメントする点 (x, y) を指定
input_point = np.array([[300, 400]])
input_label = np.array([1])
# セグメンテーションの実行
masks, scores, logits = predictor.predict(
point_coords=input_point,
point_labels=input_label,
multimask_output=True
)
# 結果を表示
plt.figure(figsize=(10, 10))
plt.imshow(image)
for mask in masks:
plt.imshow(mask, alpha=0.5)
plt.axis("off")
plt.show()
② ボックスプロンプト
対象物を矩形で囲み、その領域をセグメントします。
# ボックスの指定 (x_min, y_min, x_max, y_max)
input_box = np.array([100, 200, 500, 700])
# セグメンテーションの実行
masks, scores, logits = predictor.predict(
box=input_box,
multimask_output=True
)
# 結果を表示
plt.figure(figsize=(10, 10))
plt.imshow(image)
for mask in masks:
plt.imshow(mask, alpha=0.5)
plt.axis("off")
plt.show()
③ フリーテキストプロンプト
SAM単体ではテキスト入力は直接利用できませんが、CLIP などのモデルと連携することで、テキストでの指定が可能になります。
たとえば「犬をセグメントして」というように入力すると、CLIPが該当物体を抽出し、SAMがマスクを生成するといった流れです。
5. 活用シーン
SAMは、さまざまな分野で活用できます。
分野 | 活用例 |
---|---|
コンピュータビジョン | 物体認識、シーン解析 |
医療 | CT・MRI画像の自動セグメンテーション |
自動運転 | 道路上の物体検出、交通標識の認識 |
ロボティクス | ロボットの視覚認識 |
写真編集 | 自動背景削除、オブジェクトの切り抜き |
特に、未知のオブジェクトを認識できるゼロショットセグメンテーションが、これらの分野での応用を加速させています。
6. まとめ
✅ ゼロショット学習に対応 し、未知のオブジェクトもセグメント可能
✅ Google Colabやローカル環境 で簡単に試せる
✅ ポイントやボックス指定で高精度なセグメンテーションが可能
✅ 医療・自動運転・写真編集など、幅広い分野で活用
今後、SAMのさらなる発展と応用が期待されます。
ぜひ Google Colab から実際に試してみてください! 🚀
本ブログ「ゴマフリーダムのPython教室」のトップページへは以下へアクセス!
コメント