AIMET工具简介

AI 模型效率工具包 (AIMET)

AIMET 是一个为经过训练的神经网络模型提供高级模型量化和压缩技术的库。 它提供的功能已被证明可以提高深度学习神经网络模型的运行时性能,并具有较低的计算和内存要求,并且对任务准确性的影响最小。
在这里插入图片描述AIMET 旨在与 PyTorch 和 TensorFlow 模型配合使用。

为什么选择 AIMET?

在这里插入图片描述

  • 支持高级量化技术:使用整数运行时进行推理比使用浮点运行时快得多。 例如,模型在 Qualcomm Hexagon DSP 上的运行速度比在 Qualcomm Kyro CPU 上快 5 到 15 倍。 此外,8 位精度模型的占用空间比 32 位精度模型小 4 倍。 然而,在量化 ML 模型时保持模型准确性通常具有挑战性。 AIMET 使用无数据量化等新技术解决了这个问题,这些技术在几个流行模型上提供了最先进的 INT8 结果。
  • 支持先进的模型压缩技术,使模型在推理时运行得更快并需要更少的内存。
  • AIMET 旨在自动优化神经网络,避免耗时且繁琐的手动调整。 AIMET 还提供用户友好的 API,允许用户直接从他们的 TensorFlow 或 PyTorch 管道进行调用。

支持的功能

量化

  • 跨层均衡:均衡权重张量以减少跨通道的幅度变化
  • 偏差校正:校正由于量化而引入的层输出偏移
  • 自适应舍入:学习给定未标记数据的最佳舍入
  • 量化模拟:模拟目标量化推理精度
  • 量化感知训练:使用量化模拟进一步训练模型以提高准确性

模型压缩

  • 空间 SVD:张量分解技术将一个大层分成两个较小的层
  • 通道修剪:从层中删除冗余输入通道并重建层权重
  • 每层压缩比选择:自动选择模型中每一层的压缩量

可视化

  • 权重范围:目视检查模型是否适合应用跨层均衡技术。以及应用该技术后的效果
  • 每层压缩敏感性:直观地获得有关模型中任何给定层对压缩敏感性的反馈

最近添加的一些功能包括

  • 自适应舍入(AdaRound):学习给定未标记数据的最佳舍入
  • 循环模型(包括 RNN、LSTM 和 GRU)的量化感知训练 (QAT)

结果

AIMET 可以将现有的 32 位浮点模型量化为 8 位定点模型,而不会牺牲太多精度和模型微调。

DFQ
DFQ 方法应用于几个流行的网络,例如 MobileNet-v2 和 ResNet-50,在没有任何训练数据的情况下以自动化的方式导致准确度下降不到 0.9%,一直到 8 位量化。

在这里插入图片描述
AdaRound(自适应舍入)

ADAS 对象检测

对于这个示例 ADAS 对象检测模型,很难量化到 8 位精度,AdaRound 可以将精度恢复到 FP32 精度的 1% 以内。
在这里插入图片描述
DeepLabv3 语义分割
对于 DeepLabv3 语义分割模型等一些模型,AdaRound 甚至可以将模型权重量化到 4 位精度,而不会显着降低精度。
在这里插入图片描述
循环模型的量化
AIMET 支持循环模型(RNN、LSTM、GRU)的量化模拟和量化感知训练 (QAT)。 使用 AIMET 中的 QAT 功能,可以将具有双向 LSTM 的 DeepSpeech2 模型量化到 8 位精度,同时精度下降最小。
在这里插入图片描述
模型压缩
AIMET 还可以显着压缩模型。 对于流行的模型,例如 Resnet-50 和 Resnet-18,使用空间 SVD 和通道剪枝进行压缩可实现 50% 的 MAC(乘法-累加)减少,同时将精度保持在大约 50% 以内。 原始未压缩模型的 1%。
在这里插入图片描述

### 使用AIMET优化YOLOv8模型 对于使用AIMET(AI Model Efficiency Toolkit)来优化YOLOv8模型,虽然直接针对YOLOv8的具体指南可能有限,但可以基于现有资源构建一个合理的流程。AIMET提供了多种量化感知训练(Quantization Aware Training, QAT)和其他优化技术,这些方法同样适用于YOLOv8这样的现代神经网络架构。 #### 安装依赖库 为了能够利用AIMET工具包中的功能,首先需要安装必要的Python软件包: ```bash pip install aimet-torch ``` #### 准备环境与加载预训练模型 确保已经准备好了一个适合运行PyTorch项目的开发环境,并且可以从官方或其他可信源获取到YOLOv8的预训练权重文件[^1]。 #### 配置量化参数并应用QAT 通过设置合适的配置选项,可以在保持较高准确性的同时减少模型大小和推理时间。下面是一个简单的例子展示如何初始化用于量化的模拟器以及启动量化感知训练过程: ```python from aimet_torch.quantsim import QuantizationSimModel dummy_input = torch.randn((1, 3, 640, 640)) # 假设输入尺寸为 (batch_size=1, channels=3, height=640, width=640) sim = QuantizationSimModel(model=model, quant_scheme='tf_enhanced', default_output_bw=8, default_param_bw=8, dummy_input=dummy_input) # 开始量化感知训练... for epoch in range(num_epochs): train(sim.model, ...) evaluate(sim.model, ...) # 导出经过优化后的模型 sim.export('./output_dir', 'quantized_yolov8') ``` 这段代码展示了如何创建`QuantizationSimModel`实例来进行量化仿真,并指定了量化方案(`'tf_enhanced'`)以及其他相关超参数。之后,在常规训练循环内调用此对象的方法即可完成整个优化周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值