SAM 2
O SAM 2 estende o SAM com uma arquitetura de memória em streaming construída para vídeo, e transforma um clique de ponto ou de caixa em uma máscara de objeto. O LibreYOLO suporta seu caminho de segmentação de imagens por meio de uma factory LibreSAM dedicada, separada da factory de detectores LibreYOLO().
- Tarefas
- instance segmentation
- Tamanhos
- Instalação
pip install libreyolo- Nível de suporte
- Nível irmão, desde a v. Uma superfície de produto separada, com sua própria fábrica e seu próprio contrato.
- Origem
- SAM 2 por Meta FAIR, Apache-2.0. Artigo, código-fonte
- Licenças
- Código MIT, pesos Apache-2.0. Uso comercial
Instalação
O SAM 2 precisa do extra sam, que puxa transformers e timm.
pip install "libreyolo[sam]"Predição
LibreSAM(...) (ou o LibreSAM2(...) específico da família) é um ponto de
entrada separado de LibreYOLO(...): ele devolve um segmentador guiado por
prompts em vez de um detector, porque aqui um forward pass não significa nada
sem um prompt espacial. Não existe comando de CLI libreyolo predict para esta
família; use a API Python. Só a segmentação de imagens é suportada; o tracking
com memória de vídeo do SAM 2 está fora do escopo aqui.
from libreyolo import LibreSAM, SAMPLE_IMAGE # Aliases de tamanho: "sam2-tiny", "sam2-small", "sam2-base-plus",# "sam2-large" (também as formas curtas "sam2-t"/"sam2-s"/"sam2-bp"/"sam2-l").model = LibreSAM("sam2-large") # Um prompt de ponto: [x, y] em coordenadas de pixel, label 1 = primeiro plano.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # um polígono por máscaraprint(result.boxes.xyxy) # caixa ajustada derivada da máscara # Um prompt de caixa em vez de um ponto.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Sem prompt nenhum, a imagem inteira é segmentada (um gerador# automático de máscaras simplificado, não o exaustivo de referência).result = model.predict(SAMPLE_IMAGE)from libreyolo import LibreSAM2, SAMPLE_IMAGE # A classe específica da família recebe o tamanho sem o prefixo "sam2-".model = LibreSAM2("large") # O encoder de imagem é a parte cara. set_image() o roda uma vez;# toda chamada a predict() depois disso reusa o embedding em cache.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()Um prompt de ponto aceita [x, y] para um objeto, [[x, y], ...] para vários,
ou arrays numpy; labels marca cada ponto com 1 (primeiro plano) ou 0
(fundo) e, por padrão, todos são primeiro plano. Um prompt de caixa recebe
[x1, y1, x2, y2] ou uma lista de caixas, uma máscara por caixa. Omitir os dois
prompts segmenta a imagem inteira mandando uma grade densa de prompts e ficando
com as máscaras confiantes que não se sobrepõem; esse modo de "segmentar tudo" é
simplificado em relação ao gerador automático de máscaras de referência e pode
subsegmentar cenas cheias, então um prompt real de ponto ou de caixa é o caminho
preciso. conf filtra pela qualidade de máscara predita (IoU), não por uma
confiança de detecção: passe 0.0 para manter todos os candidatos.
multimask=True devolve as três máscaras de ambiguidade todo-versus-parte do
SAM para cada prompt, em vez de apenas a melhor. device= move o modelo e, se
houver uma sessão de set_image() ativa, o embedding em cache dela. Toda
máscara carrega o id de classe 0, chamado "object", já que uma máscara
guiada por prompt não tem um conjunto fixo de classes. train(), val(),
export() e track() todos levantam NotImplementedError nesta família: a
inferência sobre imagens é o que o LibreYOLO suporta aqui. Veja
predição para os tipos de fonte.
Variantes
Quatro tamanhos com backbone Hiera: tiny, small, base-plus e large, todos na mesma resolução de entrada. Ainda não há benchmark de acurácia ou de latência publicado para esta família, então escolher um tamanho troca diretamente peso do encoder por qualidade de máscara: tiny é o mais rápido de codificar, large o mais pesado.
Checkpoints
Todos os arquivos de pesos publicados desta família.
| Arquivo | Entrada (px) | Licença dos pesos |
|---|---|---|
| Instance segmentation | ||
| LibreSAM2tiny.pt | apache-2.0 | |
| LibreSAM2small.pt | apache-2.0 | |
| LibreSAM2base-plus.pt | apache-2.0 | |
| LibreSAM2large.pt | apache-2.0 | |
Todos os arquivos acima existem hoje na organização LibreYOLO e são baixados no primeiro uso.
Licenciamento
Confira a licença no repositório do Hugging Face correspondente aos pesos que você baixar. Cada checkpoint na organização LibreYOLO tem uma licença, e ela nem sempre é a mesma em toda a família. Esse repositório é a fonte oficial. O resumo abaixo descreve o que se aplicava na última verificação desta página.
Esta é uma descrição das licenças envolvidas, não uma orientação jurídica. Se a resposta tiver importância comercial, leia as licenças e procure sua própria assessoria.
- Trabalho original
- SAM 2, Meta FAIR
- Licença original
- Apache-2.0
- Código-fonte original
- github.com/facebookresearch/sam2
- Código do LibreYOLO
- MIT
- Pesos
- Apache-2.0, republicado em huggingface.co/LibreYOLO
- Interpretação
- Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO loads SAM 2 through the Apache-2.0 Transformers implementation and republishes Transformers-compatible snapshots of the tiny, small, base-plus and large checkpoints on its own Hugging Face org, tagged Apache-2.0 there as well. LibreYOLO ships image inference only; SAM 2's video-memory tracking is out of scope for this family.
Citação
@article{ravi2024sam2,
title={SAM 2: Segment Anything in Images and Videos},
author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
journal={arXiv preprint arXiv:2408.00714},
url={https://arxiv.org/abs/2408.00714},
year={2024}
}Copiado do bloco de citação dos autores em github.com/facebookresearch/sam2#citing-sam-2.