Phase 04 - Lesson 24
SAM 3 e Segmentação de Vocabulário Aberto
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Dê a um modelo um prompt de texto e uma imagem e obtenha máscaras para cada objeto correspondente. O SAM 3 transformou isso em um único passe direto.
Tipo: Usar + Construir Linguagens: Python Pré-requisitos: Fase 4 Lição 07 (U-Net), Fase 4 Lição 08 (Mask R-CNN), Fase 4 Lição 18 (CLIP) Tempo: ~60 minutos
Objetivos de Aprendizagem
- Distinguir SAM (apenas prompts visuais), Grounded SAM / SAM 2 (detector + SAM) e SAM 3 (prompts de texto nativos via Promptable Concept Segmentation)
- Explicar a arquitetura do SAM 3: backbone compartilhado + detector de imagem + rastreador de vídeo baseado em memória + cabeça de presença + design desacoplado detector-rastreador
- Usar a integração SAM 3 do
transformersda Hugging Face para detecção, segmentação e rastreamento de vídeo orientados por texto - Escolher entre SAM 3, Grounded SAM 2, YOLO-World e SAM-MI com base em latência, complexidade do conceito e alvo de implantação
O Problema
O SAM de 2023 era um modelo apenas de prompts visuais: você clica em um ponto ou desenha uma caixa e ele retorna uma máscara. Para "me dê todas as laranjas nesta foto", você precisava de um detector (Grounding DINO) para produzir caixas e, em seguida, do SAM para segmentar cada uma. O Grounded SAM transformou isso em um pipeline, mas era uma cascata de dois modelos congelados com inevitável acúmulo de erros.
O SAM 3 (Meta, nov. de 2025, ICLR 2026) eliminou a cascata. Ele aceita uma curta locução nominal ou um exemplar de imagem como prompt e retorna todas as máscaras correspondentes e IDs de instância em um único passe direto. Isso é Promptable Concept Segmentation (PCS). Combinado com a atualização Object Multiplex de março de 2026 (SAM 3.1), ele rastreia múltiplas instâncias do mesmo conceito ao longo do vídeo de forma eficiente.
Esta lição é sobre a mudança estrutural que isso representa. Segmentação 2D, detecção e grounding texto-imagem se fundiram em um único modelo. A questão de produção não é mais "qual pipeline eu encadeio", mas "qual modelo orientável trata o meu caso de uso de ponta a ponta".
O Conceito
As três gerações
flowchart LR
subgraph SAM1["SAM (2023)"]
A1["Imagem + prompt de ponto/caixa"] --> A2["Codificador ViT"] --> A3["Decodificador de máscara"]
A3 --> A4["Máscara para esse prompt"]
end
subgraph GSAM2["Grounded SAM 2 (2024)"]
B1["Texto"] --> B2["Grounding DINO"] --> B3["Caixas"] --> B4["SAM 2"] --> B5["Máscaras + rastreamento"]
B6["Imagem"] --> B2
B6 --> B4
end
subgraph SAM3["SAM 3 (2025)"]
C1["Texto OU exemplar de imagem"] --> C2["Backbone compartilhado"]
C3["Imagem"] --> C2
C2 --> C4["Detector de imagem + rastreador de memória<br/>+ cabeça de presença"]
C4 --> C5["Todas as máscaras correspondentes<br/>+ IDs de instância"]
end
style SAM1 fill:#e5e7eb,stroke:#6b7280
style GSAM2 fill:#fef3c7,stroke:#d97706
style SAM3 fill:#dcfce7,stroke:#16a34a
Promptable Concept Segmentation
Um "prompt de conceito" é uma curta locução nominal ("yellow school bus", "striped red umbrella", "hand holding a mug") ou um exemplar de imagem. O modelo retorna máscaras de segmentação para cada instância na imagem que corresponde ao conceito, além de um ID de instância único por correspondência.
Isso difere do SAM clássico de prompt visual de três maneiras:
- Nenhum prompt por instância é necessário — um único prompt de texto retorna todas as correspondências.
- Vocabulário aberto — o conceito pode ser qualquer coisa descritível em linguagem natural.
- Retorna múltiplas instâncias de uma vez, em vez de uma máscara por prompt.
Peças arquiteturais principais
- Backbone compartilhado — um único ViT processa a imagem. Tanto a cabeça do detector quanto o rastreador baseado em memória leem a partir dele.
- Cabeça de presença — prevê se o conceito está presente na imagem. Desacopla "isto está aqui?" de "onde está?". Reduz falsos positivos em conceitos ausentes.
- Detector-rastreador desacoplado — a detecção em nível de imagem e o rastreamento em nível de vídeo têm cabeças separadas para que não interfiram um no outro.
- Banco de memória — armazena features por instância ao longo dos frames para rastreamento de vídeo (o mesmo mecanismo que o SAM 2 usava).
Treinamento em escala
O SAM 3 foi treinado em 4 milhões de conceitos únicos gerados por um motor de dados que anota e corrige iterativamente usando IA + revisão humana. O novo benchmark SA-CO contém 270 mil conceitos únicos, 50x maior do que os benchmarks anteriores. O SAM 3 alcança 75-80% do desempenho humano no SA-CO e dobra os sistemas existentes em PCS de imagem + vídeo.
SAM 3.1 Object Multiplex
Atualização de março de 2026: o Object Multiplex introduz um mecanismo de memória compartilhada para o rastreamento conjunto de muitas instâncias do mesmo conceito de uma só vez. Anteriormente, rastrear N instâncias significava N bancos de memória separados. O Multiplex colapsa isso em uma única memória compartilhada com consultas por instância. Resultado: rastreamento multi-objeto substancialmente mais rápido sem sacrificar a precisão.
Onde o Grounded SAM ainda importa em 2026
- Quando você precisa de um detector de vocabulário aberto específico inserido (DINO-X, Florence-2).
- Quando os termos do SAM 3 (com acesso restrito no HF) são um impedimento.
- Quando você precisa de mais controle sobre o limiar do detector do que o SAM 3 expõe.
- Para trabalho de pesquisa / ablação no componente detector.
Pipelines modulares ainda têm seu lugar. Para a maior parte do trabalho de produção, o SAM 3 é a resposta mais simples.
YOLO-World vs SAM 3
- YOLO-World — apenas detector de vocabulário aberto (sem máscaras). Tempo real. Melhor quando você precisa de caixas em alta taxa de quadros.
- SAM 3 — segmentação + rastreamento completos. Mais lento, mas com saída mais rica.
Divisão de produção: YOLO-World para pipelines rápidos apenas de detecção (navegação robótica, dashboards rápidos), SAM 3 para qualquer coisa que precise de máscaras ou rastreamento.
Eficiência do SAM-MI
O SAM-MI (2025-2026) aborda o gargalo do decodificador do SAM. Ideias principais:
- Prompt esparso de pontos — usa alguns poucos pontos bem escolhidos em vez de prompts densos; reduz as chamadas ao decodificador em 96%.
- Agregação rasa de máscaras — funde previsões de máscaras grosseiras em uma única máscara mais nítida.
- Injeção de máscara desacoplada — o decodificador recebe features de máscara pré-computadas em vez de executá-las novamente.
Resultado: aceleração de ~1,6× sobre o Grounded-SAM em benchmarks de vocabulário aberto.
Formato de saída para os três modelos
Todos retornam a mesma estrutura geral (caixas + rótulos + scores + máscaras + IDs), o que é útil — o seu pipeline a jusante não precisa se ramificar dependendo de qual modelo foi executado.
Construa
Passo 1: Construção do prompt
Construa um auxiliar que transforme uma frase do usuário em uma lista de prompts de conceito do SAM 3. Esta é a fronteira onde "o que o usuário digitou" encontra "o que o modelo consome".
def split_concepts(sentence):
"""
Heuristic splitter for multi-concept prompts.
Returns list of short noun phrases.
"""
for sep in [",", ";", "and", "or", "&"]:
if sep in sentence:
parts = [p.strip() for p in sentence.replace("and ", ",").split(",")]
return [p for p in parts if p]
return [sentence.strip()]
print(split_concepts("cats, dogs and balloons"))
O SAM 3 aceita um conceito por passe direto; para consultas multi-conceito, faça um loop ou processe-as em lote.
Passo 2: Auxiliares de pós-processamento
Transforme as saídas brutas do SAM 3 em uma lista limpa de detecções que correspondam ao contrato de pipeline da nossa Fase 4 Lição 16.
from dataclasses import dataclass
from typing import List
@dataclass
class ConceptDetection:
concept: str
instance_id: int
box: tuple # (x1, y1, x2, y2)
score: float
mask_rle: str # run-length encoded
def rle_encode(binary_mask):
flat = binary_mask.flatten().astype("uint8")
runs = []
prev, count = flat[0], 0
for v in flat:
if v == prev:
count += 1
else:
runs.append((int(prev), count))
prev, count = v, 1
runs.append((int(prev), count))
return ";".join(f"{v}x{c}" for v, c in runs)
O RLE mantém as cargas úteis de resposta pequenas mesmo para muitas máscaras de alta resolução. O mesmo formato funciona em SAM 2, SAM 3 e Grounded SAM 2.
Passo 3: Uma interface unificada de segmentação de vocabulário aberto
Encapsule qualquer backend que você tenha (SAM 3, Grounded SAM 2, YOLO-World + SAM 2) atrás de um único método. Seu código a jusante não muda quando o backend muda.
from abc import ABC, abstractmethod
import numpy as np
class OpenVocabSeg(ABC):
@abstractmethod
def detect(self, image: np.ndarray, concept: str) -> List[ConceptDetection]:
...
class StubOpenVocabSeg(OpenVocabSeg):
"""
Deterministic stub used for pipeline testing when real models are not loaded.
"""
def detect(self, image, concept):
h, w = image.shape[:2]
return [
ConceptDetection(
concept=concept,
instance_id=0,
box=(w * 0.2, h * 0.3, w * 0.5, h * 0.8),
score=0.89,
mask_rle="0x100;1x50;0x200",
),
ConceptDetection(
concept=concept,
instance_id=1,
box=(w * 0.55, h * 0.25, w * 0.85, h * 0.75),
score=0.74,
mask_rle="0x80;1x40;0x220",
),
]
A subclasse real SAM3OpenVocabSeg encapsularia transformers.Sam3Model e Sam3Processor.
Passo 4: Uso do SAM 3 da Hugging Face (referência)
Para o modelo real, a integração transformers:
from transformers import Sam3Processor, Sam3Model
import torch
processor = Sam3Processor.from_pretrained("facebook/sam3")
model = Sam3Model.from_pretrained("facebook/sam3").eval()
inputs = processor(images=pil_image, return_tensors="pt")
inputs = processor.set_text_prompt(inputs, "yellow school bus")
with torch.no_grad():
outputs = model(**inputs)
masks = processor.post_process_masks(
outputs.masks, inputs.original_sizes, inputs.reshaped_input_sizes
)
boxes = outputs.boxes
scores = outputs.scores
Um prompt, todas as correspondências retornadas em uma única chamada.
Passo 5: Meça o que o Grounded SAM 2 lhe dava de graça
Um benchmark honesto: o que acontece quando você substitui o Grounded SAM 2 pelo SAM 3 em um pipeline real?
- Latência: o SAM 3 economiza um passe direto (sem detector separado), mas o modelo em si é mais pesado; geralmente neutro no geral ou uma leve aceleração.
- Precisão: o SAM 3 é substancialmente melhor em conceitos raros ou composicionais ("striped red umbrella"). Similar em conceitos comuns de uma única palavra.
- Flexibilidade: o Grounded SAM 2 permite trocar detectores (DINO-X, Florence-2, Grounding DINO 1.5); o SAM 3 é monolítico.
Conclusão: o SAM 3 é o padrão para segmentação de vocabulário aberto em 2026. O Grounded SAM 2 ainda é a resposta certa quando você precisa de flexibilidade de detector ou termos de uso diferentes.
Use
Padrões de implantação em produção:
- Anotação em tempo real — SAM 3 + o recurso de rótulo-como-prompt-de-texto do CVAT. Os anotadores selecionam um nome de rótulo; o SAM 3 pré-rotula cada instância correspondente. Revise e corrija.
- Análise de vídeo — SAM 3.1 Object Multiplex para rastreamento multi-objeto; alimente os frames ao rastreador baseado em memória.
- Robótica — SAM 3 para manipulação de vocabulário aberto ("pick up the red cup"); roda como uma primitiva de planejamento.
- Imagens médicas — SAM 3 ajustado em conceitos médicos; requer solicitação de acesso no HF.
A Ultralytics encapsula o SAM 3 em seu pacote Python:
from ultralytics import SAM
model = SAM("sam3.pt")
results = model(image_path, prompts="yellow school bus")
A mesma interface que YOLO e SAM 2.
Entregue
Esta lição produz:
outputs/prompt-open-vocab-stack-picker.md— um prompt que escolhe SAM 3 / Grounded SAM 2 / YOLO-World / SAM-MI com base em latência, complexidade do conceito e licenciamento.outputs/skill-concept-prompt-designer.md— uma skill que transforma falas do usuário em prompts de conceito SAM 3 bem formados (divisão, desambiguação, fallbacks).
Exercícios
- (Fácil) Execute o SAM 3 em 10 imagens com prompts de conceito de sua escolha. Compare com SAM 2 + Grounding DINO 1.5 nas mesmas imagens. Relate quais conceitos cada modelo deixou passar.
- (Médio) Construa uma UI de "clique-para-incluir / clique-para-excluir" sobre o SAM 3: um prompt de texto retorna instâncias candidatas; o usuário clica para escolher quais contam como positivas. Produza o conjunto final de conceitos como JSON.
- (Difícil) Faça o fine-tuning do SAM 3 em um conjunto de conceitos personalizado (por exemplo, 5 tipos de componentes eletrônicos) com 20 imagens rotuladas cada. Compare com o SAM 3 zero-shot no mesmo conjunto de teste; meça a melhoria do IoU da máscara.
Termos-chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Segmentação de vocabulário aberto | "Segmentar por texto" | Produzir máscaras para objetos descritos em linguagem natural, não um conjunto fixo de rótulos |
| PCS | "Promptable Concept Segmentation" | A tarefa central do SAM 3 — dada uma locução nominal ou exemplar de imagem, segmentar todas as instâncias correspondentes |
| Prompt de conceito | "A entrada de texto" | Curta locução nominal ou exemplar de imagem; não uma frase completa |
| Cabeça de presença | "Está aqui?" | Módulo do SAM 3 que decide se o conceito existe na imagem antes da localização |
| SA-CO | "Benchmark do SAM 3" | Benchmark de segmentação de vocabulário aberto com 270 mil conceitos; 50x maior que benchmarks de vocabulário aberto anteriores |
| Object Multiplex | "Atualização do SAM 3.1" | Rastreamento multi-objeto de memória compartilhada; rastreamento conjunto rápido de muitas instâncias |
| Grounded SAM 2 | "Pipeline modular" | Cascata detector + SAM 2; ainda relevante quando a troca de detector importa |
| SAM-MI | "Variante eficiente do SAM" | Mask Injection para aceleração de 1,6x sobre o Grounded-SAM |