【YOLOv5】【模型压缩与加速】【量化】FP32、FP16、INT8

news/2024/7/10 23:53:17 标签: YOLO, python, 人工智能

量化是将模型参数的存储类型从高精度存储降到低精度存储,从而达到减小模型体积大小、加快模型推理速度的效果。

目录

FP32量化

FP16量化

INT8量化

FP32量化

这个直接使用yolov5的export导出32位存储的 engine格式模型即可

python export.py --weights runs/train/exp4/weights/best.pt --include onnx engine --device 0

可以看到32位浮点型模型的onnx大小为7.1MB,engine大小为9.5MB。

 然后我们用32位的engine模型进行推理

python detect.py --weights runs/train/exp4/weights/FP32.engine --source ikunData/images

其每张照片的推理速度为4.9ms,比我们用原模型推理的速度要快上一倍(9.5ms)。

 32位engine模型的检测效果如下图所示。

FP16量化

python export.py --weights runs/train/exp4/weights/best.pt --include onnx engine --half --device 0

从32位浮点型转为16位浮点型的onnx模型大小减小了一半,从7.1MB减小到了3.6MB,其engine模型大小从9.5MB减小到了6.1MB,模型压缩效果模型。

再看看16位的模型加速效果

python detect.py --weights runs/train/exp4/weights/FP16.engine --source ikunData/images

此时的模型已经从32位的4.9ms推理速度提高到了2.3ms,加速效果明显。

与之同时,16位模型的检测效果却与32位的效果基本一样,在模型体积减小,推理速度加快的情况下,能够达到检测效果基本一样,说明16位量化效果十分成功。

INT8量化

我们还可以进一步量化,我们可以将模型量化为int8位存储,但是由于yolov5自带的export的int8导出效果好像并不好,因此int8量化要复杂一下。

我们首先拿到onnx格式的模型,这个我们在FP32量化的时候已经拿到了,在网上搜罗了一番,勉强可以找到一个将onnx转换为int8存储的engine的代码,但是由于这个代码有点年份了,使用到的TensorRT的版本老了,新的TensorRT已经不支持一些属性。

于是,经过一晚上加一下午代码的愉悦修改

具体请看【yolov5】onnx的INT8量化engine-CSDN博客

终于把代码给改对了,最后拿到的模型大小只有4MB。

 但是int8的推理速度和FP16的差不多。

Int8目标检测的效果也要差上一些,从图中可以看到有些鸡没有被检测到,可见改用int8存储后的模型精度要差上一些。


http://www.niftyadmin.cn/n/5174060.html

相关文章

微信支付平台C#SDK_微信支付.net SDK

一、微信支付平台C# SDK V3 https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat/blob/main/docs/WechatTenpayV3 接口对应整理: https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat/blob/main/docs/WechatTenpayV3/Basic_Mod…

【python】sys-psth和模块搜索路径

我们在导入一个模块的时候,比如说: import math它必然是有搜索路径的,那到底是在哪个目录下面找呢?Python解释器去哪里找这个文件呢?只有找到这个文件才能读取、装载运行该模块文件。 它一般按照如下路径寻找模块文件…

从HDFS到对象存储,抛弃Hadoop,数据湖才能重获新生?

Hadoop与数据湖的关系 1、Hadoop时代的落幕2、Databricks和Snowflake做对了什么3、Hadoop与对象存储(OSD)4、Databricks与Snowflake为什么选择对象存储5、对象存储面临的挑战 1、Hadoop时代的落幕 十几年前,Hadoop是解决大规模数据分析的“白…

为什么可口可乐可以做到全球饮品销量第一?

最近接触了几位可口可乐的人,才理解了:为什么可口可乐可以做到全球饮品销量第一?而且占了这个位置几十年的时间。 他们的工作方法,适合于绝大多数业务。 1、 在可口可乐看来,他们的业务就两件事: 第一&am…

URP渲染管线简介

基础:TA Shader基础、Unity Shader语法 URP渲染管线 可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。 URP渲染管线概…

【ICE】2:基于webrtc的 ice session设计及实现

工厂函数:CreateICESession_t 外部声明,sdk内部实现。创建IICESession :外部可见,内部也可见 /// Factory function prototype. How you get this factory will depend on how you are linking with /// this code. typedef IICESession *( *CreateICESession_t )( const…

纯手写 模态框、消息弹框、呼吸灯

在有些做某些网页中&#xff0c;应用不想引用一些前端框架&#xff0c;对于一些比较常用的插件可以纯手写实现 1、模态框 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Water Ripple Effect</title> <style…

云原生 黑马Kubernetes教程(K8S教程)笔记——第一章 kubernetes介绍——Master集群控制节点、Node工作负载节点、Pod控制单元

参考文章&#xff1a;kubernetes介绍 文章目录 第一章 kubernetes介绍1.1 应用部署方式演变传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上虚拟化部署&#xff1a;可以在一台物理机上运行多个虚拟机&#xff0c;每个虚拟机都是独立的一个环境&…