Vitis-AI 量化编译Yolov5并部署至ZCU104(Pytorch框架)

本文详细记录了使用Vitis-AI对Pytorch框架的Yolov5模型进行量化编译并在ZCU104开发板上部署的过程。在量化过程中遇到的包版本不匹配问题,通过修改下载脚本得以解决。量化脚本编写时,参考官方提供的API接口和示例代码,并针对模型结构进行调整。在编译阶段,由于DPU不支持SiLu激活函数,更换为ReLu后成功编译为单一DPU子图。

Vitis-AI使用记录:

(记录一下使用vitis-ai过程中遇到的坑)

1、我们使用的是pytorch框架的yolo模型,在使用vitis-ai量化前根据指导手册,要安装vai_q_pytorch,但是需要注意,我们在安装过程中一直在报错,如下图。

上图中几个package一直无法下载,一开始根据下方报错,以为是代理问题,我们尝试寻找代理服务器去下载,发现还是这几个包无法正常下载。

仔细观察了无法下载的几个package,发现有一个共同特点,就是版本号均为2.5.0,这就很奇怪了,为什么全都是2.5.0版本的package无法下载,于是去看xilinx提供的下载脚本,突然发现这么一行,改行命令是提供下载地址的,如下图:

此时恍然大悟啊!官方提供的最新脚本中版本号是2.0.0,而执行安装命令时默认安装版本号是2.5.0,所以下载好的package里没有所需要的版本号,自然无法安装对应package。知道问题后,接下来就是寻找2.5.0版本的下载包地址(个人觉得Xilinx很狗,这么大的企业,对这些软件的维护,修改信息全都放在GitHub上)。在GitHub Xilinx账号下找到了其更新后的下载脚本,接下来就很简单了,将更新后的脚本copy到conda环境中,重新运行命令即可正常安装。可以看到下图中版本号为正确的2.5.0

(Ps:正确脚本地址:

Vitis AI环境下对YOLOv5模型进行量化处理,可以利用Vitis AI提供的量化工具链来实现模型的高效部署YOLOv5是一种广泛应用于目标检测任务的深度学习模型,而Vitis AI量化器能够将模型从32位浮点数精度转换为8位整数精度,从而显著降低模型的计算资源消耗提升推理速度[^2]。 以下是使用Vitis AIYOLOv5模型进行量化的典型流程: ### 准备工作 1. **安装Vitis AI环境** 确保已经安装好Vitis AI开发环境,包括Vitis AI工具链、模型动物园(Model Zoo)以及相应的运行时库。 2. **获取YOLOv5模型** 从官方仓库(如Ultralytics的YOLOv5)导出ONNX格式或PyTorch格式的模型文件Vitis AI支持多种模型格式,包括ONNX、TensorFlow和PyTorch。 ```bash # 示例:使用Ultralytics导出ONNX模型 python export.py --weights yolov5s.pt --include onnx ``` 3. **准备校准数据集** 准备一个用于校准的小型数据集,通常包含几百张与训练数据分布相似的图像。该数据集用于在量化过程中估计激活值的动态范围。 ### 量化流程 1. **模型转换** 使用Vitis AI的`vai_c_tensorflow`或`vai_c_onnx`工具将YOLOv5模型转换为Vitis AI支持的DNNC格式(即XIR图表示)。 ```bash vai_c_onnx --model yolov5s.onnx --arch /opt/vitis_ai/compiler/arch/DPUCZDX8G/ZCU104/arch.json --output ./yolov5_compiled ``` 2. **模型量化** 使用Vitis AI Quantizer进行量化处理。可以选择Post-Training Quantization(PTQ)或Quantization-Aware Training(QAT)。对于YOLOv5,通常推荐使用PTQ,因为其部署简便且效果良好。 ```bash vai_quantize --input_frozen_graph yolov5.pb \ --input_nodes images \ --output_nodes output \ --calib_data_dir calibration_data \ --output_dir quantized_model \ --input_shape [1,3,640,640] \ --input_fn yolov5_input_fn.py ``` 3. **校准函数(input_fn)** 编写一个Python脚本定义如何加载校准数据进行预处理,确保输入数据格式与模型期望一致。 ```python def input_fn(data_dir, batch_size): from torch.utils.data import DataLoader from datasets import LoadImagesAndLabels dataset = LoadImagesAndLabels(data_dir, img_size=640) loader = DataLoader(dataset, batch_size=batch_size) for batch in loader: img, _ = batch yield [img.numpy()] ``` 4. **部署量化模型** 量化完成后,使用Vitis AI Runtime(VART)在目标设备上加载运行量化后的模型。 ```python import vitis_ai_library import numpy as np # 加载量化模型 dpu = vitis_ai_library.DpuRunner(model_path="quantized_model") input_tensors = dpu.get_input_tensors() output_tensors = dpu.get_output_tensors() # 构造输入 input_data = np.random.rand(1, 3, 640, 640).astype(np.float32) job_id = dpu.execute_async(input_data, []) dpu.wait(job_id) # 获取输出 output_data = dpu.get_output_data(job_id) ``` ### 注意事项 - **模型精度验证** 量化后应使用验证集评估模型的检测精度,确保mAP等指标在可接受范围内。 - **性能测试** 使用Vitis AI Profiler工具对量化模型进行性能分析,确认推理速度和资源占用是否满足部署需求。 - **模型优化建议** 如果量化后精度下降明显,可以尝试使用QAT(量化感知训练)进行微调,或调整量化配置(如对称/非对称量化、每通道/每层量化等)[^4]。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值