Узнайте, как обрезка оптимизирует нейронные сети, такие как Ultralytics , путем удаления избыточных параметров. Изучите структурированные и неструктурированные методы для Edge AI.
Обрезка — это стратегическая методика оптимизации моделей, используемая для уменьшения размера и вычислительной сложности нейронных сетей путем удаления ненужных параметров. Подобно тому, как садовник обрезает мертвые или разросшиеся ветви, чтобы помочь дереву расти, алгоритмы обрезки выявляют и устраняют избыточные weights and biases , которые не вносят значительного вклада в предсказательную способность модели. Основная цель — создать сжатую, «разреженную» модель, которая сохраняет высокую точность, но потребляет значительно меньше памяти и энергии. Это сокращение необходимо для улучшения задержки вывода, что позволяет передовым архитектурам эффективно работать на аппаратном обеспечении с ограниченными ресурсами, таком как мобильные телефоны и встроенные устройства.
Современные модели глубокого обучения часто перепараметризированы, то есть содержат гораздо больше связей, чем необходимо для решения конкретной задачи. Обрезка использует это, удаляя связи, значения которых близки к нулю, исходя из предположения, что они оказывают незначительное влияние на результат. После удаления параметров модель обычно проходит процесс точной настройки, в ходе которого она проходит кратковременное переобучение для корректировки оставшихся весов и восстановления утраченной производительности. Эта концепция тесно связана с гипотезой лотерейного билета, которая предполагает, что большие сети содержат более мелкие, высокоэффективные подсети, способные достигать аналогичной точности.
Существует две основные категории стратегий обрезки:
Обрезка незаменима для обеспечения работы Edge AI в различных отраслях, где аппаратные ресурсы ограничены:
Хотя современные модели, такие как YOLO26, разработаны с целью обеспечения эффективности, разработчики могут применять обрезку для дальнейшей оптимизации слоев с помощью библиотек, таких как PyTorch. Следующий пример демонстрирует, как применить неструктурированную обрезку к сверточному слою
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of weights with the lowest magnitude
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity (percentage of zero parameters)
sparsity = 100.0 * float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Sparsity achieved: {sparsity:.2f}%")
Для эффективной оптимизации модели для развертывания полезно отличать обрезку от других стратегий:
Для комплексного управления жизненным циклом, включая обучение, аннотирование и развертывание оптимизированных моделей, пользователи могут использовать Ultralytics . Это упрощает рабочий процесс от управления наборами данных до экспорта моделей в удобные для аппаратного обеспечения форматы, такие как ONNX или TensorRT.