当前位置: 首页 > 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.jsqmd.com/news/1098685/

相关文章:

  • 3分钟彻底解决Windows和Office激活难题:KMS_VL_ALL_AIO完整操作指南
  • FreeRTOS任务挂起与恢复:从API调用到实战避坑,手把手教你玩转任务调度
  • 未来工程团队的5种角色:Claude Code之父的团队框架
  • 安装opengauss单实例轻量版数据库
  • puzzle(1131)指路罗马
  • Python判断数字?别被isdigit()坑了!浮点负数全阵亡
  • NOAA VIIRS 气溶胶光学厚度与粒径 EDR V3 数据集
  • item0(1):接地 2
  • 为什么监管锁真正有用的时候,往往不是锁机那一刻?
  • TypeScript项目局域网访问和GitHub提交和发布操作
  • linux环境docker-compose部署Clickhouse 集群
  • 基于 Simulink 的工业离心机变频调速系统 S-Ramp(S型加减速)曲线规划仿真实战教程。
  • 扣子【Coze】实战:别再花钱买绘本了!用扣子一键生成,孩子天天要看新故事
  • 基于 Simulink 的工业离心机变频调速系统 S-Ramp(S型加减速)曲线规划仿真实战教程
  • YOLO26N 姿态估计 ONNX 导出与模型简化
  • JMeter 实现:上接口失败则不执行下一个接口
  • vm虚拟机安装win10系统步骤
  • AI写作技巧:把你的想法翻译成AI能理解的语言
  • TVA在具身智能全栈能力体系中的关键作用(10)
  • JavaScript的DOM操作基础
  • 给宝宝起名字找哪个网站靠谱
  • docker python images Docker Python镜像别乱拉!容器和镜像傻傻分不清,你还在踩坑?
  • 第九次作业---基于springboot+mybatis+vue的项目实战之增删改查CRUD—Restful风格
  • 学 Simulink——输送带多电机驱动的转速同步与主从控制(Droop / 带载分配)仿真
  • 从Google论文到Hadoop实战:MapReduce核心思想如何帮你搞定海量日志分析
  • YOLO26N 姿态估计 TensorRT 部署:Jetson 实时推理
  • 经典 CNN 网络 VGG
  • 2026Word文档过大怎么瘦身,多种压缩Word文件大小实操方法指南
  • 配置外置与敏感隔离:基于 Django-environ 的多环境配置管理策略
  • 基于HarmonyOS 7.0 跨端开发的全球火山活动监测页面实战