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:
- Image Encoder: Egy nagy teljesítményű Vision Transformer (ViT) dolgozza fel a képet (ez a lassabb, egyszeri folyamat).
- Prompt Encoder: Kezeli a felhasználói inputot (kattintás, doboz, szöveg).
- 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
