当前位置: 首页 > news >正文

RK3588-NPU pytorch-image-models 模型编译测试

RK3588-NPU pytorch-image-models 模型编译测试

  • 一.背景
  • 二.操作步骤
    • 1.下载依赖
    • 2.创建容器
    • 3.安装依赖
    • 4.创建脚本
      • A.生成模型名列表
      • B.生成ONNX模型
      • C.生成RKNN模型
      • D.批量测试脚本

一.背景

  • 测试RK3588-NPU对https://github.com/huggingface/pytorch-image-models.git中模型的支持程度

二.操作步骤

1.下载依赖

mkdir rk3588
cd rk3588
wget -O v2.3.0.tar.gz https://github.com/airockchip/rknn-toolkit2/archive/refs/tags/v2.3.0.tar.gz
tar -xf v2.3.0.tar.gz
git clone https://github.com/huggingface/pytorch-image-models.git

2.创建容器

docker stop rk3588_npu_test
docker rm rk3588_npu_test
docker run --gpus all --shm-size=128g -id -e NVIDIA_VISIBLE_DEVICES=all \--privileged --net=host -v $PWD:/home -w /home \--name=rk3588_npu_test nvcr.io/nvidia/pytorch:23.07-py3 /bin/bash	
docker start rk3588_npu_test
docker exec -ti rk3588_npu_test bash

3.安装依赖

cd /home
pip install -r rknn-toolkit2-2.3.0/rknn-toolkit2/packages/x86_64/requirements_cp310-2.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install rknn-toolkit2-2.3.0/rknn-toolkit2/packages/x86_64/rknn_toolkit2-2.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
cd /home/pytorch-image-models
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip uninstall opencv-contrib-python opencv-python -y
pip install opencv-python==4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install opencv-contrib-python==4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple/

4.创建脚本

A.生成模型名列表

cat > list_models.py <<-'EOF'
from timm.models import create_model, is_model, list_models
model_names = list_models()
with open("models.txt","w") as f:for n in model_names:f.write(f"{n}\n")
EOF
python list_models.py

B.生成ONNX模型

cat> gen_onnx.py<<-'EOF' 
import timm
import sys
import torch
import os
from timm.utils.model import reparameterize_model
from timm.utils.onnx import onnx_exportONNX_MODEL = 'model.onnx'
if os.path.exists(ONNX_MODEL):os.remove(ONNX_MODEL)
model = timm.create_model(sys.argv[1],num_classes=2,in_chans=3,pretrained=False,exportable=True,
)
model.eval()
input_size=model.default_cfg.get('input_size')
input_tensor = torch.ones((1,) + input_size)
input_names = ["input"]
output_names = ["output"]
torch.onnx.export(model, input_tensor, ONNX_MODEL, verbose=False, input_names=input_names,output_names=output_names,opset_version=17,export_params=True)
EOF

C.生成RKNN模型

cat> gen_rknn.py<<-'EOF' 
import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNNONNX_MODEL = 'model.onnx'
RKNN_MODEL = 'model.rknn'if not os.path.exists(ONNX_MODEL):exit(-1)if os.path.exists(RKNN_MODEL):os.remove(RKNN_MODEL)
if not os.path.exists("./dataset.txt"):img=np.ones((224,224,3),dtype=np.int8)cv2.imwrite("img.jpg",img)with open("./dataset.txt","w") as f:f.write("img.jpg")rknn = RKNN(verbose=False)
rknn.config(mean_values=[123.675, 116.28, 103.53], std_values=[58.82, 58.82, 58.82], target_platform='rk3588')
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:exit(ret)
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')
if ret != 0:exit(ret)
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:exit(ret)
rknn.release()
if os.path.exists(RKNN_MODEL):print("BUILD SUCCESS")
EOF

D.批量测试脚本

cat> run.sh<<-'EOF' 
#!/bin/bashmkdir -p ./log
# 获取 models.txt 中的模型总数
total=$(wc -l < models.txt)
count=0
for name in $(cat models.txt); doif [ ! -f ./log/$name ]; then# 打印进度条progress=$((count * 100 / total))echo -ne "进度: ["for ((i = 0; i < progress; i+=2)); do echo -n '='; donefor ((i = progress; i < 100; i+=2)); do echo -n ' '; doneecho -ne "] $progress%\r"	echo $name        # 获取开始时间model_start_time=$(date +%s)        # 运行python脚本python gen_onnx.py $name > ./log/$name 2>&1python gen_rknn.py >> ./log/$name 2>&1        # 记录结束时间并计算耗时model_end_time=$(date +%s)model_duration=$((model_end_time - model_start_time))        output=$(grep "BUILD SUCCESS" ./log/$name)echo "$name $output (耗时: ${model_duration}s)"        # 增加已完成的模型计数count=$((count + 1))fi
done
# 打印新行以结束进度条
echo ""
EOF
bash run.sh

相关文章:

RK3588-NPU pytorch-image-models 模型编译测试

RK3588-NPU pytorch-image-models 模型编译测试 一.背景二.操作步骤1.下载依赖2.创建容器3.安装依赖4.创建脚本A.生成模型名列表B.生成ONNX模型C.生成RKNN模型D.批量测试脚本 一.背景 测试RK3588-NPU对https://github.com/huggingface/pytorch-image-models.git中模型的支持程…...

低代码从“产品驱动”向“场景驱动”转型,助力数字化平台构建

一、前言 在数字化时代的大潮中&#xff0c;从宏观层面来看&#xff0c;新技术的落地速度不断加快&#xff0c;各行各业的数字化进程呈现出如火如荼的态势。而从微观层面剖析&#xff0c;企业面临着行业格局快速变化、市场竞争日益激烈以及成本压力显著增强等诸多挑战。 据专…...

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…...

用gpg和sha256验证ubuntu.iso

链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说&#xff0c;命令的各个部分含义如下&#xff1a; …...

深入解析 ZooKeeper:分布式协调服务的原理与应用

1.说说 Zookeeper 是什么&#xff1f; ZooKeeper 是一个开源的分布式协调服务&#xff0c;由 Apache Software Foundation 开发维护。它为构建分布式应用程序提供了一套简单且高效的协调接口。ZooKeeper 的设计目的是为了简化分布式系统中常见的任务&#xff0c;例如命名、配置…...

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.10.1. 什么是集成测试 在Rust里&#xff0c;集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样&#xff0c;这也…...

对当前日期进行按年、按月、按日的取值

对当前日期进行按年、按月、按日的取值。 其规则为&#xff1a; 按年 为当前日期到来年同一日期的前一天&#xff08;2024-12-01到2025-11-30&#xff09;。 按月 为当前日期到下个月的同一日期的前一天 &#xff08;2024-12-01 到 2024-12-31&#xff09;。 按日 为当前日…...

【Rust自学】12.2. 读取文件

12.2.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读…...

C++内存泄露排查

内存泄漏是指程序动态分配的内存未能及时释放&#xff0c;导致系统内存逐渐耗尽&#xff0c;最终可能造成程序崩溃或性能下降。在C中&#xff0c;内存泄漏通常发生在使用new或malloc等分配内存的操作时&#xff0c;但没有正确地使用delete或free来释放这块内存。 在日常开发过程…...

Http 响应状态码 前后端联调

http 响应状态码 &#xff1a;是服务器在处理HTTP请求时返回的状态信息&#xff0c;用于表示请求的处理结果 1xx : 信息性状态码 100 Continue: 服务器已收到请求头部&#xff0c;客户端应继续发送请求体。 101 Switching Protocols : 切换协议。服务器已理解客户端的请求&a…...

48_Lua错误处理

在编写Lua应用时,都可能会遇到不可预见的错误,而错误处理是确保程序稳定性和健壮性的关键环节。有效的错误处理不仅能防止程序崩溃,还能提供有用的反馈信息给开发者或最终用户,从而提高应用程序的质量。本文将详细介绍Lua中的错误处理机制。 1.错误类型 Lua中的错误类型主…...

shell脚本回顾1

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 一、 ll /tmp/size.log &>/dev/null if [ $? -eq 0 ];then cat /tmp/size.log else touch /tmp/size.log echo date > /tmp/size.log fi二、 if …...

【3】管理无线控制器

1.概述 本文主要介绍AireOS WLC的管理。WLC的管理可以通过CLI和GUI两种方式,而CLI主要分为console接入、telnet以及SSH的登录管理;GUI的管理分为HTTP和HTTPS。 2.CLI的管理 通过console实现的CLI管理这里就单独进行说明了,只要能找到设备的console接口,通过一般的RJ45接…...

SOME/IP 协议详解——服务发现

文章目录 1. Introduction &#xff08;引言&#xff09;2. SOME/IP Service Discovery (SOME/IP-SD)2.1 General&#xff08;概述)2.2 SOME/IP-SD Message Format2.2.1 通用要求2.2.2 SOME/IP-SD Header2.2.3 Entry Format2.2.4 Options Format2.2.4.1 配置选项&#xff08;Co…...

Flutter:封装ActionSheet 操作菜单

演示效果图 action_sheet_util.dart import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:demo/common/index.dart;class ActionSheetUtil {/// 底部操作表/// [context] 上下文/// [title] 标题/// [items] 选项列表 …...

力扣 全排列

回溯经典例题。 题目 通过回溯生成所有可能的排列。每次递归时&#xff0c;选择一个数字&#xff0c;直到选满所有数字&#xff0c;然后记录当前排列&#xff0c;回到上层时移除最后选的数字并继续选择其他未选的数字。每次递归时&#xff0c;在 path 中添加一个新的数字&…...

Golang 设计模式

文章目录 创建型模式简单工厂模式图形接口具体图形类&#xff1a;圆形具体图形类&#xff1a;矩形工厂类定义使用简单工厂模式 抽象工厂模式1. 定义产品接口2. 定义具体产品实现类3. 定义抽象工厂接口4. 定义具体工厂实现类5. 使用抽象工厂创建对象并使用产品 创建者模式1. 定义…...

Matlab 具有周期性分布的死角孔的饱和空气多孔材料的声学特性

本文对直主孔含侧空腔&#xff08;死角&#xff09;的饱和空气多孔介质中的声传播进行了理论和数值研究。侧腔位于沿每个主孔周期性间隔的“节点”上。研究了侧向空腔分布中周期性的影响&#xff0c;并单独考虑了紧间隔死角的低频极限。结果表明&#xff0c;吸附系数和透射损失…...

maven 项目怎么指定打包后名字

在 Spring Boot 的 Maven 项目中&#xff0c;你可以通过配置 pom.xml 文件来指定打包后的文件名。具体步骤如下&#xff1a; 打开 pom.xml 文件&#xff1a;找到你的项目根目录下的 pom.xml 文件。 配置 finalName 属性&#xff1a;在 标签下&#xff0c;添加 属性来指定打包后…...

Java Web开发进阶——Spring Boot与Thymeleaf模板引擎

Thymeleaf 是一个现代化的、功能强大的 Java 模板引擎&#xff0c;常用于生成 Web 应用程序的视图。它与 Spring Boot 的集成十分方便&#xff0c;并且提供了丰富的功能&#xff0c;能够帮助开发者实现动态渲染数据、处理表单、页面控制等操作。下面&#xff0c;我们将详细探讨…...

intv_ai_mk11应用场景:法务合同初审助手、HR招聘JD生成器、财务报表解读辅助工具

intv_ai_mk11在法务、HR和财务领域的三大应用实践 1. 为什么选择intv_ai_mk11作为企业助手 在当今快节奏的商业环境中&#xff0c;法务、HR和财务部门每天都要处理大量重复性工作。传统的人工处理方式不仅效率低下&#xff0c;还容易出错。intv_ai_mk11 AI对话机器人基于7B参…...

微信小程序框架详解

小程序包含一个描述整体程序的app实例和多个描述页面的page。其中app由三个文件构成:公共配置app.json、公共样式app.wxss、主体逻辑app.js。每个page最多由四个文件构成:页面配置page.json、页面结构page.wxml、页面样式page.wxss、页面主体逻辑page.js。 微信小程序的主体部…...

暗黑破坏神2存档修改终极指南:告别十六进制编辑,3步完成角色定制

暗黑破坏神2存档修改终极指南&#xff1a;告别十六进制编辑&#xff0c;3步完成角色定制 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》玩家设计的Web存档编辑器&#xff0c;通过直观的可视…...

【2026 实测】10 分钟配好 OpenClaw 中转站:GPT、Claude、Gemini、DeepSeek 一键切换(小白可跟做)

你是不是也遇到过这些问题&#xff1a; 官方 API 偶发不稳定&#xff0c;任务跑到一半中断想切换模型时&#xff0c;要反复改配置、改 Key明明照着文档配了&#xff0c;结果还是 400/401 报错 如果你正在本地用 OpenClaw 做 AI 编程或多模型对比&#xff0c;这篇就是给你的。…...

Wan2.2-I2V-A14B保姆级教程:从云服务器选购(CPU/内存/磁盘)到镜像运行全链路

Wan2.2-I2V-A14B保姆级教程&#xff1a;从云服务器选购到镜像运行全链路 1. 前言&#xff1a;为什么选择私有部署 在当今视频内容需求爆炸式增长的时代&#xff0c;能够快速生成高质量视频内容的能力变得尤为重要。Wan2.2-I2V-A14B作为一款先进的文生视频模型&#xff0c;可以…...

保姆级教程:用llama.cpp把魔塔社区的safetensors模型转成Ollama能用的GGUF格式

从魔塔社区到Ollama&#xff1a;零基础完成safetensors到GGUF的华丽转身 刚接触开源大模型的新手们&#xff0c;往往会在魔塔社区发现令人心动的模型——比如最近热门的DeepSeek-R1系列。但下载后却面临一个尴尬局面&#xff1a;这些模型通常是safetensors格式&#xff0c;而Ol…...

ANIMATEDIFF PRO电商创新:WebAR商品试穿系统

ANIMATEDIFF PRO电商创新&#xff1a;WebAR商品试穿系统 最近跟几个做电商的朋友聊天&#xff0c;他们都在抱怨同一个问题&#xff1a;商品退货率太高了。尤其是服装鞋帽这类需要试穿的商品&#xff0c;用户光看图片和模特展示&#xff0c;根本拿不准自己穿上到底合不合适、好…...

YOLO X Layout快速部署:Docker一键启动,开箱即用

YOLO X Layout快速部署&#xff1a;Docker一键启动&#xff0c;开箱即用 1. 简介与核心价值 你是否经常需要处理大量文档图片&#xff0c;却苦于手动标注各种元素区域&#xff1f;YOLO X Layout正是为解决这个问题而生的智能工具。它能自动识别文档中的文本、表格、图片、标题…...

Claude Code 宠物彩蛋来袭:/buddy 完整玩法指南(整理了宠物刷取方法,重置并刷到你想要的宠物)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 Claude Code /buddy 宠物指南 📒 📝 初识 Buddy 🎯 原理解析 🎯 预热窗口期 📝 如何触发 Buddy 🐙 18种宠物图鉴:你的伙伴是哪一位 📝 稀有度系统:1%传说级的诱惑 📝 五维属性:你的宠物是什么性格 📝 成…...

Qwen2.5-14B-Instruct部署优化:像素剧本圣殿FlashAttention-2加速实测

Qwen2.5-14B-Instruct部署优化&#xff1a;像素剧本圣殿FlashAttention-2加速实测 1. 项目背景与优化目标 像素剧本圣殿是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这款工具将AI推理能力与8-Bit复古美学相结合&#xff0c;为创作者提供沉浸式的剧本开发体验…...