Yolo Vision Shenzhen
Shenzhen
Iscriviti ora
Glossario

Model Pruning

Ottimizza i modelli di machine learning con il model pruning. Ottieni un'inferenza più rapida, un utilizzo ridotto della memoria e un'efficienza energetica per implementazioni con risorse limitate.

La potatura del modello è una tecnica di ottimizzazione dei modelli per ridurre le dimensioni e la complessità computazionale delle reti reti neurali rimuovendo i parametri non necessari. parametri non necessari. Quando i modelli di intelligenza artificiale si ingrandiscono per raggiungere prestazioni più elevate, spesso diventano parametrizzati, contenenti molte connessioni o neuroni che contribuiscono poco all'output finale. Identificando ed eliminando ed eliminando questi componenti ridondanti, gli sviluppatori possono creare modelli più snelli che richiedono meno memoria ed energia, fornendo al contempo un'inferenza più veloce in tempo reale. e di energia, garantendo al contempo un'inferenza più rapida in tempo reale. Questo processo è particolarmente importante per l'implementazione di architetture sofisticate quali YOLO11 su hardware in cui le risorse sono scarse, come i telefoni cellulari o sensori incorporati.

Concetti e meccanismi fondamentali

Il processo di potatura si articola in tre fasi principali: formazione, potatura e perfezionamento. messa a punto. Inizialmente, un modello di grandi dimensioni viene addestrato convergenza per catturare caratteristiche complesse. Durante la fase di pruning, un algoritmo valuta l'importanza di specifici parametri, di solito parametri specifici, solitamente weights and biases-in base a criteri come criteri come l'ampiezza o la sensibilità. I parametri ritenuti insignificanti vengono azzerati o eliminati del tutto.

Tuttavia, il semplice taglio di parti di una rete può degradarne l'accuratezza. precisione. Per ovviare a questo inconveniente, il modello viene sottoposto a un un successivo ciclo di riqualificazione, noto come fine-tuning. Questa fase consente ai parametri rimanenti di adattarsi e compensare le connessioni mancanti, spesso riportando le prestazioni del modello a livelli vicini a quelli originali. L'efficacia di questo efficacia di questo approccio è supportata dall'ipotesi del Ipotesi del biglietto della lotteria, che suggerisce che le reti dense contengano sottoreti più piccole in grado di raggiungere un'accuratezza paragonabile se addestrate in modo isolato.

Tipi di Model Pruning

Le strategie di potatura sono generalmente classificate in base alla struttura dei componenti da rimuovere:

  • Potatura non strutturata: Questo metodo si rivolge ai singoli pesi, indipendentemente dalla loro posizione, azzerando quelli con valori bassi. Il risultato è una matrice "rada", in cui le connessioni di valore sono disperse. Sebbene sia efficace per ridurre le dimensioni del modello, il pruning non strutturato richiede spesso hardware o librerie software specializzate per ottenere un effettivo guadagno di velocità. librerie software specializzate per ottenere un effettivo guadagno di velocità, in quanto le CPU e le CPU e GPU sono ottimizzate per le operazioni su matrici dense. dense.
  • Potatura strutturata: Invece dei singoli pesi, questo approccio rimuove intere strutture geometriche, come canali, filtri o strati all'interno di strutture geometriche, come canali, filtri o strati all'interno delle reti neurali convoluzionali (CNN). Mantenendo la struttura densa delle matrici, la potatura strutturata consente all'hardware standard di elaborare il modello in modo più efficiente. modello in modo più efficiente, il che si traduce direttamente in una minore latenza dell'inferenza senza bisogno di strumenti strumenti specializzati per l'accelerazione rada.

Pruning vs. quantizzazione

Sebbene entrambe siano tecniche di ottimizzazione molto diffuse, è importante distinguere il pruning dalla quantizzazione del modello. La potatura si concentra sulla riduzione il numero di parametri (connessioni o neuroni), modificando di fatto l'architettura del modello. Al contrario, la quantizzazione quantizzazione riduce la precisione dei parametri, ad esempio convertendo i numeri in virgola mobile a 32 bit in numeri a 8 bit. a 32 bit in numeri interi a 8 bit. Questi metodi sono spesso complementari; uno sviluppatore potrebbe prima sfrondare un modello per rimuovere la ridondanza e poi quantificarlo. per rimuovere la ridondanza e poi quantizzarlo per ridurre ulteriormente l'ingombro in memoria per la distribuzione. distribuzione.

Applicazioni nel mondo reale

La potatura gioca un ruolo fondamentale nel rendere la visione computerizzata avanzata accessibile in scenari pratici:

  1. Rilevamento di oggetti mobili: Le applicazioni che girano su smartphone, come le app di realtà aumentata o le applicazioni di foto, utilizzano modelli potati per eseguire il di rilevamento degli oggetti a livello locale. In questo modo si preserva la durata della batteria e garantisce la privacy dei dati dell'utente evitando l'elaborazione elaborazione nel cloud.
  2. Sistemi di sicurezza per autoveicoli: I veicoli autonomi si affidano alla rapida elaborazione dei dati visivi per detect pedoni e ostacoli. I modelli ridotti consentono al motore di inferenza di bordo di motore di inferenza di prendere decisioni in una frazione di secondo senza richiedere l'enorme consumo di energia di una GPU di livello server.

Esempio di implementazione

Framework come PyTorch forniscono utilità integrate per applicare di potatura in modo programmatico. L'esempio seguente mostra come applicare il pruning non strutturato a un livello convoluzionale, un'operazione comune prima di esportare un modello in un formato ottimizzato come il un'operazione comune prima di esportare un modello in un formato ottimizzato, come ad esempio ONNX.

import torch
import torch.nn.utils.prune as prune

# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)

# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)

# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")

Unitevi alla comunità di Ultralytics

Entra nel futuro dell'AI. Connettiti, collabora e cresci con innovatori globali

Iscriviti ora