csviverdeia/locateanything-3b-h100

LocateAnything-3B em H100 (Hopper) — visual grounding imagem+video (boxes/points). Detecção densa, pointing, tracker none/sort/reid. PRINCIPAL (rápido).

Public
17 runs

Run time and cost

This model runs on Nvidia H100 GPU hardware. We don't yet have enough runs of this model to provide performance information.

Readme

LocateAnything-3B — Visual Grounding (imagem + vídeo)

Wrapper Cog do nvidia/LocateAnything-3B — um modelo de visão-linguagem (MoonViT + Qwen2.5-3B + Parallel Box Decoding) para localização de objetos a partir de linguagem natural.

Dada uma imagem ou vídeo + uma instrução em texto, devolve rótulos com bounding boxes e points, além da mídia anotada (PNG para imagem, MP4 H.264 para vídeo).

Forte em detecção densa em cena cheia (contar centenas/milhares de objetos numa única imagem), referring grounding, GUI grounding, OCR/layout e pointing.


🟢 Em palavras simples (comece por aqui)

Pensa nele como um “caça-objetos por comando de texto”:

Você mostra uma foto (ou um vídeo) e escreve, em inglês, o que procurar — tipo “Detect all the cars” (detecte todos os carros). Ele devolve a mesma imagem com quadradinhos verdes em volta de cada objeto encontrado, e te diz quantos achou.

Serve pra coisas como: - Contar — quantas cabeças de gado, ovos, pessoas, peças tem nesta foto? - Achar — onde está a placa de saída / o carro vermelho / o produto X? - Marcar em vídeo — desenhar caixas nos objetos ao longo de um vídeo.

Você não precisa mexer em quase nada: joga a foto, escreve o que quer em inglês, e pronto. Os “controles avançados” abaixo só servem pra ajustar casos específicos.


Dois modelos (escolha o hardware)

Modelo Hardware Quando usar
csviverdeia/locateanything-3b-h100 H100 Padrão para tudo. ~2,4× mais rápido; vídeo ~40% mais barato/job; imagem custa praticamente igual ao L40S porém mais rápida.
csviverdeia/locateanything-3b L40S Fallback de disponibilidade (H100 é GPU disputada). Mesmo código.

Recomendação: use o H100 como principal. Mantenha o L40S como reserva — você só paga quando roda.


Inputs

Input Tipo Default Faixa Descrição
image file Imagem RGB. Use image ou video (o modelo detecta o tipo do arquivo sozinho).
video file Vídeo. É amostrado em frames e detectado quadro-a-quadro.
prompt str “Detect all the main objects…” O que localizar. Ver Dicas de prompt.
generation_mode enum hybrid hybrid / ar / mtp Modo de decodificação. hybrid equilibra velocidade e precisão.
tracker enum none none / sort / reid [vídeo] none = só caixas, sem ID (estilo NVIDIA). sort = IDs por movimento (Kalman+Hungarian). reid = SORT + aparência (ResNet18).
detect_fps float 3.0 0.5–10 [vídeo] Detecções por segundo. Mais alto = acompanha melhor o movimento, mais lento/caro.
max_detect_frames int 24 1–120 [vídeo] Teto de frames detectados (distribuídos no vídeo) p/ limitar custo.
max_new_tokens int 2048 64–8192 Limite de tokens de saída. Suba para cenas MUITO densas (centenas de boxes).
temperature float 0.2 0–2 0 = determinístico (recomendado p/ contagem; reduz falso-positivo).
top_p float 0.9 0–1 Amostragem nucleus.
repetition_penalty float 1.1 1–2 Evita repetição.

🧩 Entendendo os controles (em português claro)

  • image / video — o arquivo que você sobe. Tanto faz em qual campo: se for vídeo, ele entende sozinho. Use um dos dois.
  • prompt — a frase (em inglês) dizendo o que procurar. É o controle mais importante. Ex.: "Detect all the people" (ache todas as pessoas). Seja específico.
  • temperature — o “quão criativo” ele é. Pra contar, deixe 0 (mais preciso, não inventa). Valores altos = mais chute.
  • max_new_tokens — quanto ele “pode falar”. Cada objeto gasta um pouco. Se a foto tem muitos objetos (centenas) e a contagem parece cortada, aumente (ex.: 8192).
  • detect_fps (só vídeo)quantas vezes por segundo ele olha o vídeo. Objeto rápido (carro, esteira) → número alto (5–10), pra acompanhar. Objeto lento → 2–3 já basta. Quanto maior, mais lento e mais caro.
  • max_detect_frames (só vídeo) — um limite de segurança de quantos quadros ele analisa (pra não ficar caro/demorado em vídeo longo). Se quiser mais precisão num vídeo, aumente.
  • tracker (só vídeo) — como ele lida com a identidade dos objetos:
  • none (padrão) → só desenha as caixas, sem número. É o mais limpo e o que a NVIDIA mostra. Use este na dúvida.
  • sort → coloca um número fixo (#1, #2…) em cada objeto e tenta manter ao longo do vídeo. Bom pra objetos diferentes e movimento normal.
  • reid → igual ao sort, mas também “lembra a aparência” — segura melhor o número quando o objeto some atrás de algo e volta. Mais lento. Bom pra cruzamentos/oclusão.
  • generation_mode / top_p / repetition_penalty — controles finos; deixe no padrão a não ser que você saiba o que está fazendo.

🍳 Receitas — qual configuração usar em cada situação

Situação Configuração recomendada
Contar objetos numa foto (gado, ovos, peças) image + prompt: "Detect every individual X. Output one tight box per X." + temperature: 0 + max_new_tokens: 8192
Achar UMA coisa específica numa foto image + prompt: "Detect the red car" (descreva bem)
Marcar um ponto em cada objeto (não caixa) image + prompt: "Point to each person."
Vídeo bonito e fluido (estilo NVIDIA, sem números) video + tracker: none + detect_fps: 5 (ou mais) + max_detect_frames: 60
Vídeo com objetos numerados (poucos, distintos) video + tracker: sort + detect_fps: 4
Vídeo com cruzamento/oclusão (objetos somem e voltam) video + tracker: reid + detect_fps: 4
Objetos rápidos (trânsito, esteira) suba o detect_fps (8–10) e o max_detect_frames proporcional
Vídeo longo, quer economizar detect_fps: 2 + max_detect_frames: 24 (menos quadros = mais barato)
A contagem veio “cortada” (muitos objetos) aumente max_new_tokens (8192)
Ele inventou caixas onde não tem nada temperature: 0

Regra de ouro: pra contar, use foto (não vídeo) com temperature: 0. Pra mostrar movimento num vídeo, use tracker: none. O resto é ajuste fino.

Output

{
  "detections": "<JSON: modality, answer, coords, boxes[], points[], ...>",
  "num_detections": 36,
  "image": "https://.../annotated.png",   // só para input de imagem
  "video": "https://.../annotated.mp4"    // só para input de vídeo (H.264)
}
  • Imagem: boxes/points em pixels; image traz a foto com as caixas numeradas.
  • Vídeo: video traz o MP4 anotado; detections traz o log por frame. No modo none, num_detections = pico de objetos simultâneos; em sort/reid = objetos únicos rastreados.

Casos de uso

Objetivo Como
Contar objetos (ovos, gado, pacotes, peças) 1 imagem boa + prompt de detecção densa. É o forte do modelo.
Achar algo específico prompt = “Detect the red car” / “Locate the exit sign”.
Pointing (1 ponto por objeto) prompt = “Point to each person.” → sai em points.
Detecção em vídeo (visualizar) video + tracker: none (caixas limpas, sem renumeração).
Rastrear IDs em vídeo tracker: sort (objetos distintos) ou reid (sobrevive a oclusão).

Exemplos

Python (imagem)

import replicate
out = replicate.run(
    "csviverdeia/locateanything-3b-h100",
    input={
        "image": open("herd.jpg", "rb"),
        "prompt": "Detect every individual animal. Output one tight box per animal.",
        "temperature": 0,
        "max_new_tokens": 8192,
    },
)
print(out["num_detections"], out["image"])

Python (vídeo, estilo NVIDIA — só caixas)

out = replicate.run(
    "csviverdeia/locateanything-3b-h100",
    input={
        "video": open("street.mp4", "rb"),
        "prompt": "Detect all the cars.",
        "tracker": "none",
        "detect_fps": 5,          # mais alto = mais fluido
        "max_detect_frames": 60,  # suba p/ vídeos longos
    },
)
print(out["video"])

curl (imagem via base64)

curl -s -X POST https://api.replicate.com/v1/predictions \
  -H "Authorization: Bearer $REPLICATE_API_TOKEN" -H "Content-Type: application/json" \
  -d '{"version":"<VERSION>","input":{"image":"data:image/jpeg;base64,'"$(base64 -w0 img.jpg)"'","prompt":"Detect all cows.","temperature":0}}'

Dicas de prompt

  • Detecção: “Detect every individual X. Output one tight bounding box per X.”
  • Contagem densa: seja explícito em “cada/individual” e use temperature: 0 + max_new_tokens alto.
  • Pointing: “Point to each X.” (saída vira points).
  • Referring: “Locate all the instances that match: <descrição>.”
  • Objeto ausente → o modelo pode alucinar 1–2 caixas; temperature: 0 reduz.

Dicas de vídeo

  • Velocidade do objeto manda no detect_fps: objeto rápido (esteira, trânsito) → suba para 5–10. Lento → 2–3 basta.
  • max_detect_frames precisa ser alto o bastante p/ não sufocar o detect_fps (senão a detecção fica rara e as caixas “pulam”).
  • Para o resultado mais fluido (estilo NVIDIA): tracker: none + detect_fps ≈ fps do vídeo. Custa mais (uma inferência por frame) — por isso o H100.
  • Contar throughput em esteira não é o forte: o modelo é detector por frame, não tracker industrial. Para isso, prefira contagem por imagem ou um pipeline dedicado (YOLO+ByteTrack).

Custo (compute, modelo quente)

L40S H100
Imagem ~$0.0016 ~$0.0017
Vídeo (por frame detectado) ~$0.0044 ~$0.0026
Vídeo 5s (detect_fps 3) ~$0.08 ~$0.05
Vídeo 10s todo-frame (300 fr) ~$1.32 ~$0.79

Custo de vídeo ≈ frames_detectados × (0.0044 L40S / 0.0026 H100), onde frames = duração × detect_fps (limitado por max_detect_frames). O 1º hit após ocioso tem cold-start (não incluído acima).


Limitações (honestas)

  • Teto de resolução: o modelo reduz internamente imagens acima de ~803k px (~896×896) (in_token_limit=4096). Objetos muito pequenos/ao fundo podem sumir mesmo enviando foto grande. (Para esses casos: tiling — não incluído neste wrapper.)
  • Vídeo é detecção por frame, não tracking nativo. Cenas densas/rápidas (esteira) causam IDs instáveis em sort/reid — use none.
  • Alucinação: pode inventar 1–2 caixas quando o objeto pedido não existe.
  • Licença: o modelo base é NVIDIA License (uso não-comercial). Revise antes de produção.

Crédito

Modelo: nvidia/LocateAnything-3B. Wrapper Cog por csviverdeia.

Model created
Model updated