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

YOLO26N 姿态估计 RKNN 部署:RK3588 NPU 实战

YOLO26N 姿态估计 RKNN 部署:RK3588 NPU 实战

1. RKNN 转换

#!/usr/bin/env python3"""onnx_to_rknn_pose.py"""fromrknn.apiimportRKNNdefconvert(onnx_path,rknn_path,calib_list):rknn=RKNN(verbose=True)rknn.config(mean_values=[[0,0,0]],std_values=[[255,255,255]],target_platform='rk3588',quantized_dtype='asymmetric_quantized-8',)ret=rknn.load_onnx(model=onnx_path)assertret==0,"加载 ONNX 失败"ret=rknn.build(do_quantization=True,dataset=calib_list,)assertret==0,"构建失败"ret=rknn.export_rknn(rknn_path)assertret==0,"导出失败"print(f"✅ RKNN 已导出:{rknn_path}")rknn.release()if__name__=="__main__":convert("yolo26n-pose.onnx","yolo26n-pose.rknn","calibration_list.txt")

2. RKNN 推理

#!/usr/bin/env python3"""rknn_pose.py - RK3588 姿态估计"""fromrknnlite.apiimportRKNNLiteimportcv2importnumpyasnp SKELETON=[(0,1),(0,2),(1,3),(2,4),(5,6),(5,7),(6,8),(7,9),(8,10),(11,12),(11,13),(12,14),(13,15),(14,16),(5,11),(6,12),]classRKNNPoseDetector:def__init__(self,rknn_path,conf_thresh=0.3):self.rknn=RKNNLite()self.rknn.load_rknn(rknn_path)self.rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)self.conf_thresh=conf_threshdefdetect(self,image):img=cv2.resize(image,(640,640))img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)outputs=self.rknn.inference(inputs=[img])predictions=outputs[0][0].T# [8400, 56]scores=predictions[:,4]mask=scores>self.conf_thresh boxes=predictions[mask,:4]scores=scores[mask]kpts=predictions[mask,6:].reshape(-1,17,3)returnboxes,scores,kptsdefdraw(self,image,boxes,scores,kpts):h,w=image.shape[:2]sx,sy=w/640,h/640foriinrange(len(boxes)):for(a,b)inSKELETON:ifkpts[i][a][2]>0.3andkpts[i][b][2]>0.3:pt1=(int(kpts[i][a][0]*sx),int(kpts[i][a][1]*sy))pt2=(int(kpts[i][b][0]*sx),int(kpts[i][b][1]*sy))cv2.line(image,pt1,pt2,(0,255,0),2)for(x,y,vis)inkpts[i]:ifvis>0.3:cv2.circle(image,(int(x*sx),int(y*sy)),3,(0,0,255),-1)returnimageif__name__=="__main__":model=RKNNPoseDetector("yolo26n-pose.rknn")image=cv2.imread("test.jpg")boxes,scores,kpts=model.detect(image)result=model.draw(image,boxes,scores,kpts)cv2.imwrite("result.jpg",result)print(f"检测到{len(boxes)}个人")

3. RK3588 性能

RK3588 NPU 性能(YOLO26N-Pose, 640x640, INT8): ┌──────────────────┬──────────┐ │ 指标 │ 数值 │ ├──────────────────┼──────────┤ │ 推理延迟 │ 12ms │ │ FPS │ 83 │ │ 功耗 │ 5W │ │ NPU 核心 │ 3 核并行 │ │ 模型大小 │ 3.2MB │ └──────────────────┴──────────┘

4. RKNN 优化技巧

RKNN 优化清单: ├── 量化 │ ├── 使用 200+ 张校准图片 │ ├── 校准图片覆盖全场景 │ └── 验证量化精度损失 <2 mAP ├── NPU 核心 │ ├── 使用 3 核并行(CORE_0_1_2) │ ├── 避免单核瓶颈 │ └── 监控 NPU 利用率 ├── 内存 │ ├── 减少 CPU-NPU 数据拷贝 │ ├── 使用零拷贝接口 │ └── 预分配输出缓冲区 └── 流水线 ├── 采集/推理/后处理并行 ├── 使用双缓冲 └── 减少空闲时间

总结

平台延迟FPS功耗适用场景
RK3588 NPU12ms835W低功耗边缘
Jetson Orin NX5.2ms19215W高性能边缘
RTX 40901.5ms667450W服务器
http://www.gsyq.cn/news/1610645.html

相关文章:

  • 扣子【Coze】实战:别再花钱买绘本了!用扣子一键生成,孩子天天要看新故事
  • 基于 Simulink 的工业离心机变频调速系统 S-Ramp(S型加减速)曲线规划仿真实战教程。
  • JMeter 实现:上接口失败则不执行下一个接口
  • JavaScript的DOM操作基础
  • docker python images Docker Python镜像别乱拉!容器和镜像傻傻分不清,你还在踩坑?
  • YOLO26N 姿态估计 TensorRT 部署:Jetson 实时推理
  • 经典 CNN 网络 VGG
  • 配置外置与敏感隔离:基于 Django-environ 的多环境配置管理策略
  • 性能测试进阶:从压测工具到容量规划的系统工程实践
  • 学 Simulink — 航空航天 270 V DC 高压直流电源变换器的短路保护仿真
  • 二升三年级暑假特色作业(pdf图文版)
  • 【论文阅读笔记10】小样本充电数据驱动的电池寿命预测——双流ViT与ESA
  • DeepSeek 开始摇人,有点猛啊。
  • Magpie终极指南:15种超分辨率算法重塑Windows窗口放大体验
  • YOLO26N 姿态估计 INT8 量化:低算力设备极致优化
  • 3步掌握Twitch掉落自动获取:终极智能挖矿工具完整指南
  • [hot100]盛最多水的容器
  • 规约驱动开发(SDD)——让规约成为人与 AI 之间的“合同“
  • Pytest+BDD+Playwright:构建现代化Web自动化测试框架的完整指南
  • 6.28[a]
  • 5分钟快速上手Sunshine:打造免费的个人游戏串流服务器终极指南
  • 【亲测释放150多G系统盘空间】Win10 / Win11 系统深度清理教程:如果常规清理方式都无效,看这篇就对了
  • 基于HarmonyOS的选择困难抽签助手应用开发实战
  • Zabbix多GPU智能监控解决方案:告别手动运维,实现企业级NVIDIA显卡自动化管理
  • 安全组网供应商前五推荐
  • 3分钟完成GTNH汉化:让格雷科技新视野彻底变中文
  • 明日方舟素材资源库:一站式获取高清游戏美术资源的完整指南
  • IntelliJ IDEA 提交代码时,不想让 IDE 自动分析代码
  • 普通投资者做策略复盘时应该记录哪些技术字段
  • C++课后习题训练记录Day144