当前位置: 首页 > news >正文

如何使用yolov5-master进行训练

主要记录配置完成的yolov5-master如何进行自定义数据集训练。

本人使用的设备是jetson-orin AGX,系统是英伟达官方魔改过的ubuntu18.04.。

一、修改配置

首先观察train.py的__main__部分,我们发现训练程序接受很多个参数。

 其中我们必须要关注的参数包括:

1、 --weight 初始权重设置,需要输入初始权重的路径,但也可以设置为 '' , 使得模型从零开始训练

2、 --cfg 模型配置设置,需要输入模型初始配置文件的地址

3、 --data 数据配置设置,需要输入数据配置文件的地址

4、 --device 使用何种设备训练? 设置为0,便可以使用gpu训练

1、配置--cfg 

如下所示,模型配置文件一般储存在models文件夹里。

打开后发现里面已经有yolov5s.yaml,yolov5m.yaml,yolov5l.yaml和yolov5x.yaml四个文件。模型配置文件储存的是神经网络的架构信息,譬如,第几层是什么样的卷积层,第几层是什么样的全连接层。而这四个文件,便对应着四种复杂度从低到高的配置,你可以选择一个复制出来,像我一样命名为myyolo.yaml(或者是其他名称)。

 打开这个配置文件,发现中间确实存着各种各样的架构信息。对于我这样的小白,这些都不重要,重要的是第一行nc这个参数,需要进行修改。

nc是什么呢?就是这个模型要识别多少种物体。比如你要识别人、电视、椅子这三种对象,就把它设置为3就行了

2、配置--data

打开主文件夹下的data文件夹,发现里面已经有很多配置文件了。打开coco128.yaml,我们查看一下其内容。

 我们可以复制一个coco128.yaml然后按照自己的需求修改,也可以直接改(train.py默认使用这个配置文件)

注意看,train和val后分别保存着训练数据集和验证数据集的地址(这个地址是相对train.py这个文件的);nc是识别物体种类数,names就是各个种类对应名称。

修改这些配置后就可以了,download不用管。

二、准备数据集

网上搜一搜coco128.zip这个文件,也可以点这个:

coco128数据集下载连接-CSDN博客

把文件解压在在coco128.yaml中配置的位置。打开后发现如下图所示,图片和数据是用12位数字命名的,而且数据和标记的主名称必须一样!

替换这些图片和数据,就可以使用自训练数据。

打开任意一个标记文件。发现它的格式如下所示:

 分别标记着物体对应标号(可以看看coco128.yaml,'person'的标号应该是0,也就是说,标号是在data配置文件中设置的

而后面四个浮点数,应该分别是:

x_center 横向坐标

y_center 纵向坐标

width 识别框宽度

height 识别框高度

当然,对这些数据进行手动标记太耗费时间,使用LabelImg这样的工具可以解决这个问题。这里不过多描述,如果只是像我一样的小白熟悉框架,可以使用coco128训练集!

三、开始训练

开始运行train.py

 python train.py --data ./data/coco128.yaml  --cfg ./models/myyolo.yaml --weights '' --device 0

输入我们刚才提及的一些系列参数配置,训练就开始了!如果一切顺利,那么皆大欢喜,但往往会遇到不少bug,这边建议联合gpt和百度搜索解决。

以下是几个我遇到的问题和解决方法:

1、np.int错误 

由于我们装的numpy是新版本,弃用了np.int这个类型,改用np.int64;而yolov5考虑的是老版本的numpy,所以会有不兼容的地方。

所以建议安装1.20版本以下的numpy,或者就只能手动把报错的np.int改为np.int64

2、pillow错误

YOLOV5训练过程中出现报错:module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘_image.antialias-CSDN博客

pillow版本太高也有问题,这里有对应解决办法。

3、tensor不能直接转nparray

TypeError: can‘t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to_return self.numpy() typeerror: can't convert cuda:-CSDN博客

4、cache错误 

yolov7 magic_number = pickle_module.load(f, **pickle_load_args) _pickle.UnpicklingError: STACK_G_magic number = pickle module.load(f **pickle load -CSDN博客

下载的coco128.zip原有的cache文件必须全部删去 

四、使用训练完毕的权重

这次训练的结果会被存在

./runs/expx

这个文件夹下,其中包括训练过程中各种数据和结果。结果在weights文件夹下,包括着测试集上的最好结果best.pt和最后一次的结果last.pt(感觉哪种都可能过拟合啊)

我把best.pt放到了myyolo主文件夹下,然后运行这样启动detect.py看看能不能跑。

 python ./detect.py --weight myweights.pt --device 0

会默认识别inference/images下面的图片,然后放到inference/output中。

然后我们发现,运气好的话,它还是能识别到一些东西的。但置信度和识别率都令我特别感动。所以我们还是需要好好改进训练流程的! 

然而这是正常的,coco128才128张图片,却要识别80个种类,能识别出一些就不错了!可以考虑使用预训练模型来加速这一进程!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 书生.浦江大模型实战训练营——(四)书生·浦语大模型全链路开源开放体系
  • JavaScript高阶笔记总结第三天:(JavaScript高阶完结)
  • JavaScript中的字符串与数字转换
  • 人工智能GPU算力评估分析
  • Unity动画模块 之 Animation
  • Gradle相关的语法
  • 官宣|Apache Flink 1.20 发布公告
  • linux系统编程:缓冲区,文件io(19)
  • 【Linux】快速入门系列(四) —— Linux实用操作
  • 【LeetCode】452.用最少数量的箭引发气球
  • C++ 适配器 stack
  • 加强混合工作时代的组织网络安全态势
  • Feign的优化
  • https跟http有什么区别?
  • 《剑指offer》题目 C++详细题解
  • [译] 怎样写一个基础的编译器
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 2017届校招提前批面试回顾
  • 30秒的PHP代码片段(1)数组 - Array
  • codis proxy处理流程
  • CSS盒模型深入
  • JavaScript 一些 DOM 的知识点
  • Js基础知识(四) - js运行原理与机制
  • opencv python Meanshift 和 Camshift
  • Python 基础起步 (十) 什么叫函数?
  • spring学习第二天
  • 翻译:Hystrix - How To Use
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端学习笔记之观察者模式
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信小程序填坑清单
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一天一个设计模式之JS实现——适配器模式
  • 源码安装memcached和php memcache扩展
  • 走向全栈之MongoDB的使用
  • ionic入门之数据绑定显示-1
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​用户画像从0到100的构建思路
  • # include “ “ 和 # include < >两者的区别
  • #1015 : KMP算法
  • #ifdef 的技巧用法
  • #数学建模# 线性规划问题的Matlab求解
  • $.ajax中的eval及dataType
  • $.each()与$(selector).each()
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (二)JAVA使用POI操作excel
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net经典笔试题
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /etc/skel 目录作用
  • :class的用法及应用
  • @Bean有哪些属性