github仓库
- 所需:
- 安装了Ubuntu20系统的RK3588
- 安装了Ubuntu18的电脑或者虚拟机
Anaconda教程
YOLOv5教程
经过上面两个教程之后,你应该获取了自己的best.pt
文件
- 将
models/yolo.py
文件中的class
类下的forward
函数由:
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.dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)
if isinstance(self, Segment): # (boxes + masks)
xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4)
xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i] # xy
wh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i] # wh
y = torch.cat((xy, wh, conf.sigmoid(), mask), 4)
else: # Detect (boxes only)
xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4)
xy = (xy * 2 + self.grid[i]) * self.stride[i] # xy
wh = (wh * 2) ** 2 * self.anchor_grid[i] # wh
y = torch.cat((xy, wh, conf), 4)
z.append(y.view(bs, self.na * nx * ny, self.no))
return x if self.training else (torch.cat(z, 1),) if self.export 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
文件中的run
函数下的语句:
shape = tuple((y[0] if isinstance(y, tuple) else y).shape) # model output shape
改为:
shape = tuple((y[0] if isinstance(y, tuple) else y)) # model output shape
- 将你训练模型对应的
run/train/
目录下的exp/weighst/best.pt
文件移动至与export.py
同目录下 - 保证工作目录位于yolov5主文件夹,在控制台执行语句:
cd yolov5
python export.py --weights best.pt --img 640 --batch 1 --include onnx --opset 12
- 然后在主文件夹下出现了一个
best.onnx
文件,在Netron中查看模型是否正确 - 点击左上角菜单->Properties…
- 查看右侧
OUTPUTS
是否出现三个输出节点,是则ONNX模型转换成功。 - 如果转换好的
best.onnx
模型不是三个输出节点,则不用尝试下一步,会各种报错。
-
我使用的是
VMWare
虚拟机安装的Ubuntu18.04
系统,注意,不是在RK3588
上,是在你的电脑或者虚拟机上操作这一步骤。 -
rknn-toolkit2-1.4.0
所需python
版本为3.6
所以需要安装Miniconda
来帮助管理。 -
安装
Miniconda for Linux
- 进入到下载得到的
Miniconda3-latest-Linux-x86_64.sh
所在目录chmod +x Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh
- 提示什么都一直同意,直到安装完毕。
- 安装成功后,重新打开终端。
- 如果安装成功,终端最前面应该会有一个
(base)
- 安装失败的去参考别的
Miniconda3
安装教程。 - 创建虚拟环境:
conda create -n rknn3.6 python=3.6
- 激活虚拟环境:
conda activate rknn3.6
- 激活成功时,终端最前面应该会有一个
(rknn3.6)
- 进入到下载得到的
-
下载
rknn-toolkit2-1.4.0
- 到Ubuntu,下载
源代码
下的RK356X/RK3588 RKNN SDK
- 进入百度网盘:
RKNN_SDK-> RK_NPU_SDK_1.4.0
下载rknn-toolkit2-1.4.0
- 下载到Ubuntu后,进入
rknn-toolkit2-1.4.0
目录pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl
- 等待安装完毕检查是否安装成功:
python from rknn.api import RKNN
- 如果没有报错则成功。
- 如果报错:
- 1.是否处于
rknn3.6
虚拟环境下; - 2.
pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl
是否报错; - 3.
pip install
报错的时候,提示缺什么就用pip install
或者sudo apt-get install
安装什么;
- 1.是否处于
- 到Ubuntu,下载
-
上述所需都安装并且验证成功,则开始下一步。文章来源:https://www.toymoban.com/news/detail-463236.html
-
将
best.onnx
模型转换为best.rknn
模型文章来源地址https://www.toymoban.com/news/detail-463236.html- 进入转换目录:
cd examples/onnx/yolov5
- 最好是复制一份
test.py
出来进行修改:cp test.py ./mytest.py
- 将一开始定义的文件进行修改,这是我修改之后的:
ONNX_MODEL = 'best.onnx' #待转换的onnx模型 RKNN_MODEL = 'best.rknn' #转换后的rknn模型 IMG_PATH = './1.jpg' #用于测试图片 DATASET = './dataset.txt' #用于测试的数据集,内容为多个测试图片的名字 QUANTIZE_ON = True #不修改 OBJ_THRESH = 0.25 #不修改 NMS_THRESH = 0.45 #不修改 IMG_SIZE = 640 #不修改 CLASSES = ("person") #修改为你所训练的模型所含的标签
- 将
if __name__ == '__main__':
中的语句:rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]])
- 修改为
rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')
- 想要程序执行完,展示推理效果,将以下语句:
# cv2.imshow("post process result", img_1) # cv2.waitKey(0) # cv2.destroyAllWindows()
- 注释打开:
cv2.imshow("post process result", img_1) cv2.waitKey(0) cv2.destroyAllWindows()
- 终端执行:
python mytest.py
- 运行完展示效果,以及文件夹中出现
best.rknn
则该步骤成功。
- 进入转换目录:
- 在
RKNN3588
的Ubuntu20
系统上安装Miniconda
,需要注意的是,RKNN3588
的Ubuntu20
系统为aarch
架构因此下载的Miniconda
版本和之前有所不同,需要选择对应的aarch
版本。 aarchMiniconda下载
- 安装不再赘述。
- 创建虚拟环境,因为在
RK3588
上要用到rknn-toolkit-lite2
所以需要安装python3.7
:- conda create -n rknnlite3.7 python=3.7
- conda activate rknnlite3.7
- 下载
rknn-toolkit-lite2
到RK3588
,也就是下载rknn-toolkit2-1.4.0
,不再赘述。 - 安装
rknn-toolkit-lite2
- 进入
rknn-toolkit2-1.4.0/rknn-toolkit-lite2
目录pip install packages/rknn_toolkit_lite2-1.4.0-cp37-cp37m-linux_aarch64.whl
- 等待安装完毕
- 测试是否安装成功:
python from rknnlite.api import RKNNLite
- 不报错则成功
- 进入
- 在
example
文件夹下新建一个test
文件夹 - 在其中放入你转换成功的
best.rknn
模型以及文章开头github
仓库下的detect.py
文件 -
detect.py
文件中需要修改的地方:- 定义
RKNN_MODEL = 'best.rknn' #你的模型名称 IMG_PATH = './1.jpg' #测试图片名 CLASSES = ("cap") #标签名
-
if __name__ == '__main__':
:capture = cv2.VideoCapture(11) #其中的数字为你Webcam的设备编号
- 关于设备编号,在终端中运行:
v4l2-ctl --list-devices
- 打印出的
Cam
之类的字眼对应的/dev/video11
中的11就是你的设备编号。
- 关于设备编号,在终端中运行:
- 定义
- 运行脚本:
python detect.py
- 部署完成。
到了这里,关于yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!