Ultralytics YOLO27:
Ultralytics YOLO

Come rendiamo più veloci i modelli YOLO di Ultralytics sul tuo chip preferito

Scopri come Ultralytics ottimizza i modelli YOLO per la velocità su CPU, GPU e dispositivi edge. Spiegheremo chip, memoria e tecniche intelligenti come quantizzazione, fusione e pruning.

FRFrancesco Mattioli27 min read
Ottimizzazione dei modelli YOLO su CPU, GPU e chip edge

In Ultralytics creiamo modelli di visione artificiale; in pratica, insegniamo ai computer a vedere! Pensa a questi modelli come a enormi ricette matematiche. Sono composti da operazioni (che chiamiamo layer) e da una gigantesca quantità di numeri che chiamiamo pesi.

I nostri modelli Ultralytics YOLO elaborano le immagini per ciò che sono realmente: array di numeri! Ogni pixel è semplicemente un insieme di valori di colore, la quantità di Rosso, Verde e Blu (quindi RGB) per ogni singolo punto che compone l'immagine. Chiamiamo questi array di numeri "tensori" perché suona molto più interessante di "matrici multidimensionali", che suona molto più interessante di "numeri impilati su numeri impilati su numeri".

Quando dai un'immagine in input al nostro modello, questa intraprende un viaggio epico attraverso la rete. Immagina il tuo tensore che scivola attraverso uno strato dopo l'altro, trasformandosi, convolvendosi e venendo manipolato matematicamente nel modo più bello possibile. Pensa a una festa danzante in cui i numeri si mescolano e interagiscono, estraendo l'essenza di ciò che rende un gatto un gatto o un'auto un'auto. Chiamiamo questo processo estrazione delle caratteristiche.

Cosa esce dall'altra parte? Altri numeri! Numeri significativi. Nei task di rilevamento, ti dicono esattamente dove si trovano gli oggetti nell'immagine e cosa probabilmente sono. "Ehi, c'è il 95% di probabilità che quello sia un cane alle coordinate (x, y)!" Chiamiamo questo processo magico inferenza.

Ora, prima che i nostri modelli possano fare la loro magia, devono andare a scuola; devono essere addestrati. La fase di addestramento è quella in cui le cose si fanno intense.

Durante l'addestramento, ogni volta che presentiamo un'immagine alla rete, non ci limitiamo a ottenere una risposta. Facciamo due cose molto impegnative. Primo, calcoliamo quanto ha sbagliato la rete (lo chiamiamo loss, cioè in pratica la distanza dal centro del bersaglio). Secondo, e questa è la parte importante, aggiorniamo ogni singolo numero (o peso) nella rete in base a quella loss. Pensa a regolare migliaia di piccole manopole tutte insieme, calcolando ogni modifica per rendere la rete più precisa ogni volta.

In sostanza, addestriamo la rete attraverso la correzione: ogni errore le insegna cosa NON fare e modifichiamo tutti quei pesi affinché, quando vede di nuovo un'immagine simile, si avvicini alla risposta corretta. In pratica, la rete impara ricevendo spinte nella direzione giusta, un errore alla volta, finché non inizia a fare previsioni perfette.

Di quanti numeri stiamo parlando? Beh, il nostro piccolo e grazioso YOLO11n ha qualche milione di parametri. Ma YOLO11x? Quel modello tosto ha oltre 50 milioni di parametri! Più parametri significano più dettagli codificabili, come la differenza tra disegnare con i pastelli e avere a disposizione una tavolozza completa da artista.

Durante l'inferenza, questo numero di parametri diventa cruciale. Eseguire una rete con 3 milioni di parametri è come fare jogging intorno all'isolato. Eseguire una rete con 50 milioni di parametri? È più simile a correre una maratona mentre fai il giocoliere con torce infuocate.

Quindi, che cos'è ESATTAMENTE il calcolo? Come avviene davvero tutta questa elaborazione di numeri? Come facciamo a renderla più veloce? E cosa significa persino "ottimizzare il calcolo"?

Come i chip eseguono davvero i calcoli#

Il calcolo avviene tramite i chip. Questi piccoli quadrati di silicio sono essenzialmente i castelli di sabbia più organizzati dell'universo. Ogni singola operazione eseguita dal computer, ogni addizione, ogni confronto, ogni "se questo allora quello", è fisicamente incisa nel silicio. Nel chip esistono circuiti fisici reali in aree specifiche, dedicati alla somma dei numeri, e altri dedicati alle operazioni logiche. È come avere una piccola città in cui quartieri diversi sono specializzati in diversi tipi di matematica.

Probabilmente sembra assurdo, anche se sei un informatico. Questo perché abbiamo trascorso gli ultimi 40 anni a costruire strato dopo strato di astrazione, come una lasagna tecnologica diventata così alta da non permetterci più di vedere il piatto sul fondo. Abbiamo semplificato le cose a tal punto che oggi la maggior parte dei programmatori non ha idea di come avvenga realmente il calcolo nel silicio. Non per colpa loro, ma per progettazione!

Scopriamo questi strati. Prendiamo questo codice Python semplicissimo:

x = 1
if x == 1:
    y = x + 1

Creiamo una variabile x, la impostiamo su 1 e, se x è uguale a 1 (spoiler: lo è), creiamo y con il valore di x più 1. Tre righe. Facile.

Ma è qui che le cose diventano interessanti. Tra queste tre righe innocue e gli elettroni che si muovono realmente nel silicio, avvengono ALMENO quattro enormi livelli di traduzione (in realtà sono di più, ma il nostro Digital Content Manager dice che il conteggio delle parole le sta già causando ansia). Ti accompagno in questo viaggio da capogiro:

Livello 1: Python → Bytecode Per prima cosa, Python legge il tuo codice e lo compila in qualcosa chiamato bytecode, un linguaggio intermedio più facile da assimilare per i computer, ma che ti farebbe sanguinare gli occhi se provassi a leggerlo.

Livello 2: Bytecode → Codice macchina L'interprete Python (come CPython) prende quel bytecode e lo traduce in codice macchina, le istruzioni effettive comprese dal processore. È qui che il tuo elegante "if x == 1" diventa qualcosa come "LOAD registro, COMPARE registro, JUMP se il flag zero è impostato".

Livello 3: Codice macchina → Microcodice Colpo di scena! I processori moderni non eseguono nemmeno direttamente il codice macchina. Lo scompongono ulteriormente in microcodice, operazioni ancora più piccole che i componenti interni del chip possono gestire. La tua singola istruzione "ADD" potrebbe diventare più micro-operazioni.

Livello 4: Microcodice → Elettronica fisica Infine, arriviamo al silicio. Queste micro-operazioni attivano segnali elettrici reali che attraversano i transistor. Miliardi di piccoli interruttori si accendono e si spengono, gli elettroni danzano lungo percorsi progettati con cura e, in qualche modo, magicamente, 1 + 1 diventa 2.

Ogni livello esiste per nascondere l'incredibile complessità del livello sottostante. È come quelle matrioske russe, tranne per il fatto che ogni bambola parla una lingua completamente diversa e la bambola più piccola è letteralmente fatta di fulmini intrappolati nella sabbia.

L'ironia? Quelle tre righe di Python probabilmente attivano MILIONI di interruttori a transistor. Ma grazie a queste astrazioni, non devi pensare a nulla di tutto ciò. Scrivi semplicemente "y = x + 1" e ti fidi del fatto che, da qualche parte nelle profondità del silicio, avvenga la magia.

L'architettura#

Ogni singola operazione è implementata fisicamente nel silicio e il punto del chip in cui avviene dipende interamente dalla topologia del chip. È come progettare una città, ma per gli elettroni. Qui vive il sommatore, lì il moltiplicatore e tutti devono comunicare in modo efficiente.

Sul mercato esistono centinaia di chip diversi, ciascuno progettato per scopi differenti. Cosa cambia tra loro? La topologia, cioè il modo in cui le operazioni sono posizionate e implementate nel dominio fisico. Questo è ciò che chiamiamo architettura e, ragazzi, ce ne sono davvero tante:

  • x86 (Intel e AMD) - Il nonno dell'informatica desktop, complesso ma potente
  • ARM - Alimenta il tuo telefono e sempre più spesso il tuo laptop, progettato per l'efficienza
  • RISC-V - Il ribelle open source, sempre più diffuso ovunque
  • PowerPC - La bestia di IBM, ancora in esecuzione nelle console per videogiochi e nei server
  • MIPS - Il preferito dagli accademici, semplice ed elegante
  • SPARC - Il contributo di Sun Microsystems (ora Oracle) all'elaborazione ad alte prestazioni
  • Architetture GPU (core CUDA di NVIDIA, RDNA di AMD) - Mostri dell'elaborazione parallela

Ogni architettura non solo dispone i propri transistor in modo diverso, ma parla anche una lingua diversa. Le astrazioni che usiamo per inviare istruzioni a queste macchine sono completamente diverse. È come dover scrivere indicazioni stradali per qualcuno, ma, a seconda della sua auto, potresti doverle scrivere in francese, mandarino o sotto forma di danza interpretativa.

Il battito del silicio#

Il carburante dei nostri chip sono gli elettroni, ovvero l'elettricità che fluisce nel chip fornendo l'energia necessaria al calcolo. Ma la sola energia non basta. Perché un chip funzioni davvero e sposti i dati attraverso la sua complessa topologia, tutto dipende da un componente fondamentale: il clock. È ciò che fa fluire gli elettroni lungo percorsi specifici in momenti specifici. Senza di esso, avresti semplicemente del silicio alimentato che non fa nulla.

Immagina di dover coordinare uno spettacolo enorme in cui miliardi di componenti devono muoversi in perfetta sincronia. Senza un ritmo, sarebbe il caos. È esattamente questo che fa il clock per il tuo processore. È un cristallo che vibra a una frequenza incredibilmente costante, emettendo impulsi elettrici miliardi di volte al secondo.

Quando senti parlare di un "processore da 3.5 GHz", quel GHz (gigahertz) indica la velocità del clock: 3,5 miliardi di battiti al secondo. Ogni battito è chiamato ciclo di clock ed è l'unità di tempo fondamentale nell'elaborazione.

NON accade nulla tra un ciclo di clock e l'altro. L'intero computer si blocca, in attesa del battito successivo. È come il gioco del semaforo più estremo dell'universo. A ogni "semaforo verde" (impulso di clock):

  • I dati si spostano tra i componenti
  • I calcoli vengono eseguiti
  • Vengono prese decisioni logiche
  • La memoria viene letta o scritta

Alcune operazioni richiedono un ciclo (una semplice addizione), mentre altre ne richiedono molti (una divisione o il recupero di dati dalla RAM). È tutto coreografato con precisione: miliardi di componenti eseguono le proprie operazioni specifiche, sincronizzati a questo ritmo incessante.

Puoi fare overclock del processore facendo vibrare più velocemente il cristallo; tutto avviene più rapidamente, ma viene generato anche più calore e il sistema diventa meno stabile. Spingiti troppo oltre e il computer si blocca, perché gli elettroni non riescono letteralmente a tenere il passo con il ritmo.

Un tempo queste operazioni venivano implementate con macchine grandi quanto stanze. Ma i componenti che eseguono tutto questo calcolo sono straordinariamente semplici: sono solo interruttori. Interruttori accesi o spenti.

Collega un numero sufficiente di questi interruttori secondo lo schema giusto e otterrai un calcolo. L'intera rivoluzione digitale si riduce a una sofisticata disposizione di interruttori.

Questa semplicità significa che, se hai degli interruttori, qualsiasi tipo di interruttore, puoi costruire un computer. Le persone hanno costruito computer funzionanti usando tubi e valvole dell'acqua, tessere del domino, mattoncini LEGO, biglie e persino la redstone in Minecraft.

I principi non sono cambiati dagli anni '40. Siamo semplicemente diventati incredibilmente bravi a rendere gli interruttori estremamente piccoli. Il tuo telefono ha una potenza di calcolo superiore a quella di tutti i computer che hanno mandato gli esseri umani sulla Luna e sta in tasca perché abbiamo capito come realizzare interruttori su scala atomica.

Quando eseguiamo reti neurali con milioni di parametri, azioniamo questi minuscoli interruttori miliardi di volte al secondo, tutti perfettamente sincronizzati con il battito del cristallo. Ogni aggiornamento dei pesi, ogni moltiplicazione di matrici, ogni funzione di attivazione: tutto segue il ritmo del clock.

Non c'è da stupirsi se l'addestramento dei modelli fa sembrare il computer intento a decollare!

Far andare le reti neurali a tutta birra#

Bene, abbiamo questi chip con miliardi di interruttori che danzano al ritmo di un cristallo e vogliamo eseguire su di essi reti neurali con milioni di parametri. Dovrebbe essere facile, no? Basta dare i numeri in pasto al chip e lasciarlo scatenare!

Eseguire rapidamente le reti neurali è come cercare di cucinare un pasto di cinque portate in una cucina in cui il frigorifero è a tre isolati di distanza, hai una sola padella e ogni ingrediente pesa 225 kg. La matematica in sé non è il problema principale; lo è tutto il resto.

Il disallineamento tra le architetture#

La maggior parte dei chip è stata progettata per eseguire Microsoft Word, non reti neurali. La tua CPU è stata costruita pensando che avrebbe trascorso la propria vita eseguendo istruzioni condizionali, cicli e, occasionalmente, calcolando le tue tasse (l'unico calcolo che trova emotivamente estenuante persino un supercomputer). È ottimizzata per operazioni sequenziali: fai questo, poi quello, poi quell'altro.

Ma le reti neurali sono completamente diverse. Vogliono fare TUTTO CONTEMPORANEAMENTE. Durante l'addestramento, aggiorni milioni di pesi in base a quanto erano errate le tue previsioni. Durante l'inferenza (quando utilizzi effettivamente il modello addestrato), fai passare i dati attraverso milioni di calcoli simultaneamente. Immagina di dover moltiplicare un milione di numeri per un altro milione di numeri. La tua CPU, che Dio la benedica, vuole farlo un numero alla volta, come un contabile molto veloce ma estremamente metodico.

Ecco perché le GPU sono diventate la spina dorsale dell'elaborazione AI. Le GPU sono state progettate per i videogiochi, dove devi calcolare simultaneamente il colore di milioni di pixel. A quanto pare, calcolare i colori dei pixel ed eseguire la matematica delle reti neurali sono attività sorprendentemente simili: entrambe comportano l'esecuzione della stessa operazione su enormi quantità di dati in parallelo.

Ma anche le GPU non sono perfette per le reti neurali. Per questo le aziende stanno costruendo chip AI specializzati (TPU, NPU e ogni altro acronimo che termina in PU). Questi chip sono progettati da zero con un unico obiettivo: far funzionare rapidamente le reti neurali. Sono come assumere uno chef che sa cucinare un solo piatto, ma lo prepara a una velocità sovrumana. Mentre la tua CPU fatica a eseguire sequenzialmente le operazioni sulle matrici e la tua GPU le gestisce abbastanza bene in parallelo, questi chip specializzati mangiano matrici a colazione, pranzo e cena.

Il muro della memoria (o: perché spostare i bit è più difficile della matematica)#

Nell'elaborazione moderna delle reti neurali, trascorriamo più tempo ed energia a SPOSTARE i dati che a ESEGUIRE CALCOLI su di essi.

Pensa al chip del computer come a un matematico geniale che lavora alla velocità della luce, ma i cui libri di riferimento sono conservati in edifici diversi dall'altra parte della città. Può risolvere istantaneamente qualsiasi equazione, ma prima deve procurarsi i numeri e quel viaggio richiede un'eternità.

Il tuo chip può moltiplicare due numeri in un ciclo di clock (ricorda, uno di quei miliardi di battiti al secondo). Velocissimo! Ma recuperare quei numeri dalla memoria e portarli al chip? Potrebbe richiedere CENTINAIA di cicli. È come se il tuo matematico potesse risolvere un problema in un secondo, ma avesse bisogno di cinque minuti per andare a piedi in biblioteca e tornare.

Il motivo è la distanza (e lo spazio). L'elettricità si muove velocemente, ma non a velocità infinita. Più il dato deve viaggiare sul chip, più tempo ci vuole. I progettisti di computer hanno risolto il problema creando una gerarchia di memoria, come se avessero più punti di archiviazione a distanze diverse:

  • Registri (integrati direttamente nelle unità di calcolo): la scrivania del matematico. Accesso istantaneo! Ma sono minuscoli: qui puoi conservare solo circa 32 numeri. È come avere dei post-it proprio davanti a te.
  • Cache L1 (a pochi micrometri di distanza): lo scaffale nell'ufficio. Servono 3-4 cicli per recuperare qualcosa. Qui puoi contenere qualche migliaio di numeri.
  • Cache L2 (a pochi millimetri di distanza): l'archivio in fondo al corridoio. Richiede 10-15 cicli e può contenere qualche milione di numeri.
  • Cache L3 (dall'altra parte del chip): il magazzino al piano di sotto. Richiede 30-50 cicli e contiene decine di milioni di numeri.
  • RAM (su un chip completamente diverso): il magazzino dall'altra parte della città. Richiede 100-300 cicli. È qui che vivono i tuoi miliardi di numeri.
  • SSD/Disco rigido (collegato tramite cavi): un'altra città completamente diversa. Richiede milioni di cicli. Spazio di archiviazione enorme, velocità glaciale.

Le strutture esatte variano: il chip del tuo telefono potrebbe saltare la cache L3, mentre una CPU server potrebbe averne enormi quantità. Il principio, tuttavia, rimane lo stesso: la memoria più vicina è più veloce, ma più piccola.

Ora arriva la parte dolorosa per le reti neurali. Immagina che il tuo modello Ultralytics YOLO abbia 50 milioni di parametri (ChatGPT ne ha miliardi, tra l'altro). Sono 50 milioni di numeri che devono viaggiare dalla memoria alle unità di calcolo e tornare indietro. Anche se ogni numero occupa solo 4 byte, sono 200 megabyte di dati che devono spostarsi attraverso il sistema.

Il chip potrebbe elaborare ogni numero in un singolo ciclo, ma se recuperare quel numero dalla RAM richiede 100 cicli, trascorri il 99% del tempo aspettando la consegna. È come avere un'auto da corsa di Formula 1 bloccata nel traffico. Tutta quella potenza di calcolo è lì, ferma, in attesa che arrivino i dati.

Ecco l'idea fondamentale: questo è IL collo di bottiglia dell'elaborazione moderna. Si chiama collo di bottiglia di von Neumann. Rendere i chip più veloci nei calcoli è relativamente facile. Rendere più veloce la memoria significa scontrarsi con limiti fisici. Ecco perché quasi TUTTA l'ottimizzazione delle prestazioni nell'AI avviene a livello di memoria. Quando gli ingegneri velocizzano le reti neurali, raramente rendono più rapida la matematica; trovano invece modi ingegnosi per spostare meno dati, memorizzarli meglio nella cache o accedervi in modo più intelligente.

I chip AI moderni non si concentrano solo sulla velocità di calcolo; sono ossessionati dalla larghezza di banda della memoria e dalle strategie di trasferimento dei dati. Precaricano i dati, riutilizzano i valori già presenti nella cache e organizzano i calcoli per ridurre al minimo gli accessi alla memoria. I vincitori della corsa all'hardware AI non sono quelli con i calcolatori più veloci, ma quelli che hanno capito come mantenerli alimentati con i dati. L'intero gioco consiste nell'ottimizzare i pattern di accesso alla memoria.

Ogni volta che sposti un bit di dati, consumi energia. Non molta, parliamo di picojoule, ma quando sposti terabyte al secondo, la quantità aumenta RAPIDAMENTE. In effetti, spostare i dati di 1 mm attraverso un chip utilizza più energia dell'esecuzione del calcolo vero e proprio!

Ecco perché il tuo laptop sembra un motore a reazione quando addestra reti neurali. Non è la matematica a generare calore, ma lo spostamento dei dati. Ogni aggiornamento dei parametri, ogni calcolo dei gradienti, ogni forward pass sta letteralmente riscaldando la stanza.

I moderni acceleratori AI sono essenzialmente esercizi di termodinamica. Quanto calcolo possiamo concentrare prima che il chip si sciolga? Quanto velocemente possiamo allontanare il calore? È come fare overclock, ma il clock è sempre al massimo e noi cerchiamo soltanto di non appiccare un incendio.

La soluzione? Progettazione consapevole dell'architettura#

Le reti neurali più veloci non sono necessariamente le più intelligenti: sono quelle progettate tenendo conto dei chip. Queste reti:

  • Mantengono i dati il più possibile vicino alle unità di calcolo
  • Riutilizzano i calcoli in modo ossessivo
  • Si allineano perfettamente alle capacità dell'hardware
  • Riducono al minimo lo spostamento della memoria a ogni costo

È come la differenza tra una ricetta che dice "usa ingredienti del tuo supermercato locale" e una che richiede di importare spezie dal Tibet, formaggio dalla Francia e acqua dall'Antartide. Entrambe potrebbero essere gustose, ma una è decisamente più pratica.

Ed è per questo che rendere veloci le reti neurali è una forma d'arte. Non basta avere una buona matematica; devi comprendere l'hardware, rispettare la gerarchia della memoria e danzare perfettamente con l'architettura.

Benvenuto nel mondo in cui l'informatica incontra la fisica, la fisica incontra l'ingegneria e l'ingegneria incontra la pura stregoneria. Dove spostare un numero costa più che calcolarlo. Dove il parallelismo è veloce, ma la sincronizzazione è letale. Dove il tuo più grande nemico non è la complessità, ma la distanza.

Come rendiamo YOLO più veloce#

Quando addestri un modello YOLO, ottieni una rete neurale che funziona magnificamente sul tuo ambiente di addestramento. Ma ecco il punto: la tua GPU da gaming, il tuo iPhone e quel piccolo chip in una telecamera di sicurezza parlano lingue completamente diverse. Hanno punti di forza diversi, debolezze diverse e idee molto diverse su come elaborare i dati.

Pensala così: una GPU ha migliaia di core che possono lavorare simultaneamente: è costruita per l'elaborazione parallela. Un chip mobile, invece, potrebbe avere circuiti speciali progettati specificamente per le operazioni AI, ma riuscire a gestire solo determinati tipi di calcoli. E quel dispositivo edge nella telecamera del tuo campanello? Sta cercando di eseguire l'AI con un budget energetico inferiore a quello di una lampadina LED.

In Ultralytics supportiamo oltre una dozzina di formati di esportazione diversi, perché ciascuno è ottimizzato per hardware differenti. Non si tratta di avere troppe opzioni. Si tratta di avere l'opzione giusta per le TUE esigenze specifiche.

Fusione delle operazioni: fare di più con meno#

Nel modello YOLO originale, molte operazioni avvengono in sequenza. Ad esempio, potremmo eseguire una convoluzione, quindi normalizzare i risultati e poi applicare una funzione di attivazione. Sono tre passaggi separati, ciascuno dei quali richiede le proprie letture e scritture in memoria.

Ma ecco l'aspetto ingegnoso: possiamo combinare queste operazioni in un unico passaggio. Quando esportiamo YOLO per la distribuzione, fondiamo insieme queste operazioni. Invece di:

  1. Calcolare la convoluzione → Salvare in memoria
  2. Caricare dalla memoria → Normalizzare → Salvare in memoria
  3. Caricare dalla memoria → Applicare l'attivazione → Salvare in memoria

Facciamo:

  1. Calcolare convoluzione + normalizzazione + attivazione → Salvare in memoria

Per un modello YOLO tipico che elabora un'immagine 640×640, questo semplice trucco elimina gigabyte di trasferimenti di memoria non necessari. Su un telefono cellulare, è la differenza tra un rilevamento fluido in tempo reale e un fastidioso ritardo.

Usare numeri più piccoli: la magia della quantizzazione#

YOLO non ha bisogno di numeri estremamente precisi per rilevare gli oggetti accuratamente. Durante l'addestramento, usiamo 32 bit per rappresentare ogni peso: è come usare una calcolatrice scientifica per misurare gli ingredienti di un panino. Per la distribuzione effettiva? 8 bit sono più che sufficienti.

Questa tecnica si chiama quantizzazione ed è una delle nostre tecniche di ottimizzazione più potenti. Usando numeri più piccoli:

  • Il modello si riduce del 75% (da 200 MB a 50 MB per Ultralytics YOLO11x)
  • Funziona da 2 a 4 volte più velocemente sulla maggior parte dei dispositivi
  • Consuma molta meno energia (la batteria del tuo telefono ti ringrazia)

Non tutti i layer di YOLO sono ugualmente sensibili a questa riduzione. I layer iniziali, che rilevano bordi e forme di base? Sono robusti: possiamo usare numeri a 8 bit senza problemi. I layer finali di rilevamento, che determinano "è un gatto o un cane?", hanno bisogno di un po' più di precisione. Perciò regoliamo la precisione layer per layer, usando solo il numero di bit sufficiente a mantenere l'accuratezza e massimizzare la velocità.

Abbiamo scoperto che, con una quantizzazione accurata, Ultralytics YOLO mantiene il 99,5% della sua accuratezza originale funzionando 3 volte più velocemente sui telefoni. Questa è la differenza tra un modello di ricerca e qualcosa che puoi davvero usare nel mondo reale.

Scegliere il miglior algoritmo#

Esistono decine di modi diversi per eseguire la stessa operazione matematica. Una convoluzione semplice (l'operazione fondamentale in YOLO) può essere calcolata usando algoritmi completamente diversi, e la scelta migliore dipende dal tuo hardware specifico e dalle dimensioni dell'input.

Quando esportiamo YOLO, il nostro framework di ottimizzazione testa effettivamente algoritmi diversi e sceglie quello più veloce per il tuo caso specifico. È come avere più percorsi per raggiungere la stessa destinazione e scegliere in base alle condizioni del traffico. Su una GPU, potremmo usare un algoritmo che elabora molti pixel simultaneamente. Su una CPU, potremmo usarne uno ottimizzato per l'elaborazione sequenziale. La matematica è la stessa, ma la strategia di esecuzione è completamente diversa.

Memoria: il collo di bottiglia nascosto#

Ricordi quando abbiamo detto che la memoria è il vero collo di bottiglia dell'informatica moderna? Questo è particolarmente vero per YOLO. Il modello potrebbe avere 50 milioni di parametri e, durante l'inferenza, creare gigabyte di risultati intermedi. Spostare tutti questi dati è spesso più lento del calcolo vero e proprio.

Usiamo diversi accorgimenti per ridurre al minimo lo spostamento dei dati in memoria:

Pianificazione intelligente: organizziamo le operazioni in modo che i dati vengano usati immediatamente, mentre sono ancora nella memoria cache veloce. Per la rete piramidale delle caratteristiche di YOLO, questo riduce il traffico di memoria del 40%.

Tiling: invece di elaborare un'immagine intera in una sola volta, la suddividiamo in tile più piccoli che entrano nella cache. In questo modo, il processore può lavorare con memoria locale veloce invece di recuperare continuamente dati dalla memoria principale lenta.

Riutilizzo dei buffer: invece di creare continuamente nuova memoria per i risultati intermedi, riutilizziamo gli stessi buffer di memoria. È incredibilmente efficiente: l'intero backbone di YOLO può funzionare usando solo alcuni buffer riutilizzabili.

Pruning: meno è meglio#

Ecco un fatto sorprendente: i modelli YOLO sono spesso sovra-ingegnerizzati. Possiamo rimuovere il 30% dei canali in molti layer con un impatto praticamente nullo sull'accuratezza. Non si tratta solo di rendere il modello più piccolo: lo rendiamo più veloce, perché ci sono letteralmente meno calcoli da eseguire.

Il processo è elegante: analizziamo quali parti della rete contribuiscono meno ai risultati finali del rilevamento, le rimuoviamo e poi perfezioniamo il modello per compensare. Un modello YOLO11m sottoposto a pruning può essere più veloce del 30% mantenendo il 99% della sua accuratezza originale. Sui dispositivi alimentati a batteria, questo guadagno di efficienza può tradursi in ore aggiuntive di funzionamento.

Accelerazione hardware: sfruttare i punti di forza di ogni chip#

Processori diversi eccellono in attività diverse e le differenze di prestazioni sono enormi. Lo stesso modello YOLO11n impiega:

  • 45 millisecondi per frame su una moderna CPU Intel
  • 4 millisecondi su una GPU NVIDIA RTX
  • 22 millisecondi su un processore di fascia alta per telefoni
  • 15 millisecondi su un edge TPU Google Coral

Queste non sono semplici differenze di velocità dovute alle frequenze di clock: riflettono differenze architetturali fondamentali. Le GPU hanno migliaia di core che lavorano in parallelo, perfetti per le convoluzioni di YOLO. Le NPU mobili dispongono di circuiti specializzati progettati specificamente per le reti neurali. Le CPU sono tuttofare: flessibili, ma non specializzate.

La chiave dell'ottimizzazione consiste nell'adattare le operazioni di YOLO a ciò che ogni chip sa fare meglio. Una GPU ama eseguire la stessa operazione simultaneamente su grandi quantità di dati. Una NPU mobile potrebbe supportare solo determinate operazioni, ma eseguirle con un'efficienza incredibile. Un edge TPU funziona solo con interi a 8 bit, ma raggiunge una velocità notevole entro questo limite.

La magia della compilazione#

Quando esporti un modello YOLO, dietro le quinte accade qualcosa di straordinario. Non ci limitiamo a convertire il formato del file: compiliamo effettivamente il modello in modo specifico per il tuo hardware di destinazione. È come la differenza tra Google Traduttore e un madrelingua. Il processo di compilazione:

  1. Analizza il tuo modello per comprenderne la struttura e i requisiti
  2. Considera le capacità del tuo hardware: ciò in cui eccelle e ciò che gli risulta difficile
  3. Genera codice ottimizzato che parla la lingua nativa del tuo hardware

Il compilatore potrebbe riorganizzare le operazioni per utilizzare meglio la cache del processore, selezionare istruzioni specializzate supportate dal tuo chip o persino usare il machine learning per trovare la migliore strategia di ottimizzazione. Sì, stiamo usando l'AI per ottimizzare l'AI: il futuro è qui!

Questo passaggio di compilazione può fare una differenza di 10 volte nelle prestazioni. Lo stesso modello YOLO potrebbe procedere a fatica con codice generico, ma volare con istruzioni correttamente ottimizzate.

Distribuzione edge nel mondo reale#

Parliamo di cosa succede quando YOLO incontra il mondo reale, nello specifico il difficile mondo dei dispositivi edge. Immagina una telecamera di sicurezza che deve eseguire YOLO 24 ore su 24, 7 giorni su 7 per il rilevamento degli oggetti. Deve affrontare vincoli severi:

  • Memoria: forse solo da 512 MB a 2 GB di RAM in totale
  • Alimentazione: spesso solo da 2 a 5 watt (meno di un caricabatterie per telefono)
  • Raffreddamento: nessuna ventola, solo dissipazione passiva del calore
  • Affidabilità: deve funzionare continuamente senza arrestarsi

Ecco cosa permette di ottenere l'ottimizzazione nella pratica. Una telecamera di sicurezza che esegue YOLO11s:

  • Modello originale: 15 watt, funziona a 85 °C, raggiunge 20 FPS
  • Ottimizzato con quantizzazione e pruning: 3 watt, una confortevole temperatura di 45 °C, raggiunge 25 FPS

Abbiamo ridotto il consumo energetico dell'80% migliorando al contempo le prestazioni! Questa è la differenza tra un dispositivo che si surriscalda e scarica le batterie e uno che funziona in modo affidabile per anni.

La chiave è scegliere i compromessi giusti. Sui dispositivi edge, spesso:

  • Usiamo la quantizzazione INT8 (meno precisione, molta meno energia)
  • Elaboriamo meno frame quando l'attività è ridotta
  • Distribuiamo il lavoro tra processori diversi per gestire il calore
  • Manteniamo i modelli abbastanza piccoli da entrare interamente nella memoria veloce

Il processo di ottimizzazione#

In Ultralytics seguiamo un approccio sistematico all'ottimizzazione. Innanzitutto, analizziamo le prestazioni del modello per capire dove viene effettivamente impiegato il tempo. Spesso i colli di bottiglia non si trovano dove ti aspetteresti. Potrebbe darsi che l'80% del tempo venga impiegato in pochi layer oppure che i trasferimenti di memoria dominino il tempo di calcolo.

Successivamente, applichiamo le ottimizzazioni iterativamente:

  1. Iniziamo dai colli di bottiglia più importanti
  2. Applichiamo una sola ottimizzazione alla volta
  3. Misuriamo sia il miglioramento della velocità sia l'impatto sull'accuratezza
  4. Manteniamo le ottimizzazioni che offrono buoni compromessi
  5. Ripetiamo il processo finché non raggiungiamo i nostri obiettivi

Ad esempio, con la distribuzione di YOLO11m su un telefono:

  • Baseline: 200 ms per frame, modello da 200 MB
  • Dopo la quantizzazione: 80 ms per frame, modello da 50 MB
  • Dopo il pruning: 60 ms per frame, modello da 35 MB
  • Dopo la fusione delle operazioni: 45 ms per frame, modello da 35 MB

Ogni passaggio migliora le prestazioni mantenendo oltre il 99% dell'accuratezza originale. Il risultato? Rilevamento degli oggetti in tempo reale su un dispositivo che sta nel palmo della tua mano.

Il futuro: il calcolo eterogeneo#

I dispositivi moderni stanno diventando più intelligenti nell'utilizzo combinato di più processori. Il tuo telefono non ha un solo processore: ne ha diversi, ciascuno specializzato in attività diverse:

  • Il sensore della fotocamera ha un ISP (processore del segnale d'immagine) per il pre-processing
  • La NPU (unità di elaborazione neurale) esegue l'inferenza di YOLO
  • La CPU gestisce la logica complessa e il coordinamento
  • La GPU visualizza i risultati sullo schermo

Il futuro dell'ottimizzazione di YOLO consiste nel suddividere intelligentemente il modello tra questi processori. Potrebbe darsi che la NPU gestisca le convoluzioni principali, la CPU si occupi della logica finale di rilevamento e la GPU visualizzi i risultati. Ogni processore fa ciò che sa fare meglio, creando una pipeline più efficiente di quanto potrebbe ottenere qualsiasi singolo processore.

Stiamo sviluppando algoritmi intelligenti di partizionamento che determinano automaticamente il modo migliore per suddividere YOLO tra i processori disponibili, considerando non solo le loro capacità, ma anche il costo dello spostamento dei dati tra di essi.

In sintesi#

Ottimizzare i modelli YOLO non significa solo convertire i formati dei file; significa trasformare l'AI all'avanguardia in qualcosa che funziona davvero nel mondo reale. Attraverso tecniche come la quantizzazione (uso di numeri più piccoli), il pruning (rimozione delle parti non necessarie), la fusione delle operazioni (combinazione dei passaggi) e una gestione intelligente della memoria, otteniamo miglioramenti delle prestazioni da 10 a 100 volte mantenendo l'accuratezza.

La cosa straordinaria? Non esiste un'ottimizzazione "migliore" universale. Un server cloud con alimentazione illimitata ha bisogno di ottimizzazioni diverse rispetto a un drone alimentato a batteria. Un telefono con un chip AI dedicato richiede un trattamento diverso da un Raspberry Pi. Ecco perché Ultralytics offre così tante opzioni di esportazione: ognuna è ottimizzata per scenari diversi.

Ogni ottimizzazione di cui abbiamo parlato ha un unico obiettivo: rendere la visione artificiale accessibile ovunque. Che tu stia costruendo un videocitofono intelligente, un'applicazione per droni o un enorme servizio cloud, ti forniamo gli strumenti per far funzionare YOLO entro i tuoi vincoli.

Quando esporti un modello YOLO con Ultralytics, non stai semplicemente salvando un file. Stai sfruttando anni di ricerca per rendere pratiche le reti neurali. Stai trasformando un modello di AI all'avanguardia in qualcosa che può funzionare su hardware reale, con vincoli reali, per risolvere problemi reali.

Questo è ciò che facciamo in Ultralytics. Colmiamo il divario tra la ricerca sull'AI e la distribuzione pratica. Facciamo funzionare la visione artificiale ovunque, perché il futuro dell'AI non consiste solo nell'avere i modelli migliori, ma nel renderli utili nel mondo reale.

Explore solutions

Visione artificiale per immagini aeree

Visione artificiale per immagini aeree

Traduci immagini di droni e aeree in informazioni in tempo reale per agricoltura, acquacoltura, monitoraggio ambientale, conservazione e analisi geospaziale con Ultralytics YOLO.
Scopri di più
Computer vision nel settore aerospaziale

Computer vision nel settore aerospaziale

Porta la visione artificiale al monitoraggio aereo con i modelli Ultralytics YOLO. Potenzia droni, flussi di lavoro aerospaziali, conservazione ambientale e industrie geospaziali con soluzioni di computer vision.
Scopri di più

Proteggi ogni sito con i modelli Ultralytics YOLO. La visione artificiale alimenta il monitoraggio del perimetro, il rilevamento delle minacce, il riconoscimento delle targhe e la sicurezza sul lavoro.
Scopri di più
Computer vision nella robotica

Computer vision nella robotica

Potenzia macchine più intelligenti con i modelli Ultralytics YOLO. La Vision AI nella robotica abilita la navigazione autonoma, la percezione, il tracciamento degli oggetti e il controllo in tempo reale.
Scopri di più
Computer vision nella logistica

Computer vision nella logistica

Semplifica la logistica con i modelli Ultralytics YOLO. La Vision AI abilita l'ispezione dei pacchi, lo smistamento, il tracciamento dei veicoli e il monitoraggio della sicurezza nei magazzini in tempo reale.
Scopri di più
Computer vision nel commercio al dettaglio

Computer vision nel commercio al dettaglio

Reinventa il commercio al dettaglio con i modelli Ultralytics YOLO. La Vision AI potenzia il tracciamento dell'inventario, il monitoraggio degli scaffali, la gestione delle code e analisi più intelligenti dei clienti.
Scopri di più
Computer vision nel settore sanitario

Computer vision nel settore sanitario

Crea soluzioni sanitarie con i modelli Ultralytics YOLO. La Vision AI nel settore sanitario abilita imaging medico più rapido, diagnosi più intelligenti e monitoraggio dei pazienti.
Scopri di più
Computer vision nella produzione

Computer vision nella produzione

Ottimizza la produzione con i modelli Ultralytics YOLO. La Vision AI supporta il controllo qualità, il rilevamento dei difetti, la conformità ai DPI e l'automazione delle linee di assemblaggio.
Scopri di più
Computer vision nel settore automobilistico

Computer vision nel settore automobilistico

Applica la computer vision al settore automobilistico con i modelli Ultralytics YOLO. La vision AI migliora la sicurezza stradale, i sistemi di assistenza alla guida e l'automazione dei veicoli per strade più intelligenti.
Scopri di più
Computer vision in agricoltura

Computer vision in agricoltura

Porta la vision AI nell'agricoltura intelligente con i modelli Ultralytics YOLO. Abilita il monitoraggio delle colture, il tracciamento del bestiame e l'agricoltura di precisione per raccolti più abbondanti e intelligenti.
Scopri di più
Visione artificiale per immagini aeree

Visione artificiale per immagini aeree

Traduci immagini di droni e aeree in informazioni in tempo reale per agricoltura, acquacoltura, monitoraggio ambientale, conservazione e analisi geospaziale con Ultralytics YOLO.
Scopri di più
Computer vision nel settore aerospaziale

Computer vision nel settore aerospaziale

Porta la visione artificiale al monitoraggio aereo con i modelli Ultralytics YOLO. Potenzia droni, flussi di lavoro aerospaziali, conservazione ambientale e industrie geospaziali con soluzioni di computer vision.
Scopri di più

Proteggi ogni sito con i modelli Ultralytics YOLO. La visione artificiale alimenta il monitoraggio del perimetro, il rilevamento delle minacce, il riconoscimento delle targhe e la sicurezza sul lavoro.
Scopri di più
Computer vision nella robotica

Computer vision nella robotica

Potenzia macchine più intelligenti con i modelli Ultralytics YOLO. La Vision AI nella robotica abilita la navigazione autonoma, la percezione, il tracciamento degli oggetti e il controllo in tempo reale.
Scopri di più
Computer vision nella logistica

Computer vision nella logistica

Semplifica la logistica con i modelli Ultralytics YOLO. La Vision AI abilita l'ispezione dei pacchi, lo smistamento, il tracciamento dei veicoli e il monitoraggio della sicurezza nei magazzini in tempo reale.
Scopri di più
Computer vision nel commercio al dettaglio

Computer vision nel commercio al dettaglio

Reinventa il commercio al dettaglio con i modelli Ultralytics YOLO. La Vision AI potenzia il tracciamento dell'inventario, il monitoraggio degli scaffali, la gestione delle code e analisi più intelligenti dei clienti.
Scopri di più
Computer vision nel settore sanitario

Computer vision nel settore sanitario

Crea soluzioni sanitarie con i modelli Ultralytics YOLO. La Vision AI nel settore sanitario abilita imaging medico più rapido, diagnosi più intelligenti e monitoraggio dei pazienti.
Scopri di più
Computer vision nella produzione

Computer vision nella produzione

Ottimizza la produzione con i modelli Ultralytics YOLO. La Vision AI supporta il controllo qualità, il rilevamento dei difetti, la conformità ai DPI e l'automazione delle linee di assemblaggio.
Scopri di più
Computer vision nel settore automobilistico

Computer vision nel settore automobilistico

Applica la computer vision al settore automobilistico con i modelli Ultralytics YOLO. La vision AI migliora la sicurezza stradale, i sistemi di assistenza alla guida e l'automazione dei veicoli per strade più intelligenti.
Scopri di più
Computer vision in agricoltura

Computer vision in agricoltura

Porta la vision AI nell'agricoltura intelligente con i modelli Ultralytics YOLO. Abilita il monitoraggio delle colture, il tracciamento del bestiame e l'agricoltura di precisione per raccolti più abbondanti e intelligenti.
Scopri di più
Visione artificiale per immagini aeree

Visione artificiale per immagini aeree

Traduci immagini di droni e aeree in informazioni in tempo reale per agricoltura, acquacoltura, monitoraggio ambientale, conservazione e analisi geospaziale con Ultralytics YOLO.
Scopri di più
Computer vision nel settore aerospaziale

Computer vision nel settore aerospaziale

Porta la visione artificiale al monitoraggio aereo con i modelli Ultralytics YOLO. Potenzia droni, flussi di lavoro aerospaziali, conservazione ambientale e industrie geospaziali con soluzioni di computer vision.
Scopri di più

Proteggi ogni sito con i modelli Ultralytics YOLO. La visione artificiale alimenta il monitoraggio del perimetro, il rilevamento delle minacce, il riconoscimento delle targhe e la sicurezza sul lavoro.
Scopri di più
Computer vision nella robotica

Computer vision nella robotica

Potenzia macchine più intelligenti con i modelli Ultralytics YOLO. La Vision AI nella robotica abilita la navigazione autonoma, la percezione, il tracciamento degli oggetti e il controllo in tempo reale.
Scopri di più
Computer vision nella logistica

Computer vision nella logistica

Semplifica la logistica con i modelli Ultralytics YOLO. La Vision AI abilita l'ispezione dei pacchi, lo smistamento, il tracciamento dei veicoli e il monitoraggio della sicurezza nei magazzini in tempo reale.
Scopri di più
Computer vision nel commercio al dettaglio

Computer vision nel commercio al dettaglio

Reinventa il commercio al dettaglio con i modelli Ultralytics YOLO. La Vision AI potenzia il tracciamento dell'inventario, il monitoraggio degli scaffali, la gestione delle code e analisi più intelligenti dei clienti.
Scopri di più
Computer vision nel settore sanitario

Computer vision nel settore sanitario

Crea soluzioni sanitarie con i modelli Ultralytics YOLO. La Vision AI nel settore sanitario abilita imaging medico più rapido, diagnosi più intelligenti e monitoraggio dei pazienti.
Scopri di più
Computer vision nella produzione

Computer vision nella produzione

Ottimizza la produzione con i modelli Ultralytics YOLO. La Vision AI supporta il controllo qualità, il rilevamento dei difetti, la conformità ai DPI e l'automazione delle linee di assemblaggio.
Scopri di più
Computer vision nel settore automobilistico

Computer vision nel settore automobilistico

Applica la computer vision al settore automobilistico con i modelli Ultralytics YOLO. La vision AI migliora la sicurezza stradale, i sistemi di assistenza alla guida e l'automazione dei veicoli per strade più intelligenti.
Scopri di più
Computer vision in agricoltura

Computer vision in agricoltura

Porta la vision AI nell'agricoltura intelligente con i modelli Ultralytics YOLO. Abilita il monitoraggio delle colture, il tracciamento del bestiame e l'agricoltura di precisione per raccolti più abbondanti e intelligenti.
Scopri di più

Costruiamo insieme il futuro dell'AI!

Inizia il tuo percorso verso il futuro del machine learning