darknet yolo标注、训练详细说明

news2024/11/27 2:20:43

文章目录

  • 1、标注数据
    • 1.1、标注
    • 1.2、生成训练列表文件train.txt
    • 1.3、转换数据标注格式
  • 2、训练数据整理
    • 2.1、修改train.txt路径
    • 2.2、修改yolov3.cfg
    • 2.3、obj.name和obj.data
    • 2.4、训练脚本文件trian.sh
    • 2.5、测试脚本文件test.sh
  • 3、训练

本文对应的脚本文件和程序下载链接 darkent yolo自定义数据标注训练全流程说明示例,也可发私信获取。

1、标注数据

使用labelImg.exe工具对数据进行标注,默认使用voc的数据集格式,之后使用脚本转换为yolo专用的数据格式,并且生成一些训练依赖的准备数据。
在这里插入图片描述

准备工作:

  • (1)执行脚本 0——清理train文件下的img、xml、txt文件文件 ,将上次训练的所有数据删除(需要的话进行备份)
  • (2)复制训练图片到 train/JPEGImages 目录下 (图片过大建议等比缩放到1080以下)

exe和train的目录结构
在这里插入图片描述在这里插入图片描述

1.1、标注

使用脚本 1——LabelImg.cmd 打开工具,
按钮 Open Dir 选择待标注的图片数据目录 这里为 to_path/train/JPEGImages
按钮 Change Save Dir,选择存放标注文件xml目录,to_path/train/Annotations
在这里插入图片描述

加载图片之后,点击 Edit label按钮 标注目标的类别标签
在这里插入图片描述
按键 a 、d 切换图片, 按键 w 开始绘制标准框, ctrl+s 保存当前标注图片数据。

详细参考互联网内容,搜索 yolov3标注自定义数据。标注完成后,目录下train/Annotations会得到每一张图片对应的的xml标注文件,
在这里插入图片描述在这里插入图片描述

1.2、生成训练列表文件train.txt

训练需要给出所有图片的绝对地址,这里注意,标注机器可能和后期训练不在一个机器,路径会变化,后期根据实际路径进行批量修改替换。

执行脚本 2——Label_generate_traintxt.cmd 即可,会在当前目录生成train.txt文件。如下
在这里插入图片描述
红框目录可能变化,可以通过修改脚本的参数,自动生成
在这里插入图片描述

1.3、转换数据标注格式

先修改脚本文件 exe/label_conver_voc_2_yolo.py 中的classes 列表为标注工具中的标签名,例如有4个标签 car,huoche,guache和keche,那么将之前行用#注释,修改如下图。
在这里插入图片描述

修改后保存之后,执行脚本 3——Label_conver_voc_2_yolo.cmd ,之后可以在目录 train\labels看到txt格式的标注文件
在这里插入图片描述
在这里插入图片描述
格式为 标签序号 x y w h :这里标签序号从0开始,值为python脚本中 classes 列表的下标;位置为相对图像宽高尺寸的百分比例。

这里实际是通过标注文件目录下train/Annotations的xml文件转换得到,一一对应(txt,xml,图片都要一一对应)。

可能出现的问题:

  • LabelImage.exe标注得到的xml文件中图像宽高尺寸为0,导致txt转换错误,训练时报错。脚本使用PIL库增加验证修复环节,保证转换正确无误。

    在这里插入图片描述
  • 提示标签不存在:因为标注时lable输入错误,和脚本中的classes列表元素不一致

2、训练数据整理

在训练机器上的训练工具目录darknet下,拷贝标注文件目录train和列表文件train.txt新建训练目录如data-vehicle-0926-772,这里的目录结构如下
在这里插入图片描述在这里插入图片描述

2.1、修改train.txt路径

修改图片列表文件路径的真实路径,前面 1.2、 生成训练列表文件train.txt 已经说明。注意要换行格式,要求unix、utf8格,否可能在训练出错、但会提示STB类似错误。

2.2、修改yolov3.cfg

从darknet目录复制一份原始yolov3.cfg文件到当前训练目录。修改地方有两快

  • (1) 修改网络结构参数

    找到cfg文件中的 所有[yolo]标签段(共3个),修改红框中的数据
    在这里插入图片描述
    classes修改为标注时的类别数量,例如4类,filters修改 (类别数+5)*3,这里就修改为(4+5)*3 = 27。(后期其他类别对应修改即可)
    注意,一共是修改3组数据。

  • (2) 修改训练参数

    这里参数比较专业,在大量数据训练时,需要不断调参设计。当前我们使用默认设计。训练时使用 batch=64, subdivision=16,如果机器GPU性能好显存足够,可以将subdivision降低为8、4、2等(3090可以修改为2)。
    在这里插入图片描述

2.3、obj.name和obj.data

照着修改即可
在这里插入图片描述

2.4、训练脚本文件trian.sh

脚本内容为

cd ..
./darknet detector train data-vehicle-0926-772/obj.data data-vehicle-0926-772/yolov3.cfg /yolov3.cfg darknet53.conv.74 -i 0 -clear

例如机器上已有的脚本文件为
在这里插入图片描述

2.5、测试脚本文件test.sh

(训练完成后进行)使用训练的指定模型文件对图片进行测试,并生成结果图片。
例如在服务器的darknet目录下执行

./darknet 
	detector 
	test 
	car-0612-400/obj.data 
	car-0612-400/yolov3-tiny.cfg 
	car-0612-400/weights/yolov3-tiny_best.weights  
	-i 0 -thresh 0.25 
	./car-0612-400/train/JPEGImages/11.jpg 
	-ext_output

控制台会打印检测的结果,运行完成后,会生成一个 predictions.jpg 的文件,
在这里插入图片描述

3、训练

训练数据目录下,执行train.sh训练脚本即可,根据控制台训练数据输入检查是否存在错误,进行针对性调整。
正式训练时,后台执行,使用 命令 nohup train.sh & 即可, 生成nohup.out 的训练日志。

在这里插入图片描述
训练中间的输出,关注中间的 avg loss,直观上一般越低越好。
在这里插入图片描述
后面可以使用脚本drawLossPlot.py绘制loss(train)曲线
在这里插入图片描述

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

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

相关文章

chatgpt赋能python:Python如何保存成文件

Python如何保存成文件 Python是一种十分强大和流行的编程语言,它的灵活性和易于使用使得它成为了一个应用广泛的语言。在Python中,我们可以使用多种方式将编写的代码保存成文件,从而能够实现对需要的内容的复用和分享。本文将会介绍Python中…

利用谷歌DevTool解决web网页内存泄漏问题

目录 web网页内存泄漏 主要的内存泄漏来源 利用谷歌DevTool定位内存泄漏问题 性能Performance 主要功能 Performance insights性能数据分析 Memory内存 三种模式 相关概念 解决内存泄漏问题 第一步 :是否内存泄漏:js堆直增不降;降…

001Mybatis常用的网站及工具

MyBatis中文网https://mybatis.net.cn/ MyBatis Dynamic SQL – MyBatis Dynamic SQLhttps://mybatis.org/mybatis-dynamic-sql MyBatis GitHubMyBatis has 37 repositories available. Follow their code on GitHub.https://github.com/mybatis/ mybatis-spring-boot-auto…

探究Jetpack(二)之LiveData

目录 LiveData的基本用法比较安全的LiveData使用方法map和switchMapmapswitchMap LiveData是Jetpack提供的一种响应式编程组件,它可以包含任何类型的数据,并在数据发生变化的时候通知给观察者 LiveData特别适合与ViewModel结合在一起使用,虽然…

大数据Doris(三十七):Spark Load导入HDFS数据

文章目录 Spark Load导入HDFS数据 一、准备HDFS数据 二、创建Doris表 三、创建Spark Load导入任务

C语言编程—常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。 常量就像是常规的变量,只不过常量…

云原生系列一:Aeraki --- 管理 Istio 服务网格中任何 7 层协议

导语:Aeraki Mesh 是 CNCF 的沙箱项目,它可以帮助你在服务网格中管理任何七层协议。 今天由叶秋学长来介绍如何通过 Aeraki 来在服务网格中为 Dubbo、Thrift 等协议的服务提供七层流量路由、本地限流、全局限流,以及如何基于 Aeraki Protocol快速开发一个自定义协议,并在 I…

CKA 06_Kubernetes 工作负载与调度 Pod 管理 yaml 资源清单 标签 Pod 生命周期 容器探针

工作负载与调度 1. Pod 管理1.1 kubectl 命令 2. yaml 资源清单2.1 yaml 文件的格式2.2 编写 yaml 资源清单 3. 标签3.1 节点标签选择器 考试题目:pod 中运行 nginx 和 memcache 容器4. Pod 生命周期4.1 Init 容器 5. 容器探针5.1 探测类型5.2 配置存活、就绪和启动…

驱动进化之路:总线设备驱动模型

了解总线设备驱动模型之前,可以先了解常规驱动程序的编写: LED驱动程序框架 驱动设计的思想:面向对象/分层/分离(以LED操作为例) 此次总线设备驱动模型程序的编写基于上述两种框架。 1. 总线设备驱动模型框架 在led_d…

STM32开发——串口通讯(非中断+中断)

目录 1.串口简介 2.非中断接收发送字符 3.中断接收字符 1.串口简介 通过中断的方法接受串口工具发送的字符串,并将其发送回串口工具。 串口发送/接收函数: HAL_UART_Transmit(); 串口发送数据,使用超时管理机制HAL_UART_Receive(); 串口…

虚拟机中Ubuntu不知root密码时设置唯一的非root用户为sudo管理员

刚才在虚拟机中玩Ubuntu的时候,在Cockpit管理页面把账号“服务器管理员”的选项给取消了,然后重新登录之后,就不能执行sudo指令了,所有需要root权限才能访问的文件(目录)、执行的命令全部都不行了。 执行s…

数据传输中的数据转换与处理的常用方法-物联网开发-单片机通信

目录 一、前言 二、实践与代码 1.Unsigned Char 2.memset 3.sprintf 4.atoi 5.atof 6.strcmp 7.strtok 8.strlen 9.strcpy 10.strcat 三、总结 一、前言 本文将以STM32单片机为基础,使用Keil5环境展示以下方法。 在单片机通信、载波通信中,常常涉及数…

【Laravel 6】安装需要什么环境?又怎么安装呢

服务器要求 服务器满足以下要求: PHP > 7.2.5BCMath PHP 拓展Ctype PHP 拓展JSON PHP 拓展Mbstring PHP 拓展OpenSSL PHP 拓展PDO PHP 拓展Tokenizer PHP 拓展XML PHP 拓展 安装Laravel Laravel 使用 Composer 来管理项目依赖。因此,在使用 Larav…

JDK动态代理和cglib代理

文章目录 前言1.JDK动态代理1.1 定义一个接口1.2 实现接口1.3 自定义MyInvocationHandler去实现InvocationHandler接口1.4 测试jdk代理1.5 输出代理类 2.cglib代理2.1 代理接口类2.2 代理普通类2.3 设置属性生成cglib代理类 前言 动态代理在平时的开发中用的也很多&#xff0c…

算法与数据结构(五)

一、c二叉树结构 typedef struct BiNode {int data; //结点内值域struct BiNode* lchild, * rchild; //左孩子 右孩子 } BiNode, * BiTree;或者: class Node { public:char data;// data表示该节点代表的内容;Node* L;//左子树Node* R;//右子树 }; No…

深度学习之卷积神经网络识别图片验证码实战案例(十)

案例背景:程序自动化的爬虫而无需人工介入是我们的最终目标。自动化爬虫避免不了自动登录的问题,在爬取XX数据的过程中,遇到登录图形验证码的识别的问题,那我们该如何攻破这种验证码呢? 字符验证码图片如下&#xff1a…

facenet, dlib人脸识别,人体检测,云数据库mysql,QQ邮箱,手机验证码,语音播报

目录 部分代码展示: 录入部分 识别部分​编辑 活体检测部分​编辑 同步到云数据库MySQL 其他操作 部分图片展示: 完整代码加ui链接: 涉及到的一些知识点的文章 部分代码展示: 录入部分 识别部分 活体检测部分 同步到云数…

峰终定律原理

峰终定律 峰终定律( Peak–End Rule),是由丹尼尔卡尼曼(2002年诺贝尔经济学奖获得者,心理学家)提出的。 模型介绍 峰终定律是指如果在一段体验的高峰和结尾,体验是愉悦的,那么对整个…

走进机器学习

作者简介:本人是一名大二学生,就读于人工智能专业,学习过c,c,java,python,Mysql等编程知识,现在致力于学习人工智能方面的知识,感谢CSDN让我们相遇,我也会致力…

javaScript蓝桥杯---传送门

目录 一、介绍二、准备三、目标四、代码五、知识点六、完成 一、介绍 日常浏览网页的时候,我们会发现一个问题,当页面太长、内容太多的时候我们很难快速浏览到心仪的内容。为了解决这个烦恼,优秀的产品研发团队发明了一种类似传送门的功能&a…