RK3588 Yolov5 部署进行目标识别

一、环境说明:

1、上位机
主机配置:win10(强制要求win 10)OS专业版 22H2
虚拟化软件:VMware pro 17.0.2;
虚拟机系统:Ubuntu20.04.1(要求>=18.0);x86-64位- 5.15.0-87-generic(分配处理器内核数4个,300GB(gparted可扩容) ,装机);
2、板载A:OrangePi 5 Plus 16GB + Micore SD卡 64GB + camera OV13855
系统版本:Orangepi5plus_1.0.6_debian_bookworm_desktop_xfce_linux5.10.110
注:不建议使用Ubuntu的系统镜像Orangepi5_1.1.6_ubuntu_jammy_desktop_gnome_linux5.10.110,网口默认起不来(踩坑了)。
3、板载B:RK_EVB7_RK3588_LP4XD200P232SDB_V11 + EMMC + 自带camera
系统版本:buildroot (镜像见以下编译)

二、OrangePi基本环境搭建

  1. 使用官方提供的Debian镜像:Orange Pi 5
    Plus(16GB)

    用的最新系统:
    Orangepi5plus_1.0.6_debian_bookworm_desktop_xfce_linux5.10.110

  2. 下载 win32diskimager-1.0.0 用于烧录系统(准备一个建议大于32GB的TF卡、一个读卡器。)选择以上iso镜像写入SD卡,报写入成功即可:
    在这里插入图片描述
    烧录好的SD卡,插到板子上开机就能直接进系统了

  3. 联网+远程连接 :
    vi /etc/network/interface 添加静态ip;重启网络服务:systemctl restart NetworkManager.service ;联上网络后安装openssh-server;ssh远程连接:
    请添加图片描述

三、EVB7_RK3588基本环境搭建

参考《Rockchip Linux 软件开发指南》
SDK工程目录介绍
一个通用 Linux SDK ⼯程⽬录包含有 buildroot、debian、app、kernel、u-boot、device、docs、external 等
目录。
app: 存放上层应用 app,主要是 qcamera/qfm/qplayer/settings 等⼀些应⽤程序。
buildroot: 基于 buildroot (2018.02-rc3) 开发的根⽂件系统。
debian: 基于debian 10 开发的根文件系统,支持部分芯片。
device/rockchip: 存放各芯片板级配置和Parameter文件,以及一些编译与打包固件的脚本和预备脚本件。
docs: 存放芯⽚模块开发指导文档、平台支持列表、芯片平台相关文档、Linux开发指南等。
IMAGE: 存放每次生成编译时间、XML、补丁和固件目录。
external: 存放第三方相关仓库,包括音频、视频、网络、recovery 等。
kernel: 存放 kernel 4.4 或 4.19 开发的代码。
prebuilts: 存放交叉编译⼯具链。
rkbin: 存放 Rockchip 相关的 Binary 和工具。
rockdev: 存放编译输出固件。
tools: 存放 Linux 和 Windows 操作系统环境下常用工具。
u-boot:存放基于 v2017.09 版本进行开发的 uboot 代码。
yocto:基于 yocto gatesgarth 3.2 开发的根文件系统,支持部分芯⽚。

  1. SDK编译
    这里以buildroot操作系统为例
    (1)依赖包安装
sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool \
expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib
unzip \
device-tree-compiler python-pip ncurses-dev pyelftools \

注:交叉编译工具链路径
64位系统:buildroot/output/rockchip芯⽚型号/host/bin/aarch64-buildroot-linux-gnu-

(2)全自动编译
$ ./build.sh all # 只编译模块代码(u-Boot,kernel,Rootfs,Recovery)
$ export RK_ROOTFS_SYSTEM=buildroot
$./build.sh
默认保存路径~/rk3588_linux_230904/output/RK3588-EVB7-LP4-V10-LINUX/BUILDROOT/日期/

(3) 其他单模块编译
如 qplayer 模块,相关编译命令如下:
$make qplayer

  1. 烧录
    以上保存路径有完整的镜像文件(image),需要烧录至硬件中使用,这里采用windows刷机,SDK 提供 Windows 烧写⼯具(RKDevTool工具版本需要在 V2.84 或以上)
    设备烧写需要进入 MASKROM 或 BootROM,前提是烧写模式需要安装 Rockusb 驱动才能正常识别设备,Rockchip USB 驱动安装助手存放在 tools/windows/DriverAssitant_v5.x.zip。支持xp,win7_32,win7_64,win10_32,win10_64 等操作系统。操作见如下:
    请添加图片描述

,连接好 USB 下载线(typeC)后,按住按键“MASKROM”不放并按下复位键“RST”后松开,就能进入MASKROM 模式,加载编译生成固件的相应路径后,点击“执行”进行烧写,也可以按 “recovery" 按键不放并按下复位键 “RST” 后松手进入 loader 模式进行烧写,下面是 MASKROM 模式的分区偏移及烧写文件

请添加图片描述
请添加图片描述

  1. 开机
    Buildroot默认支持 Wayland 桌环境以及一些 基本的Qt 应用
    自测如glmark2、npu、Unixbench等应用,跑分log见如下:

四、训练和模拟测试环境的搭建

1. 安装模块包管理工具(Anaconda)

  • 下载 wget https://repo.continuum.io/archive/Anaconda3-2023.09-0-Linux-aarch64.sh

  • 安装 bash Anaconda3-2023.09-0-Linux-aarch64.sh #

    回车键查看lisence,end后按W键,弹出到 accept lisence terms弹出选择yes;
    选择安装路径 /usr/local,选择使用root权限,不然/usr/local下没有新建目录权限:
    Anaconda3 will now be installed into this location: /home/codedancing/anaconda3

  • Press ENTER to confirm the location

  • Press CTRL-C to abort the installation

  • Or specify a different location below

  • [/home/codedancing/anaconda3]>>>/home/rk3588/anaconda3
    You can undo this by running conda init --reverse $SHELL? [yes|no]
    [no] >>> yes
    #选择将conda加入shell环境

  • export PATH=/home/rk3588/anaconda3/bin:$PATH

  • source .bashrc #加环境变量, 用户目录下

  • conda --version #验证功能
    -注:添加国内的镜像源,更改镜像源文件.condarc(去掉default)后使用起来会比较快

2. 虚拟环境conda

  • conda create -n rkyolov5 python=3.8 #创建虚拟环境,命名为rkyolov5,将下载相关依赖包

    注:按照RK3588版本要求使用rknn-toolkit2(rknn-toolkit 旧版不用);Currently only support on Ubuntu 18.04 python 3.6 / Ubuntu 20.04 python 3.8 / Ubuntu 22.04 python 3.10;

  • source activate yolov5_env #激活使用虚拟环境rkyolov5

  • conda config --remove-key channels #删除镜像源

  • conda install pytorch torchvision torchaudio cpuonly -c pytorch #conda安装相关依赖,如pytorch等

  • conda deactivate #退出虚拟环境

3. 下载yolov5

  • https://github.com/ultralytics/yolov5/tree/c5360f6e7009eb4d05f14d1cc9dae0963e949213
    (v5.0版本)

  • https://github.com/ultralytics/yolov5/tree/v6.0
    (V6.0版本,当然v4.0也试过可以的,建议使用V6.0)

  • pip3 install -r requirements.txt -i https://mirror.baidu.com/pypi/simple #yolov5的根目录下,使用pip安装一下环境依赖包。
    注:建议使用国内百度云的源,rknn if install failed, please change the pip source to ‘https://mirror.baidu.com/pypi/simple’;

4. 标注数据集

  • 下载标记软件 labelImg:https://github.com/tzutalin/labelImg #下载后存放目录到yolov5同级下面
  • labellmg->data->predefined_classes.txt #文档中可以添加要标准的类别
  • pip3 install PyQt5 PyQt5_tools、lxml #按照依赖
  • 使用
    step 1: 运行pyrcc5 -o resources.py resources.qrc
    step 2. 将生成的resources.py拷贝到同级的libs目录下
  • 运行: python3 labelImg.py

注:数据集简单来说图像集(.png .jpg)等图片,标注后是图像数据集(.xml)形式labelimg的标注模式分为VOC和YOLO两种,两种模式下生成的标注文件分别为.xml文件和.txt文件,因此在进行标注前需要优先选择好标注的模式。

  • 标注得到yolo的TXT文件,例子:
    58 0.389578 0.416103 0.038594 0.163146
    62 0.127641 0.505153 0.233312 0.222700

注:第一列为目标类别,后面四个数字为[x_center, y_center, w, h],可以看到都是小于1的数字,是因为对应的整张图片的比例,所以就算图像被拉伸放缩,这种txt格式的标签也可以找到相应的目标。

5. 标准的数据集
为了加快进度,采用coco官方提供的数据集文件,说明见如下:

  • /coco128/images,存放数据集图片
  • /coco128/labels,存放数据集标注信息。
  • coco.yaml和coco128.yaml文件,网络上提供的数据集文件,我们在训练自己的数据集的时候,需要借用他的文件修改相应的参数。
  • train.py和test.py文件是用于训练网络的,先调试train.py文件中的参数对网络进行训练,然后用detect.py文件,加载训练好的权重,设置需要检测的图像数据运行即可完成测试。

6. 训练自己的数据集

  • 训练数据集: python3 train.py --img 640 --batch 1 --epochs 1 --data ./data/coco128.yaml --cfg ./models/yolov5s.yaml --weights ./yolov5s.pt
    注“–cfg ./models/yolov5s.yaml --weights ./yolov5s.pt” #表示过传递匹配的权重文件从预训练的检查点进行训练,避免从0开始训练

  • 部分训练完成后的打印可见如下:
    YOLOv5s summary: 214 layers, 7235389 parameters, 7235389 gradients, 16.6 GFLOPs
    Transferred 229/349 items from yolov5s.pt
    Results saved to runs/train/exp6
    #注 :runs/train/exp6 文件夹中best.pt是训练几百轮后所得到的最好的权重,last.pt是最后一轮训练所得到的权重;

  • 采用best.pt重复步骤7检测一下
    结果: 出现不能检测到人脸的问题,出现了欠拟合的情况:由于机器学习到的特征太少(见以上参数,共128张,仅迭代数据集1次),导致区分标准太粗糙,不能准确识别。导致模型发生了欠拟合。所以还是要调整好训练的迭代轮次和数据集;

注1参数配置说明:从训练脚本train.py中parse_opt()可知常用的传参:
–epochs:训练过程中整个数据集将被迭代的次数
–batch-size:-1为自动,一次看完多少张图片才进行权重更新,梯度下降的mini-batch
–cfg:存储模型结构的配置文件
–data:存储训练、测试数据的文件
–imgsz:输入图片宽高
–weights:权重文件路径,如yolov5s.pt
–name: 重命名save to project/name
–device:选择cuda device

注2:当batch和epochs过高时,训练会自动kill,dmesg报错信息:Out of memory: Killed process,一方原因是虚拟机没有分配GPU资源,只用cpu跑,一方面可能计算量过大超过gpu cuda的内存大小;

7. 目标检测测试

  • yolov5的pt权重的官方下载地址: https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
  • 加载并测试 训练好的或直接使用官方的权重: python3 detect.py --source inference/images/ --weights ./yolov5s.pt
  • 结果见如下,正常识别出了people & tie:
    请添加图片描述

常用参数说明:
–weights # 选用训练的权重
–source # 检测数据,可以是图片/视频路径,也可以是’0’(电脑自带摄像头),也可以是rtsp等视频流
–imgsz #指定推理图片分辨率,默认640
–half # 半精度检测(FP16)

五、模型转换

目标是: 将yolov5训练得到的pt模型或直接从官方down的pt模型,转换为rknn模型,并将rknn模型部署在搭载RK3588的板子上,用于NPU的推理,基本步骤见:

  • 通过yolov5原有权重加数据集后进行训练得到理想的pt模型;
  • pt模型经过yolov5工程中的export.py脚本转换为onnx模型;
  • 再将onnx模型使用rknn-toolkit2工具转换为rknn模型;
  • 在板子上使用rknpu2工具调用rknn模型,实现NPU推理加速。

1、转换模型
介绍:是为用户提供在 PC、Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成各种操作。RKNN-Toolkit2 目前版本只适用系统Ubuntu18.04(x64)及以上,

(1)安装 RKNN-Toolkit2:

  • 下载:https://github.com/rockchip-linux/rknn-toolkit2
    #readme中有指出使用自带docker环境的rknn-toolkit包,但我们这边使用conda自己创建的环境运行,注:采用的是release版本工具:rknn-toolkit2-1.5.2
  • 同上创建虚拟环境:conda create -n rkyolov5 python=3.8 #要求3.8版本,也可以用以上创建的虚拟环境,不用重复操作
  • 安装相关依赖:~/rknn-toolkit2-1.5.2/doc$ pip3 install -r
    requirements_cp38-1.5.2.txt -i https://mirror.baidu.com/pypi/simple
  • 安装工具包:pip3 install rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl -i https://mirror.baidu.com/pypi/simple
    #这里看起来是半开源的,脚本这些还需要通过whl来装,down下来的rknn_toolkit2-1.5.2确实有源码
  • 检测是否安装成功,导入相关包即可python3 -> from rknn.api import RKNN
  • 采用example里面的用例集成验证一下环境:
    ~/rknn-toolkit2-1.5.2/examples/onnx/yolov5$ python3 test.py
    请添加图片描述
    注:区分RKNN Toolkit Lite2文件是提供于板卡端使用的模型转换软件,rknn-toolkit2-1.5.2是在模拟环境下使用验证;

(2)把yolov5s.pt转换为yolov5s.onnx

  • 先安装包:~/yolov5-v5$ pip3 install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
    #target可指定安装至虚拟环境,不然默认的环境优先级较高
  • 转换:
    转换前需修改models/yolo.py,修改Detect类中的forward函数,转换时需要修改如下部分,注意在训练时和Detect验证检测时需要改回原状态,否则容易出现过拟合的问题。
	# 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

~/yolov5-v5$ python export.py --weights yolov5s.pt --img 640 --batch 1 --include onnx --opset 11
#会对应生成的yolov5s.onnx文件 ,opset是onnx的版本

(3)将onnx转换为rknn文件
修改examples/onnx/myolov5/test.py文件

  • onnx路径、rknn保存路径、img测试图片路径、类别数等

~/rknn-toolkit2-1.5.2/examples/onnx/yolov5_test$ python3 test.py #官方rknn工具执行检测测试

出现检测异常:
请添加图片描述
注:
该问题出现的情况1是 onnx转换后未更改回yolo的detect函数,直接detect会出现的异常
识别到过多的目标框+score不在0-1范围内,置信度超过1,
提高置信度阈值,加NMS?

(4)按rk已有模型进行推理
参考https://github.com/airockchip/rknn_model_zoo ,大致步骤见如下:
步骤1. 获取模型
​ 使用 airockchip 组织下的 yolov5/yolov6 /yolov7/ yolov8/ YOLOX / 仓库,根据仓库里的 README_rkopt_manual.md 提示,进行模型训练、模型导出。获取 torchscript / onnx 格式的模型。(ppyoloe 等待整理补充)
对于获取 ONNX 格式 的 ppyoloe 模型,请参考文档

​或下载已经提供的RKNN模型,获取 网盘https://eyun.baidu.com/enterprise/share/link?cid=8272257679089781337&uk=2751701137&sid=202211118572878233#sharelink/path=%2F(密码:rknn) ,
链接中的具体位置为rknn_model_zoo/models/CV/object_detection/yolo/{YOLO}/deploy_models/{toolkit}/{platform}

步骤2. 模型转换
​ 参考 RKNN_model_convert 说明,将步骤1获取的 torchscript / onnx 格式的模型转为 RKNN 模型。
​ 在连板调试功能可以正常使用的情况下,转换脚本除了转出模型,会调用 rknn.eval_perf 接口获取 RKNN 模型推理性能、计算 RKNN 模型与原模型的推理结果相似度(基于cos距离)。

步骤3. 使用 Python demo 测试 RKNN/ torchscript/ onnx模型
​ 参考 RKNN_python_demo 说明,测试 RKNN/ torchscript/ onnx 格式的 yolo 模型在图片上推理结果并绘图。

​ RK1808/ RV1109/ RV1126/RK3399pro 请使用 RKNN_toolkit_1 版本
​ RK3562/ RK3566/ RK3568/ RK3588/ RK3562/ RV1103/ RV1106 请使用 RKNN_toolkit_2 版本

六、推理检测

1. orangepi 板端进行图片推理检测
:~/rknpu2_1.5.2_20230825/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux$ ./rknn_yolov5_demo ./yolov5s_relu.rknn ./model/mans.jpeg

请添加图片描述
img width = 1440, img height = 1080
once run use 38.829000 ms
loop count = 10 , average run 21.729600 ms

2. orangepi 板端进行视频推理检测

  • 先转换视频格式为H264或H265:
    (yolov5)orangepi@orangepi5plus:~/rknpu2_1.5.2_20230825/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux$ ffmpeg -i lightweghtbaby.mp4 -vcodec h264 lightweghtbaby.h264

    ffmpeg -i bridge_1280.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 bridge_1280.h264

  • 运行检测
    (yolov5)orangepi@orangepi5plus:~/rknpu2_1.5.2_20230825/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux$ ./rknn_yolov5_video_demo ./model/RK3588/yolov5s-640-640.rknn ./lightweghtbaby.h264 264

默认float16的。
视频格式:1920x1080
once run use 18.748000 ms

七、未解决报错

  1. 转换模型报错:
    E inference: The input(ndarray) shape (1, 320, 320, 3) is wrong, expect ‘nhwc’ like (1, 640, 640, 3)!
    W inference: ===================== WARN(8) =====================
    E rknn-toolkit2 version: 1.5.2+b642f30c
    Traceback (most recent call last):
    File “test.py”, line 289, in
    outputs = rknn.inference(inputs=[img])
    File “/home/rk3588/anaconda3/envs/rkyolov5/lib/python3.8/site-packages/rknn/api/rknn.py”, line 305, in inference
    return self.rknn_base.inference(inputs=inputs, data_format=data_format,
    File “rknn/api/rknn_base.py”, line 2598, in rknn.api.rknn_base.RKNNBase.inference
    File “rknn/api/simulator.py”, line 545, in rknn.api.simulator.Simulator.inference
    File “rknn/api/simulator.py”, line 507, in rknn.api.simulator.Simulator._get_inputs
    File “rknn/api/rknn_utils.py”, line 254, in rknn.api.rknn_utils.get_input_img
    File “rknn/api/rknn_log.py”, line 112, in rknn.api.rknn_log.RKNNLog.e
    ValueError: The input(ndarray) shape (1, 320, 320, 3) is wrong, expect ‘nhwc’ like (1, 640, 640, 3)!

def inference(self, inputs, data_format=None, inputs_pass_through=None, get_frame_id=False):
“”"
Run model inference
:param inputs: Input ndarray List.
:param data_format: Data format list, current support: ‘nhwc’, ‘nchw’, default is ‘nhwc’, only valid for 4-dims input. default is None.
:param inputs_pass_through: The pass_through flag (0 or 1: 0 meas False, 1 means True) list. default is None.
:param get_frame_id: Whether need get output/input frame id when using async mode,it can be use in camera demo. default is False.
:return: Output ndarray list
“”"
return self.rknn_base.inference(inputs=inputs, data_format=data_format,
inputs_pass_through=inputs_pass_through, get_frame_id=get_frame_id)

packages in environment at /home/orangepi/anaconda3/envs/yolov5:

Name Version Build Channel

_libgcc_mutex 0.1 main https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
_openmp_mutex 5.1 51_gnu https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
aiocache 0.12.2 pypi_0 pypi
aiocqhttp 1.4.4 pypi_0 pypi
aiofiles 23.2.1 pypi_0 pypi
anyio 4.0.0 pypi_0 pypi
blinker 1.6.3 pypi_0 pypi
botlib 0.0.0 pypi_0 pypi
ca-certificates 2023.08.22 hd43f75c_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
certifi 2023.7.22 pypi_0 pypi
click 8.1.7 pypi_0 pypi
cmake 3.27.7 pypi_0 pypi
eog 1 pypi_0 pypi
exceptiongroup 1.1.3 pypi_0 pypi
flask 3.0.0 pypi_0 pypi
flatbuffers 23.5.26 pypi_0 pypi
h11 0.14.0 pypi_0 pypi
h2 4.1.0 pypi_0 pypi
hpack 4.0.0 pypi_0 pypi
httpcore 0.18.0 pypi_0 pypi
httpx 0.25.0 pypi_0 pypi
hypercorn 0.14.4 pypi_0 pypi
hyperframe 6.0.1 pypi_0 pypi
idna 3.4 pypi_0 pypi
importlib-metadata 6.8.0 pypi_0 pypi
itsdangerous 2.1.2 pypi_0 pypi
jinja2 3.1.2 pypi_0 pypi
keras 2.13.1 pypi_0 pypi
ld_impl_linux-aarch64 2.38 h8131f2d_1 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libclang 16.0.6 pypi_0 pypi
libffi 3.4.4 h419075a_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libgcc-ng 11.2.0 h1234567_1 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libgomp 11.2.0 h1234567_1 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libstdcxx-ng 11.2.0 h1234567_1 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
markupsafe 2.1.3 pypi_0 pypi
ncurses 6.4 h419075a_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
nonebot 1.9.1 pypi_0 pypi
numpy 1.24.3 pypi_0 pypi
oauthlib 3.2.2 pypi_0 pypi
opencv-python 4.8.1.78 pypi_0 pypi
openssl 3.0.11 h2f4d8fa_2 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
packaging 23.2 pypi_0 pypi
pip 23.3 py38hd43f75c_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
priority 2.0.0 pypi_0 pypi
protobuf 4.24.4 pypi_0 pypi
pyasn1 0.5.0 pypi_0 pypi
python 3.8.18 h4bb2201_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
quart 0.19.3 pypi_0 pypi
readline 8.2 h998d150_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
setuptools 68.0.0 py38hd43f75c_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
six 1.16.0 pypi_0 pypi
sniffio 1.3.0 pypi_0 pypi
sqlite 3.41.2 h998d150_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
tensorboard-data-server 0.7.2 pypi_0 pypi
tensorflow-estimator 2.13.0 pypi_0 pypi
tensorflow-io-gcs-filesystem 0.34.0 pypi_0 pypi
termcolor 2.3.0 pypi_0 pypi
tk 8.6.12 h241ca14_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
tomli 2.0.1 pypi_0 pypi
typing-extensions 4.5.0 pypi_0 pypi
urllib3 2.0.7 pypi_0 pypi
werkzeug 3.0.0 pypi_0 pypi
wheel 0.41.2 py38hd43f75c_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
wrapt 1.15.0 pypi_0 pypi
wsproto 1.2.0 pypi_0 pypi
xz 5.4.2 h998d150_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
zipp 3.17.0 pypi_0 pypi
zlib 1.2.13 h998d150_0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

(yolov5) orangepi@orangepi5plus:~/anaconda3/envs$ pip list
Package Version


absl-py 2.0.0
aiocache 0.12.2
aiocqhttp 1.4.4
aiofiles 23.2.1
anyio 4.0.0
astunparse 1.6.3
blinker 1.6.3
botlib 0.0.0
cachetools 5.3.1
certifi 2023.7.22
charset-normalizer 3.3.1
click 8.1.7
cmake 3.27.7
eog 1
exceptiongroup 1.1.3
Flask 3.0.0
flatbuffers 23.5.26
gast 0.4.0
google-auth 2.23.3
google-auth-oauthlib 1.0.0
google-pasta 0.2.0
grpcio 1.59.0
h11 0.14.0
h2 4.1.0
h5py 3.10.0
hpack 4.0.0
httpcore 0.18.0
httpx 0.25.0
hypercorn 0.14.4
hyperframe 6.0.1
idna 3.4
importlib-metadata 6.8.0
itsdangerous 2.1.2
Jinja2 3.1.2
keras 2.13.1
libclang 16.0.6
markdown 3.5
MarkupSafe 2.1.3
nonebot 1.9.1
numpy 1.24.3
oauthlib 3.2.2
opencv-python 4.8.1.78
opt-einsum 3.3.0
packaging 23.2
pip 23.3
priority 2.0.0
protobuf 4.24.4
pyasn1 0.5.0
pyasn1-modules 0.3.0
Quart 0.19.3
requests 2.31.0
requests-oauthlib 1.3.1
rsa 4.9
setuptools 68.0.0
six 1.16.0
sniffio 1.3.0
tensorboard 2.13.0
tensorboard-data-server 0.7.2
tensorflow 2.13.1
tensorflow-cpu-aws 2.13.1
tensorflow-estimator 2.13.0
tensorflow-io-gcs-filesystem 0.34.0
termcolor 2.3.0
tomli 2.0.1
typing_extensions 4.5.0
urllib3 2.0.7
Werkzeug 3.0.0
wheel 0.41.2
wrapt 1.15.0
wsproto 1.2.0
zipp 3.17.0

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源介绍】 基于RK3588部署yolov5s模型源码(实时摄像头检测)+部署说明文档.zip 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 yolov5模型(.pt)在RK3588(S)上的部署(实时摄像头检测) - 所需: - 安装了Ubuntu20系统的RK3588 - 安装了Ubuntu18的电脑或者虚拟机 <details> <summary>一、yolov5 PT模型获取</summary> [Anaconda教程](https://blog.csdn.net/qq_25033587/article/details/89377259)\ [YOLOv5教程](https://zhuanlan.zhihu.com/p/501798155)\ 经过上面两个教程之后,你应该获取了自己的`best.pt`文件 </details> <details> <summary>二、PT模型转onnx模型</summary> - 将`models/yolo.py`文件中的`class`类下的`forward`函数由: ```python 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) ``` 改为: ```python def forward(self, x): z = [] # inference
### 回答1: rk3588 yolov5 是一款基于 Rockchip 公司的 RK3588 芯片开发的物体检测模型 YOLOv5YOLOv5 是一种实时目标检测算法,可以在图像或视频中快速准确地识别出多个目标物体。源代码指的是该模型的开发代码,可以用于训练新的模型或者微调现有的模型。 rk3588 yolov5 源代码包含了模型的网络结构、损失函数、数据预处理等多个部分。通过阅读源代码,开发者可以了解到模型的工作原理以及各个模块的实现方式。源代码使用了 Python 编程语言,利用深度学习框架 PyTorch 实现了 YOLOv5 算法。 源代码中的网络结构部分定义了模型的整体结构,包括卷积层、池化层、先验框等。损失函数部分定义了模型的目标函数,用于计算模型预测与真实值之间的差异。数据预处理部分负责对输入数据进行预处理,包括图像的归一化、缩放等操作。 开发者可以根据自己的需要对源代码进行修改和调整,以适应不同的应用场景。比如可以根据新的数据集进行训练,或者修改网络结构以获得更好的性能。同时,源代码也为一些高级功能提供了接口,比如模型蒸馏、模型压缩等。 总之,rk3588 yolov5 源代码是一份用于物体检测的模型代码,通过阅读和修改源代码,开发者可以进行模型训练和优化,以满足不同场景的需求。 ### 回答2: rk3588 yolov5是一款运行在RK3588芯片上的目标检测算法的源代码。该源代码使用流行的yolov5算法实现了目标检测功能,可以在RK3588芯片上进行高效的实时目标检测任务。 yolov5算法是一种基于深度学习的目标检测算法。它采用了一种称为单阶段检测的方法,可以在一次前向传播中同时预测目标的类别、位置和置信度。相对于传统的两阶段检测方法,yolov5算法具有更快的速度和更高的准确率。 RK3588芯片是一款创新的处理器,它在性能和功耗之间取得了良好的平衡。它采用了先进的制程工艺和多核架构,能够支持高效的计算和图像处理任务。使用RK3588芯片运行yolov5目标检测算法,可以实现实时的目标检测能力,适用于各种场景,如智能摄像头、无人驾驶等。 对于源代码部分,rk3588 yolov5源代码应该包含了实现yolov5算法的各个网络层、损失函数、数据预处理和后处理等模块。这些模块的代码将会涉及到神经网络的搭建、参数的初始化、前向传播和反向传播等关键步骤。此外,源代码还可能包括了数据集的准备和训练过程的实现。 通过研究和理解rk3588 yolov5源代码,开发者们可以根据自己的需求进行二次开发和优化。他们可以根据具体的硬件平台和任务需求进行修改和调优,提高算法的性能和适用性。此外,通过研究源代码,了解算法的实现细节和原理,也有助于对目标检测算法进行更深入的理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值