yolov5自定义模型训练二

news/2024/7/11 0:43:27 标签: YOLO, 人工智能, 深度学习

        前期准备好了用于训练识别是否有火灾的数据集后就可以开始修改yolo相关文件来进行训练

数据集放到yolov5目录里

在data目录下新建yaml文件设置数据集信息如下

在model文件夹下新增新的model文件

开始训练

训练出错

确认后是对训练数据集文件夹里的文件名字有要求,原先

改为如下后

仍然出错如下,看log应该时转换lable时的问题

确认了时label没做归一化处理,新增归一化处理的转换脚本代码,

import os
import xml.etree.ElementTree as ET

def convert_xml_to_txt(xml_path, txt_path):
    # 读取XML文件
    tree = ET.parse(xml_path)
    root = tree.getroot()

    # 获取图像的宽度和高度
    width = int(root.find('size/width').text)
    height = int(root.find('size/height').text)

    with open(txt_path, 'w') as f:
        # 遍历所有的目标
        for obj in root.findall('object'):
            # 获取类别名称
            class_name = obj.find('name').text

            # 获取边界框坐标
            xmin = int(obj.find('bndbox/xmin').text)
            ymin = int(obj.find('bndbox/ymin').text)
            xmax = int(obj.find('bndbox/xmax').text)
            ymax = int(obj.find('bndbox/ymax').text)

            # 归一化处理
            x_center = (xmin + xmax) / (2 * width)
            y_center = (ymin + ymax) / (2 * height)
            box_width = (xmax - xmin) / width
            box_height = (ymax - ymin) / height

            # 写入到TXT文件
            class_index = class_names.index(class_name)
            f.write(f"{class_index} {x_center} {y_center} {box_width} {box_height}\n")



# 读取类别名称列表
class_names = ['fire']

# 遍历xml文件夹中的所有xml文件
xml_folder = 'D:/fire-dataset/fire-dataset/validation/annotations'
txt_folder = 'D:/fire-dataset/fire-dataset/validation/txtannotations'
for xml_file in os.listdir(xml_folder):
    if xml_file.endswith('.xml'):
        xml_path = os.path.join(xml_folder, xml_file)
        txt_file = os.path.splitext(xml_file)[0] + '.txt'
        txt_path = os.path.join(txt_folder, txt_file)
        convert_xml_to_txt(xml_path, txt_path)

重新转换后重新训练

可以训练了,但是又因电脑性能问题出错如下

 调整默认batchsize到8后重新训练–batch-size 8 


http://www.niftyadmin.cn/n/4987671.html

相关文章

数据结构--5.2马踏棋盘算法(骑士周游问题)

题目渊源: 马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。 题目要求: 国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。…

【ES6】JavaScript的Proxy:理解并实现高级代理功能

在JavaScript中,Proxy是一种能够拦截对对象的读取、设置等操作的机制。它们提供了一种方式,可以在执行基本操作之前或之后,对这些操作进行自定义处理。这种功能在许多高级编程场景中非常有用,比如实现数据验证、日志记录、权限控制…

Dubbo默认使用什么序列化框架?还有哪些?

Dubbo默认使用的序列化框架是Hessian 2.0。Hessian是一种基于二进制的序列化协议,它具有简单、高效的特点,适用于网络传输和存储数据。Hessian在Dubbo中被广泛使用,因为它可以在不同的编程语言之间进行对象的序列化和反序列化。 除了Hessian…

国标GB28181安防视频平台EasyGBS角色设备分配功能优化

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富,部署灵活,既能作为业务平台使用,也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频监控EasyGBS平台可提供流媒体接入、处理、转发等服务,支持内网、公网的安…

李宏毅机器学习课程笔记(更新ing)

CNN 为什么AlphaGo可以用CNN?棋盘抽象成图片时需要注意什么? 首先图片有两个特点: 1,只观察局部就可以显示某种pattern,比如要得出一个鸟嘴的结论,只需要观察局部图片 2,某种pattern可以出现在图…

C++ 编译链接

main.c 预编译 main.i 删除注释 头文件引入 宏展开 编译 main.s 代码优化 汇总所有的符号 汇编 main.o 二进制可重定位文件 根据特定平台 将汇编指令转换成机器码 构建 .o(obj) 文件 链接 可执行文件 1 合并所有obj文件的段,并调整段偏移和段长度&#xff…

黑马点评环境搭建导入

一开始配置maven的时候,发现怎么都无法查看maven的版本,后来才知道是JAVA_HOME的问题,开头多了一个空格(因为我是直接复制过去的),然后搜网上通过命令行可以看到肉眼看不到的bug。 通过命令行的方式改正确后…

Vue:统计代码行数

1. 在代码目录下打开git bash 2. 在代码目录下打开git bash find . "(" -name "*.html" -or -name "*.js" -or -name "*.css" -or -name "*.vue" ")" -print | xargs wc -l运行结果: 3. 命令解析&…