【yolov5目标检测】使用yolov5训练自己的训练集

news2024/11/20 14:34:44

数据集准备

首先得准备好数据集,你的数据集至少包含images和labels,严格来说你的images应该包含训练集train、验证集val和测试集test,不过为了简单说明使用步骤,其中test可以不要,val和train可以用同一个,因此我这里只用了一个images

其中images装的是图片数据,labels装的是与图片一一对应同名的yolo格式txt,即类别号,经过归一化的中心x和y坐标以及宽和高

 

下载yolov5

到GitHub上下载整个项目的压缩包zip下来

 下来解压zip,把我们刚刚的数据集也放进去

再下载一个yolov5的预训练模型,我这里选择yolov5n.pt,下下来也放到解压文件夹中

然后用pycharm打开这个文件夹,看看哪里标红还差什么软件包没安装给安装上

配置yaml

先配置一下yolov5预训练模型的yaml,我下载的是yolov5n.pt模型,因此需要配置一下yolov5n.yaml,修改nc的数值为类别数目,我这里的数据集只有乌骨鸡和狮头鹅,因此改成2

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license

# Parameters
nc: 2  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # 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)
  ]

然后开始配置数据集的yaml,可以复制coco128.yaml的内容进行修改,新建一个xxx.yaml,修改path为数据集路径,train为训练集的相对路径,val为验证机的相对路径,因为没有用上test,因此把它注释掉了,还有names也要修改为数据集的类别名

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← downloads here (7 MB)


# 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: ikunData # dataset root dir
train: images # train images (relative to 'path') 128 images
val: images # val images (relative to 'path') 128 images
#test:  # test images (optional)

# Classes
names:
  0: goose
  1: chicken

开始训练

然后准备开始训练,打开train.py,修改它的参数,主要是这三行代码需要修改,修改预训练模型文件的路径,配置文件的路径以及数据集配置文件的路径

    parser.add_argument('--weights', type=str, default=ROOT / 'yolov5n.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='models/yolov5n.yaml', help='model.yaml path')
    parser.add_argument('--data', type=str, default=ROOT / 'ikunData.yaml', help='dataset.yaml path')

噢,还有训练的epochs数目,这个次数由你决定

    parser.add_argument('--epochs', type=int, default=30, help='total training epochs')

然后就可以开始运行train.py。

运行完了会生成一个runs文件夹,里面有训练出来的best.pt,和训练过程的记录

然后开始目标检测,准备好运行detect.py的参数,最基本的就是运行的权重文件,就是我们train出来的best.pt,还有要测试的数据路径

--weights runs/train/exp/weights/best.pt --source ikunData/images

把它写到运行配置中去

然后开始运行detect.py,运行完后会在runs里面生成detect文件夹,里面就有检测结果

你可能会发现有多个框框在同一个目标上,这时我们在detect.py上增加一个参数,这里是nms非极大值抑制,我们将IOU的阈值设置为0,再次运行detect.py

--weights runs/train/exp/weights/best.pt --source ikunData/images --iou-thres 0

 这次的效果要好一点

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

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

相关文章

服务器数据恢复-RAID信息破坏导致服务器操作系统无法启动的数据恢复案例

服务器数据恢复环境: 一台服务器,8块硬盘组建了一组raid5磁盘阵列,服务器安装的是windows server操作系统,上层部署ORACLE数据库。 服务器故障: 在服务器运行过程中,2块硬盘报警,服务器操作系统…

外汇天眼:这才是外汇维权的正确打开方式,还不get?

经常有咨询外汇天眼维权服务的投资者问天眼君,外汇天眼是如何帮助遭遇外汇问题的受害者们维权的,其实这依靠的就是外汇天眼作为第三方媒体多年来在汇圈的威望,以及相关的大型外汇交易商提供的专属维权客服助力解决平台用户遭遇的问题。 这是什…

【OpenVINO】行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human-上篇

行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human 1. 英特尔开发套件1.1 OpenVINO1.2 AIxBoard 介绍产品定位产品参数AI推理单元 2. PaddleDetection实时行人分析工具PP-Human3. 预测模型获取与转换3.1 PP-YOLOE行人跟踪模型介绍模型下载与转换(1)Pad…

港科夜闻|凯洛格-香港科大行政人员工商管理硕士课程在英国《金融时报》EMBA课程百强榜蝉联全球第一,十二度获此顶级课程殊荣...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、凯洛格-香港科大行政人员工商管理硕士课程在英国《金融时报》EMBA课程百强榜蝉联全球第一,十二度获此顶级课程殊荣。该EMBA排名自推出以来,从未有其他课程能达到或接近这样创记录的佳绩。排名榜的…

Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )

ESLint ​在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一…

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用

查看原文>>>【案例教程】基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习高级应用 Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析…

MFC扩展库BCGControlBar Pro v33.6新版亮点 - 图形管理器改造升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.6已正式发布了,此版本包含了对图表组件的改进、带隐藏标签的单类功能区栏…

智慧公厕改变城市生活,厕所革命标杆应用解决方案

随着城市化进程的加快,公厕作为城市基础设施的重要组成部分,扮演着不可忽视的角色。然而,传统的公厕粗放型管理模式,已经无法满足市民日益增长的需求。为了提升公厕的管理和服务水平,智慧公厕应运而生。 什么是智慧公…

百万粉丝大V将前台实名制

我是卢松松,点点上面的头像,欢迎关注我哦! 这事慢慢实锤了:网络大V前台实名制要实施了。 根据微博洪榕爆料:10月底之前,100万粉丝的自媒体账号前台展示真实姓名; 12月份,50万粉的自媒体账号前…

看了这个配电柜管理,我人都傻了!

随着社会的不断发展和电力系统的不断完善,配电柜监控系统变得越来越关键。系统为电力分配和管理提供了关键性的支持,确保电能供应的稳定性和安全性。 客户案例 工业制造业 在工业制造领域,电力分配至关重要。某制造公司面临着高负荷和严格的生…

自动驾驶的法律和伦理问题

随着自动驾驶技术的不断发展,出现了一系列与法律和伦理有关的问题。这些问题涵盖了自动驾驶的法律框架、道路规则以及伦理挑战。本文将探讨这些问题,并分析自动驾驶所带来的法律和伦理挑战。 自动驾驶的法律框架 自动驾驶的法律框架是制定和管理自动驾…

前端HTML要了解的知识,DOCTYPE 声明究竟是做什么的、作用是什么?

🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…

【Vue3】响应式原理

【Vue3】响应式原理 一、问题什么是数据响应式?vue2使用Object.defineProperty实现响应式?Proxy和Reflect1、Proxy2、Reflect3、Proxy和Reflect的使用4、 使用Proxy和Reflect完成响应式 一、问题 1、Vue3的响应式原理和Vue2有什么不同呢? V…

zabbix中文乱码解决方法

1、 问题描述 zabbix在页面中将语言设置为中文后出现乱码问题 监控中文乱码解决方法 1、之前看过一个从Windows里面将本机电脑字体的ttf文件传入服务器中,但是Windows的C:\windows\fonts里面的字体TTF文件可能因为权限的原因无法传到服务器上&#x…

陪诊小程序|陪诊小程序关爱健康,无忧陪伴

随着社会发展和人们生活水平的提高,健康问题成为人们关注的焦点。然而,在就医过程中,许多患者常常感到孤独和无助,缺乏得到家人陪伴的温暖与安慰。为了解决这一问题,我们公司开发了一款创新的陪诊小程序软件&#xff0…

开启机器人学新时代,《机器人学建模、规划与控制》完美诠释未来

机器人学是未来发展的热点领域之一,而在这个领域中,建模、规划与控制则是必不可少的基础技术。今天作者要向大家推荐一本机器人学领域的经典教材——《机器人学建模、规划与控制》。 这本书由西安交通大学出版社出版,作者是机器人学专业的鼎…

JSX的本质

一、本质 React.createElement即h函数,返回vnode第一个参数,可能是组件,也可能是html tag组件名,首字母必须大写(React规定) 二、babel试一试 (babel集成了jsx的编译环境) // JSX…

【python海洋专题二十四】南海年平均海流图

【python海洋专题二十四】南海年平均海流图 南海年平均海流图都是些基础图形,但又是重要的! 结果展示 关键语句 quiver([X, Y], U, V, [C], **kw)参考资料 图片 Python气象数据处理与绘图(11):矢量箭头图(风场,通量场) - 简书…

海通国际:颐海国际第三方业务表现承压,关联方收入恢复

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,由于颐海国际(01579)发布2023年半年报:23H1主营业务收入同比-2.7%至26.16亿元,归母净利润同比36.0%至3.58亿元,海通国际发布关于颐海国际…

如何使用C/C++刷新修改已经打印显示在终端上的内容

写本文的起源是因为在安装一些工具的时候,发现在终端上并行安装的情况下,显示安装信息是会修改之前已经打印出来的内容,这是怎么做到的呢?抱着对这个问题的好奇我进行了一些探索。 终端是如何运行的 首先是最关键的问题&#xf…