Otimize modelos de IA com pruning — reduza a complexidade, aumente a eficiência e implemente mais rapidamente em dispositivos edge sem sacrificar o desempenho.
A poda é uma técnica fundamental na aprendizagem automática com o objetivo de reduzir o tamanho e a complexidade computacional de uma rede neural (NN), removendo parâmetros parâmetros desnecessários. Tal como aparar os ramos mortos de uma árvore para incentivar um crescimento saudável, a poda de modelos identifica e elimina os pesos ou ligações do modelo que contribuem minimamente para a saída do sistema. O objetivo principal é criar um modelo esparso que mantenha uma elevada precisão e, ao mesmo tempo, reduzir significativamente o uso de memória e e melhorando a latência da inferência. Este processo é essencial para a implementação de arquitecturas sofisticadas, tais como Ultralytics YOLO11em dispositivos com recursos limitados, onde onde o armazenamento e a capacidade de processamento são limitados.
Normalmente, o processo começa com um modelo pré-treinado. Os algoritmos analisam a rede para encontrar parâmetros - muitas vezes representados como tensores - que tenham valores próximos de zero ou impacto limitado na previsão final. Esses parâmetros são removidos ou "zerados". Como a remoção de conexões pode degradar temporariamente o desempenho, o modelo normalmente passa por um processo chamado ajuste fino, onde é treinado novamente durante algumas épocas para permitir que os pesos pesos restantes se ajustem e recuperem a precisão perdida.
Existem duas categorias principais de poda:
É importante distinguir a poda de outras estratégias de otimização de modelos, embora sejam frequentemente utilizadas em conjunto:
A poda desempenha um papel vital na ativação da IA de ponta em vários setores:
Enquanto Ultralytics YOLO do Ultralytics são altamente optimizados logo à partida, os desenvolvedores podem experimentar a poda usando os utilitários padrão PyTorch . O exemplo a seguir demonstra como aplicar a poda não estruturada a uma camada convolucional padrão encontrada em modelos de visão computacional.
import torch
import torch.nn.utils.prune as prune
from ultralytics.nn.modules import Conv
# Initialize a standard convolutional block used in YOLO models
layer = Conv(c1=64, c2=128)
# Apply L1 unstructured pruning to remove 30% of the lowest magnitude weights
prune.l1_unstructured(layer.conv, name="weight", amount=0.3)
# Verify the sparsity (percentage of zero weights)
sparsity = float(torch.sum(layer.conv.weight == 0)) / layer.conv.weight.nelement()
print(f"Layer sparsity achieved: {sparsity:.2%}")
Os futuros avanços na arquitetura eficiente, como o próximo YOLO26, visam integrar estes princípios de otimização de forma nativa, criando modelos que são mais pequenos, mais rápidos e mais precisos por conceção.