yolo训练自己数据集

写在前面
学习了相关文章,发现大部分内容不够详细,提供的代码虽然可用,但比较繁杂,并不方便。当然也有优秀作者写出了很好的文章。本文站在巨人肩膀,融入自己的理解,希望对各位看官有所帮助。本文默认各位看官对环境搭建已经掌握,本文对此比在赘述

数据集划分

最终数据文件如下所示。首先在datasets文件夹下放置images、xmls文件。这两个文件夹分别存放所有的jpg文件和所有的xml文件。
在这里插入图片描述
利用下列所给代码,生成labels文件夹和train.txt、val.txt、test.txt四个文件。修改**parse_option()**函数,配置自己的文件路径和数据划分比例。

import os
import random
import argparse
from ultils import *
import warnings


def parse_option():
    parser = argparse.ArgumentParser()

    # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
    parser.add_argument('--dataset', default='datasets', type=str, help='input dataset path')
    # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
    parser.add_argument('--xml_path', default='datasets/xmls', type=str, help='input xml label path')
    # 数据集的划分,地址选择自己数据下的ImageSets/Main
    parser.add_argument('--jpg_path', default='datasets/images', type=str, help='output jpg label path')
    # 数据集的划分,地址选择自己数据下的ImageSets/Main
    parser.add_argument('--label_path', default='datasets/labels', type=str, help='output txt label path')
    # 数据集的划分,比例
    parser.add_argument('--ratio', default=[0.8, 0.1, 0.1], type=list, help='the ratio of [train val test]')
    # 随机数种子,保证每次产生的分组相同,实现具有复现性
    parser.add_argument('--seed', default=42, type=int, help='seed for initializing training. ')
    opt = parser.parse_args()

    if opt.seed is not None:
        random.seed(opt.seed)
        warnings.warn('You have chosen to seed training.')

    if not os.path.exists(opt.label_path):
        os.makedirs(opt.label_path)

    return opt

if __name__ == '__main__':
    opt = parse_option()

    # 将xml文件转化为voc格式文件
    total_files = os.listdir(opt.jpg_path)
    for file in total_files:
        xml_file = opt.xml_path + '/' + file[:-4] + '.xml'
        txt_file = opt.label_path + '/' + file[:-4] + '.txt'
        convert_annotation(xml_file, txt_file)

    # 对数据进行划分
    train_txt = open(os.path.join(opt.dataset, 'train.txt'), 'w')
    val_txt = open(os.path.join(opt.dataset, 'val.txt'), 'w')
    test_txt = open(os.path.join(opt.dataset, 'test.txt'), 'w')

    abs_path = os.getcwd()

    trainval = random.sample(total_files, int(len(total_files) * (opt.ratio[0]+opt.ratio[1])))
    train = random.sample(trainval, int(len(total_files) * opt.ratio[0]))

    for file in total_files:
        if file in trainval:
            if file in train:  # train_data
                train_txt.write(opt.jpg_path + '/' + file + '\n')
            else:   # val_data
                val_txt.write(opt.jpg_path + '/' + file + '\n')
        else:  # test_data
            test_txt.write(opt.jpg_path + '/' + file + '\n')

代码首先实现对数据转成txt格式并保存在labels文件夹下,然后train.txt、val.txt、test.txt三个文件夹分别保存训练、验证、测试的数据。

训练数据

复制ultralytics/cfg/datasets/coco.yaml文件修改其中内容并重命名为自己的文件。其中左图为原始coco.yaml文件内容,右图为修改后的文件内容。
不用插入描述
在这里插入图片描述
下载相应模型文件,放置在同一目录下,采用终端命令即可实现模型训练。
在这里插入图片描述

yolo task=detect mode=train model=yolov8s.pt data=buildings.yaml epochs=1000 batch=16

正确运行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值