Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Get Started
Fondamenti della visione artificiale·Scegli un task·Lezione 2/10
Lezioneprincipiante

I sette task di visione

Associa una riga dell’output a classificazione, rilevamento, segmentazione di istanze, segmentazione semantica, stima della profondità, posa o OBB, quindi scegli i pesi YOLO26 da cui partire.

Scegliere il task è la decisione più costosa da prendere prima dell’addestramento. Se scegli la segmentazione quando basterebbero i riquadri, la spesa per l’annotazione aumenta notevolmente; se scegli riquadri verticali per navi viste da un drone, ogni riquadro sarà perlopiù acqua. Ultralytics YOLO supporta sette task tramite un’unica API, quindi la scelta dipende dall’output di cui hai bisogno, non dagli strumenti.

Esito

Indica l’unico task e il file dei pesi YOLO26 che corrispondono alla riga del tuo output e spiega in una riga perché non serve il task successivo, più costoso.

Percorso rapido
Se sai già come muoverti, ecco la versione breve.
  1. Un’unica etichetta per l’intera immagine: classificazione.

  2. Cosa c’è e dove, quando basta un rettangolo: rilevamento.

  3. Contorno preciso per ogni oggetto: segmentazione di istanze. Classe per ogni pixel: segmentazione semantica.

  4. Distanza per ogni pixel: stima della profondità.

  5. Articolazioni o punti di riferimento: posa. Oggetti inclinati visti dall’alto: OBB.

  6. La stessa API YOLO() per tutti e sette i task; cambia solo il file dei pesi.

Pratico

Panoramica dei sette task#

Output dei sette task Ultralytics YOLO: una foglia classificata, automobili e pedoni rilevati, automobili segmentate, una mappa semantica stradale, lo scheletro della posa di un corridore, riquadri ruotati su navi e una mappa di profondità

Leggi la tabella partendo dalla colonna dell’output: è ciò a cui deve corrispondere la riga dell’output della tua specifica.

TaskOutputRisponde aPesi YOLO26
ClassificazioneUn’etichetta per immagine, con una probabilità"Cos’è questa immagine?"yolo26n-cls.pt
RilevamentoClasse, riquadro e confidenza per ogni oggetto"Cosa si trova dove?"yolo26n.pt
Segmentazione di istanzeClasse e maschera di pixel per oggetto"Qual è la forma esatta di ogni oggetto?"yolo26n-seg.pt
Segmentazione semanticaUna classe per ogni pixel"Che tipo di regione rappresenta ogni pixel?"yolo26n-sem.pt
Stima della profonditàDistanza in metri per ogni pixel"A quale distanza si trova ogni pixel?"yolo26n-depth.pt
Stima della posaRiquadro e punti chiave per ogni persona o oggetto"Qual è la posa del corpo?"yolo26n-pose.pt
Riquadri di delimitazione orientatiRiquadro ruotato per oggetto"Che cosa si trova dove e con quale angolazione?"yolo26n-obb.pt

Ci sono due coppie che spesso creano confusione. Segmentazione di istanze vs semantica: la segmentazione di istanze distingue ogni oggetto (tre auto, tre maschere); quella semantica assegna un'etichetta ai pixel solo in base alla classe (un'unica regione "auto", senza conteggio). Rilevamento vs OBB: entrambi restituiscono un riquadro per oggetto, ma un OBB ruota insieme all'oggetto, aspetto importante quando gli oggetti sono inclinati nelle immagini dall'alto.

Un'API, sette output#

Cambiare attività non significa cambiare strumenti. Il file dei pesi determina cosa viene restituito e l'oggetto Results valorizza l'attributo corrispondente:

from ultralytics import YOLO

image = "https://ultralytics.com/images/bus.jpg"
outputs = ["probs", "boxes", "masks", "semantic_mask", "depth", "keypoints", "obb"]

for suffix in ["-cls", "", "-seg", "-sem", "-depth", "-pose", "-obb"]:
    weights = f"yolo26n{suffix}.pt"
    model = YOLO(weights)
    result = model(image, verbose=False)[0]
    filled = [name for name in outputs if getattr(result, name) is not None]
    print(f"{weights:18} task={model.task:9} -> {', '.join(filled)}")
yolo26n-cls.pt     task=classify  -> probs
yolo26n.pt         task=detect    -> boxes
yolo26n-seg.pt     task=segment   -> boxes, masks
yolo26n-sem.pt     task=semantic  -> semantic_mask
yolo26n-depth.pt   task=depth     -> depth
yolo26n-pose.pt    task=pose      -> boxes, keypoints
yolo26n-obb.pt     task=obb       -> obb

Leggi la colonna a destra: anche la segmentazione e la stima della posa restituiscono riquadri, perché aggiungono un elemento al rilevamento. La segmentazione semantica e la profondità non restituiscono alcun output per oggetto: descrivono invece ogni pixel. Il codice a valle legge esattamente uno di questi attributi, quindi nella riga dell'output della tua specifica devi indicare quale.

Come scegliere in pratica#

Parti da ciò che deve descrivere una singola predizione, poi scegli l'attività meno costosa che consente di prendere la decisione:

  1. Una sola etichetta per l'intera immagine → classificazione.
  2. Una classe per ogni pixel, senza dover distinguere gli oggetti → segmentazione semantica.
  3. Una distanza per ogni pixel → stima della profondità.
  4. Qualcosa che riguarda ogni oggetto:
    • dove si trova, per contarlo, localizzarlo o filtrarlo → rilevamento (aggiungi il tracciamento per mantenerne l'identità tra i fotogrammi);
    • la sua forma esatta, il contorno o l'area → segmentazione di istanze;
    • la sua postura → stima della posa;
    • la sua rotazione nelle immagini dall'alto → OBB.

Quando due attività sono entrambe adatte, scegli quella meno costosa da annotare ed eseguire. Il rilevamento è la scelta predefinita per la maggior parte dei prodotti: i riquadri sono veloci da disegnare e verificare e, con il tracciamento, consentono già di realizzare conteggi, avvisi nelle zone e analisi del traffico, come in questa immagine dell'autostrada:

Traffico autostradale tracciato da Ultralytics YOLO, con ID persistente e traccia del movimento su ogni auto, autobus e camion

Profondità: l'attività che risponde alla domanda "a quale distanza"#

La stima della profondità restituisce una mappa delle dimensioni dell'immagine con una distanza in metri per ogni pixel: nessuna classe e nessun riquadro. Usala quando la decisione dipende dalla distanza: per un robot che evita gli ostacoli, un veicolo che rallenta quando qualcosa è vicino o una stima approssimativa del volume di un cumulo.

from ultralytics import YOLO

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]

depth = result.depth.data  # meters, one value per pixel
print(f"depth map {tuple(depth.shape)}, nearest {float(depth.min()):.1f} m, farthest {float(depth.max()):.1f} m")
depth map (1080, 810), nearest 2.0 m, farthest 14.9 m

Una singola telecamera deduce la profondità da indizi appresi, come la prospettiva e le dimensioni degli oggetti; prima di usarla per distanze rilevanti per la sicurezza, misurane quindi l'errore nelle tue scene. La profondità si abbina bene al rilevamento: rileva l'oggetto, poi leggi la mappa di profondità all'interno del suo riquadro.

Insidie#

Confusione frequenteSintomoScelta migliore
Segmentazione quando basterebbero i riquadriIl codice a valle non legge mai la mascheraRilevamento
Riquadri verticali nelle immagini dall'altoI riquadri coprono soprattutto lo sfondo e gli oggetti vicini si sopprimono a vicendaOBB
Classificazione per una scena con più oggettiL'etichetta dipende da un piccolo oggettoRilevamento più una regola
Segmentazione semantica quando servono conteggiGli oggetti a contatto si fondono in un'unica regioneSegmentazione di istanze
Dimensione del riquadro usata come indicatore della distanzaLe regole non funzionano quando le dimensioni degli oggetti varianoStima della profondità oppure rilevamento più profondità
Stima della posa per verificare la presenzaNon leggi mai un punto chiaveRilevamento
Non pagare per output che non userai

Gli output più ricchi costano di più in ogni fase: le maschere e i keypoint richiedono più tempo per essere disegnati e revisionati, oltre a regole di etichettatura più rigorose. Inizia con l'attività meno costosa che risponde alla riga decisionale e passa a una più complessa solo quando un utilizzatore effettivo ha bisogno di maggiori dettagli.

Provalo

Prendi la riga dell'output dalla tua specifica della lezione 1 e segui il percorso qui sopra. Scrivi l'attività, il file dei pesi YOLO26 da cui partiresti, l'attributo Results che il tuo codice leggerà e una riga che spieghi perché non serve l'attività successiva, più costosa. Non hai ancora un progetto? Usa la specifica del carrello elevatore.

Criteri di completamento
La lezione è completata quando tutte le seguenti condizioni sono soddisfatte.
  • Hai indicato un'attività, il relativo file dei pesi YOLO26 e l'attributo Results letto dal tuo codice.

  • Hai scritto una riga che spiega perché non serve l'attività successiva, più costosa.

  • Sai dire se il tuo progetto ha bisogno della segmentazione di istanze o semantica, della profondità o di nessuna di queste, e perché.

Mostra la soluzione

Per la specifica del carrello elevatore, la risposta è rilevamento con yolo26n.pt, leggendo da result.boxes.

La riga della decisione deve sapere dove si trovano carrelli elevatori e persone, così il codice può verificare quanto sono vicini. I riquadri rispondono a questa esigenza. La segmentazione di istanze aumenterebbe il costo dell'annotazione senza modificare l'avviso, perché il bordo inferiore di un riquadro indica già la posizione sul terreno. La stima della posa non serve, perché la postura non rientra nella decisione. La profondità potrebbe aiutare a convertire le posizioni nell'immagine in metri, ma una telecamera fissa calibrata consente di mappare il piano del pavimento senza usarla. Vale la pena testare l'OBB solo se le telecamere sono rivolte direttamente verso il basso e i carrelli elevatori appaiono con angoli diagonali molto accentuati.

Prossimi passi

Ora approfondiamo il rilevamento: l'attività di riferimento e quella da cui parte la maggior parte dei prodotti.

Accedi per salvare i progressi