Vitis AI 基本操作(inspector用法详解+输出文件分析+保存模型/权重)

目录

1. 简介

2. 代码详解

2.1 导入所需的库

2.2 创建 Inspector

2.3 下载模型

2.4 检查模型

2.5 分析输出文件txt

2.5.1 Self Introduction

 2.5.2 Hints

2.5.3 Target Info

2.5.4 Inspection Summary

2.5.5 Node Details

3. 其他函数

3.1 查看 torchvision 中模型

3.2 保存模型

3.2.1 保存模型参数

3.2.2 保存完整模型

3.2.3 加载模型

4. 总结


1. 简介

在《Vitis AI 基本认知(模型校准+量化)》一文中,笔者简单分享了 inspector 的简单用法,本文将深入探究其用法。

inspector 的函数,用来诊断不同器件架构下的神经网络 (NN) 模型。检查器可以基于硬件约束来预测目标器件分配。生成的检查报告可用于指导用户对 NN 模型进行修改或最优化,从而显著降低部署难度并缩短部署时间。

建议在量化浮点模型前对其进行检查。

NNDCT:Neural Network Development and Compiler Tools。

2. 代码详解

2.1 导入所需的库

Vitis AI 2.5, Pytorch 版本信息:

Python 3.7.12
PyTorch 1.10.1
torchvision 0.11.2
import torch
from torchvision.models import resnet18
from pytorch_nndct.apis import Inspector
from IPython.display import Image

功能解释: 

  • import torch:PyTorch 库,用于深度学习的开源框架,核心功能是张量计算(类似于NumPy)以及深度神经网络的自动求导机制。
  • torchvision.models:建立在 PyTorch 之上的一个库,专门用来处理图像数据。提供了三大主要功能。
    • 一是加载预处理图像数据的工具。
    • 二是常用的图像数据集,如ImageNet、CIFAR10、MNIST等。
    • 三是预训练好的模型,如VGG、ResNet等。
  • Inspector 是 Vitis AI 工具的一部分,用于检查和诊断浮点模型。

2.2 创建 Inspector

target = "DPUCZDX8G_ISA1_B4096"
inspector = Inspector(target)
#---
#输出
#---
[VAIQ_NOTE]: =>Inspector is initialized successfully with target:
name: DPUCZDX8G_ISA1_B4096
type: DPUCZDX8G
isa_version: 1

 该方法来自于类:

# <Vitis-AI-2.5/src/Vitis-AI-Quantizer/vai_q_pytorch/pytorch_binding/pytorch_nndct/apis.py>
---
class Inspector(object):
  def __init__(self, name_or_fingerprint: str):

两种创建方法:

inspector = Inspector("0X101000016010407") # by target fingerprint
# or
inspector = Inspector("DPUCZDX8G_ISA1_B4096") # by target name

目标指纹(target fingerprint)是 Vitis AI 框架中用于表征不同 DPU 目标的唯一标识符。它由1个字节表示 DPU 类型、1个字节表示 ISA 版本、6个字节表示具体配置组成(feature code)。

2.3 下载模型

model = resnet18(pretrained=True)
model.eval()

当使用 pretrained=True 参数时,模型会自动从网络上下载预训练的权重并将其加载到模型中。 下载完毕,显示如下内容:

Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /home/vitis-ai-user/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
100% [-------------------------------]44.7M/44.7M [00:06<00:00, 7.62MB/s]

如果使用 model = resnet18(),则不会从网上下载预训练的权重。这种情况下,模型会初始化为随机权重,需要自己进行训练。 

训练模式model.train() vs 评估模式model.eval(),这两种模式的主要区别在于某些层(如 Dropout 和 Batch Normalization)的行为不同。

1. Dropout 层:在训练过程中,Dropout 会随机丢弃一部分神经元以防止过拟合。但在评估模式下,Dropout 会被关闭,所有神经元都会被使用。

2. Batch Normalization 层:在评估模式下,Batch Normalization 层会使用在训练过程中计算得到的全局均值和方差,而不是当前 mini-batch 的均值和方差。

3. 梯度计算和权重更新:在评估模式下,模型只进行前向传播,不会计算梯度,也不会更新权重,需要配合 torch.no_grad() 一起使用。

2.4 检查模型

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
dummy_input = torch.randn(1, 3, 224, 224)
inspector.inspect(model, (dummy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值