MobileSAM

O MobileSAM troca o encoder de imagem ViT-H do SAM por um encoder TinyViT destilado, então o mesmo fluxo de trabalho com prompts de ponto e de caixa roda em hardware mais leve. O LibreYOLO traz um port nativo dele através de uma fábrica LibreSAM dedicada, separada da fábrica de detectores LibreYOLO().

Tarefas
instance segmentation
Tamanhos
tiny at 1024 px
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
MobileSAM por Kyung Hee University, Apache-2.0. Artigo, código-fonte
Licenças
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalação

O MobileSAM precisa do extra sam: o download de pesos do próprio LibreYOLO ainda passa pelas ferramentas de snapshot do Hugging Face do transformers, mesmo que a inferência rode em um decoder nativo que não usa transformers.

bash
pip install "libreyolo[sam]"

Predição

LibreSAM(...) (ou o LibreMobileSAM(...) específico da família) é um ponto de entrada separado do 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 essa família; use a API Python.

Prompts de ponto e de caixa
from libreyolo import LibreSAM, SAMPLE_IMAGE # O MobileSAM tem um único tamanho, "tiny", então nenhum outro alias é preciso.model = LibreSAM("mobilesam") # 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)
Codifique uma vez, use vários prompts
from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # O encoder de imagem é a parte cara. set_image() o executa uma vez;# toda chamada a predict() depois disso reutiliza 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 lançando 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 por prompt, em vez de apenas a melhor. device= move o modelo e, se houver uma sessão set_image() ativa, o embedding em cache dela. Toda máscara carrega o id de classe 0, com nome "object", já que uma máscara guiada por prompt não tem um conjunto fixo de classes. train(), val(), export() e track() levantam todos NotImplementedError nessa família: no LibreYOLO, o MobileSAM é apenas de predição. Veja predição para os tipos de fonte.

Variantes

Um único tamanho, tiny, com entrada fixa de 1024 px: o MobileSAM traz um único encoder TinyViT em vez da escada base/large/huge que o SAM-1 oferece.

Checkpoints

Todos os arquivos de pesos publicados desta família.

ArquivoEntrada (px)Licença dos pesos
Instance segmentation
LibreMobileSAM.ptapache-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
MobileSAM, Kyung Hee University
Licença original
Apache-2.0
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 carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.

Citação

@article{mobile_sam,
  title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
  author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung-Ho and Lee, Seungkyu and Hong, Choong Seon},
  journal={arXiv preprint arXiv:2306.14289},
  year={2023}
}

Copiado do bloco de citação dos autores em github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam.

Verificado com o LibreYOLO v1.5.0. As tabelas de suporte, os checkpoints e os números de benchmark desta página são gerados a partir da biblioteca lançada e dos pesos publicados, não escritos à mão.