YOLOv8教程系列:二、为YOLO系列数据集添加背景图片,降低误识别率

本文主要利用以下脚本生成无object的xml,检测任务支持添加负样本进行训练以降低误检率

1.新建脚本

在自己的工作空间里新建一个create_xml.py的文件,将下述代码复制进去

import os
import glob
import cv2
import threading
import queue

class CreateXml:
    def __init__(self,JpgPath: str, XmlPath: str):
        # 指定作为背景图片的图片路径
        self.JpgPath = JpgPath
        # 即将生成的xml存放路径
        self.XmlPath = XmlPath  
        # 创建读图线程以及处理线程,防止读图时间过长影响处理
        self.readimageThread = threading.Thread(target=self.readImg)
        self.createThread = threading.Thread(target=self.create)              
        # 获取所有图片的列表
        self.imglist = os.listdir(self.JpgPath)
        # 最大长度设定为列表总长度
        self.imgQueue = queue.Queue(maxsize=len(self.imglist))

    
    def readImg(self):
        for jpgFile in self.imglist:
            #不加后缀,用以拼接xml
            jpg_prefix = os.path.splitext(jpgFile)[0]
            # 图片全路径
            jpg_full_path = os.path.join(self.JpgPath, jpgFile)
            img = cv2.imread(jpg_full_path)
            width, height,channel = img.shape
            array = [jpgFile,jpg_prefix,jpg_full_path,width,height,channel]
            self.imgQueue.put(array) 
        print("写入图片线程已结束")


    def create(self):
        # 为了保险起见,所有图片都要被读完
        count = 0
        while True:
        # 如果数组不为空则进行处理
            try:
                imgArray = self.imgQueue.get(block=False)
                xmlFilepath = os.path.join(self.XmlPath, imgArray[1] + '.xml')
                with open(xmlFilepath,'w') as f:
                    f.write('<annotation>\n')
                    f.write('\t<folder>JPEGImages</folder>\n')
                    f.write('\t<filename>' + str(imgArray[0]) + '</filename>\n')
                    f.write('\t<path>' + str(imgArray[2]) + '</path>\n')
                    f.write('\t<source>\n')
                    f.write('\t\t<database>' + 'Unknown' + '</database>\n')
                    f.write('\t</source>\n')
                    f.write('\t<size>\n')
                    f.write('\t\t<width>' + str(imgArray[3]) + '</width>\n')
                    f.write('\t\t<height>' + str(imgArray[4]) + '</height>\n')
                    f.write('\t\t<depth>'+ str(imgArray[5])+'</depth>\n')
                    f.write('\t</size>\n')
                    f.write('\t<segmented>0</segmented>\n') 
                    f.write('</annotation>')
                print(f"{xmlFilepath} 已写入")
                count += 1

            except queue.Empty :
                # print("queue get失败,即将再次尝试")
                if count == len(self.imglist):
                    break

        print("写入xml线程已结束")

    def run(self):
        # 开始读图、处理线程
        self.readimageThread.start()
        self.createThread.start()      

if __name__ == "__main__": 
    Annotation = CreateXml(JpgPath='/Users/lizhijun/demo/create_xml/background',
                            XmlPath ='/Users/lizhijun/demo/create_xml/empty_xml')

    Annotation.run()

2.修改脚本

新建一个保存xml的文件夹,将脚本的74行的JpgPath和XmlPath修改为自己的文件夹路径,这是我的background文件夹:
在这里插入图片描述

3.运行脚本

python create_xml.py

这是我运行成功的截图
在这里插入图片描述
这是新生成的xml文件
在这里插入图片描述
最后,将图片和xml都复制到对应的待训练文件夹中,即可导出训练啦~

YOLOv8的训练教程可参看这篇文件:
YOLOv8教程系列:一、使用自定义数据集训练YOLOv8模型(详细版教程),包含环境搭建/数据准备/模型训练/预测/验证/导出等

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要使用YOLOv8训练自己的数据集,首先需要将数据集准备好并转换为YOLO可识别的格式。以下是一些步骤: 1. 数据集标注:使用标注工具(如LabelImg)对图像进行标注,并为每个对象分配一个类别标签。标注时,需要将对象的边界框(Bounding Box)绘制在图像上,并将其类别标签保存到相应的XML文件中。 2. 数据集转换:将标注数据转换为YOLO可接受的格式。YOLOv8使用的是.txt文件作为标签文件,每个图像对应一个.txt文件。每个.txt文件中的每一行表示一个对象,包括对象的类别索引和边界框的归一化坐标。例如,一行可以是这样的格式:`class_index x_center y_center width height`。 3. 数据集划分:将转换后的数据集划分为训练集和验证集。一般来说,可以按照80%的比例划分为训练集,20%的比例划分为验证集。确保训练集和验证集中的图像及其对应的.txt文件都正确匹配。 4. 配置文件设置:修改YOLOv8的配置文件以适应自己的数据集。配置文件通常包括模型参数、类别数、路径等信息。 5. 训练模型:使用YOLOv8的训练脚本进行模型训练。该脚本会读取配置文件、数据集和预训练的权重文件,并开始训练模型。训练过程可能需要较长时间,取决于数据集的大小和计算资源的性能。 6. 模型评估:训练完成后,可以使用测试集对训练得到的模型进行评估。评估指标可以包括准确率、召回率、平均精确度(Average Precision)等。 7. 模型应用:训练完成的模型可以用于检测新的图像或视频中的对象。使用YOLOv8的预测脚本加载模型,并对输入进行推理,得到对象的边界框和类别信息。 这些是YOLOv8训练自己数据集的基本步骤,具体的实施过程可能会因个人需求和环境而略有差异。请确保在使用他人数据集时遵守相关法律和道德规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhijun.li@Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值