PicoSAM3

PicoSAM3 est un CNN compact distillé à partir de SAM 2.1 et SAM 3, conçu pour la segmentation de régions d'intérêt guidée par boîte sur des capteurs tels que le Sony IMX500. LibreYOLO le prend en charge par une factory LibreSAM dédiée, distincte de la factory de détecteurs LibreYOLO(), et uniquement avec des requêtes par boîte.

Tâches
instance segmentation
Tailles
pico at 96 px
Installer
pip install libreyolo
Niveau de support
Niveau parallèle, depuis v. Une interface produit distincte avec sa propre factory et son propre contrat.
Origine
PicoSAM3 par ETH Zurich, Apache-2.0. Article, source
Licences
Code Apache-2.0, poids Apache-2.0. Usage commercial

Installer

PicoSAM3 nécessite l'extra sam : le téléchargement de poids propre à LibreYOLO passe toujours par les outils Hugging Face de transformers, même si l'inférence s'exécute sur un CNN natif indépendant de transformers.

bash
pip install "libreyolo[sam]"

Prédire

LibreSAM(...) (ou LibrePicoSAM3(...), propre à la famille) constitue un point d'entrée distinct de LibreYOLO(...) : il renvoie un segmenteur guidable et non un détecteur, car une passe n'a ici aucun sens sans requête. Il n'existe pas de commande CLI libreyolo predict pour cette famille ; utilisez l'API Python.

Requête par boîte
from libreyolo import LibreSAM, SAMPLE_IMAGE # PicoSAM3 n'a qu'une taille, "pico", aucun autre alias n'est nécessaire.model = LibreSAM("picosam3") # bboxes= est la seule requête prise en charge : [x1, y1, x2, y2] ou une# liste de boîtes, un masque par boîte. Chaque boîte est agrandie de 10 %,# rendue carrée, limitée à l'image et redimensionnée à 96x96 avant le CNN.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700])print(result.masks.xy)      # un polygone par masqueprint(result.boxes.xyxy)    # boîte ajustée dérivée du masque
Encoder une fois, fournir plusieurs requêtes
from libreyolo import LibrePicoSAM3, SAMPLE_IMAGE model = LibrePicoSAM3() # set_image() met l'image source en cache ; PicoSAM3 exécute une passe CNN# complète par boîte. Cela évite le chargement/décodage de l'image, pas une# passe d'encodeur comme pour les autres familles 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 accepte uniquement bboxes=. Fournir points=, labels=, masks=, text=, multimask=True ou omettre la boîte pour tout segmenter lève dans tous les cas une ValueError explicite, car aucun de ces modes n'existe dans le modèle amont. conf filtre selon la qualité prédite du masque (IoU), et non une confiance de détection, et doit être compris entre 0.0 et 1.0. Chaque masque porte l'identifiant de classe 0, nommé "object". train(), val() et track() lèvent NotImplementedError ; utilisez LibreSAM2 ou LibreSAM3 pour les requêtes par point, texte, masque ou de segmentation complète. Consultez la prédiction pour les types de sources.

Variantes

Une seule taille, pico, avec une entrée ROI fixe de 96 px : PicoSAM3 exécute une passe CNN complète par boîte au lieu d'encoder l'image entière une seule fois.

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
Instance segmentationInstance segmentation to ONNX : pris en chargeInstance segmentation to TorchScript : non pris en chargeInstance segmentation to ExecuTorch : non pris en chargeInstance segmentation to TensorRT : non pris en chargeInstance segmentation to OpenVINO : non pris en chargeInstance segmentation to Paddle : non pris en chargeInstance segmentation to MNN : non pris en chargeInstance segmentation to RKNN : non pris en chargeInstance segmentation to ncnn : non pris en chargeInstance segmentation to TFLite : non pris en chargeInstance segmentation to CoreML : non pris en chargeInstance segmentation to Core AI : non pris en charge

PicoSAM3 est la seule famille de la catégorie SAM qui s'exporte : elle transmet son CNN ROI 96x96 brut à ONNX, roi_image -> mask_logits, sans NMS ni post-traitement de masque intégré. Les autres familles SAM lèvent NotImplementedError avec export(), car leur séparation encodeur/décodeur ne dispose pas encore d'un contrat d'export pour le runtime. Un graphe PicoSAM3 exporté ne se recharge pas par LibreYOLO() ; exécutez-le directement avec un runtime comme onnxruntime, en appliquant le même prétraitement de ROI carrée avec une marge de 10 % présenté ci-dessus.

Python
from libreyolo import LibrePicoSAM3 model = LibrePicoSAM3()model.export(format="onnx", output_path="LibrePicoSAM3pico.onnx") # opset (13 par défaut) et dynamic (True par défaut, axe de batch seul)# sont les seuls arguments d'export acceptés par cette famille.
Utiliser le fichier exporté
import numpy as npimport onnxruntime as ort # PicoSAM3 exporte son CNN ROI 96x96 brut : roi_image -> mask_logits.# Aucun pré/post-traitement LibreYOLO n'est réutilisable ici, car export()# ne repasse pas par LibreYOLO() comme pour un checkpoint de détecteur.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

Tous les fichiers de poids publiés pour cette famille.

FichierEntrée (px)Licence des poids
Instance segmentation
LibrePicoSAM3.ptapache-2.0

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
PicoSAM3, ETH Zurich
Licence du projet d'origine
Apache-2.0
Source du projet d'origine
github.com/pbonazzi/picosam3
Code de LibreYOLO
MIT
Poids
Apache-2.0, republiés sur huggingface.co/LibreYOLO
Interprétation
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 est distillé à partir de SAM 2.1 et SAM 3 utilisés comme modèles enseignants. LibreYOLO n'intègre ni ne redistribue le code ou les poids d'aucun de ces enseignants dans cette famille ; seuls le CNN élève compact et son checkpoint converti sont fournis.

Citation

@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}
}

Copié depuis le bloc de citation des auteurs sur github.com/pbonazzi/picosam3#readme.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.