RK3588部署YOLOv8姿態估計

1.?YOLOv8姿態估計與部署

姿態估計(Pose estimation)是一項涉及識別圖像中關鍵點位置的任務。 關鍵點可以表示對象的各個部分,如關節、地標或其他獨特特征,關鍵點的位置通常表示為一組2D[x, y]或3D[x, y, visible]坐標。

YOLOv8-Pose人體姿態估計,會先檢測出圖像中所有的人體檢測框,然后每個檢測框進行人體姿態估計。 YOLOv8-Pose使用的數據集是?COCO Keypoints 2017?,總共包含20萬張圖像,支持人體17個關鍵點。

YOLOv8-Pose提供了不同版本模型,適用于不同的環境:

  • YOLOv8n-pose: 輕量級的模型,適用于計算資源受限的環境。

  • YOLOv8s-pose: 相對輕量級但性能更好的模型,平衡了速度和準確度。

  • YOLOv8m-pose: 中等大小的模型,提供較高的準確度,適用于需要更準確結果的場景。

  • YOLOv8l-pose: 較大的模型,具有更高的準確度,但速度較慢,適用于高精度要求的應用。

  • YOLOv8x-pose: 精確最大的的模型,但速度最慢,適用于對準確度有極高要求的場景。

  • YOLOv8x-pose-p6: 支持高分辨率圖像輸入,更高的準確度和更強的檢測能力,但需要更多的計算資源。

詳細請查看:GitHub - ultralytics/ultralytics: Ultralytics YOLO 🚀?。

1.1.?YOLOv8-pose簡單測試

YOLOv8n-pose模型推理測試(使用python):

 123456789
10
11
12
13
from ultralytics import YOLO# Load a model
model = YOLO("./yolov8n-pose.pt")# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg", save=True)# 打印輸出結果
for result in results:boxes = result.boxes  #Boxes對象keypoints = result.keypoints  # Keypoints對象print(boxes, keypoints)
# 獲取yolov8n-pose.pt
(yolov8) llh@anhao: wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-pose.pt
# 推理測試
(yolov8) llh@anhao: python yolov8n_pose.py
Downloading https://ultralytics.com/images/bus.jpg to 'bus.jpg'...
100%|███████████████████████████████████████████████████████████████| 134k/134k [00:00<00:00, 1.03MB/s]
image 1/1 /mnt/e/work/yolov8/bus.jpg: 640x480 4 persons, 53.6ms
Speed: 4.5ms preprocess, 53.6ms inference, 120.5ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs/pose/Predictultralytics.engine.results.Boxes object with attributes:cls: tensor([0., 0., 0., 0.], device='cuda:0')
conf: tensor([0.8908, 0.8800, 0.8732, 0.4125], device='cuda:0')
data: tensor([[4.5000e+01, 3.9700e+02, 2.4200e+02, 9.0600e+02, 8.9082e-01, 0.0000e+00],[6.7000e+02, 3.9000e+02, 8.1000e+02, 8.7800e+02, 8.8004e-01, 0.0000e+00],[2.2400e+02, 4.0400e+02, 3.4400e+02, 8.5600e+02, 8.7320e-01, 0.0000e+00],[0.0000e+00, 4.8500e+02, 7.2000e+01, 8.9300e+02, 4.1249e-01, 0.0000e+00]], device='cuda:0')
id: None
is_track: False
orig_shape: (1080, 810)
shape: torch.Size([4, 6])
xywh: tensor([[143.5000, 651.5000, 197.0000, 509.0000],[740.0000, 634.0000, 140.0000, 488.0000],[284.0000, 630.0000, 120.0000, 452.0000],[ 36.0000, 689.0000,  72.0000, 408.0000]], device='cuda:0')
#省略.................

上面YOLOv8n-pose模型預測,最后還打印輸出了boxes和keypoints。boxes顯示有檢測出的四個框的類別(cls)、四個框的置信度(conf)、 框坐標和置信度(data)、原始圖像尺寸(orig_shape)、邊界框的中心坐標和尺寸(xywh)等等。

結果圖片保存在當前目錄的runs/pose/Predict中,查看如下:

broken?

1.2.?YOLOv8-pose模型導出

使用?airockchip/ultralytics_yolov8?導出適合部署到rknpu上的模型,模型的改動:

  • 修改輸出結構, 移除后處理結構(后處理結果對于量化不友好);

  • dfl結構在NPU處理上性能不佳,移至模型外部的后處理階段,此操作大部分情況下可提升推理性能;

獲取自行訓練或者官方的yolov8-pose模型,根據模型路徑調整./ultralytics/cfg/default.yaml中model路徑,然后導出模型:

(yolov8) llh@anhao: cd ultralytics_yolov8
(yolov8) llh@anhao: export PYTHONPATH=./
(yolov8) llh@anhao: python ./ultralytics/engine/exporter.py
Ultralytics YOLOv8.2.82 🚀 Python-3.9.19 torch-2.4.1+cu121 CPU (Intel Core(TM) i7-14700F)
YOLOv8n-pose summary (fused): 187 layers, 3,289,964 parameters, 0 gradients, 9.2 GFLOPsPyTorch: starting from '../yolov8n-pose.pt' with input shape (16, 3, 640, 640) BCHW and output shape(s) ((), (16, 17, 3, 8400)) (6.5 MB)RKNN: starting export with torch 2.4.1+cu121...RKNN: feed ../yolov8n-pose.onnx to RKNN-Toolkit or RKNN-Toolkit2 to generate RKNN model.
Refer https://github.com/airockchip/rknn_model_zoo/tree/main/models/CV/object_detection/yolo
RKNN: export success ? 0.4s, saved as '../yolov8n-pose.onnx' (12.6 MB)Export complete (3.3s)
Results saved to /xxx/yolov8
Predict:         yolo predict task=pose model=../yolov8n-pose.onnx imgsz=640
Validate:        yolo val task=pose model=../yolov8n-pose.onnx imgsz=640 data=/usr/src/app/ultralytics/datasets/coco-pose.yaml
Visualize:       https://netron.app# 測試使用模型為yolov8n-pose.pt,在對應目錄下生成yolov8n-pose.onnx模型。

可以使用?netron?查看導出的onnx模型的網絡結構:

broken?

1.3.?導出rknn模型

導出的yolov8-pose模型,使用toolkit2將器轉換成rknn模型。

# 獲取配套例程的轉換程序onnx2rknn.py# python onnx2rknn.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>
(toolkit2.2) llh@anhao:/xxx/yolov8$ python onnx2rknn.py ./yolov8n-pose.onnx rk3588 fp
I rknn-toolkit2 version: 2.2.0
--> Config model
done
--> Loading model
I Loading : 100%|██████████████████████████████████████████████| 144/144 [00:00<00:00, 67581.94it/s]
done
--> Building model
W build: The dataset='../datasets/COCO/coco_subset_20.txt' is ignored because do_quantization = False!
I OpFusing 0: 100%|██████████████████████████████████████████████| 100/100 [00:00<00:00, 717.31it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 438.48it/s]
I OpFusing 0 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 373.56it/s]
I OpFusing 1 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 331.13it/s]
I OpFusing 2 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 177.53it/s]
I rknn building ...
I rknn buiding done.
done
--> Export rknn model
output_path: ./yolov8_pose.rknn
done

模型轉換測試設置了目標是rk3588,如果是lbcat-0/1/2,需要設置目標為rk3566/rk3568,并且沒有量化模型。

1.4.?部署測試

YOLOv8-pose模型板卡上部署,其推理和后處理大致步驟:

  • 預處理,對輸入圖像進行letterbox,具體通過rga或者cpu實現,圖像歸一化等操作在rknn模型中;

  • 模型推理;

  • 后處理,根據設置的置信度閾值BOX_THRESH,對檢測框進行篩選,然后對符合要求的檢測框進行解碼,并進行nms,解碼關鍵點,還原到原圖尺度等。

板卡上編譯測試例程,編譯前系統要安裝opencv:

# 魯班貓板卡系統默認是debian或者ubuntu發行版,直接使用apt安裝opencv,或者自行編譯安裝opencv
sudo apt update
sudo apt install libopencv-dev# 獲取教程配套例程,,或者從https://github.com/airockchip/rknn_model_zoo獲取測試例程# 其中-t指定目標設備,這里測試使用lubancat-4,設置rk3588,如果是lubancat-0/1/2就設置rk356x
# 如果系統內存大于4G的,設置參數-d
cat@lubancat:~/xxx$ cd example/yolov8/yolov8_pose
cat@lubancat:~/xxx/example/yolov8/yolov8_pose$ ./build-linux.sh -t rk3588 -d

重要

部署使用的librknnrt庫的版本需要與模型轉換的Toolkit2的版本一致。

編譯輸出程序在當前目錄的install/rk3588_linux中,測試yolov8_pose_image例程:

cat@lubancat:~/xxx/install/$  ./yolov8_pose_image_demo ./model/yolov8_pose.rknn ./model/bus.jpg
load lable ./model/yolov8_pose_labels_list.txt
model input num: 1, output num: 4
input tensors:
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=2457600, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=385, n_dims=4, dims=[1, 65, 80, 80], n_elems=416000, size=832000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=1, name=400, n_dims=4, dims=[1, 65, 40, 40], n_elems=104000, size=208000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=2, name=415, n_dims=4, dims=[1, 65, 20, 20], n_elems=26000, size=52000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=3, name=537, n_dims=4, dims=[1, 17, 3, 8400], n_elems=428400, size=856800, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=640, width=640, channel=3
origin size=640x640 crop size=640x640
input image: 640 x 640, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1
scale=1.000000 dst_box=(0 0 639 639) allow_slight_change=1 _left_offset=0 _top_offset=0 padding_w=0 padding_h=0
src width=640 height=640 fmt=0x1 virAddr=0x0x7fa71f2010 fd=0
dst width=640 height=640 fmt=0x1 virAddr=0x0x7fa70c6000 fd=8
src_box=(0 0 639 639)
dst_box=(0 0 639 639)
color=0x72
rga_api version 1.10.0_[2]
person @ (108 235 224 536) 0.888
person @ (211 241 284 507) 0.872
person @ (476 234 560 518) 0.861
write_image path: out.png width=640 height=640 channel=3 data=0x7fa71f2010

在當前目錄的install/rk3588_linux中,還有一個yolov8_pose_videocapture_demo,可以打開攝像頭或者視頻文件,下面測試打開攝像頭,并拍攝其他屏幕顯示的畫面。

# 執行例程請注意攝像頭的設備號,支持的分辨率,編解碼格式等等,具體請查看yolov8_pose_videocapture_demo.cc源文件
cat@lubancat:~/xxx/install/$ ./yolov8_pose_videocapture_demo ./model/yolov8_pose.rknn 0
load lable ./model/yolov8_pose_labels_list.txt
model input num: 1, output num: 4
input tensors:
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=2457600, fmt=NHWC, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
output tensors:
index=0, name=385, n_dims=4, dims=[1, 65, 80, 80], n_elems=416000, size=832000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=1, name=400, n_dims=4, dims=[1, 65, 40, 40], n_elems=104000, size=208000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=2, name=415, n_dims=4, dims=[1, 65, 20, 20], n_elems=26000, size=52000, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
index=3, name=537, n_dims=4, dims=[1, 17, 3, 8400], n_elems=428400, size=856800, fmt=NCHW, type=FP16, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=640, width=640, channel=3
scale=1.000000 dst_box=(0 80 639 559) allow_slight_change=1 _left_offset=0 _top_offset=80 padding_w=0 padding_h=160
src width=640 height=480 fmt=0x1 virAddr=0x0x55923ea480 fd=0
dst width=640 height=640 fmt=0x1 virAddr=0x0x7f79666000 fd=26
src_box=(0 0 639 479)
dst_box=(0 80 639 559)
color=0x72
rga_api version 1.10.0_[2]
fill dst image (x y w h)=(0 0 640 640) with color=0x72727272
rknn_run
# 省略...................

broken?

更多rknn模型例程請參考?rknn_model_zoo倉庫?。

需要注意:測試usb攝像頭,請確認攝像頭的設備號,修改例程中攝像頭支持的分辨率和MJPG格式等, 如果是mipi攝像頭,需要opencv設置轉換成rgb格式以及設置分辨率大小等等。

12.5.?參考鏈接

Install Ultralytics - Ultralytics YOLO Docs

GitHub - ultralytics/ultralytics: Ultralytics YOLO 🚀

GitHub - airockchip/ultralytics_yolov8: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

GitHub - airockchip/rknn_model_zoo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95245.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信創之-麒麟v10服務器安裝tengine(已完成)

之前的文章太長了&#xff0c;所以單獨寫背景&#xff1a;java8springbootnginxredissqlserverwindows server2000目前java8已經更換&#xff0c;windows也已經更換&#xff0c;sqlserver也已經更換成dm8其實java的靜態文件目錄&#xff0c;可以很好處理前端網站了&#xff0c;…

Redis進階(上)

Redis系統架構中各個處理模塊是干什么的&#xff1f; Redis 系統架構 本課時&#xff0c;我將進一步分析 Redis 的系統架構&#xff0c;重點講解 Redis 系統架構的事件處理機制、數據管理、功能擴展、系統擴展等內容。 事件處理機制 Redis 組件的系統架構如圖所示&#xff0c;主…

【K8s】整體認識K8s之監控與升級/ETCD的備份和恢復/kustomization/CRD

metrics-server 先說一下metrics-server&#xff0c;這是一個聚合器&#xff0c;專門用來顯示集群的資源使用情況&#xff0c;主要是內存和cpu。 安裝 metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.0/comp…

【數據分享】多份土地利用矢量shp數據分享-澳門

而今天要說明數據就是多份土地利用矢量shp數據分享-澳門。數據介紹▲ 土地利用數據&#xff08;2025年&#xff09;▲土地利用數據&#xff08;2018年&#xff09;▲ 30m土地利用數據&#xff08;2023年&#xff09;▲ 公路鐵路道路河流水系數據概況其他概況注&#xff1a;本文…

增強現實—Gated-attention architectures for task-oriented language grounding

&#x1f31f;&#x1f31f; 歡迎來到我的技術小筑&#xff0c;一個專為技術探索者打造的交流空間。在這里&#xff0c;我們不僅分享代碼的智慧&#xff0c;還探討技術的深度與廣度。無論您是資深開發者還是技術新手&#xff0c;這里都有一片屬于您的天空。讓我們在知識的海洋中…

CC攻擊的技術分析與防御策略

CC攻擊&#xff08;Challenge Collapsar Attack&#xff09;是一種針對Web應用的拒絕服務攻擊方式&#xff0c;其主要通過模擬正常用戶行為來消耗服務器資源。為了更好地理解這種攻擊&#xff0c;讓我們詳細分析其技術原理及防御策略。CC攻擊的技術原理CC攻擊主要是通過發送大量…

【圖論】分層圖

一、分層圖的核心思想 分層圖是一種將圖的不同狀態拆分為多個“層”的建模方法&#xff0c;每層對應一種特定狀態。通過這種方式&#xff0c;可以將復雜的狀態轉移問題轉化為多層圖中的最短路徑問題。 核心特點&#xff1a; 層內邊&#xff1a;表示普通操作&#xff08;如正常行…

當穩定幣開始生息:USDT0 與 Berachain 的二次進化故事

如果說過去幾年&#xff0c;穩定幣是 DeFi 世界里最安穩的一塊基石&#xff0c;那么 2025 年的 Berachain 正在把它們重新塑造成一種新的資產類型。在這條新興的公鏈上&#xff0c;穩定幣不再只是 “資金的搬運工”&#xff0c;而是搖身一變&#xff0c;成為能生息、能博弈、能…

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析 消息隊列作為分布式系統中常見的異步解耦組件&#xff0c;在高并發場景下對可用性和性能提出了極高的要求。本文基于生產環境需求&#xff0c;深入分析 Kafka、RabbitMQ 與 RocketMQ 三大主流消息中間件在高…

深入理解 HTTP 與 HTTPS:區別以及 HTTPS 加密原理

目錄 一、HTTP 與 HTTPS 的基本概念 二、HTTP 與 HTTPS 的核心區別 三、為什么需要 HTTPS&#xff1f; 四、HTTPS 的加密通信原理&#xff08;核心&#xff09; 1. 客戶端發起 HTTPS 請求 2. 服務端返回 SSL/TLS 證書 3. 客戶端驗證證書 4. 客戶端生成對稱密鑰并用公鑰…

零售行業的 AI 革命:從用戶畫像到智能供應鏈,如何讓 “精準營銷” 不再是口號?

AI 浪潮下的零售變革?在科技飛速發展的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的態勢席卷全球&#xff0c;深刻地改變著各行各業的運營模式和發展軌跡&#xff0c;零售行業自然也難以置身事外。AI 技術憑借其強大的數據處理能力、精準的分析預測能力…

PyTorch 面試題及詳細答案120題(96-105)-- 性能優化與調試

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 96. 如何查看PyTorch模型的…

Linux 孤兒進程 (Orphan Process)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄孤…

Linux Tun/Tap 多隊列技術

&#x1f525; Linux Tun/Tap 多隊列技術 引用&#xff1a;Linux tun/tap 驅動多隊列模式&#xff08;C/C&#xff09; &#x1f4d6; 引言 Tun/Tap 是 Linux 內核提供的虛擬網絡設備&#xff0c;廣泛應用于 VPN、虛擬化、網絡隧道等領域。傳統單隊列模式在高吞吐量場景下存…

docker 啟動一個clickhouse , docker 創建ck數據庫

1. 拉鏡像&#xff1a;docker pull clickhouse/clickhouse-server2. 創建容器并且啟動命令&#xff1a;docker run -d --name clickhouse-server \-p 8123:8123 -p 9000:9000 \clickhouse/clickhouse-server3. 日志文件的映射&#xff0c;可以自己配置下&#xff0c;目前創建的…

合約服務架構-OOP 方式

文章目錄前言&#x1f3af; 經典的面向對象編程&#xff01;1. &#x1f3d7;? **封裝 (Encapsulation)**2. &#x1f9ec; **繼承 (Inheritance)**3. &#x1f3ad; **多態 (Polymorphism)**4. &#x1f3a8; **抽象 (Abstraction)**&#x1f3db;? 設計模式的應用1. **工廠…

C# 生成器模式(一個投資跟蹤程序)

一個投資跟蹤程序 我們考慮一個稍微簡單一點的例子&#xff0c;在這個例子中&#xff0c;用一個類構造一個用戶界面。假設我 們要編寫一個程序來跟蹤投資的效益。我們有股票、債券和基金等投資項目&#xff0c;對每一種投資項 目都要顯示持有量的列表&#xff0c;這樣就能夠選擇…

【DBCExcelConvent】CAN報文解析輔助工具之DBC與Excel互轉

前言 CAN總線翻譯文件DBC是整車解析過程中非常核心的一部分&#xff0c;因此為了能被各大CAN工具解析&#xff0c;它也有自己的一套編碼規則。但并不是無時無刻都有條件打開該文件&#xff0c;對于工程師而言。其實比較直觀和通用的大多數還是Excel表格。因此&#xff0c;為了打…

如何將iPhone日歷傳輸到電腦

iPhone日歷是i設備上一個非常出色的內置應用程序&#xff0c;可以幫助你創建、查看和管理日程或事件。對于所有iPhone用戶來說&#xff0c;在iPhone日歷上添加新事件非常容易。然而&#xff0c;當涉及到將日歷從iPhone傳輸到電腦時&#xff0c;許多人可能會感到困惑&#xff0c…

TDengine 3.3.7.0 新增性能基準工具 taosgen

taosgen 工具參考手冊 taosgen 是時序數據領域產品的性能基準測試工具&#xff0c;支持數據生成、寫入性能測試等功能。taosgen 以“作業”為基礎單元&#xff0c;作業是由用戶定義&#xff0c;用于完成特定任務的一組操作集合。每個作業包含一個或多個步驟&#xff0c;并可通…