在Milk-v Duo上部署YOLOV8模型

建议自己编译images固件,我使用官方给的固件在部署中出现了一些问题,请参考: 编译Milkv-duo固件-CSDN博客

下载YOLOv8

git clone https://github.com/ultralytics/ultralytics.git

下载yolo_export.zip

下载链接:链接:百度网盘 请输入提取码 提取码:184a

在Windows下搭建配置yolov8虚拟环境

将yolo_export/yolov8_export.py 代码复制到 yolov8 仓库下,下载YOLOv8的权重文件: https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

然后使用以下命令导出分支版本的 onnx 模型:

python yolov8_export.py --weights ./weights/yolov8n.pt

运行上述代码之后,可以在./weights/目录下得到 yolov8n.onnx 文件。

在Windows上搭建Docker环境

请参考:在Milk-V Duo上部署MobileNetV2_mobilenetv2 部署-CSDN博客

docker run -it 镜像名字 /bin/bash    //创建并拉取镜像

若已有Docker环境,则使用docker ps 列出所有镜像,并使用以下命令进入Docker环境(一定要先运行Docker客户端)

docker pull sophgo/tpuc_dev:v3.1    //拉取镜像

 在Docker环境中创建名为workpace的文件夹,在该文件夹下面创建yolov8n文件夹,将yolov8n.onnx通过以下命令将其传送到Docker的yolov8n文件夹下

复制文件到容器:使用docker cp <path>/文件 容器id:/目标路径将文件从主机复制到容器。
复制文件从容器:使用docker cp 容器id:/容器内路径 <path>/文件将文件从容器复制到主机。
例如:
docker cp  funny_noyce:/workspace/cvitek_tdl_sdk.tar  C:\Users\xuankui\Desktop\
docker cp  funny_noyce:/workspace/tpu-mlir C:\Users\xuankui\Desktop\

 下载 tpu-mlir 工具包

下载链接:链接:百度网盘 请输入提取码 提取码:5fht(git clone GitHub - milkv-duo/tpu-mlir: TPU-MLIR model conversion tool),将其发送到/workspace,并设置环境变量:

source tpu-mlir/envsetup.sh

下载数据集

cp -rf $TPUC_ROOT/regression/dataset/COCO2017 .
cp -rf $TPUC_ROOT/regression/image .

模型转换

转换模型需要在指定的 docker 执行,主要的步骤可以分为两步:

  • 第一步是通过 model_transform.py 将原始模型转换为 mlir 文件
  • 第二步是通过 model_deploy.py 将 mlir 文件转换成 cvimodel

如果需要转换为 INT8 模型,还需要在第二步之前调用 run_calibration.py 生成校准表,然后传给 model_deploy.py

ONNX 转 MLIR

model_transform.py \
--model_name yolov8n \
--model_def yolov8n.onnx \
--input_shapes [[1,3,640,640]] \
--mean 0.0,0.0,0.0 \
--scale 0.0039216,0.0039216,0.0039216 \
--keep_aspect_ratio \
--pixel_format rgb \
--test_input ./dog.jpg \
--test_result yolov8n_top_outputs.npz \
--mlir yolov8n.mlir

 MLIR 转 INT8 模型

转 INT8 模型前需要跑 calibration,得到校准表;输入数据的数量根据情况准备 100~1000 张左右。然后用校准表,生成 cvimodel。生成校对表的图片尽可能和训练数据分布相似。这个数据集从COCO2017提取100来做校准,用其他图片也是可以的。

run_calibration.py yolov8n.mlir \
--dataset COCO2017 \
--input_num 100 \
-o yolov8n_cali_table

运行完成之后会生成名为 yolov8n_cali_table 的文件,该文件用于后续编译 cvimode 模型的输入文件。然后生成 int8 对称量化 cvimodel 模型,执行如下命令:

model_deploy.py \
--mlir yolov8n.mlir \
--quant_input \
--quant_output \
--quantize INT8 \
--calibration_table yolov8n_cali_table \
--chip cv180x \
--model yolov8n_cv180x_int8_sym.cvimodel \
--test_input yolov8n_in_f32.npz \
--test_reference yolov8n_top_outputs.npz \
--tolerance 0.85,0.45

 其中–quant_output 参数表示将输出层也量化为 int8,不添加该参数则保留输出层为float32。从后续测试结果来说,将输出层量化为 int8,可以减少部分 ion,并提高推理速度,并且模型检测精度基本没有下降,推荐添加–quant_output 参数。在上述步骤运行成功之后,我们就获得了我们量化好的yolov8n_cv180x_int8_sym.cvimodel模型。

TDL-SDK编译与验证

首先使用以下命令获取交叉编译工具

wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz
tar xvf host-tools.tar.gz
cd host-tools
export PATH=$PATH:$(pwd)/gcc/riscv64-linux-musl-x86_64/bin

 下载cvitek_tdl_sdk并将其发送到/workspace下,下载链接:链接:链接:百度网盘 请输入提取码 提取码:ltro,进入到cvitek_tdl_sdk下的sample目录下。

chmod 777 compile_sample.sh
./compile_sample.sh

模型推理验证 

通过nfs或者ssh的方式将cvitek_tdl_sdk(可以压缩一下,可能在传输过程中会有文件丢失)、yolov8n_cv180x_int8_sym.cvimodel以及一张测试图像传输到开发板的/mnt目录下。

 首先,我们需要配置我们开发板的环境变量,此命令在milkv-duo重启后需要再次执行

export LD_LIBRARY_PATH=/mnt/cvitek_tdl_sdk/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/opencv/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/tpu/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/ive/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/middleware/v2/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/lib:\
/mnt/cvitek_tdl_sdk/sample/3rd/middleware/v2/lib/3rd:
cd  /mnt/cvitek_tdl_sdk/bin

 输入以下命令,看到如下推理结果,就说明模型部署成功。

./sample_yolov8 /mnt/yolov8n_cv180x_int8_sym.cvimodel /mnt/dog.jpg 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql常见语法操作笔记

1. 数据库的基本操作 1.1. MYSQL登录与退出 D:\phpstudy_pro\Extensions\MySQL5.7.26\bin 输入 mysql -uroot -proot -h127.0.0.1 退出的三种方法 mysql > exit; mysql > quit; mysql > \q; 1.2. MYSQL数据库的一些解释 注意&#xff1a;数据库就相当于文件夹 …

Nacos的简介及安装和使用

Nacos的简介及安装和使用 1. Nacos简介1.1 核心特性1.2 常见的注册中心1.3 Nacos结构图 2. 如何安装和配置Nacos&#xff1f;2.1 Nacos的安装2.2 如何使用Nacos&#xff1f; 1. Nacos简介 ​ Nacos是一个开源的动态服务发现、配置和服务管理平台&#xff0c;由阿里巴巴开发和维…

南京邮电大学数学实验A答案 | 《MATLAB数学实验》第三版课后习题答案

数学实验A 本仓库收集了2024年我在学习《数学实验A》课程期间完成的作业。课程使用的教材为《MATLAB数学实验》第三版&#xff0c;作者为胡良剑和孙晓君教授。 这个资源库的建立初衷是为了帮助南京邮电大学的同学们在学习过程中有一个参考的依据&#xff0c;减少一些无端浪费…

OSPF虚连接

OSPF虚连接 虚连接&#xff08;Virtual link&#xff09;是指在两台ABR之间通过一个非骨干区域建立的一条逻辑上的连接通道。 根据RFC 2328&#xff0c;在部署OSPF时&#xff0c;要求所有的非骨干区域与骨干区域相连&#xff0c;否则会出现有的区域不可达的问题。但是在实际应…

模糊测试—AFL——实战小记

一 安装环境&#xff1a; 在vm虚拟机上使用Ubuntu-22.04系统的镜像。 清华和科大的镜像都可以&#xff0c;下载下来的是ISO的压缩包&#xff0c;不用解压&#xff08;出来的是一堆文件&#xff09;&#xff0c;在安装新的VM虚拟机时&#xff0c;在镜像源里面直接选择下载下来…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

MySQL Prepared语句(Prepared Statements)

在数据库应用中&#xff0c;很多SQL语句都会重复执行很多次&#xff0c;每次执行可能只是where条件中的变量值不同&#xff0c;但MySQL依然会解析SQL语法并生成执行计划。对于这类情况&#xff0c;可以利用prepared语句来避免重复解析SQL的开销。 文章目录 一、prepared语句优…

Java——继承与组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。 继承表示对象之间是is-a的关系&#xff0c;比如&#xff1a;狗是动物&#xff0c;猫是动…

模板(二)

文章目录 模板&#xff08;二&#xff09;1 非类型模板参数2. 模板的特化2.1. 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例 3 模板的分离编译3.1 什么是分离编译3.2 模板的分离编译3.3 解决方法 4. 模板总结 模板&#xff08;二&…

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

概述 OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力&#xff0c;包含I2C、I2S、ADC、UART、SPI、SDIO、GPIO、PWM、FLASH等。本文介绍如何通过调用OpenHarmony的NDK接口&#xff0c;实现对GPIO控制&#xff0c;达到LED闪烁的效果。其他的IOT外设控制&#xff0…

谁说快是转瞬即逝,PUMA说快是永恒

巴黎奥运会、欧洲杯、美洲杯......2024年可以说是名副其实的体育大年。在各种全球体育盛事营造的浓厚体育氛围当中&#xff0c;各大体育品牌纷纷开始发力。 4月10日&#xff0c;全球领先运动品牌PUMA率先发布了其为本届奥运会准备的17套奥运装配&#xff0c;包括瑞士、瑞典等国…

Linux多进程(一)创建进程与进程控制

一、进程状态 进程一共有五种状态分别为&#xff1a;创建态&#xff0c;就绪态&#xff0c;运行态&#xff0c;阻塞态(挂起态)&#xff0c;退出态(终止态)其中创建态和退出态维持的时间是非常短的&#xff0c;稍纵即逝。主要是就绪态, 运行态, 挂起态三者之间的状态切换。 就绪…

小程序使用阿里巴巴矢量图标库

一、登录官网 www.iconfont.cn 二、在搜索框中搜索想要的图标&#xff0c;将鼠标移动到图标上会看到三个标记 可以使用下载&#xff0c;直接使用&#xff1a; 可以使用css文件使用&#xff1a; 首先点击购物车样式的选项&#xff0c;而后点击下图位置&#xff1a; 点击自己创…

Flume的安装及使用

Flume的安装及使用 文章目录 Flume的安装及使用Flume的安装1、上传至虚拟机&#xff0c;并解压2、重命名目录&#xff0c;并配置环境变量3、查看flume版本4、测试flume5、flume的使用 Flume的安装 1、上传至虚拟机&#xff0c;并解压 tar -zxvf apache-flume-1.9.0-bin.tar.g…

Git TortoiseGit 详细安装使用教程

前言 Git 是一个免费的开源分布式版本控制系统&#xff0c;是用来保存工程源代码历史状态的命令行工具&#xff0c;旨在处理从小型到非常大型的项目&#xff0c;速度快、效率高。《请查阅Git详细说明》。TortoiseGit 是 Git 的 Windows Shell 界面工具&#xff0c;基于 Tortoi…

05_FreeRTOS信号量

信号量 信号量信号量简介常用信号量API函数 信号量 信号量简介 信号量&#xff08;Semaphore&#xff09;是一种实现任务间通信的机制&#xff0c;可以实现任务之间同步或临界资源的互斥访问&#xff0c;常用于协助一组相互竞争的任务来访问临界资源。在多任务系统中&#xf…

wireshark RTP分析参数

主要看丢弃和Delta&#xff0c; 丢弃就是丢掉的udp包&#xff0c;所占的比率 Delta是当前udp包接收到的时间减去上一个udp包接收到的时间 根据载荷可以知道正确的delta应该是多少&#xff0c;比如G711A&#xff0c;ptime20&#xff0c;那么delta理论上应该趋近于20. 这里的de…

python创建线程和结束线程

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 python创建线程和结束线程 在 Python 中&#xff0c;线程是一种轻量级的执行单元&#xff…

进程概念(进程第1篇)【Linux复习篇】

目录 1、冯诺依曼体系结构怎么画&#xff1f;中央处理器是什么&#xff1f;存储器是什么&#xff1f;每个部分有什么作用&#xff1f; 2、什么是操作系统&#xff1f; 3、什么叫进程&#xff1f;操作系统如何管理进程的&#xff1f; 4、怎么查看进程&#xff1f; 5、C语言…

基于MLP算法实现交通流量预测(Pytorch版)

在海量的城市数据中&#xff0c;交通流量数据无疑是揭示城市运行脉络、洞察出行规律的关键要素之一。实时且精准的交通流量预测不仅能为交通规划者提供科学决策依据&#xff0c;助力提升道路使用效率、缓解交通拥堵&#xff0c;还能为公众出行提供参考&#xff0c;实现个性化导…