通过剪枝优化 AI 模型——降低复杂性,提高效率,并在不牺牲性能的情况下更快地在边缘设备上部署。
剪枝是机器学习中的一项关键技术 剪枝是机器学习中的一项重要技术,旨在减少 神经网络(NN 神经网络(NN)的大小和计算复杂度。 参数,从而降低神经网络(NN)的规模和计算复杂度。就像修剪树上的枯枝以促进其健康成长一样,模型修剪可以识别并消除模型中的权重或连接。 消除对系统性能贡献极小的模型权重或连接 对系统输出贡献最小的模型权重或连接。其主要目标是创建一个稀疏的模型,在保持高精度的同时,大幅降低内存使用率和系统性能。 同时大幅降低内存使用率和 推理延迟。这一过程 对于部署复杂的架构至关重要,例如 Ultralytics YOLO11等复杂架构至关重要。 存储和处理能力有限的设备上。
这一过程通常从预先训练好的模型开始。算法对网络进行分析,以找到参数--通常以张量表示--这些参数的值接近于零或对最终预测的影响有限。 这些参数的值接近于零或对最终预测的影响有限。这些参数 然后删除或 "清零"。由于删除连接会暂时降低性能,因此模型 通常会经历一个称为微调的过程,在这个过程中 在此过程中,模型会被重新训练几个历元,以便让剩余的 权重进行调整,以恢复失去的准确性。
修剪主要分为两类:
重要的是要将剪枝与其他 模型优化策略、 尽管它们经常同时使用:
修剪在各行各业实现边缘人工智能方面发挥着重要作用。 在各行各业中发挥着至关重要的作用:
而 Ultralytics YOLO模型是高度优化的开箱即用模型、 开发人员可以使用标准PyTorch 工具进行剪枝试验。下面的示例演示了如何 将非结构化剪枝应用于计算机视觉模型中的标准卷积层。
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%}")
未来在高效架构方面的进步,如即将推出的YOLO26,旨在整合这些 这些优化原则,从而设计出更小、更快、更精确的模型。