YOLOv3训练自己数据集中所用到的代码及命令总结

本文介绍如何将数据集整理为VOC2007标准格式,并使用YOLOv3进行目标检测训练及测试的具体步骤,包括图片重命名、XML文件生成、模型训练、批量测试图片及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 将数据集整理为VOC2007标准格式所需要的一些代码:

1. 将所有图片重命名为000000.jpg的格式:

import os
path = "/home/Leequens/VOC/VOC2007/JPEG/test/YDXJ0013"
path1 = "/home/Leequens/VOC/VOC2007/JPEG/test/test6" # 生成到新路径中
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
for file in filelist:   #遍历所有文件
    Olddir=os.path.join(path,file)   #原来的文件路径
    if os.path.isdir(Olddir):   #如果是文件夹则跳过
        continue
    filename=os.path.splitext(file)[0]   #文件名
    filetype=os.path.splitext(file)[1]   #文件扩展名
    Newdir=os.path.join(path1,str(int(filename)+7240).zfill(6)+filetype)  #用字符串函数zfill 以0补全所需位数
    os.rename(Olddir,Newdir)#重命名

2. 根据真值表生成每张图片所对应的xml文件:

# ! /usr/bin/python
# -*- coding:UTF-8 -*-
import os, sys
import glob
from PIL import Image

# VEDAI 图像存储位置
src_img_dir = os.path.abspath('.')+'/G0024173'
# VEDAI 图像的 ground truth 的 txt 文件存放位置
src_xml_dir = os.path.abspath('.')+'/xml/G0024173'


# 遍历目录读取图片
img_Lists = []
def get_img_list(dir_path):
    if os.path.isdir(dir_path):
        for x in os.listdir(dir_path):
            get_img_list(os.path.join(dir_path, x))
    elif os.path.isfile(dir_path) and dir_path.split('.')[-1] == 'jpg':
        img_Lists.append(dir_path)

get_img_list(src_img_dir)
img_Lists.sort(key=lambda x:x[-10:])
# for i in img_Lists:
#     print(i)

# 创建xml文件,存入图片信息
for img_item in img_Lists:
    im = Image.open(img_item)  #打开图片 为了记录图片的长宽数据
    img = os.path.split(img_item)[1].split('.')[0]
    width, height = im.size

    # write in xml file
    # os.mknod(src_xml_dir + '/' + img + '.xml')
    xml_file = open((src_xml_dir + '/' + str(img) + '.xml'), 'w')
    xml_file.write('<annotation>\n')
    xml_file.write('    <folder>VOC2007</folder>\n')
    xml_file.write('    <filename>' + str(img) + '.jpg' + '</filename>\n')
    xml_file.write('    <size>\n')
    xml_file.write('        <width>' + str(width) + '</width>\n')
    xml_file.write('        <height>' + str(height) + '</height>\n')
    xml_file.write('        <depth>3</depth>\n')
    xml_file.write('    </size>\n')
    xml_file.close()

    

# 读取全部信息
txt_file = open('G0024173_chage.txt')

for line in txt_file.readlines():
    gt = line.splitlines()
    # print(gt)
#     gt = txt_file.readline().splitlines()
#     # gt = open(src_txt_dir + '/gt_' + img + '.txt').read().splitlines()

    # write the region of image on xml file
    for img_each_label in gt:
        spt = img_each_label.split(' ')  # 这里如果txt里面是以逗号‘,’隔开的,那么就改为spt = img_each_label.split(',')。

        # 判断是否需要写入xml
        if spt[6] == '0': #因为上次比赛给的真值表第六列是loss,所以需要判断
            # print (gt)

            # 打开相应xml文件,下面具体写入哪一列根据真值表来修改
            # print(spt[5].zfill(6))
            xml_file = open((src_xml_dir + '/' + spt[5].zfill(6) + '.xml'), 'a') 
            xml_file.write('    <object>\n')
            xml_file.write('        <name>' + str(spt[9]) + '</name>\n')
            xml_file.write('        <pose>Unspecified</pose>\n')
            xml_file.write('        <truncated>0</truncated>\n')
            xml_file.write('        <difficult>0</difficult>\n')
            xml_file.write('        <bndbox>\n')
            xml_file.write('            <xmin>' + str(spt[1]) + '</xmin>\n')
            xml_file.write('            <ymin>' + str(spt[2]) + '</ymin>\n')
            xml_file.write('            <xmax>' + str(spt[3]) + '</xmax>\n')
            xml_file.write('            <ymax>' + str(spt[4]) + '</ymax>\n')
            xml_file.write('        </bndbox&g
### 使用YOLOv8训练自定义数据集上的实例分割模型 #### 数据准备 为了使用YOLOv8进行实例分割,需先准备好合适的数据集。对于Windows系统的用户来说,推荐使用的标注工具可从指定链接下载exe文件[^1]。 创建的数据集应遵循特定的文件夹结构,这与对象检测的要求相同。具体而言,每个用于实例分割的对象由一系列坐标表示,这些坐标的范围已被标准化至0~1之间。每一组这样的点集合代表了一个单独的目标,在数据集中按照`class_id x1, y1, x2, y2……xn, yn`的形式记录下来。 #### 配置文件设置 在开始训练之前,还需编写一个名为`dataset.yaml`的配置文件来描述所用数据集的信息。此文件通常包含路径指向图像及其对应的标签位置等内容。确保该文档准确无误地反映了本地存储情况非常重要。 ```yaml train: path/to/train/images/ val: path/to/validation/images/ nc: number_of_classes names: [&#39;class_name_1&#39;, &#39;class_name_2&#39;] ``` 上述代码片段展示了基本的YAML格式配置示例外观;其中`path/to/train/images/`和`path/to/validation/images/`应当替换为实际目录地址,而`number_of_classes`以及各分类名称也得依据个人项目需求调整。 #### 训练流程 启动训练过程相对简单明了: 通过命令行输入如下指令即可执行训练操作: ```bash yolo task=segment mode=train model=yolov8s-seg.pt epochs=5 batch=1 data=dataset.yaml ``` 这条命令指定了要运行的任务类型(即实例分割)、采用的基础预训练权重(`model`)、迭代次数(`epochs`)、每批次处理样本数量(`batch`)还有先前提到过的数据集配置文件的位置(`data`)。值得注意的是这里选用的小规模版本(`yolov8s-seg.pt`)适合初步测试或资源有限的情况下使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值