【YOLO V5】代码复现过程

news2024/11/18 17:53:28

        接上篇,讲到如何从mask转成YOLOv5训练需要的txt数据集格式,这篇就在此基础上进行模型训练预测和部署转换吧!

目录

1.环境准备

2.YOLO训练

2.1 数据集准备

2.2 data.yaml准备

2.3 yolov5.yaml准备

2.4 训练命令

3.YOLO预测

3.1OLOv5 PyTorch Hub 预测

3.2代码预测

4.torch2onnx模型部署转换

5.onnx模型推理预测

6.onnx模型运行验证


数据集制作快速通道:YOLO格式数据集制作

1.环境准备

环境版本要求:python>=3.7 

                          pytorch>=1.7

其他需要的安装包可以直接用requirements.txt下载安装

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

2.YOLO训练

2.1 数据集准备

rootpath
    --images
        --1.png
        --2.png
        ...

    --labels
        --1.txt
        --2.txt
        ...

images就不用多说了,里面就是存放原始训练影像,格式必须为png或者jpg;

labels里可以有两种格式.

  • 如果是目标检测任务,那毋庸置疑就是标准yolo目标检测格式label了,一共5列,第1列存放每个目标的类别,第2-5列分别存放中心点坐标和宽度高度(center_x,center_y,wid ,hig)

注意:坐标点位置要归一化到(0-1)之间,也就是像素坐标分别除以宽度和高度。即

#center_x_pixl,center_y_pixl,width_pixl,higth_pixl表示中心点像素坐标和bbox的宽度和高度
#center_x,center_y,wid,hig表示归一化后的坐标,即txt里写的内容
#width,higth表示原始影像的宽度和高度

center_x = center_x_pixl / width
wid = width_pixl / width
center_y = center_y_pixl / higth
hig = higth_pixl / higth

 

 

  • 如果是语义分割任务,与目标检测相同的是第1列仍然存放每个目标的类别,不同的是后面所有列分别存放每个边界点的坐标(center_x1,center_y1, center_x2,center_y2, ......, center_xn,center_yn),表示这些点组成了一个多边形目标。注意此时的边界点坐标也是归一化后的,归一化方法与目标检测方法一致。

2.2 data.yaml准备

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  ...
  77: teddy bear
  78: hair drier
  79: toothbrush

path:数据地址

train:训练数据文件夹名称

val:验证数据文件夹名称

names:类别名称对应,得从0开始

2.3 yolov5.yaml准备

以yolov5s为例,其实要改的就是一个numclass

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

nc改为自己的类别总数就可以了,其他不用动 ,0也算一类哦,比如类别是0,1,那nc就是2。

2.4 训练命令

  • 单GPU训练
python train.py  --batch 64 --data coco.yaml --weights yolov5s.pt --device 0
  • 多GPU训练
python -m torch.distributed.run --nproc_per_node 2 train.py --batch 64 --data coco.yaml --weights yolov5s.pt --device 0,1

训练结果在run/train/目录下生成exp文件夹,若参数不变,会保留多个exp,不会覆盖。

3.YOLO预测

推理过程可以用两种方式,一种是用pytorch hub工具预测,一种是代码行预测

3.1OLOv5 PyTorch Hub 预测

import torch

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # or yolov5n - yolov5x6, custom

# Images
img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list

# Inference
results = model(img)

# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

3.2代码预测

python detect.py --weights yolov5s.pt --source 0                               # webcam
                                               img.jpg                         # image
                                               vid.mp4                         # video
                                               screen                          # screenshot
                                               path/                           # directory
                                               list.txt                        # list of images
                                               list.streams                    # list of streams
                                               'path/*.jpg'                    # glob
                                               'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                               'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

结果自动保存在runs/detect目录下 

4.torch2onnx模型部署转换

把自己训练好的模型导出成onnx格式,方便部署


python export.py --weights yolov5s.pt --include torchscript onnx

注意:可以增加参数--half ,以达到半精度带出的目的,这样导出的文件比较小。

5.onnx模型推理预测

python detect.py --weights yolov5s.pt                 # PyTorch
                           yolov5s.torchscript        # TorchScript
                           yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
                           yolov5s_openvino_model     # OpenVINO
                           yolov5s.engine             # TensorRT
                           yolov5s.mlmodel            # CoreML (macOS only)
                           yolov5s_saved_model        # TensorFlow SavedModel
                           yolov5s.pb                 # TensorFlow GraphDef
                           yolov5s.tflite             # TensorFlow Lite
                           yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
                           yolov5s_paddle_model       # PaddlePaddle

6.onnx模型运行验证

python val.py --weights yolov5s.pt                 # PyTorch
                        yolov5s.torchscript        # TorchScript
                        yolov5s.onnx               # ONNX Runtime or OpenCV DNN with --dnn
                        yolov5s_openvino_model     # OpenVINO
                        yolov5s.engine             # TensorRT
                        yolov5s.mlmodel            # CoreML (macOS Only)
                        yolov5s_saved_model        # TensorFlow SavedModel
                        yolov5s.pb                 # TensorFlow GraphDef
                        yolov5s.tflite             # TensorFlow Lite
                        yolov5s_edgetpu.tflite     # TensorFlow Edge TPU
                        yolov5s_paddle_model       # PaddlePaddle

 整理不易,欢迎一键三连!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大猫盘 黑群晖 不用Docker 部署属于自己的聊天工具voceChat

引入 原因很简单我有个大猫盘,自己搞成了黑群,不支持Docker,我自己购买了域名,做了ddns解析,给群晖加了ssl证书,感觉既然数据安全了,服务也在自己家里能不能搭建一个自己的聊天软件&#xff0c…

windows下nvvp的基础使用1

windows下nvvp的基础使用1 cuda编程的重要帮手可视化工具nvvp 本来先写nsignt的使用方式,不过折腾了一会发现没弄得那么明白.先用着nvvp好了,毕竟只是先看书配合着写点简单的cuda代码而已 安装建议 在windows下安装cuda的话,也就那回事,自己可以参考一下搜索引擎 (win10安…

一次漏洞挖掘的简单组合拳

前言: 在最近的wxb举行hw中,同事让我帮他看看一些后台登录站点。尝试了未授权,弱口令皆无果,要么不存在弱口令,要么有验证码,没办法绕过。本文章仅提供一个思路,在hw中更多时候并不推荐尝试这种…

给正在注册或即将注册个体工商户营业执照的你

大家好,我是中国码农摘星人。 欢迎分享/收藏/赞/在看! 作为程序员,平时除了主业,发展一些副业再正常不过。为了取得开展业务的合法性、合规性,以及后续的拓展,避免产生不必要的纠纷,这边就得注册…

ChatGPT真的会取代程序员吗?

程序员这两年被碰的瓷儿可不少啊,这架势不像是AI抢了程序员的饭碗,倒像是程序员抢了AI的饭碗一样...... 前两年低代码出来了,你们说程序员要被取代了,惹得大神们一顿输出;去年元宇宙出来了,你们又说程序员…

map相关接口(map接口、HashMap、LinkedHashMap、TreeMap)

Java知识点总结:想看的可以从这里进入 目录8.3、map结构8.3.1、 map接口8.3.2、HashMap8.3.3、LinkedHashMap8.3.4、TreeMap8.3、map结构 8.3.1、 map接口 map的集合是以键值对的形式存在的 (key-value),每个键只能对应一个值,通常通过键去…

什么表单设计工具能快速提升办公效率?

在信息化快速发展的年代,谁能掌握更先进的技术,谁就能拥有更广阔的发展前景。在以前的办公环境中,传统的表单制作工具占据了主流地位,随着办公自动化的快速发展,传统表单工具的弊端也暴露出来了,采用更先进…

m0n0wall防火墙(10)

实验目的 1、深入理解防火墙的功能和工作原理; 2、熟悉软件防火墙,掌握m0n0防火墙的规则和配置。预备知识 m0n0wall M0n0wall是基于FreeBSD内核开发的免费软件防火墙。m0n0wall提供基于web的配置管理、提供VPN功能、支持DHCP Server、DNS转发、动态DNS…

maddpg 复现过程中遇到的问题

最近在复现论文Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments https://github.com/openai/multiagent-particle-envshttps://github.com/philtabor/Multi-Agent-Deep-Deterministic-Policy-Gradients.gitGitHub - philtabor/Multi-Agent-Deep-Dete…

windows配置c语言编译系统-wingw gcc cmake

前言 笔者在做嵌入式mcu编程的时候,有时候想要验证一下部分代码的功能,需要先编译成bin文件,然后烧录到mcu内执行。每次编译烧录运行耗时较久。于是想到是不是可以在电脑上配置一个c的编译环境,来验证一些与硬件不相干的代码。验…

idea多时编辑多行-winmac都支持

1背景介绍 idea编辑器非常强大,其中一个功能非常优秀,很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后,可以直接多行编辑。 优点&a…

jsp物品找回系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 物品找回系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发,数据库为Mysql,使用j…

一文搞定python语法进阶

前言前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下…

Java基础-类加载器

写在前面的话: 基础加强包含了: 反射,动态代理,类加载器,xml,注解,日志,单元测试等知识点 其中最难的是反射和动态代理,其他知识点都非常简单 由于B站P数限制&#xff0c…

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一,尤其是在WebGL库的支持下。有了WebGL,可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此,设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库,它…

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点,是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的,原因有二。首先,在 CD20 阳性肿瘤的情况下,这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次,干…

火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 2 月 9 日,国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》(以下简称报告),报…

java程序,springboot程序 找不到主类,找不到符号解决思路

文章目录问题解决方案一.可以尝试clean掉maven依赖,然后重新启动二.右键工程,选择maven然后重新加载工程,接着再启动试试三.删掉工程中的services.iml文件,重新配置后接着再启动试试四. 终极方案清除idea缓存,重启idea…

Rust之错误处理(二):带结果信息的可恢复错误

开发环境 Windows 10Rust 1.67.1VS Code 1.75.1项目工程 这里继续沿用上次工程rust-demo 带结果信息的可恢复错误 大多数错误并没有严重到需要程序完全停止的程度。有时,当一个函数失败时,它的原因是你可以很容易地解释和应对的。例如,如…

LearnOpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口LearnOpenGL 笔记 - 入门 04 你好,三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…