Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Pruning

剪枝会从训练好的神经网络中移除重要性较低的权重、滤波器或层,以缩小模型并加快推理速度,然后通过微调恢复性能。

剪枝是一种模型优化技术,它会移除对已训练神经网络输出贡献很小的权重、神经元、滤波器、注意力头或整个层,从而得到更小、所需内存、计算资源和能耗更少的模型。在深度学习中,剪枝与模型剪枝是同义词。大多数网络都严重过度参数化:Han 等人通过训练、移除低幅值连接并重新训练其余部分,在 ImageNet上将 AlexNet 的参数量从 6,100 万降至 670 万,将 VGG-16 的参数量从 1.38 亿降至 1,030 万,同时准确率没有下降。在内存、功耗和推理延迟预算紧张的边缘 AI部署中,剪枝是常见步骤。

剪枝的工作原理#

每种剪枝方法都要决定移除哪些参数以及何时移除。重要性分数通常取权重幅值,因为接近零的权重对输出的影响最小;基于梯度的分数则能更直接地估计每个参数对损失函数的影响。一次移除很大比例的参数,通常比迭代剪枝损失更多准确率;迭代剪枝会先移除一小部分参数,再对剩余权重进行微调以恢复性能,并重复这一过程,直到达到模型大小或速度目标。彩票假设进一步指出,稠密网络中包含稀疏子网络;将这些子网络重置为原始初始化后单独训练,其准确率可与完整网络相当。

非结构化、结构化与半结构化剪枝#

非结构化剪枝会将张量中任意位置的单个权重置零。它能在给定准确率下达到最高稀疏度,但结果是一个不规则的稀疏矩阵;除非稀疏运行时会跳过零值,否则稠密的 GPU和 CPU内核仍会以完整代价处理它。结构化剪枝会从卷积神经网络或Transformer中移除整个滤波器、通道、注意力头或层,因此剪枝后的每一层都会变成更小的稠密层,能在任何硬件上更快运行,但每移除一个参数会损失更多准确率。PyTorch 的剪枝工具会将这两类剪枝应用为现有层上的掩码:

import copy

from torch import nn
from torch.nn.utils import prune

# Two copies of one convolution layer with 32 filters of shape 16x3x3
unstructured = nn.Conv2d(16, 32, kernel_size=3)
structured = copy.deepcopy(unstructured)

# Unstructured: zero the 50% of individual weights with the smallest magnitude
prune.l1_unstructured(unstructured, name="weight", amount=0.5)

# Structured: zero the 50% of whole filters (dim=0) with the smallest L2 norm
prune.ln_structured(structured, name="weight", amount=0.5, n=2, dim=0)

for name, layer in [("Unstructured", unstructured), ("Structured", structured)]:
    zeros = (layer.weight == 0).float().mean()
    empty_filters = (layer.weight.flatten(1).abs().sum(dim=1) == 0).sum()
    print(f"{name}: {zeros:.0%} of weights zeroed, {empty_filters}/32 filters entirely empty")

两层的权重都减少了 50%,但只有结构化剪枝后的层有 32 个滤波器中的 16 个完全为空;这些滤波器可以直接移除,留下一个含 16 个滤波器的稠密卷积层。

半结构化剪枝介于两者之间。NVIDIA 的 2:4 稀疏模式会将每四个连续权重中的两个置零,Ampere 及更新架构 GPU 上的稀疏 Tensor Core 会跳过这些权重,从而以一半时间完成相同的矩阵运算;NVIDIA 测得,在 A100 上使用 TensorRT 对稀疏 ResNeXt-101 进行端到端推理,性能最高提升 20%。在稠密硬件上,零散的零值本身不会带来速度提升:将 Ultralytics YOLOv5x 剪枝至 30% 全局非结构化稀疏度,使用其 prune() 工具且不进行微调后,COCO mAP50-95 从 0.507 降至 0.489,而 V100 上的推理时间仍为每张图像 5.2 毫秒。

实际应用#

当模型必须在受限硬件上运行时,剪枝最为重要。经过通道剪枝的目标检测网络能满足无人机、智能摄像头和手机的内存及功耗预算,无需连接云端即可实现实时推理,并将图像保留在设备上以保护数据隐私。在制造业检测中,同样的压缩方法让缺陷检测器能够在生产线旁的低成本边缘模块上运行。

大型语言模型也会进行剪枝。SparseGPT一次性将 OPT-175B 和 BLOOM-176B 剪枝至 60% 的非结构化稀疏度,无需重新训练,困惑度仅略有上升。NVIDIA 的 Minitron工作通过移除层或隐藏维度,将 Llama 3.1 8B 剪枝为 4B 模型,然后利用原始模型进行知识蒸馏以恢复性能。

剪枝通常与其他压缩方法结合使用;这个术语在神经网络之外还有更早的含义。

  • 模型量化:量化会保留所有权重,并降低其数值精度,例如从 32 位浮点数降到 8 位整数。剪枝后的模型通常还会进一步量化,以节省更多资源。
  • 知识蒸馏:蒸馏会训练一个独立的紧凑学生模型来模仿更大的教师模型,这是恢复大幅剪枝后模型损失的准确率的常见方法。
  • Dropout 层:作为正则化手段,Dropout 会在单个训练步骤中将随机激活值置零,但不会改变参数数量;剪枝则会永久移除参数。
  • 决策树剪枝:在经典机器学习中,剪枝会裁去已拟合决策树的分支,以减少过拟合。例如,在 scikit-learn 的代价复杂度剪枝中,随着 ccp_alpha 参数增大,较弱的子树会被移除。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来