Per ora questa sezione è disponibile solo in inglese.
Documentazione principale
Task sperimentali

Le prossime novità

I percorsi di rilevamento e segmentazione costituiscono il nucleo convalidato. Questa pagina documenta le nuove teste dei task e le tecniche di addestramento che stiamo sviluppando su questa base: classificazione, box orientati, posa e fine-tuning efficiente in termini di parametri.

Panoramica

LibreYOLO è un framework multi-task: la stessa famiglia di modelli può usare teste diverse. Accanto ai percorsi detect e segment convalidati, stanno arrivando diversi nuovi task per le due famiglie di punta, YOLO9 e RF-DETR. Si collegano tutti alla stessa factory LibreYOLO(...) e allo stesso contenitore Results, quindi una volta appresa l'API principale si tratta di piccole aggiunte.

  • Classificazione per YOLO9 e RF-DETR. Etichette per l'intera immagine con probabilità top-1 / top-5.
  • Box orientati (OBB) per YOLO9 e RF-DETR. Box ruotati per immagini aeree e documenti.
  • Keypoint / posa per YOLO9 e RF-DETR. Keypoint COCO-17 delle persone.
  • Rilevamento di piccoli oggetti con YOLO9-P2, una variante di YOLOv9 con una scala stride 4 per gli oggetti da 4-16 px nelle immagini aeree e dei droni, incluso un checkpoint VisDrone in anteprima di ricerca.
  • Fine-tuning LoRA / DoRA per RF-DETR. Adatta il backbone transformer usando una frazione della memoria.

Leggi prima questa sezione

Tutto ciò che trovi in questa pagina è sperimentale e alcune parti sono ancora in lavorazione su branch di funzionalità. Le API, i valori predefiniti e i formati delle etichette possono cambiare prima di essere promossi nel nucleo convalidato. La sezione Stabilità indica esattamente lo stato di ogni funzionalità.

Selezionare un task

Ogni famiglia usa il rilevamento per impostazione predefinita. Puoi scegliere un altro task in uno dei tre modi seguenti, risolti in questo ordine di precedenza:

PrioritàMeccanismoEsempio
1Argomento esplicitotask="obb"
2Metadati del checkpointtask registrato in un file .pt addestrato
3Suffisso del nome file-cls, -obb, -pose
4Valore predefinito della famigliadetect

Poiché la factory pubblica LibreYOLO(...) richiede un file di pesi reale, il modo più semplice per avviare uno di questi task da zero è creare direttamente la classe della famiglia e passare task=. I checkpoint addestrati vengono ricaricati tramite la factory unificata, che ne rileva automaticamente il task.

python
1from libreyolo import LibreYOLO, LibreYOLO9, LibreRFDETR
2
3# Start a task from scratch via the family class
4m = LibreYOLO9(None, size="t", task="classify", nb_classes=10)
5
6# Load a trained checkpoint via the unified factory (task auto-detected)
7m = LibreYOLO("LibreYOLO9t-obb.pt")

Classificazione delle immagini

YOLO9: t, s, m, cRF-DETR: n, s, m, l

La classificazione assegna una singola etichetta a un'intera immagine. YOLO9 mantiene il proprio backbone e aggiunge una testa di classificazione leggera; RF-DETR riutilizza il proprio encoder DINOv2 e aggiunge una testa lineare con pooling. Entrambi operano a 224 per 224.

Inferenza e risultato Probs

La predizione restituisce un oggetto Results il cui campo probs contiene una softmax sulle classi.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-cls.pt")
4r = model.predict("cat.jpg")
5
6print(r.probs.top1) # class id of the argmax
7print(r.probs.top1conf) # its probability
8print(r.probs.top5) # [id, id, id, id, id]
9print(model.names[r.probs.top1]) # human-readable label
CampoTipoSignificato
probs.top1intID della classe argmax.
probs.top5list[int]ID delle classi top-5, in ordine decrescente.
probs.top1conffloatProbabilità della classe top-1.
probs.top5conftensorProbabilità delle classi top-5.
probs.datatensorVettore softmax completo.

Formato del dataset e addestramento

La classificazione usa una struttura ImageFolder, non un file YAML. I nomi delle classi corrispondono ai nomi ordinati delle sottocartelle, fissati in base allo split di addestramento.

dataset/
1dataset/
2 train/
3 cat/ img001.jpg ...
4 dog/ img104.jpg ...
5 val/
6 cat/ ...
7 dog/ ...

L'argomento data= accetta una cartella, l'URL di un file .zip o il nome di un download automatico noto (imagenette160 e imagenet10). La testa viene ricostruita automaticamente in base al numero di classi del dataset.

python
1from libreyolo import LibreYOLO9
2
3model = LibreYOLO9(None, size="t", task="classify", nb_classes=10)
4result = model.train(
5 data="imagenette160", # folder, .zip URL, or known name
6 epochs=10, batch=64, imgsz=224,
7 optimizer="adamw", lr0=1e-3,
8)
9# Validation reports metrics/accuracy_top1 and metrics/accuracy_top5

Esecuzioni di riferimento

Rapidi controlli di coerenza durante lo sviluppo: YOLO9-t ha raggiunto top-1 0,79 / top-5 0,975 su imagenette160 (10 epoche), mentre RF-DETR-n ha raggiunto top-1 0,69 / top-5 0,96 (6 epoche). RF-DETR trae vantaggio dall'accesso a Internet alla prima esecuzione per scaricare il backbone DINOv2; offline usa come fallback un'inizializzazione casuale.

Box orientati (OBB)

YOLO9: t, s, m, cRF-DETR: n, s, m, l

I box orientati includono un angolo di rotazione, necessario per immagini aeree, documenti e scene con elementi molto ravvicinati. YOLO9 aggiunge un ramo per l'angolo alla propria testa detect; RF-DETR aggiunge al decoder un embedding dell'angolo apprendibile.

Inferenza e risultato OBB

Results espone un campo obb. Gli angoli sono espressi in radianti.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-obb.pt")
4r = model.predict("aerial.jpg")
5
6for i in range(len(r.obb.cls)):
7 cx, cy, w, h, angle = r.obb.xywhr[i] # angle in radians
8 corners = r.obb.xyxyxyxy[i] # 4 (x, y) corner points
9 conf, cls = r.obb.conf[i], r.obb.cls[i]
CampoFormaSignificato
obb.xywhrN x 5[cx, cy, w, h, angle], angolo in radianti.
obb.xyxyxyxyN x 4 x 2Quattro punti d'angolo per box.
obb.confNConfidenza per box.
obb.clsNID della classe per box.

Formato del dataset e addestramento

OBB usa un file YAML dei dati standard in stile detect, ma le etichette sono file di testo YOLO-OBB con esattamente nove campi per riga: un ID di classe seguito da quattro punti d'angolo normalizzati. L'angolo viene derivato dai vertici, non memorizzato.

labels/aerial_001.txt
1# class_id x1 y1 x2 y2 x3 y3 x4 y4 (all normalized to [0, 1])
20 0.51 0.32 0.66 0.38 0.62 0.55 0.47 0.49
32 0.10 0.71 0.18 0.69 0.20 0.80 0.12 0.82

Un normale checkpoint di rilevamento non può essere caricato direttamente in un modello OBB. Il passaggio da detect a OBB è consentito solo come inizializzazione dell'addestramento: passa pretrained=True per YOLO9 o il flag di trasferimento esplicito per RF-DETR. Mosaic e mixup sono disabilitati per OBB finché non sarà disponibile una data augmentation che gestisce i vertici, mentre l'inferenza a tasselli non è supportata.

python
1from libreyolo import LibreYOLO9
2
3model = LibreYOLO9(None, size="t", task="obb")
4# Warm-start the backbone from a same-family detect checkpoint
5result = model.train(data="dota8.yaml", pretrained=True, epochs=100, imgsz=640)
6
7# CLI equivalent
8# libreyolo train model=LibreYOLO9t.pt data=dota8.yaml --task obb

La validazione usa l'AP con IoU ruotata, riportata come mAP50 e mAP50-95 nel gruppo di metriche OBB.

Keypoint / Posa

YOLO9 + RF-DETR: landing soonYOLO-NAS, EdgeCrafter: available

La stima della posa predice i keypoint per ogni istanza rilevata. La struttura predefinita usa i keypoint COCO-17 delle persone. Nella prima versione, la posa di YOLO9 e RF-DETR supporta una sola classe, le persone; la posa di YOLO-NAS ed EdgeCrafter è già disponibile nel codice.

Inferenza e risultato Keypoints

Results espone un campo keypoints di forma (N, K, 3), dove l'ultimo canale rappresenta visibilità o confidenza, in coordinate pixel dell'immagine originale.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("LibreYOLO9t-pose.pt")
4r = model.predict("athletes.jpg")
5
6kp = r.keypoints
7print(kp.xy.shape) # (N, 17, 2) pixel coordinates
8print(kp.conf) # (N, 17) per-keypoint visibility / confidence
9print(kp.xyn) # normalized coordinates
10print(r.boxes.xyxy) # person boxes still come along
CampoFormaSignificato
keypoints.xyN x K x 2Coordinate pixel dei keypoint.
keypoints.xynN x K x 2Coordinate normalizzate dei keypoint.
keypoints.confN x KVisibilità / confidenza per keypoint.
keypoints.has_visibleN x KMaschera booleana di visibilità.

Formato del dataset e addestramento

La posa usa un file YAML dei dati che deve dichiarare kpt_shape: [K, 2|3] e, per la data augmentation con ribaltamento orizzontale, un flip_idx. Le etichette sono righe di testo YOLO-pose: un ID di classe, un box normalizzato, quindi K terne di keypoint (x, y, v) con visibilità v in {0, 1, 2}.

coco8-pose.yaml
1path: coco8-pose
2train: images/train
3val: images/val
4nc: 1
5names:
6 0: person
7kpt_shape: [17, 3]
8flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
python
1from libreyolo import LibreYOLO9
2
3# Warm-start from a detection checkpoint; the keypoint head is reinitialized
4model = LibreYOLO9("LibreYOLO9t.pt", size="t", task="pose")
5model.train(data="coco8-pose.yaml", epochs=100, imgsz=640)
6
7# Validation reports OKS-based AP via the pose validator

In sviluppo attivo

La posa di YOLO9 e RF-DETR si trova in un branch di funzionalità e non è ancora stata integrata; considera l'API precedente come il contratto previsto, non come definitivo. I pesi per la posa di YOLO-NAS sono collegati dal progetto upstream anziché duplicati e devono essere predisposti manualmente.

Rilevamento di piccoli oggetti (YOLO9-P2)

YOLO9-P2: t, sVisDrone research preview

YOLO9-P2 è YOLOv9 con una quarta scala di rilevamento a stride 4. YOLOv9 standard rileva agli stride 8/16/32, quindi gli oggetti sotto ~16 px sfuggono alla griglia più fine; la testa P2 copre l'intervallo 4-16 px dominante nei filmati aerei e dei droni.

In un confronto A/B controllato su VisDrone, con stessa configurazione, risoluzione e inizializzazione e con la sola modifica della testa P2, l'AP dei piccoli oggetti è migliorata del +49% rispetto a YOLOv9 standard della stessa dimensione. L'aggiunta di una risoluzione di addestramento maggiore e della dimensione s più grande ha quasi raddoppiato l'AP dei piccoli oggetti nel progetto:

ModelloAPAP50AP_small
YOLO9-t standard @640 (controllo)0.1230.2200.047
YOLO9-P2-t @640 (stessa configurazione A/B)0.1380.2540.070
YOLO9-P2-s @768 (anteprima rilasciata)0.2260.3850.141

VisDrone2019-DET val (548 immagini), pycocotools, un singolo seed; considera ±1 punto come rumore.

L'anteprima di ricerca VisDrone

Un checkpoint addestrato è pubblicato come LibreYOLO9P2s-visdrone. La famiglia è integrata in dev ma non ancora in una release PyPI, quindi installala dal sorgente fino alla prossima release.

python
1from libreyolo import LibreYOLO
2
3# Auto-downloads from the LibreYOLO Hugging Face org
4model = LibreYOLO("LibreYOLO9P2s-visdrone.pt")
5
6# Evaluate/predict at 768 - the resolution it was trained at
7results = model.predict("aerial.jpg", imgsz=768, conf=0.25)

Licenza non commerciale

Il checkpoint in anteprima è addestrato su VisDrone2019-DET (AISKYEYE, Tianjin University), con licenza CC BY-NC-SA 3.0: solo per uso non commerciale, a differenza del codice MIT di LibreYOLO e dei pesi predefiniti per COCO. Rileva le 10 classi aeree VisDrone, non quelle COCO. La scheda del modello include l'esatta configurazione di addestramento, le metriche per epoca e un convertitore del dataset sviluppato in clean room, così puoi riprodurlo o riaddestrarlo sui tuoi dati.

Quando usarlo e quando non usarlo

Adatta l'architettura al contesto. Su dati simili a COCO, dove "piccolo" significa 16-32 px, la testa P2 non aiuta; in quel caso YOLOv9 standard è la scelta migliore. Scegli YOLO9-P2 quando i tuoi oggetti sono sotto ~16 px: filmati di droni e aerei, videosorveglianza distante, tasselli satellitari. La scala aggiuntiva raddoppia approssimativamente il calcolo e il numero di anchor. È il prezzo della griglia stride 4.

Addestrare il tuo modello

YOLO9-P2 viene inizializzato per trasferimento dai checkpoint detect di YOLOv9 standard: vengono caricati il backbone, il neck condiviso e le torri delle teste esistenti; i nuovi moduli P2 partono da zero. La configurazione seguente raccoglie ciò che abbiamo imparato con fatica sui dati di oggetti minuscoli:

python
1from libreyolo import LibreYOLO9P2
2
3model = LibreYOLO9P2(None, size="s")
4model.train(
5 data="/abs/path/tiny_objects.yaml",
6 imgsz=768, # resolution is the biggest lever for tiny objects
7 lr0=0.005, # the family default 0.01 diverges on transfer init
8 mosaic_prob=0.0, # mosaic tiling shrinks tiny objects below detectability
9 mixup_prob=0.0,
10 hsv_prob=1.0, flip_prob=0.5,
11 max_labels=600, # dense aerial frames exceed the default 100-box cap
12 pretrained="LibreYOLO9s.pt", # transfer init from stock YOLOv9
13 epochs=60,
14)

Fine-tuning LoRA / DoRA

RF-DETR: n, s, m, l

Gli adattatori in stile LoRA consentono di fare fine-tuning del backbone transformer di RF-DETR addestrando un piccolo insieme di matrici a rango ridotto, mentre i pesi di base restano congelati. In questo modo si riduce la memoria usata dall'ottimizzatore e dai gradienti, una soluzione ideale per adattare un checkpoint potente a un nuovo dominio con hardware modesto.

Abilitazione

L'intera API pubblica consiste in un singolo flag su train(). Non ci sono impostazioni di rank, alpha o moduli di destinazione da regolare; la procedura usa una configurazione fissa e ben collaudata. Dietro le quinte, l'implementazione usa DoRA (LoRA con scomposizione dei pesi, rank 16) applicato alle proiezioni query, key e value dell'attenzione DINOv2.

python
1from libreyolo import LibreYOLO
2
3model = LibreYOLO("rf-detr-nano.pth") # sizes n, s, m, l
4result = model.train(
5 data="data.yaml",
6 lora=True, # DoRA on the frozen DINOv2 backbone
7 epochs=100, batch_size=4, lr=1e-4,
8)
9
10# Resume: LoRA is auto-detected from the checkpoint, no need to repeat the flag
11model.train(data="data.yaml", resume=True)
bash
1# CLI equivalent
2libreyolo train --model rf-detr-nano.pth --data data.yaml --lora

Checkpoint ed esportazione

  • I checkpoint di addestramento conservano i tensori degli adattatori e la configurazione registra l'uso di LoRA, quindi il caricamento e la ripresa ricostruiscono automaticamente il grafo degli adattatori.
  • La testa di rilevamento resta sempre addestrabile, quindi puoi comunque adattarla a un nuovo numero di classi.
  • export() riunisce gli adattatori nei pesi densi. I modelli esportati sono standard e non richiedono la dipendenza peft.
  • LoRA è disponibile solo per RF-DETR; passare lora=True ad altre famiglie genera un errore chiaro.

Installa il pacchetto extra

L'addestramento LoRA richiede la dipendenza per gli adattatori: pip install "libreyolo[lora]", che installa lo stack RF-DETR e peft. I modelli esportati, con gli adattatori riuniti, non ne hanno bisogno durante l'inferenza.

Stabilità

Lo stato attuale di ogni funzionalità. Tutto ciò che trovi qui è sperimentale; questa tabella ne offre una panoramica trasparente.

FunzionalitàFamiglieStato
ClassificazioneYOLO9, RF-DETRPR aperta
Box orientati (OBB)YOLO9, RF-DETRSperimentale
Keypoint / posaYOLO9, RF-DETRIn arrivo
Keypoint / posaYOLO-NAS, EdgeCrafterDisponibile
Rilevamento di piccoli oggettiYOLO9-P2Anteprima di ricerca
LoRA / DoRARF-DETRRevisionata

Cerchi il percorso stabile?

Per l'uso in produzione, il nucleo convalidato comprende il rilevamento con YOLO9 e il rilevamento e la segmentazione con RF-DETR. Consulta la documentazione principale per questi modelli e LibreVLM per il rilevamento a vocabolario aperto.

Segui i progressi e consulta il sorgente su GitHub