在rk3588开发板上训练yolov8模型(2024.3.25 学习笔记 正在不断编辑修改中。4.2:公司不用这个了换开发板了之后慢慢补)

一.关于docker

Docker 是一个开源的平台,用于开发、交付和运行应用程序。它使用容器技术,可以将应用程序及其依赖项打包成容器,从而实现快速部署、可移植性和可伸缩性。

下载推荐使用小鱼的一键安装,非常好用,小鱼是神。

https://fishros.com/

wget http://fishros.com/install -O fishros && . fishros

  1. docker --version:查看 Docker 版本信息。

  2. docker pull <image_name>:从 Docker Hub 下载镜像到本地。

  3. docker images:列出本地已下载的镜像。

  4. docker run <image_name>:运行一个容器。

  5. docker ps:列出正在运行的容器。

  6. docker ps -a:列出所有容器,包括已停止的。

  7. docker exec -it <container_id> <command>:在运行的容器中执行命令。

  8. docker stop <container_id>:停止一个正在运行的容器。

  9. docker rm <container_id>:删除一个容器。

  10. docker rmi <image_name>:删除一个本地镜像。

  11. docker build -t <image_name> <path_to_dockerfile>:构建一个新的镜像。

  12. docker-compose up:使用 Docker Compose 启动应用程序。

二.YOLOv8介绍 

        Ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。总而言之,ultralytics 开源库的两个主要优点是:

1.融合众多当前 SOTA 技术于一体

2.未来将支持其他 YOLO 系列以及 YOLO 之外的更多算法

        Ultralytics为YOLO模型发布了一个全新的存储库。它被构建为 用于训练对象检测、实例分割和图像分类模型的统一框架。

        提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求。

        骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了。

        Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free

        Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss

        训练的数据增强部分引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度。

        YOLOv8 还高效灵活地支持多种导出格式,并且该模型可以在 CPU 和 GPU 上运行。YOLOv8 模型的每个类别中有五个模型用于检测、分割和分类。YOLOv8 Nano 是最快和最小的,而 YOLOv8 Extra Large (YOLOv8x) 是其中最准确但最慢的。

三.YOLOv8训练部署过程,环境配置

1.安装anaconda,创建一个yolov8的虚拟环境,推荐python版本3.8

2.根据你使用的cuda版本,先安装对应的PyTorch-gpu的版本(否则默认安装的是cpu版本)。

3.#Pip install the ultralytics package including all requirements in a Python>=3.7 environment with PyTorch>=1.7.

在yolov8虚拟环境下,在终端输入:pip install ultralytics

yolov8工程就下载完成了,工程文件默认安装在../env/yolov8/bin/ultralytics

注:如果是从GitHub官方通过git clone拉取的工程,依然需要pip install ultralytics。在使用yolo命令行时,程序执行的依然是../env/yolov8/bin/ultralytics/目录下的工程文件。

执行pip install ultralytics后,环境已经将requirement.txt的必要库都安装好了,但为了转onnx模型和更好的训练,建议再配置如下几个库,可以参考官方项目中的requirement.txt文件。

# Logging -------------------------------------

# tensorboard>=2.13.0

# Export --------------------------------------

# onnx>=1.12.0 # ONNX export

# onnxsim>=0.4.1 # ONNX simplifier

# Extras --------------------------------------

# pycocotools>=2.0.6 # COCO mAP

这几个是默认未自动安装的,需要手动安装,例:pip install tensorboard == 2.13.0

至此yolov8工程和环境配置完成

四.训练

yolov8训练,官方文档:

Train - Ultralytics YOLOv8 Docs

预测,官方文档:

Predict - Ultralytics YOLOv8 Docs

五.实际操作

1.登录训练服务器 (账号密码见工作笔记本)

2.sudo docker ps -a

3.sudo docker start yolov8-seg(或rknn等)

4.sudo docker exec -it yolov8-seg /bin/bash

5.cd /usr/src

  • 19
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A: 首先,需要安装CUDA和CUDNN的相关库,并下载yolov5的代码仓库。然后,按照以下步骤来编写部署在nvidia开发板上的yolov5模型推理代码。 1. 导入必要的头文件 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/time.h> #include <cuda_runtime_api.h> #include <cublas_v2.h> #include <curand.h> #include <cudnn.h> #include "darknet.h" ``` 2. 定义模型类和相关参数 ```c typedef struct{ network net; float *output; float *input; cudaStream_t stream; } yolov5; #define BATCH 1 #define DEVICE 0 #define NMS_THRESH 0.45 #define CONF_THRESH 0.25 #define CLASS_NUM 80 #define ANCHOR_NUM 3 #define INPUT_H 640 #define INPUT_W 640 #define CLASS_NAME_FILE "./coco.names" #define WEIGHTS_FILE "./yolov5s.weights" ``` 3. 加载模型 ```c void load_model(yolov5 *model, char *classes_path, char *weights_path){ // 加载类别名 char **names = get_labels(classes_path); // 加载模型 model->net = parse_network_cfg(cfg_path); if(weights_path){ load_weights(&model->net, weights_path); } // 设置输入层 model->input = (float *)calloc(model->net.batch * model->net.inputs, sizeof(float)); cudaMalloc((void **)&model->output, model->net.batch * model->net.outputs * sizeof(float)); cudaStreamCreate(&model->stream); set_batch_network(&model->net, BATCH); model->net.layers[model->net.n - 1].classes = CLASS_NUM; model->net.layers[model->net.n - 1].anchor_num = ANCHOR_NUM; model->net.layers[model->net.n - 1].confidence_thresh = CONF_THRESH; model->net.layers[model->net.n - 1].nms_thresh = NMS_THRESH; model->net.layers[model->net.n - 1].mask = (int *)calloc(ANCHOR_NUM, sizeof(int)); for(int i = 0; i < ANCHOR_NUM; i++) model->net.layers[model->net.n - 1].mask[i] = i; srand(time(NULL)); } ``` 4. 推理函数 ```c void yolov5_inference(yolov5 *model, char *img_path){ // 加载图片 image img = load_image_color(img_path, 0, 0); // 缩放图片 image sized = resize_image(img, INPUT_W, INPUT_H); // 将数据写入输入层 fill_cuda_data(sized.data, INPUT_H * INPUT_W * 3, model->input, INPUT_H * INPUT_W * 3 * BATCH, model->stream); // 进行推理 forward_network(&model->net, model->input); // 获取输出结果 get_network_boxes(&model->net, img.w, img.h, CONF_THRESH, model->net.layers[model->net.n - 1].mask, 0, 1, model->output, 1, &model->net.layers[model->net.n - 1], model->net.classes, model->net.outputs, 1); // 进行非极大值抑制 do_nms_sort(model->net.hold_cpu, model->net.hold_gpu, model->net.batch, model->net.layers[model->net.n - 1].classes, model->net.layers[model->net.n - 1].w, model->net.layers[model->net.n - 1].h, model->output, model->net.layers[model->net.n - 1].nms, CLASS_NUM, NMS_THRESH); // 输出结果 draw_detections(img, model->net.hold_cpu, model->net.darknet_gpu, model->net.layers[model->net.n - 1], CLASS_NUM, names, WINDOW_WIDTH, WINDOW_HEIGHT, 0); } ``` 5. main函数 ```c int main(int argc, char **argv){ yolov5 model; // 加载模型 load_model(&model, CLASS_NAME_FILE, WEIGHTS_FILE); // 进行推理 yolov5_inference(&model, argv[1]); // 释放资源 cudaFree(model.input); cudaFree(model.output); cudaStreamDestroy(model.stream); free_network(model.net); return 0; } ``` 以上就是用C语言编写的在nvidia开发板上部署yolov5模型推理代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值