Come Ultralytics di Ultralytics rendiamo YOLO più veloci sul tuo chip preferito
Come Ultralytics YOLO per garantire velocità su CPU, GPU e dispositivi edge. Spiegheremo chip, memoria e tecniche intelligenti come quantizzazione, fusione e potatura.
Come Ultralytics YOLO per garantire velocità su CPU, GPU e dispositivi edge. Spiegheremo chip, memoria e tecniche intelligenti come quantizzazione, fusione e potatura.
Noi di Ultralytics realizziamo modelli di visione artificiale: in sostanza, insegniamo ai computer a vedere! Questi modelli possono essere considerati come gigantesche ricette matematiche. Sono costituiti da operazioni (che chiamiamo livelli) e da un'enorme quantità di numeri che chiamiamo pesi.
YOLO nostriYOLO Ultralytics YOLO elaborano le immagini per quello che sono realmente: array di numeri! Ogni pixel è in realtà solo un valore cromatico, ovvero la quantità di rosso, verde e blu (da cui RGB) per ogni singolo punto che compone l'immagine. Chiamiamo questi array di numeri "tensori" perché suona molto meglio di "matrici multidimensionali", che a sua volta suona molto meglio di "numeri impilati su numeri impilati su numeri".
Quando inserisci un'immagine nel nostro modello, questa intraprende un viaggio epico attraverso la rete. Immagina tensor tuo tensor attraverso uno strato dopo l'altro, trasformandosi, contorcendosi e mutando matematicamente nel modo più bello possibile. Pensalo come una festa danzante in cui i numeri si mescolano e si fondono, estraendo l'essenza di ciò che rende un gatto un gatto o un'auto un'auto. Chiamiamo questo processo "estrazione delle caratteristiche".
Cosa ne risulta? Altri numeri! Numeri significativi. Nelle attività di rilevamento, ti dicono esattamente dove si trovano gli oggetti nell'immagine e di cosa si tratta probabilmente. "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 parte dell'addestramento è quella in cui le cose si fanno intense.
Durante l'addestramento, ogni volta che presentiamo un'immagine alla rete, non otteniamo solo una risposta. Facciamo due cose molto complesse. Innanzitutto, calcoliamo quanto la rete abbia sbagliato (lo chiamiamo perdita, fondamentalmente la distanza dal centro del bersaglio). In secondo luogo, e questa è la parte importante, aggiorniamo ogni singolo numero (o peso) nella rete in base a quella perdita. Immaginate di regolare migliaia di piccole manopole contemporaneamente, dove ogni regolazione viene calcolata per rendere la rete più accurata ogni volta. In sostanza, stiamo addestrando la rete attraverso la correzione: ogni errore le insegna cosa NON fare, e noi modifichiamo tutti quei pesi in modo che quando vedrà di nuovo un'immagine simile, si avvicinerà alla risposta giusta. In sostanza, la rete impara ricevendo una spinta nella giusta direzione, errore dopo errore, fino a quando non inizia a azzeccare le previsioni.
Di quanti numeri stiamo parlando? Beh, il nostro piccolo YOLO11n ha alcuni milioni di parametri. Ma YOLO11x? Quel ragazzaccio ha oltre 50 milioni di parametri! Più parametri significano più dettagli che è possibile codificare, come la differenza tra disegnare con i pastelli e avere una tavolozza completa da artista.
Durante l'inferenza, il numero di parametri diventa fondamentale. Eseguire una rete con 3 milioni di parametri è come fare jogging intorno all'isolato. Eseguire una rete con 50 milioni di parametri? È più come correre una maratona mentre si fa giochi di destrezza con delle torce infuocate.
Ma cos'è esattamente il calcolo? Come avviene effettivamente tutta questa elaborazione di numeri? Come possiamo renderla più veloce? E cosa significa "ottimizzare il calcolo"?
Il calcolo avviene tramite chip. Questi piccoli quadrati di silicio sono fondamentalmente i castelli di sabbia più organizzati dell'universo. Ogni singola operazione eseguita dal computer, ogni addizione, ogni confronto, ogni "se questo allora quello", è fisicamente scolpita nel silicio. Ci sono circuiti fisici reali in aree specifiche del chip dedicati all'addizione di numeri e altri alle operazioni logiche. È come avere una piccola città in cui diversi quartieri sono specializzati in diversi tipi di matematica.
Probabilmente questo può sembrare bizzarro, anche se sei un informatico. Questo perché abbiamo trascorso gli ultimi 40 anni a costruire strati su strati di astrazione, come una lasagna tecnologica che è diventata così alta che non riusciamo nemmeno più a vedere il fondo. Abbiamo semplificato così tanto le cose che oggi la maggior parte dei programmatori non ha idea di come avvenga effettivamente il calcolo nel silicio. Non per colpa loro, ma per come è stato progettato!
Analizziamo questi livelli. Prendiamo questo Python semplicissimo:
x = 1
if x == 1:
y = x + 1Creiamo una variabile x, impostandola 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 la cosa si fa interessante. Tra quelle tre innocenti righe e gli elettroni che si muovono realmente attraverso il silicio, ci sono ALMENO quattro enormi livelli di traduzione (in realtà ce ne sono di più, ma la nostra responsabile dei contenuti digitali dice che il mio conteggio delle parole le sta già causando ansia). Lasciate che vi guidi in questo viaggio sconvolgente:
Livello 1: Python Bytecode Innanzitutto, Python il codice e lo compila in qualcosa chiamato bytecode, un linguaggio intermedio più facile da elaborare per i computer, ma che farebbe sanguinare gli occhi se si provasse a leggerlo.
Livello 2: Bytecode → Codice macchina Python (come CPython) prende quel bytecode e lo traduce in codice macchina, ovvero le istruzioni effettive che il processore è in grado di comprendere. È qui che l'elegante "if x == 1" diventa qualcosa del tipo "CARICA registro, CONFRONTA registro, SALTA se 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 sono in grado di gestire. La tua singola istruzione "ADD" potrebbe diventare più micro-operazioni.
Livello 4: Microcodice → Elettronica fisica Infine, arriviamo al silicio. Queste microoperazioni attivano segnali elettrici reali che fluiscono attraverso i transistor. Miliardi di minuscoli interruttori si accendono e si spengono, gli elettroni danzano attraverso percorsi accuratamente progettati e, in qualche modo, magicamente, 1 + 1 diventa 2.
Ogni strato esiste per nascondere la folle complessità dello strato sottostante. È come quelle bambole russe che si incastrano l'una nell'altra, solo che ogni bambola parla una lingua completamente diversa e la più piccola è letteralmente fatta di fulmini intrappolati nella sabbia.
L'ironia? Quelle tre righe di Python attivano MILIONI di interruttori a transistor. Ma grazie a queste astrazioni, non è necessario pensare a nulla di tutto ciò. Basta scrivere "y = x + 1" e fidarsi che da qualche parte, nel profondo del silicio, avvenga la magia.
Ogni singola operazione è implementata fisicamente nel silicio e il LUOGO in cui avviene sul chip dipende interamente dalla topologia del chip. È come la pianificazione urbana, ma per gli elettroni. L'addizionatore si trova qui, il moltiplicatore si trova là, e tutti devono comunicare tra loro in modo efficiente.
Sul mercato sono disponibili centinaia di chip diversi, ciascuno progettato per scopi diversi. Cosa li differenzia? La topologia, ovvero il modo in cui le operazioni sono posizionate e implementate nel dominio fisico. Questo è ciò che chiamiamo architettura, e ne abbiamo davvero tante:
Ogni architettura non solo dispone i transistor in modo diverso, ma parla anche un linguaggio diverso. Le astrazioni che utilizziamo per inviare istruzioni a queste macchine sono completamente diverse. È come dover scrivere le indicazioni stradali per qualcuno, ma a seconda della sua auto, potrebbe essere necessario scrivere in francese, mandarino o danza interpretativa.
Il carburante dei nostri chip sono gli elettroni, l'elettricità che fluisce nel chip, fornendo l'energia necessaria per l'elaborazione. Ma l'energia da sola non basta. Affinché un chip funzioni realmente, per trasferire i dati attraverso la sua intricata topologia, tutto dipende da un componente fondamentale: il clock. È questo che fa fluire gli elettroni attraverso percorsi specifici in momenti specifici. Senza di esso, avresti solo del silicio alimentato che non fa nulla.
Immaginate di dover coordinare una performance imponente in cui miliardi di componenti devono muoversi in perfetta sincronia. Senza un ritmo, sarebbe il caos. Questo è esattamente ciò che fa l'orologio per il vostro processore. Si tratta di un cristallo che vibra a una frequenza incredibilmente costante, inviando impulsi elettrici miliardi di volte al secondo.
Quando si sente parlare di "processore da 3,5 GHz", quel GHz (gigahertz) indica la velocità di clock, ovvero 3,5 miliardi di impulsi al secondo. Ogni impulso è chiamato ciclo di clock ed è l'unità di tempo fondamentale nell'informatica.
Nulla accade tra un ciclo di clock e l'altro. L'intero computer si blocca, in attesa del ciclo successivo. È come il gioco del semaforo rosso e verde più estremo dell'universo. Ad ogni "semaforo verde" (impulso di clock):
Alcune operazioni richiedono un solo 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 loro operazioni specifiche, tutte sincronizzate a questo ritmo incessante.
È possibile overcloccare il processore aumentando la frequenza di vibrazione del cristallo; tutto avviene più rapidamente, ma si genera anche più calore, rendendo il sistema meno stabile. Se si esagera, il computer va in crash perché gli elettroni non riescono letteralmente a stare al passo con il ritmo.
In passato, queste operazioni venivano eseguite con macchine grandi quanto stanze. Ma i componenti che eseguono tutti questi calcoli sono incredibilmente semplici: sono solo interruttori. Interruttori on-off.
Collegando un numero sufficiente di questi interruttori secondo lo schema corretto, si ottiene un sistema di calcolo. L'intera rivoluzione digitale si riduce a una sofisticata disposizione di interruttori.
Questa semplicità significa che se si dispone di interruttori, qualsiasi tipo di interruttore, è possibile costruire un computer. Sono stati realizzati computer funzionanti utilizzando tubi e valvole dell'acqua, domino, mattoncini LEGO, biglie e persino redstone in Minecraft.
I principi non sono cambiati dagli anni '40. Abbiamo solo imparato a realizzare interruttori incredibilmente piccoli. Il tuo telefono ha una potenza di calcolo superiore a quella di tutti i computer che hanno mandato l'uomo sulla luna, e sta in una tasca perché abbiamo capito come realizzare interruttori su scala atomica.
Quando utilizziamo reti neurali con milioni di parametri, attiviamo questi minuscoli interruttori miliardi di volte al secondo, tutti perfettamente sincronizzati con quel battito cristallino. Ogni aggiornamento dei pesi, ogni moltiplicazione matriciale, ogni funzione di attivazione, tutto marcia al ritmo dell'orologio.
Non c'è da stupirsi che i modelli di addestramento facciano sembrare che il tuo computer stia cercando di decollare!
Bene, quindi abbiamo questi chip con miliardi di interruttori che danzano al ritmo di un cristallo e vogliamo eseguire reti neurali con milioni di parametri su di essi. Dovrebbe essere facile, giusto? Basta inserire i numeri nel chip e lasciarlo lavorare!
Eseguire rapidamente le reti neurali è come cercare di cucinare un pasto di cinque portate in una cucina dove il frigorifero è a tre isolati di distanza, si ha a disposizione solo una padella e ogni ingrediente pesa 500 libbre. La matematica in sé non è il problema più grande, ma tutto il resto.
La maggior parte dei chip è stata progettata per eseguire Microsoft , non reti neurali. CPU tua CPU costruita pensando che avrebbe trascorso la sua vita eseguendo istruzioni if, loop e, occasionalmente, calcolando le tue tasse (l'unico calcolo che anche i supercomputer trovano emotivamente estenuante). È 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, si aggiornano milioni di pesi in base a quanto erano errate le previsioni. Durante l'inferenza (cioè l'utilizzo effettivo del modello addestrato), si elaborano i dati attraverso milioni di calcoli simultanei. Immaginate di dover moltiplicare un milione di numeri per un altro milione di numeri. CPU vostra CPU, benedetta lei, vuole farlo uno alla volta, come un contabile molto veloce ma molto metodico.
Ecco perché le GPU sono diventate la spina dorsale dell'elaborazione AI. Le GPU sono state progettate per i videogiochi, dove è necessario calcolare contemporaneamente il colore di milioni di pixel. A quanto pare, il calcolo dei colori dei pixel e l'elaborazione matematica delle reti neurali sono sorprendentemente simili: entrambi comportano l'esecuzione della stessa operazione su enormi quantità di dati in parallelo.
Ma nemmeno le GPU sono perfette per le reti neurali. Ecco perché le aziende stanno ora realizzando chip AI specializzati (TPU, NPU e ogni altro acronimo che termina con PU). Questi chip sono progettati da zero con un unico obiettivo: velocizzare le reti neurali. È come assumere uno chef che sa cucinare solo un piatto, ma lo prepara a una velocità sovrumana. Mentre la CPU eseguire operazioni matriciali in sequenza e la GPU le GPU abbastanza bene in parallelo, questi chip specializzati mangiano matrici a colazione, pranzo e cena.
Nel calcolo moderno delle reti neurali, dedichiamo più tempo ed energie allo SPOSTAMENTO dei dati che al loro effettivo CALCOLO.
Immagina il chip del tuo computer come un brillante matematico che lavora alla velocità della luce, ma tutti i suoi libri di riferimento sono conservati in diversi edifici sparsi per la città. È in grado di risolvere qualsiasi equazione all'istante, ma prima deve recuperare i numeri, e questo viaggio richiede un'eternità.
Il tuo chip può moltiplicare due numeri in un ciclo di clock (ricorda, si tratta di uno di quei miliardi di battiti al secondo). Velocissimo! Ma trasferire quei numeri dalla memoria al chip? Potrebbero essere necessari CENTINAIA di cicli. È come se il tuo matematico potesse risolvere un problema in un secondo, ma avesse bisogno di cinque minuti per andare e tornare dalla biblioteca.
Il motivo è la distanza (e lo spazio). L'elettricità si muove velocemente, ma non all'infinito. Più lontano devono viaggiare i dati sul chip, più tempo ci vuole. I progettisti di computer hanno risolto questo problema creando una gerarchia di memoria, come avere più posizioni di archiviazione a distanze diverse:
Le strutture esatte variano: il chip del tuo telefono potrebbe saltare la cache L3, mentre CPU di un server CPU averne una quantità enorme. Il principio, tuttavia, rimane lo stesso: una memoria più vicina è più veloce ma più piccola.
Ed è qui che le reti neurali iniziano a soffrire. Immaginate cheYOLO vostroYOLO Ultralytics YOLO abbia 50 milioni di parametri (ChatGPT miliardi, tra l'altro). Si tratta di 50 milioni di numeri che devono viaggiare dalla memoria alle unità di calcolo e viceversa. Anche se ogni numero è di soli 4 byte, sono comunque 200 megabyte di dati che devono muoversi attraverso il vostro sistema.
Il chip potrebbe elaborare ogni numero in un unico ciclo, ma se occorrono 100 cicli per recuperare quel numero dalla RAM, si trascorre il 99% del tempo in attesa della consegna. È come avere un'auto da corsa di Formula 1 in un ingorgo stradale. Tutta quella potenza di calcolo, lì ferma, in attesa che arrivino i dati.
Ecco l'intuizione fondamentale: questo è IL collo di bottiglia dell'informatica moderna. Si chiama collo di bottiglia di von Neumann. Rendere i chip più veloci nei calcoli matematici è relativamente facile. Rendere la memoria più veloce sta raggiungendo i limiti fisici. Questo è il motivo per cui quasi TUTTA l'ottimizzazione delle prestazioni nell'IA avviene a livello di memoria. Quando gli ingegneri accelerano le reti neurali, raramente rendono più veloci i calcoli matematici; trovano modi intelligenti per spostare meno dati, memorizzarli meglio nella cache o accedervi in modo più intelligente.
I moderni chip AI non si concentrano solo sulla velocità di calcolo, ma prestano particolare attenzione alla larghezza di banda della memoria e alle strategie di trasferimento dei dati. Prelevano i dati in anticipo, riutilizzano i valori già presenti nella cache e organizzano i calcoli in modo da ridurre al minimo i trasferimenti di memoria. I vincitori nella corsa all'hardware AI non sono quelli con i calcolatori più veloci, ma quelli che hanno capito come alimentare tali calcolatori con i dati. L'intero gioco consiste nell'ottimizzare i modelli di accesso alla memoria.
Ogni volta che si sposta una piccola quantità di dati, si consuma energia. Non molta, si tratta di picojoule, ma quando si spostano terabyte al secondo, il consumo aumenta RAPIDAMENTE. Infatti, spostare dati di 1 mm su un chip consuma più energia che eseguire il calcolo vero e proprio!
Ecco perché il tuo laptop sembra un motore a reazione quando alleni le reti neurali. Non è la matematica a generare calore, ma il movimento dei dati. Ogni aggiornamento dei parametri, ogni calcolo del gradiente, ogni passaggio in avanti sta letteralmente riscaldando la tua stanza.
I moderni acceleratori AI sono fondamentalmente esercizi di termodinamica. Quanta potenza di calcolo possiamo inserire prima che il chip si surriscaldi? Quanto velocemente possiamo dissipare il calore? È come l'overclocking, ma il clock è sempre a 11 e noi cerchiamo solo di evitare che scoppi un incendio.
Le reti neurali più veloci non sono necessariamente le più intelligenti, ma quelle progettate tenendo conto dei chip. Esse:
È come la differenza tra una ricetta che dice "usa gli ingredienti del tuo negozio di alimentari locale" e una che richiede di importare spezie dal Tibet, formaggio dalla Francia e acqua dall'Antartide. Entrambe potrebbero essere buone, ma una è sicuramente più pratica.
Ecco perché rendere veloci le reti neurali è una forma d'arte. Non basta avere buone conoscenze matematiche: occorre comprendere l'hardware, rispettare la gerarchia della memoria e interagire perfettamente con l'architettura.
Benvenuti nel mondo in cui l'informatica incontra la fisica, l'ingegneria e la pura magia. Dove spostare un numero costa più che elaborarlo. Dove il parallelo è veloce, ma la sincronizzazione è fatale. Dove il vostro nemico più grande non è la complessità, ma la distanza.
Quando si addestra un YOLO , si ottiene una rete neurale che funziona perfettamente sulla configurazione di addestramento. Ma il punto è questo: GPU della console, l'iPhone e quel minuscolo chip nella telecamera di sicurezza parlano tutti linguaggi completamente diversi. Hanno punti di forza diversi, punti deboli diversi e idee molto diverse su come elaborare i dati.
Pensateci in questo modo: una GPU migliaia di core che possono funzionare tutti contemporaneamente ed è progettata per l'elaborazione parallela. Nel frattempo, un chip mobile può avere circuiti speciali progettati specificamente per operazioni di IA, ma può gestire solo determinati tipi di calcoli matematici. E quel dispositivo edge nella videocamera del vostro campanello? Sta cercando di eseguire l'IA con un consumo energetico inferiore a quello di una lampadina a LED.
Noi di Ultralytics supportiamo oltre una dozzina di formati di esportazione diversi perché ciascuno di essi è ottimizzato per hardware diversi. Non si tratta di avere troppe opzioni, ma di avere l'opzione giusta per le VOSTRE esigenze specifiche.
Nel YOLO originale, molte operazioni avvengono in sequenza. Ad esempio, potremmo eseguire una convoluzione, quindi normalizzare i risultati e infine applicare una funzione di attivazione. Si tratta di tre passaggi distinti, ciascuno dei quali richiede letture e scritture di memoria separate.
Ma ecco la parte intelligente: possiamo combinare queste operazioni in un unico passaggio. Quando esportiamo YOLO l'implementazione, fondiamo insieme queste operazioni. Invece di:
Noi facciamo:
Per un tipico YOLO che elabora un'immagine 640×640, questo semplice trucco elimina gigabyte di trasferimenti di memoria non necessari. Su un telefono cellulare, questa è la differenza tra un rilevamento fluido in tempo reale e un fastidioso ritardo.
YOLO ha bisogno di numeri super precisi per detect in modo accurato. Durante l'addestramento, usiamo 32 bit per rappresentare ogni peso: è come usare una calcolatrice scientifica per misurare gli ingredienti di un panino. Per l'implementazione vera e propria? 8 bit funzionano benissimo.
Questo processo è chiamato quantizzazione ed è una delle nostre tecniche di ottimizzazione più potenti. Utilizzando numeri più piccoli:
Non tutti i livelli in YOLO ugualmente sensibili a questa riduzione. I primi livelli che detect i bordi e le forme detect ? Sono robusti: possiamo usare numeri a 8 bit senza alcun problema. Gli ultimi livelli di rilevamento che determinano "è un gatto o un cane?" richiedono un po' più di precisione. Quindi regoliamo la precisione livello per livello, utilizzando solo i bit necessari per mantenere l'accuratezza e massimizzare la velocità.
Abbiamo scoperto che, con un'attenta quantizzazione, Ultralytics YOLO il 99,5% della sua precisione originale, pur funzionando tre volte più velocemente sui telefoni. Questa è la differenza tra un modello di ricerca e qualcosa che si può effettivamente utilizzare nel mondo reale.
Esistono decine di modi diversi per eseguire la stessa operazione matematica. Una semplice convoluzione (l'operazione principale in YOLO) può essere calcolata utilizzando algoritmi completamente diversi e la scelta migliore dipende dall'hardware specifico e dalle dimensioni dell'input.
Quando esportiamo YOLO, il nostro framework di ottimizzazione testa diversi algoritmi e seleziona quello più veloce per il caso specifico. È come avere più percorsi per raggiungere la stessa destinazione e scegliere in base alle condizioni del traffico. Su una GPU potremmo utilizzare un algoritmo che elabora molti pixel contemporaneamente. Su una CPU potremmo utilizzarne uno ottimizzato per l'elaborazione sequenziale. La matematica è la stessa, ma la strategia di esecuzione è completamente diversa.
Ricordate quando abbiamo detto che la memoria è il vero collo di bottiglia nell'informatica moderna? Questo è particolarmente vero per YOLO. Il modello può avere 50 milioni di parametri e durante l'inferenza crea gigabyte di risultati intermedi. Spesso, lo spostamento di tutti questi dati è più lento del calcolo vero e proprio.
Utilizziamo diversi accorgimenti per ridurre al minimo il movimento della memoria:
Pianificazione intelligente: organizziamo le operazioni in modo che i dati vengano utilizzati immediatamente mentre sono ancora nella memoria cache veloce. Per la rete piramidale delle caratteristiche YOLO, ciò riduce il traffico di memoria del 40%.
Tiling: invece di elaborare un'intera immagine in una sola volta, la suddividiamo in riquadri più piccoli che possono essere memorizzati nella cache. Ciò significa che il processore può lavorare con una memoria locale veloce invece di dover continuamente recuperare dati dalla memoria principale, più lenta.
Riutilizzo dei buffer: invece di creare continuamente nuova memoria per i risultati intermedi, riutilizziamo gli stessi buffer di memoria. È incredibilmente efficiente: l'intera struttura portante YOLO può funzionare con solo una serie di buffer riutilizzabili.
Ecco un fatto sorprendente: YOLO sono spesso troppo elaborati. Possiamo rimuovere il 30% dei canali in molti livelli senza alcun impatto sulla precisione. Questo non solo rende il modello più piccolo, ma anche più veloce, perché ci sono letteralmente meno calcoli da eseguire.
Il processo è elegante: analizziamo quali parti della rete contribuiscono meno ai risultati finali di rilevamento, le rimuoviamo e poi ottimizziamo il modello per compensare. Un modello YOLO11m ottimizzato può essere più veloce del 30% mantenendo il 99% della sua precisione originale. Sui dispositivi alimentati a batteria, questo aumento di efficienza può significare ore di funzionamento in più.
Processori diversi sono efficaci in ambiti diversi e le differenze di prestazioni sono notevoli. Lo stesso modello YOLO11n richiede:
Non si tratta solo di differenze di velocità dovute alla frequenza di clock, ma riflettono differenze architetturali fondamentali. Le GPU hanno migliaia di core che lavorano in parallelo, perfetti per le convoluzioni YOLO. Le NPU mobili hanno circuiti specializzati progettati specificamente per le reti neurali. Le CPU sono tuttofare, flessibili ma non specializzate.
La chiave per l'ottimizzazione è abbinare le operazioni YOLO a ciò che ogni chip sa fare meglio. Una GPU eseguire la stessa operazione su molti dati contemporaneamente. Una NPU mobile potrebbe supportare solo determinate operazioni, ma le esegue in modo incredibilmente efficiente. Una TPU edge funziona TPU con numeri interi a 8 bit, ma raggiunge una velocità notevole entro tale limite.
Quando esporti un YOLO , dietro le quinte avviene qualcosa di straordinario. Non ci limitiamo a convertire il formato del file, ma compiliamo il modello specificamente per il tuo hardware di destinazione. È come la differenza tra Google e un madrelingua. Il processo di compilazione:
Il compilatore potrebbe riorganizzare le operazioni per utilizzare al meglio la cache del processore, selezionare istruzioni specializzate supportate dal chip o persino utilizzare l'apprendimento automatico per trovare la migliore strategia di ottimizzazione. Sì, stiamo utilizzando l'IA per ottimizzare l'IA: il futuro è già qui!
Questa fase di compilazione può migliorare le prestazioni di 10 volte. Lo stesso YOLO potrebbe funzionare lentamente con codice generico, ma volare con istruzioni ottimizzate correttamente.
Parliamo di cosa succede quando YOLO il mondo reale, in particolare il difficile mondo dei dispositivi edge. Immaginiamo una telecamera di sicurezza che deve eseguire YOLO , per il rilevamento di oggetti. Si trova ad affrontare vincoli molto rigidi:
Ecco cosa si ottiene in pratica con l'ottimizzazione. Una telecamera di sicurezza che utilizza YOLO11s:
Abbiamo ridotto il consumo energetico dell'80% migliorando al contempo le prestazioni! Questa è la differenza tra un dispositivo che si surriscalda e consuma le batterie e uno che funziona in modo affidabile per anni.
La chiave sta nel trovare il giusto compromesso. Sui dispositivi edge, spesso:
In Ultralytics seguiamo un approccio sistematico all'ottimizzazione. Innanzitutto, analizziamo il modello per capire dove viene effettivamente impiegato il tempo. Spesso i colli di bottiglia non si trovano dove ci si aspetterebbe. Forse l'80% del tempo viene impiegato solo in pochi livelli, oppure i trasferimenti di memoria dominano il tempo di calcolo.
Successivamente, applichiamo le ottimizzazioni in modo iterativo:
Ad esempio, con l'implementazione di YOLO11m su un telefono:
Ogni fase migliora le prestazioni mantenendo oltre il 99% della precisione originale. Il risultato? Rilevamento degli oggetti in tempo reale su un dispositivo che sta in tasca.
I dispositivi moderni stanno diventando sempre più intelligenti nell'uso combinato di più processori. Il tuo telefono non ha un solo processore, ma ne ha diversi, ciascuno specializzato in compiti diversi:
Il futuro YOLO consiste nel suddividere in modo intelligente il modello tra questi processori. Forse l'NPU gestisce le convoluzioni principali, la CPU la logica di rilevamento finale e la GPU i risultati. Ogni processore fa ciò che sa fare meglio, creando una pipeline più efficiente di quella che potrebbe ottenere un singolo processore.
Stiamo sviluppando algoritmi di partizionamento intelligenti che individuano automaticamente il modo migliore per suddividere YOLO i processori disponibili, tenendo conto non solo delle loro capacità, ma anche del costo del trasferimento dei dati tra di essi.
Ottimizzare YOLO non significa solo convertire i formati dei file, ma trasformare l'intelligenza artificiale all'avanguardia in qualcosa che funzioni davvero nel mondo reale. Attraverso tecniche come la quantizzazione (utilizzo di numeri più piccoli), il pruning (rimozione delle parti non necessarie), la fusione delle operazioni (combinazione di passaggi) e la gestione intelligente della memoria, otteniamo miglioramenti delle prestazioni da 10 a 100 volte superiori, mantenendo la precisione.
La cosa straordinaria? Non esiste un'ottimizzazione "migliore" universale. Un server cloud con potenza illimitata richiede ottimizzazioni diverse rispetto a un drone alimentato a batteria. Un telefono con un chip AI dedicato richiede un trattamento diverso rispetto a un Raspberry Pi. Ecco perché Ultralytics così tante opzioni di esportazione: ognuna è ottimizzata per scenari diversi.
Ogni ottimizzazione di cui abbiamo discusso ha un unico obiettivo: rendere la visione artificiale accessibile ovunque. Che tu stia sviluppando un campanello intelligente, un'applicazione per droni o un servizio cloud su larga scala, ti forniamo gli strumenti necessari per far YOLO entro i tuoi limiti.
Quando esporti un 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 IA all'avanguardia in qualcosa che può funzionare su hardware reale, con vincoli reali, risolvendo problemi reali.
Questo è ciò che facciamo in Ultralytics. Colmiamo il divario tra la ricerca sull'intelligenza artificiale e la sua applicazione pratica. Rendiamo la visione artificiale utilizzabile ovunque, perché il futuro dell'intelligenza artificiale non consiste solo nell'avere i modelli migliori, ma nel rendere tali modelli utili nel mondo reale.