国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程

這篇具有很好參考價(jià)值的文章主要介紹了瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

瑞芯微平臺(tái)YOLOV5算法的部署

本文實(shí)現(xiàn)整體的部署流程比較小白,首先在PC上分別實(shí)現(xiàn)工程中的模型仿真推理、yolov5-pytorch仿真推理、自己訓(xùn)練yolov5模型仿真推理,完成仿真之后再在板端分別實(shí)現(xiàn)rk提供模型的板端推理、yolov5-pytorch板端推理、自己訓(xùn)練的yolov5模型板端推理,最后實(shí)現(xiàn)自己訓(xùn)練的yolov5模型實(shí)時(shí)視頻算法部署,整個(gè)過程從仿真到板端,從圖片到視頻,過程較為繁瑣,各位大佬們可以根據(jù)自己的情況選擇跳過某些章節(jié)。接下來我們就一塊開始部署之旅吧!

一. 部署概述

環(huán)境:Ubuntu20.04、python3.8

芯片:RK3568

芯片系統(tǒng):buildroot

開發(fā)板:RP-RK3568-B

依賴:Qt + opencv + rknn + rga實(shí)現(xiàn)視頻流采集縮放識(shí)別到輸出顯示,支持USB攝像頭、mipi攝像頭等,輸出支持mipi、hdmi

開發(fā)主要參考文檔:《Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.4.0.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_CN-1.4.0.pdf》

二.yolov5模型訓(xùn)練

訓(xùn)練過程網(wǎng)上的博客已經(jīng)非常完善,不過要注意一下下面提到的yolov5版本,簡單記錄一下步驟。

2.1創(chuàng)建conda環(huán)境

PC機(jī):win10

CUDA:11.7

# 創(chuàng)建conda環(huán)境
conda create -n rkyolov5 python=3.8
# 激活conda環(huán)境
conda activate rkyolov5
# 刪除所有鏡像源
conda config --remove-key channels
# 安裝pytoch
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

安裝pytorch到官網(wǎng)下載對(duì)應(yīng)的CUDA版本。

2.2訓(xùn)練yolov5

對(duì)應(yīng)版本的yolov5鏈接:https://github.com/ultralytics/yolov5/tree/c5360f6e7009eb4d05f14d1cc9dae0963e949213

此版本為v5.0,相應(yīng)的權(quán)重文件可對(duì)應(yīng)從官網(wǎng)下載;

將yolov5的激活函數(shù)由silu改為relu,會(huì)損失精度但能帶來性能的提升。

以下QA記錄訓(xùn)練時(shí)的報(bào)錯(cuò)信息。

Q:UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at TensorShape.cpp:2228.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]

A:functional.py文件中,將 return _VF.meshgrid(tensors, **kwargs)改為 return _VF.meshgrid(tensors, **kwargs,indexing=‘ij’)

Q:RuntimeError: result type Float can‘t be cast to the desired output type __int64

A:loss.py文件中修改

  • anchors = self.anchors[i] 為anchors, shape = self.anchors[i], p[i].shape

  • indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices

    indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1))) # image, anchor, grid

三.Ubuntu環(huán)境搭建

根據(jù)文檔中所寫,RK官方提供了兩種環(huán)境搭建方法:一是通過 Python 包安裝與管理工具 pip 進(jìn)行安裝;二是運(yùn)行帶完整 RKNN-Toolkit2 工具包的 docker 鏡像。
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

建議采用通過Docker鏡像安裝的方式,后續(xù)不用擔(dān)心因環(huán)境搭建引起的問題。其中包含docker鏡像的安裝包在瑞芯微github項(xiàng)目主頁提供的百度企業(yè)網(wǎng)盤鏈接中,從網(wǎng)盤下載的rknn-toolkit2和github拉取的區(qū)別在于是否包含docker鏡像,rknn-npu2項(xiàng)目可以直接從github/rockchip-linux/rknpu2拉取最新代碼。

下面給出在項(xiàng)目中常用到的docker命令:

docker images // 列出docker中的鏡像
<ctrl + D> // 退出容器
docker ps // 列出正在運(yùn)行的容器
docker ps -a // 列出所有的容器
docker start -i <id of image> // 啟動(dòng)容器

docker安裝后執(zhí)行如下命令:

# 加載鏡像
rockchip@rockchip-virtual-machine:~/NPU/rknn-toolkit2-1.4.0/docker$ docker load --input rknn-toolkit2-1.4.0-cp38-docker.tar.gz 
feef05f055c9: Loading layer [==================================================>]  75.13MB/75.13MB
27a0fcbed699: Loading layer [==================================================>]  3.584kB/3.584kB
f62852363a2c: Loading layer [==================================================>]    424MB/424MB
d3193fc26692: Loading layer [==================================================>]  4.608kB/4.608kB
85943b0adcca: Loading layer [==================================================>]  9.397MB/9.397MB
0bec62724c1a: Loading layer [==================================================>]  9.303MB/9.303MB
e71db98f482d: Loading layer [==================================================>]  262.1MB/262.1MB
bde01abfb33a: Loading layer [==================================================>]  4.498MB/4.498MB
da9eed9f1e11: Loading layer [==================================================>]  5.228GB/5.228GB
85893de9b3b8: Loading layer [==================================================>]  106.7MB/106.7MB
0c9ec6e0b723: Loading layer [==================================================>]  106.7MB/106.7MB
d16b85c303bc: Loading layer [==================================================>]  106.7MB/106.7MB
Loaded image: rknn-toolkit2:1.4.0-cp38

# 檢查鏡像
rockchip@rockchip-virtual-machine:~/NPU/rknn-toolkit2-1.4.0/docker$ docker images
REPOSITORY      TAG          IMAGE ID       CREATED         SIZE
rknn-toolkit2   1.4.0-cp38   afab63ce3679   7 months ago    6.29GB
hello-world     latest       feb5d9fea6a5   19 months ago   13.3kB

# 運(yùn)行鏡像并將examples映射到鏡像空間。根據(jù)自己路徑修改命令中的路徑。
rockchip@rockchip-virtual-machine:~/NPU/rknn-toolkit2-1.4.0/docker$ docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v /home/rockchip/NPU/rknn-toolkit2-1.4.0/examples/:/examples rknn-toolkit2:1.4.0-cp38 /bin/bash
root@129da9263f1e:/# 
root@129da9263f1e:/# 
root@129da9263f1e:/# 
root@129da9263f1e:/# ls
bin  boot  dev  etc  examples  home  lib  lib32  lib64  libx32  media  mnt  opt  packages  proc  root  run  sbin  srv  sys  tmp  usr  var

# 運(yùn)行demo
root@129da9263f1e:/examples/tflite/mobilenet_v1# python3 test.py 
W __init__: rknn-toolkit2 version: 1.4.0-22dcfef4
--> Config model
W config: 'target_platform' is None, use rk3566 as default, Please set according to the actual platform!
done
--> Loading model
2023-04-20 15:21:12.334160: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/lib/python3.8/dist-packages/cv2/../../lib64:
2023-04-20 15:21:12.334291: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
done
--> Building model
I base_optimize ...
I base_optimize done.
I …………………………………………
D RKNN: [15:21:23.735] ----------------------------------------
D RKNN: [15:21:23.735] Total Weight Memory Size: 4365632
D RKNN: [15:21:23.735] Total Internal Memory Size: 1756160
D RKNN: [15:21:23.735] Predict Internal Memory RW Amount: 10331296
D RKNN: [15:21:23.735] Predict Weight Memory RW Amount: 4365552
D RKNN: [15:21:23.735] ----------------------------------------
D RKNN: [15:21:23.735] <<<<<<<< end: N4rknn21RKNNMemStatisticsPassE
I rknn buiding done
done
--> Export rknn model
done
--> Init runtime environment
W init_runtime: Target is None, use simulator!
done
--> Running model
Analysing : 100%|█████████████████████████████████████████████████| 60/60 [00:00<00:00, 1236.81it/s]
Preparing : 100%|██████████████████████████████████████████████████| 60/60 [00:00<00:00, 448.14it/s]
mobilenet_v1
-----TOP 5-----
[156]: 0.9345703125
[155]: 0.0570068359375
[205]: 0.00429534912109375
[284]: 0.003116607666015625
[285]: 0.00017178058624267578

done

到此環(huán)境已全部配置完成。

四.測試rk官方提供的yolov5s.onnx

進(jìn)入目錄/NPU/rknn-toolkit2-1.4.0/examples/onnx/yolov5,執(zhí)行

>>> python3 test.py
class: person, score: 0.8223356008529663
box coordinate left,top,right,down: [473.26745200157166, 231.93780636787415, 562.1268351078033, 519.7597033977509]
class: person, score: 0.817978024482727
box coordinate left,top,right,down: [211.9896697998047, 245.0290389060974, 283.70787048339844, 513.9374527931213]
class: person, score: 0.7971192598342896
box coordinate left,top,right,down: [115.24964022636414, 232.44154334068298, 207.7837154865265, 546.1097872257233]
class: person, score: 0.4627230763435364
box coordinate left,top,right,down: [79.09242534637451, 339.18042743206024, 121.60038471221924, 514.234916806221]
class: bus , score: 0.7545359134674072
box coordinate left,top,right,down: [86.41703361272812, 134.41848754882812, 558.1083570122719, 460.4184875488281]

執(zhí)行完在此路徑下可以看到生成了一張result.jpg,打開可以看到預(yù)測結(jié)果圖。

五.轉(zhuǎn)換yolov5s-Pytorch模型并測試推理

5.1pt轉(zhuǎn)onnx

各個(gè)軟件包都要注意版本!注意版本!注意版本!

pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 
pillow==8.4.0
protobuf==3.20
onnx==1.9.0
opset version:12

轉(zhuǎn)換步驟:

  • 修改models/yolo.py,修改class Detect(nn.Module):forward函數(shù),注意?。?!僅在轉(zhuǎn)換時(shí)修改,在訓(xùn)練時(shí)改回原狀態(tài)!再訓(xùn)練時(shí)不要忘記哦!

    	# def forward(self, x):
        #     z = []  # inference output
        #     for i in range(self.nl):
        #         x[i] = self.m[i](x[i])  # conv
        #         bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)
        #         x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
        #
        #         if not self.training:  # inference
        #             if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:
        #                 self.grid[i] = self._make_grid(nx, ny).to(x[i].device)
        #
        #             y = x[i].sigmoid()
        #             if self.inplace:
        #                 y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
        #                 y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
        #             else:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953
        #                 xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy
        #                 wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2)  # wh
        #                 y = torch.cat((xy, wh, y[..., 4:]), -1)
        #             z.append(y.view(bs, -1, self.no))
        #
        #     return x if self.training else (torch.cat(z, 1), x)
    
        def forward(self, x):
            z = []  # inference output
            for i in range(self.nl):
                x[i] = self.m[i](x[i])  # conv
    
            return x
    
  • 修改export.py函數(shù)的--opset為12

  • 運(yùn)行export.py

  • 簡化模型

    python -m onnxsim weights/yolov5s.onnx weights/yolov5s-sim.onnx
    

5.2onnx轉(zhuǎn)rknn并在PC上仿真測試

與第四節(jié)轉(zhuǎn)換步驟相同,重新復(fù)制yolov5文件夾為myolov5,放入5.1節(jié)得到的yolov5s-sim模型,重命名為yolov5s.onnx,再運(yùn)行test.py,推理結(jié)果如下:

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

六.轉(zhuǎn)換自訓(xùn)練模型并測試推理

作者用自己的數(shù)據(jù)集訓(xùn)練了一個(gè)簡單的模型用來測試,模型的類別數(shù)為4。

6.1pt轉(zhuǎn)onnx

此轉(zhuǎn)換步驟與5.1節(jié)轉(zhuǎn)換步驟相同。

6.2onnx轉(zhuǎn)rknn并在PC上仿真測試

修改examples/onnx/myolov5/test.py文件

  • 修改onnx路徑
  • 修改rknn保存路徑
  • 修改img測試圖片路徑
  • 修改類別數(shù)

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法
修改完成后運(yùn)行腳本,獲得推理坐標(biāo)值和rknn模型文件,推理結(jié)果如下:
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

七.rk官方提供模型板端推理

運(yùn)行前準(zhǔn)備:

  • 確保PC上已配置交叉編譯工具鏈

  • 開發(fā)板刷入Linux系統(tǒng),本次刷入builtroot系統(tǒng)測試

進(jìn)入/NPU/rknpu2/examples/rknn_yolov5_demo_v5/convert_rknn_demo復(fù)制一份重命名為yolov5_3568,進(jìn)入目錄,修改onnx2rknn.py,運(yùn)行腳本,將onnx轉(zhuǎn)為rknn;

進(jìn)入rockchip/NPU/rknpu2/examples/rknn_yolov5_demo目錄,運(yùn)行腳本編譯程序:

bash ./build-linux_RK356X.sh

編譯成功會(huì)生成一個(gè)install/和build/文件夾,

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

install文件夾下的文件全部復(fù)制到開發(fā)板中,進(jìn)入開發(fā)板中運(yùn)行程序測試推理:

[root@RK356X:/mnt/rknn_yolov5_demo_Linux]# ./rknn_yolov5_demo ./model/RK356X/yolov5s-640-640.rknn ./model/bus.jpg
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Read ./model/bus.jpg ...
img width = 640, img height = 640
Loading mode...
sdk version: 1.4.0 (a10f100eb@2022-09-09T09:07:14) driver version: 0.4.2
model input num: 1, output num: 3
  index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=0, name=334, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=77, scale=0.080445
  index=1, name=353, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=56, scale=0.080794
  index=2, name=372, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=69, scale=0.081305
model is NHWC input fmt
model input height=640, width=640, channel=3
once run use 61.952000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (114 235 212 527) 0.819099
person @ (210 242 284 509) 0.814970
person @ (479 235 561 520) 0.790311
bus @ (99 141 557 445) 0.693320
person @ (78 338 122 520) 0.404960
loop count = 10 , average run  60.485800 ms

推理結(jié)果如下:
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

八.yolov5s-Pytorch模型板端推理

進(jìn)入rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_v5/convert_rknn_demo/yolov5目錄,修改onnx2rknn.py
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

運(yùn)行onnx2rknn.py

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

復(fù)制model到rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_v5/model/RK356X中,運(yùn)行build-linux_RK356X.sh,編譯成功會(huì)生成一個(gè)install/和build/文件夾,
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

通過SD卡等方式將install文件夾整個(gè)復(fù)制到開發(fā)板的/mnt目錄,賦予rknn_yolov5_demo可執(zhí)行權(quán)限,運(yùn)行程序獲取推理結(jié)果:

[root@RK356X:/mnt/rknn_yolov5_demo_Linux]# ./rknn_yolov5_demo ./model/RK356X/yolov5s-640-640.rknn ./model/bus.jpg
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Read ./model/bus.jpg ...
img width = 640, img height = 640
Loading mode...
sdk version: 1.4.0 (a10f100eb@2022-09-09T09:07:14) driver version: 0.4.2
model input num: 1, output num: 3
  index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=0, name=334, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=77, scale=0.080445
  index=1, name=353, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=56, scale=0.080794
  index=2, name=372, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=69, scale=0.081305
model is NHWC input fmt
model input height=640, width=640, channel=3
once run use 62.407000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (114 235 212 527) 0.819099
person @ (210 242 284 509) 0.814970
person @ (479 235 561 520) 0.790311
bus @ (99 141 557 445) 0.693320
person @ (78 338 122 520) 0.404960
loop count = 10 , average run  77.491700 ms

圖像推理結(jié)果:
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

九.用自己數(shù)據(jù)集訓(xùn)練的模型板端推理

  1. 進(jìn)入rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_v5/convert_rknn_demo/yolov5目錄,修改onnx2rknn.py
    瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

  1. 修改dataset.txt

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

  1. 運(yùn)行onnx2rknn.py
    瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

  2. 復(fù)制rknn模型到rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_c4/model/RK356X

  3. 進(jìn)入 rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_c4/model目錄,修改coco_80_labels_list.txt
    瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

6.修改rockchip/NPU/rknpu2/examples/rknn_yolov5_demo_c4/include/postprocess.h,修改類別數(shù)和置信度閾值:

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

7.運(yùn)行build-linux_RK356X.sh,編譯成功會(huì)生成一個(gè)install/和build/文件夾:

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

8.通過SD卡等方式將install文件夾整個(gè)復(fù)制到開發(fā)板的/mnt目錄,賦予rknn_yolov5_demo可執(zhí)行權(quán)限,運(yùn)行程序獲取推理結(jié)果:

[root@RK356X:/mnt/rknn_yolov5_demo_Linux_c4]# chmod a+x rknn_yolov5_demo
[root@RK356X:/mnt/rknn_yolov5_demo_Linux_c4]# ./rknn_yolov5_demo ./model/RK356X/best-sim.rknn ./model/per_car.jpg
post process config: box_conf_threshold = 0.25, nms_threshold = 0.25
Read ./model/per_car.jpg ...
img width = 640, img height = 640
Loading mode...
sdk version: 1.4.0 (a10f100eb@2022-09-09T09:07:14) driver version: 0.4.2
model input num: 1, output num: 3
  index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
  index=0, name=output, n_dims=4, dims=[1, 27, 80, 80], n_elems=172800, size=172800, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=64, scale=0.122568
  index=1, name=320, n_dims=4, dims=[1, 27, 40, 40], n_elems=43200, size=43200, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=38, scale=0.110903
  index=2, name=321, n_dims=4, dims=[1, 27, 20, 20], n_elems=10800, size=10800, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=36, scale=0.099831
model is NHWC input fmt
model input height=640, width=640, channel=3
once run use 86.341000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (61 190 284 520) 0.907933
car @ (381 370 604 446) 0.897453
car @ (343 366 412 394) 0.873785
car @ (404 367 429 388) 0.628984
car @ (425 361 494 388) 0.365345
loop count = 10 , average run  96.655700 ms

推理效果如下:
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

十.用自己數(shù)據(jù)集訓(xùn)練的模型板端實(shí)時(shí)視頻推理

10.1 視頻輸入輸出調(diào)試

此步驟原本想采用rockit框架去進(jìn)行視頻采集到輸出和Qt獲取圖像的方式,此框架API對(duì)于有海思平臺(tái)開發(fā)經(jīng)驗(yàn)的人來說容易上手,但在調(diào)試時(shí)發(fā)現(xiàn)對(duì)于3588平臺(tái)可以使用rockit采集到輸出,在3568平臺(tái)一直卡在打開攝像頭這一步,如果你使用的是RK3588/RK3588S可以使用rockit框架完成原始視頻數(shù)據(jù)的采集,作者最終使用了opencv去獲取攝像頭圖像并送顯。

10.2測試Qt框架采集圖像

使用Qt框架采集圖像需依賴于opencv,可以參考網(wǎng)上的博客完成opencv的交叉編譯。

QImages經(jīng)過opencv轉(zhuǎn)為Mat,Mat送入RKNN進(jìn)行推理并畫框,Mat再轉(zhuǎn)為QImages到QPixmap輸出顯示。

集成Qt的視頻采集顯示程序以及官方y(tǒng)olo檢測程序,經(jīng)調(diào)試程序已實(shí)現(xiàn)yolov5實(shí)時(shí)識(shí)別,完整工程代碼已在Github開源,代碼路徑。
效果如下:
瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程,YOLO,音視頻,算法

PS:RK平臺(tái)CPU GPU NPU DDR定頻和性能模式設(shè)置方法

要想發(fā)揮芯片的最大性能,可以進(jìn)行如下操作對(duì)CPU、NPU等硬件進(jìn)行調(diào)頻。

查看NPU可設(shè)置頻率:

[root@RK356X:/]# cat /sys/class/devfreq/fde40000.npu/available_frequencies
200000000 297000000 400000000 600000000 700000000 800000000 900000000

查看NPU當(dāng)前頻率:

[root@RK356X:/]# cat /sys/class/devfreq/fde40000.npu/cur_freq
600000000

設(shè)置NPU頻率:

[root@RK356X:/]# echo 900000000 > /sys/class/devfreq/fde40000.npu/userspace/set_freq
[root@RK356X:/]# cat /sys/class/devfreq/fde40000.npu/cur_freq
900000000

再次運(yùn)行rknn推理單張圖片耗時(shí)減少10ms,若要發(fā)揮最大性能,將CPU、DDR、GPU頻率均設(shè)置為最高頻率。測試速度在rk3568上最快為70ms。

另一個(gè)提速方式,將silu改為relu,根據(jù)網(wǎng)上測試表現(xiàn)單張圖片可達(dá)到40ms,有興趣的小伙伴可以嘗試。

參考網(wǎng)址:https://www.yii666.com/blog/354522.html文章來源地址http://www.zghlxwxcb.cn/news/detail-735077.html

到了這里,關(guān)于瑞芯微RK3568/RK3588平臺(tái)YOLOV5實(shí)時(shí)視頻算法的部署小白教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 瑞芯微RK3588,交叉編譯opencv

    這里以opencv-4.6.0為例子。 下載: opencv-4.6.0 opencv_contrib-4.6.0 .cache 提取碼:0816 eigen-3.3.9. ffmpeg-6.0 yasm-1.3.0 交叉編譯器_gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz 注意:不要關(guān)閉當(dāng)前終端!后面編譯opencv也在當(dāng)前終端。這里很重要! 安裝libgtk2.0-dev時(shí)的報(bào)錯(cuò),解決方案 以上,有

    2024年02月08日
    瀏覽(92)
  • 迅為RK3588開發(fā)板-基于瑞芯微RK3588攝像頭方案

    迅為RK3588開發(fā)板-基于瑞芯微RK3588攝像頭方案

    硬件: RK3588開發(fā)板+攝像頭 ? MIPI攝像頭: ? 1.1 硬件連接 RK3588?底板上有四個(gè)攝像頭接口,如下圖所示,此四個(gè)接口均可連接攝像頭?ov5695?和?攝像頭?ov13850。 ? 攝像頭模塊連接硬件時(shí)要將模塊對(duì)準(zhǔn)插槽缺口處,J1?接口連接攝像頭模塊如下圖所示: ? J2?接口連接攝像頭模塊

    2024年02月09日
    瀏覽(115)
  • 瑞芯微RK3568驅(qū)動(dòng)配置之十串口

    基于飛凌的開發(fā)板設(shè)計(jì),這里需要使用到RK3568的串口,開發(fā)板只開放了UART2、UART3、UART4、UART5、UART8。查看文檔,準(zhǔn)備配置UART0、UART6、UART7、UART9。一共9個(gè)串口使用。剩下的一個(gè)串口被網(wǎng)口1占用,暫時(shí)不修改。 修改設(shè)備樹DTS文件配置。 地址: /home/forlinx/3568/OK3568-linux-source/k

    2024年02月13日
    瀏覽(89)
  • 瑞芯微RK3568開發(fā):GPIO實(shí)踐篇

    瑞芯微RK3568開發(fā):GPIO實(shí)踐篇

    ? ? ? ? SOC平臺(tái)各類GPIO構(gòu)建原理是大道一統(tǒng)的,在各個(gè)諸如狀態(tài)、數(shù)據(jù)、中斷和屏蔽等寄存器具體含義用法,有少許差異。玩好RK的GPIO,需要先理解這類通用接口的框架。 ? ? ? ? 介紹RK3568的GPIO,認(rèn)為講2類重要地址和記錄幾種編程實(shí)踐方法即可。 一、2類地址 ? ? ? ? RK

    2024年02月10日
    瀏覽(163)
  • 瑞芯微rk3568移植openharmony3.1(鴻蒙)

    openharmony的移植推薦使用Ubuntu18.04,需要安裝的依賴庫文件。 獲取openharmony官方源碼。 下載完成后,可以改一下調(diào)試口的波特率,因?yàn)槟J(rèn)的是1500000,串口工具會(huì)有亂碼,或者出現(xiàn)無法輸入的問題,修改為115200??梢灾苯有薷哪_本文件。腳本文件有規(guī)則限制,只改一下波特率

    2024年02月11日
    瀏覽(91)
  • 史上最全! 瑞芯微RK3568核心板評(píng)估板資源分享!

    史上最全! 瑞芯微RK3568核心板評(píng)估板資源分享!

    高性能處理器 :采用四核A55架構(gòu)CPU,G52 GPU;內(nèi)置NPU,可提供1T算力 高可靠性設(shè)計(jì) :支持DDR及CPU Cache全鏈路ECC 內(nèi)置自研ISP圖像處理器 :8M@30fps處理能力,強(qiáng)大的HDR功能,支持畸變矯正、去霧、噪點(diǎn)消除等功能 豐富的顯示、外設(shè)及拓展接口 :內(nèi)置HDMI/eDP/LVDS/MIPI/RGB/T-CON顯示接口

    2023年04月27日
    瀏覽(91)
  • 瑞芯微RK3568開發(fā)板保姆級(jí)護(hù)航入門學(xué)習(xí)嵌入式

    瑞芯微RK3568開發(fā)板保姆級(jí)護(hù)航入門學(xué)習(xí)嵌入式

    專為3568編寫|迅為原創(chuàng)|拒絕網(wǎng)絡(luò)拼湊 20+個(gè)手冊(cè)2800+頁手冊(cè)進(jìn)行結(jié)構(gòu)分層適用于學(xué)習(xí)與開發(fā) 為了方便大家清晰快速的學(xué)習(xí),迅為iTOP-3568開發(fā)板手冊(cè)資料全面升級(jí),對(duì)手冊(cè)內(nèi)容進(jìn)行了結(jié)構(gòu)分層,共計(jì)20+個(gè)文檔,超2800+頁的資料專為iTOP-3568開發(fā)板編寫。適用于各種層面的學(xué)習(xí)者學(xué)習(xí)

    2024年02月14日
    瀏覽(89)
  • ARM應(yīng)用之瑞芯微RK3568上使用QT+Opencv

    手上有一塊RK3568板子,正好官方SDK提供了opencv和QT的環(huán)境,就整個(gè)QT+OPENCV的簡單應(yīng)用玩玩。老鐵們可以從整個(gè)簡單示例開始疊加復(fù)雜功能了。 配置編譯文件 直接在qt的配置文件中添加opencv庫即可。 處理圖像 這里直接使用USB采集的圖像進(jìn)行處理。通過ioctl配置參數(shù)。就取了個(gè)

    2024年02月13日
    瀏覽(138)
  • 20230513查找瑞芯微RK3588開發(fā)板以及對(duì)DP接口的支持

    20230513查找瑞芯微RK3588開發(fā)板以及對(duì)DP接口的支持

    20230513查找瑞芯微RK3588開發(fā)板以及對(duì)DP接口的支持 2023/5/13 17:43 01、t-firefly https://www.t-firefly.com/ https://www.t-firefly.com/product/industry/aio1684xjd4 https://www.t-firefly.com/product/industry/aio3588q https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-24889843124.9.1d9d26b9n2njehid=691628748981 AIO-3588Q 8K AI核心板8nm A76

    2024年02月04日
    瀏覽(97)
  • 瑞芯微RK3588J安裝linux的ubuntu系統(tǒng)/刷機(jī)全步驟

    瑞芯微RK3588J安裝linux的ubuntu系統(tǒng)/刷機(jī)全步驟

    1.通過https://wiki.t-firefly.com/zh_CN/Core-3588J/index.html進(jìn)入ITX3588J開發(fā)板說明書,在“升級(jí)固件”中選擇“使用USB線纜升級(jí)固件”。 ?2.按照要求下載壓縮包。 3.在開發(fā)板說明書目錄最下端“資料下載”處下載“Ubuntu固件”。 4.使用 Type-C 數(shù)據(jù)線一端連接主機(jī),一端連接開發(fā)板。電源

    2024年02月12日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包