Scopri come il model pruning riduce le dimensioni e la complessità delle reti neurali per l'Edge AI. Esplora le strategie per ottimizzare Ultralytics per un'inferenza più rapida sui dispositivi mobili.
Il model pruning è una tecnica utilizzata nell'apprendimento automatico per ridurre le dimensioni e la complessità computazionale di una rete neurale rimuovendo sistematicamente i parametri non necessari. Proprio come un giardiniere pota i rami morti o troppo cresciuti per favorire la crescita di un albero, gli sviluppatori potano le reti artificiali per renderle più veloci, più piccole e più efficienti dal punto di vista energetico. Questo processo è essenziale per implementare moderne architetture di deep learning su dispositivi con risorse limitate, come smartphone, sensori integrati e hardware di edge computing.
L'idea alla base del pruning è che le reti neurali profonde sono spesso "sovraparametrizzate", ovvero contengono un numero significativamente maggiore di weights and biases rispetto a quelli strettamente necessari per risolvere un problema specifico. Durante il processo di addestramento, il modello apprende un numero enorme di connessioni, ma non tutte contribuiscono in egual misura al risultato finale. Gli algoritmi di potatura analizzano il modello addestrato per identificare queste connessioni ridondanti o non informative, in genere quelle con pesi vicini allo zero, e le rimuovono.
Il ciclo di vita di un modello potato segue generalmente questi passaggi:
Questa metodologia è spesso associata all' ipotesi del biglietto della lotteria, che suggerisce che le reti dense contengono sottoreti più piccole e isolate (biglietti vincenti) che possono raggiungere un'accuratezza paragonabile al modello originale se addestrate in modo isolato.
I metodi di potatura sono generalmente classificati in base alla struttura dei componenti che vengono rimossi.
La potatura è un fattore critico per l'Edge AI, in quanto consente l' esecuzione di modelli sofisticati in ambienti in cui la connettività cloud non è disponibile o è troppo lenta.
Sebbene il model pruning sia uno strumento potente, viene spesso confuso con altre tecniche di ottimizzazione dei modelli o utilizzato insieme ad esse .
Il seguente Python mostra come applicare il pruning non strutturato a un livello convoluzionale utilizzando PyTorch. Si tratta di un passaggio comune prima di esportare i modelli in formati ottimizzati come ONNX.
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
module = nn.Conv2d(in_channels=1, out_channels=20, kernel_size=3)
# Apply unstructured pruning to remove 30% of the connections
# This sets the weights with the lowest L1-norm to zero
prune.l1_unstructured(module, name="weight", amount=0.3)
# Calculate and print the sparsity (percentage of zero elements)
sparsity = 100.0 * float(torch.sum(module.weight == 0)) / module.weight.nelement()
print(f"Layer Sparsity: {sparsity:.2f}%")
Per gli utenti che desiderano gestire l'intero ciclo di vita dei propri set di dati e modelli, inclusi formazione, valutazione e implementazione, la Ultralytics offre un'interfaccia semplificata. Essa semplifica il processo di creazione di modelli altamente ottimizzati come YOLO26 e la loro esportazione in formati compatibili con l'hardware, come TensorRT TensorRT o CoreML.