Dal laboratorio alla produzione
Installa Ultralytics, esegui YOLO26 sulle tue immagini, confronta il risultato con le tue specifiche e scegli il passo successivo.
Dieci minuti con un modello preaddestrato bastano a rispondere alla domanda che determina l'intero piano: un modello standard copre già le tue classi e la tua telecamera oppure ti servono dati personalizzati? In questa lezione installi Ultralytics, esegui YOLO26 su immagini reali e confronti il risultato con le specifiche che hai definito nella prima lezione.
Pratico
Installa#
pip install ultralytics
yolo checksLa prima riga installa il pacchetto Python ultralytics e il comando yolo, oltre a PyTorch se non è già installato. yolo checks mostra le versioni di Python, PyTorch e CUDA e l'hardware che userà Ultralytics, così puoi verificare la configurazione prima di eseguire qualsiasi operazione. Usa un ambiente virtuale pulito; la guida rapida illustra le configurazioni con conda, Docker e GPU.
Il pacchetto ultralytics si installa con Python 3.8 e versioni successive, ma le versioni attuali di PyTorch richiedono Python 3.10 o versioni successive. Se il tuo ambiente è più vecchio, crea prima un nuovo ambiente virtuale con una versione recente di Python.

Sintomo: yolo checks mostra CPU su una macchina con una GPU NVIDIA e l'inferenza è lenta. Causa: una build di PyTorch solo CPU, come il wheel predefinito pip su Windows. Soluzione: seleziona il sistema operativo, il gestore di pacchetti e la versione di CUDA nel selettore di PyTorch qui sopra, esegui il comando mostrato e reinstalla ultralytics. Su un Mac, come nello screenshot, la build predefinita è quella corretta; Ultralytics usa la CPU, a meno che tu non passi device=mps per usare la GPU Apple.
Una prima predizione#
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # scarica il modello nano da ~5 MB al primo utilizzo
results = model("https://ultralytics.com/images/bus.jpg", save=True)
for box in results[0].boxes:
print(model.names[int(box.cls)], round(float(box.conf), 2))Entrambi mostrano un riepilogo di una riga per ogni immagine e salvano l'immagine annotata in runs/detect/predict:
image 1/1 .../bus.jpg: 640x480 4 persons, 1 bus, 19.7ms
Speed: 0.9ms preprocess, 19.7ms inference, 0.4ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs/detect/predictRiga per riga: l'immagine è stata ridimensionata a 640×480 per l'inferenza; il modello ha rilevato quattro persone e un autobus; l'inferenza è durata circa 20 ms su una CPU di un portatile. La riga Speed è il tuo primo controllo della latenza: confrontala con il frame rate indicato nella riga dell'input delle tue specifiche. Apri l'immagine salvata: ogni box mostra la classe, il box e la confidenza, come nella lezione sul rilevamento.
Confronta il risultato con le tue specifiche#
| Domanda | Se sì | Se no |
|---|---|---|
| Le tue classi rientrano tra le 80 classi COCO che il modello conosce? | Crea un prototipo senza alcun addestramento | Ti servono dati annotati e un fine-tuning (guida al fine-tuning) |
| Sulle tue immagini, i box sopra la soglia si posizionano sugli oggetti corretti? | Il task e il punto di vista corrispondono | Aspettati un divario di dominio: raccogli dati dalle tue telecamere |
| Il tipo di output è quello richiesto dalla tua regola decisionale? | Mantieni il task | Cambia i pesi: -seg, -sem, -depth, -pose, -obb oppure -cls |
| È abbastanza veloce da soddisfare il tuo frame rate sull'hardware di destinazione? | Procedi | Prova un modello più piccolo o un formato di esportazione ottimizzato |
La prima domanda ha una risposta precisa: model.names elenca tutte le classi conosciute dal modello preaddestrato. Per le specifiche del carrello elevatore, person è una classe COCO, mentre forklift non lo è: nessuna soglia farà rilevare un carrello elevatore al modello preaddestrato. È l'esito più comune alla prima esecuzione: il modello copre solo una parte delle specifiche. La scelta giusta è creare un prototipo della logica decisionale usando le classi disponibili e, nel frattempo, costruire il dataset per le altre.
Cosa cambia in produzione#
Un modello distribuito si trova ad affrontare condizioni mai presenti nel suo dataset: nuove telecamere, stagioni, prodotti e uniformi. Senza un nuovo addestramento, la precisione peggiora; con un riaddestramento regolare sui dati raccolti in produzione, recupera:

Ogni lezione di questo corso alimenta quel ciclo: le specifiche definiscono un errore, l'analisi della copertura indica dove cercare, il controllo delle etichette e le linee guida rendono utili i nuovi dati, mentre suddivisioni e metriche affidabili ti dicono se il modello riaddestrato è davvero migliore. Due abitudini ti aiutano a far funzionare il ciclo fin dal primo giorno: registra un campione di input e predizioni, incluse quelle con bassa confidenza, e conserva il set di test congelato per confrontare ogni modello sulle stesse immagini. Osservabilità e drift approfondisce il monitoraggio del data drift.
Come proseguire#
| Corso | Seguilo quando |
|---|---|
| Creare dataset YOLO ad alte prestazioni | Le tue classi non sono presenti nei dati di preaddestramento oppure le tue scene differiscono da COCO |
| Addestra il tuo primo modello YOLO | Hai un dataset annotato e vuoi eseguire il fine-tuning |
| Ultralytics YOLO in produzione | Hai un modello e ti servono esportazione, tracking e monitoraggio |
| Sviluppa con Ultralytics Platform | Vuoi gestire dati, annotazione, addestramento e distribuzione in un unico posto |
Preferisci un flusso di lavoro accessibile dal browser? Ultralytics Platform esegue lo stesso ciclo — caricamento, annotazione, addestramento, distribuzione — senza installazioni locali:
Mostra la soluzione
from pathlib import Path
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 1. Which classes in your output line does the pretrained model already know?
spec_classes = {"person", "forklift"}
known = set(model.names.values())
print(f"pretrained: {sorted(spec_classes & known)} needs your own data: {sorted(spec_classes - known)}")
# 2. What does it find on your images?
sources = [
"https://ultralytics.com/images/bus.jpg", # replace with your own images
"https://ultralytics.com/images/zidane.jpg",
]
for source, result in zip(sources, model.predict(sources, conf=0.25, save=True, verbose=False)):
names = [result.names[int(c)] for c in result.boxes.cls]
print(f"{Path(source).name}: {len(names)} detections -> {sorted(set(names))}")pretrained: ['person'] needs your own data: ['forklift']
bus.jpg: 5 detections -> ['bus', 'person']
zidane.jpg: 3 detections -> ['person', 'tie']Per le specifiche del carrello elevatore: person è coperto, forklift no. Prossimo passo: crea subito un prototipo della regola di zona usando il modello preaddestrato sulle persone e inizia il corso Creare dataset YOLO ad alte prestazioni per raccogliere e annotare carrelli elevatori ripresi dalle telecamere del magazzino.