在Milk-v Duo上部署YOLOV8模型

2024-04-24 01:28
文章标签 部署 模型 yolov8 milk duo

本文主要是介绍在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 

这篇关于在Milk-v Duo上部署YOLOV8模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930420

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架