Segment Anything Model (SAM): A Meta AI forradalmasítja a képi szegmentációt

A számítógépes látás (Computer Vision) egyik „Szent Grálja” mindig is a szegmentáció volt: megmondani egy algoritmusnak, hogy pontosan hol végződik a kutya, és hol kezdődik a kanapé. Eddig ehhez minden egyes feladathoz külön modellt kellett tanítani, rengeteg címkézett adattal.

A Meta AI (Facebook Research) azonban borította az asztalt a Segment Anything Model (SAM) kiadásával. Ez az első igazi Foundation Model a képszegmentáláshoz, és pontosan azt tudja, amit a neve ígér: bármit képes szegmentálni, anélkül, hogy specifikusan arra a tárgyra tanították volna.

Elemezzük ki, mitől olyan különleges a GitHub-on elérhető projekt, és hogyan használhatod a saját fejlesztéseidben!

Mi az a SAM és miért Game-Changer?

A SAM egy prompt-alapú modell. Hasonlóan ahhoz, ahogy a ChatGPT-nek szöveges utasítást adsz, a SAM-nek „vizuális promptokat” adhatsz. Egyetlen kattintás, egy befoglaló doboz (bounding box), vagy akár egy szöveges leírás alapján a modell azonnal generál egy precíz maszkot a kiválasztott objektumról.

A technikai háttér dióhéjban

AI fejlesztőként érdekelhet a motorháztető alatti működés:

  1. Image Encoder: Egy nagy teljesítményű Vision Transformer (ViT) dolgozza fel a képet (ez a lassabb, egyszeri folyamat).
  2. Prompt Encoder: Kezeli a felhasználói inputot (kattintás, doboz, szöveg).
  3. Mask Decoder: Egy pehelykönnyű modul, amely a kép embeddingjét és a promptot egyesítve valós időben (kb. 50ms alatt) generálja a maszkot a böngészőben vagy CPU-n is.

Ez a szétválasztott architektúra teszi lehetővé, hogy a kép egyszeri feldolgozása után a promptolás már valós idejű legyen.

Gyakorlati felhasználási példák (Use Cases)

A SAM nem csak kutatási érdekesség, hanem azonnal beépíthető pipeline-okba. Íme néhány konkrét forgatókönyv:

1. Adatannotáció felgyorsítása (Data Labeling)

Ha saját Computer Vision modellt építesz, tudod, hogy a legfájdalmasabb pont a tanítóadatok maszkolása.

  • Hogyan segít a SAM? Ahelyett, hogy manuálisan rajzolgatnád körbe a tárgyakat, integrálhatod a SAM-et a címkéző szoftveredbe. A annotátornak csak rá kell kattintania a tárgyra, és a maszk kész. Ezzel a 60 perces munka 5 percre csökkenhet.

2. Képszerkesztés és Kreatívipar

Automatikus háttéreltávolítás vagy objektumcsere.

  • Példa: Egy webshop alkalmazásban a felhasználó lefotózza a terméket, a SAM pedig automatikusan levágja a hátteret, „zero-shot” módon, anélkül, hogy külön cipőre vagy táskára tanítottad volna.

3. Tudományos kutatás és Orvosi képalkotás

  • Példa: Mikroszkópikus felvételeken sejtek számolása. Bár a SAM-et nem specifikusan biológiai képeken tanították, a „segment everything” mód képes lehet az összes különálló objektum (pl. sejtek) felismerésére és szétválasztására a képen, alapvető statisztikákat nyújtva a kutatóknak.

Kódoljunk: Így használd Pythonban!

Mivel a GitHub repó kiválóan dokumentált, a beüzemelés egyszerű. Íme egy minimalista példa, hogyan töltsd be a modellt és kérj le egy maszkot egy adott koordináta alapján.

Telepítés:

Bash

pip install git+https://github.com/facebookresearch/segment-anything.git
pip install opencv-python pycocotools matplotlib onnxruntime onnx

Python implementáció:

Python

import cv2
import torch
from segment_anything import sam_model_registry, SamPredictor

# 1. Modell betöltése (le kell tölteni a checkpoint fájlt előtte)
checkpoint_path = "sam_vit_h_4b8939.pth"
model_type = "vit_h"
device = "cuda" if torch.cuda.is_available() else "cpu"

sam = sam_model_registry[model_type](checkpoint=checkpoint_path)
sam.to(device)

predictor = SamPredictor(sam)

# 2. Kép betöltése
image = cv2.imread('kutyus.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Az encoder futtatása (ez az "expensive" művelet)
predictor.set_image(image)

# 3. Predikció egy pont alapján (x, y koordináták)
# Tegyük fel, hogy a kutya orra a 500, 375 koordinátán van
input_point = np.array([[500, 375]])
input_label = np.array([1]) # 1 = előtér (amit ki akarunk jelölni)

masks, scores, logits = predictor.predict(
    point_coords=input_point,
    point_labels=input_label,
    multimask_output=True,
)

# A 'masks' változó most tartalmazza a lehetséges szegmentációs maszkokat.
print(f"Talált maszkok száma: {len(masks)}")

Összegzés

A Meta SAM modellje új standardot teremtett. A nyílt forráskód (Apache 2.0 licenc) és a SA-1B adatbázis (11 millió kép, 1 milliárd maszk) publikálása hatalmas lökést ad az AI közösségnek.

Ha eddig halogattad a képszegmentációs projekteket a bonyolultságuk miatt, most jött el az idő, hogy belevágj. A SAM leveszi a válladról a nehéz munka oroszlánrészét.


Források és letöltés: Facebook Research GitHub