PicoSAM3
PicoSAM3 es una CNN compacta destilada de SAM 2.1 y SAM 3, pensada para la segmentación de regiones de interés guiada por cajas en sensores como el Sony IMX500. LibreYOLO lo admite mediante una factoría LibreSAM dedicada, separada de la factoría de detectores LibreYOLO(), y solo con prompts de caja.
- Tareas
- instance segmentation
- Tamaños
- pico at 96 px
- Instalación
pip install libreyolo- Nivel de compatibilidad
- Nivel hermano, desde v. Una superficie de producto independiente con su propia factoría y su propio contrato.
- Licencias
- Código Apache-2.0, pesos Apache-2.0. Uso comercial
Instalación
PicoSAM3 necesita el extra sam: la descarga de pesos propia de LibreYOLO
sigue pasando por las herramientas de Hugging Face de transformers, aunque la
inferencia se ejecute sobre una CNN nativa que no usa transformers.
pip install "libreyolo[sam]"Predicción
LibreSAM(...) (o el LibrePicoSAM3(...) específico de la familia) es un punto
de entrada distinto de LibreYOLO(...): devuelve un segmentador guiado por
prompts en lugar de un detector, porque aquí un forward pass no significa nada
sin un prompt. No hay comando de CLI libreyolo predict para esta familia; usa
la API de Python.
from libreyolo import LibreSAM, SAMPLE_IMAGE # PicoSAM3 tiene un único tamaño, "pico", así que no hace falta otro alias.model = LibreSAM("picosam3") # bboxes= es el único prompt admitido: [x1, y1, x2, y2] o una lista de# cajas, con una máscara por caja. Cada caja se expande un 10 %, se hace# cuadrada, se recorta a la imagen y se escala a 96x96 antes de la CNN.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700])print(result.masks.xy) # un polígono por máscaraprint(result.boxes.xyxy) # caja ajustada derivada de la máscarafrom libreyolo import LibrePicoSAM3, SAMPLE_IMAGE model = LibrePicoSAM3() # set_image() cachea la imagen de origen; PicoSAM3 ejecuta un forward# completo de la CNN por caja, así que esto ahorra la carga y decodificación# de la imagen, no un paso de encoder como en las demás familias SAM.model.set_image(SAMPLE_IMAGE)a = model.predict(bboxes=[300, 200, 900, 700])b = model.predict(bboxes=[100, 100, 400, 400])model.reset_image()PicoSAM3 solo acepta bboxes=; pasar points=, labels=, masks=, text=,
multimask=True u omitir la caja para segmentarlo todo lanza en todos los casos
un ValueError claro, porque ninguno de esos modos existe en el modelo
original. conf filtra por la calidad de máscara predicha (IoU), no por una
confianza de detección, y tiene que estar entre 0.0 y 1.0. Cada máscara
lleva el id de clase 0, con nombre "object". train(), val() y track()
lanzan NotImplementedError; usa LibreSAM2 o LibreSAM3 para prompts de punto,
de texto, de máscara o de segmentarlo todo. Consulta
predicción para los tipos de fuente.
Variantes
Un único tamaño, pico, con una entrada de ROI fija de 96 px: PicoSAM3 ejecuta un forward completo de la CNN por cada caja en lugar de codificar la imagen entera una sola vez.
Exportación
| Tarea | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Instance segmentation | Instance segmentation to ONNX: compatible | Instance segmentation to TorchScript: no compatible | Instance segmentation to ExecuTorch: no compatible | Instance segmentation to TensorRT: no compatible | Instance segmentation to OpenVINO: no compatible | Instance segmentation to Paddle: no compatible | Instance segmentation to MNN: no compatible | Instance segmentation to RKNN: no compatible | Instance segmentation to ncnn: no compatible | Instance segmentation to TFLite: no compatible | Instance segmentation to CoreML: no compatible | Instance segmentation to Core AI: no compatible |
PicoSAM3 es la única familia del nivel SAM que exporta: lleva su CNN de ROI de
96x96 en crudo a ONNX, roi_image -> mask_logits, sin NMS ni posprocesado de
máscaras integrados. Las demás familias SAM lanzan NotImplementedError en
export(), porque su separación entre encoder y decoder todavía no tiene un
contrato de exportación definido para runtime. Un grafo de PicoSAM3 exportado no
se vuelve a cargar mediante LibreYOLO(); ejecútalo directamente con un runtime
como onnxruntime, aplicando el mismo preprocesado de ROI cuadrada con un 10 %
de margen que se muestra arriba.
from libreyolo import LibrePicoSAM3 model = LibrePicoSAM3()model.export(format="onnx", output_path="LibrePicoSAM3pico.onnx") # opset (13 por defecto) y dynamic (True por defecto, solo el eje de batch)# son los únicos argumentos de exportación que acepta esta familia.import numpy as npimport onnxruntime as ort # PicoSAM3 exporta su CNN de ROI de 96x96 en crudo: roi_image -> mask_logits.# Aquí no hay pre/posprocesado del lado de LibreYOLO que reutilizar, porque# export() no se enruta de vuelta por LibreYOLO() como sí ocurre con el# checkpoint de un detector.session = ort.InferenceSession("LibrePicoSAM3pico.onnx")name = session.get_inputs()[0].nameoutputs = session.run(None, {name: np.zeros((1, 3, 96, 96), dtype=np.float32)}) for meta, array in zip(session.get_outputs(), outputs): print(meta.name, array.shape)Checkpoints
Todos los archivos de pesos publicados de esta familia.
| Archivo | Entrada (px) | Licencia de los pesos |
|---|---|---|
| Instance segmentation | ||
| LibrePicoSAM3.pt | apache-2.0 | |
Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.
Licencia
Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.
Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.
- Trabajo original
- PicoSAM3, ETH Zurich
- Licencia del proyecto original
- Apache-2.0
- Fuente del proyecto original
- github.com/pbonazzi/picosam3
- Código de LibreYOLO
- MIT
- Pesos
- Apache-2.0, republicados en huggingface.co/LibreYOLO
- Interpretación
- 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 compact ROI CNN rather than vendoring upstream files unmodified, and downloads LibrePicoSAM3pico.pt from the LibreYOLO Hugging Face org, converted with unchanged tensor values from the pinned pietrobonazzi/picosam3 revision af49e4322b6b7cf448499fee5c073d4576f59444 and tagged Apache-2.0 there. PicoSAM3 is distilled from SAM 2.1 and SAM 3 as teacher models; LibreYOLO does not vendor or redistribute either teacher's code or weights in this family.
PicoSAM3 se destila a partir de SAM 2.1 y SAM 3 como modelos maestros. LibreYOLO no incorpora ni redistribuye el código ni los pesos de ninguno de los dos maestros en esta familia; solo se distribuyen la CNN estudiante compacta y su checkpoint convertido.
Cita
@article{picosam3_2026,
title={PicoSAM3: Real-Time In-Sensor Region-of-Interest Segmentation},
author={Pietro Bonazzi and Nicola Farronato and Stefan Zihlmann and Haotong Qin and Michele Magno},
journal={IEEE Sensors Journal},
year={2026}
}Copiado del bloque de cita de los autores en github.com/pbonazzi/picosam3#readme.