第Y2周:训练自己的数据集

这篇具有很好参考价值的文章主要介绍了第Y2周:训练自己的数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊|接辅导、项目定制
  • 我的环境:
    第Y2周:训练自己的数据集

一、准备自己的数据集

数据集来源:kaggle水果检测

  • 目录结构如下:
    第Y2周:训练自己的数据集

1. 编写split_train_val.py文件

# 划分train、test、val文件
import os
import random
import argparse

parser = argparse.ArgumentParser()
# xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='annotations', type=str, help='input txt label path')
# 数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)

file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')


for i in list_index:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        file_trainval.write(name)
        if i in train:
            file_train.write(name)
        else:
            file_val.write(name)
    else:
        file_test.write(name)

file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

这个文件的作用主要是划分训练以及验证集的文件名

  • 执行之后会生成如下文件:

第Y2周:训练自己的数据集

  • 文件中是具体训练和验证的文件名:
    第Y2周:训练自己的数据集

2.生成训练文件索引文件

  • 主要依靠voc_label.py,代码如下:
import xml.etree.ElementTree as ET
import os
from os import getcwd

sets = ['train', 'val', 'test']
classes = ["banana", "snake fruit", "dragon fruit", "pineapple"]  # 改成自己的类别
abs_path = os.getcwd()
print(abs_path)


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return x, y, w, h



def convert_annotation(image_id):
    in_file = open('./annotations/%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('./labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue

        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        b1, b2, b3, b4 = b
        # 标注越界修正
        if b2 > w:
            b2 = w
        if b4 > h:
            b4 = h
        b = (b1, b2, b3, b4)
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


wd = getcwd()
for image_set in sets:
    if not os.path.exists('labels/'):
        os.makedirs('labels/')
    image_ids = open('./ImageSets/Main/%s.txt' % (image_set)).read().strip().split()
    list_file = open('./%s.txt' % (image_set),'w')
    for image_id in image_ids:
        list_file.write(abs_path + '/images/%s.png\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()
  • 执行之后,会生成如下文件:

第Y2周:训练自己的数据集

  • 文件具体内容如下:

第Y2周:训练自己的数据集

二、创建训练yaml文件

train: ./paper_data/train.txt
val: ./paper_data/val.txt

nc: 4

names: ["banana", "snake fruit", "dragon fruit", "pineapple"]

三、开始训练

python train.py --img 900 --batch 2 --epoch 100 --data data/test.yaml --cfg models/yolov5s.yaml --weights yolov5s.pt

  • 训练过程:

第Y2周:训练自己的数据集

  • 训练结果如下:

labels:

第Y2周:训练自己的数据集

  • predict:

第Y2周:训练自己的数据集

总结:
这周学会了如何使用yolov5训练自己的数据集,再进一步可以考虑修改模型!
注:近期在忙着写小论文,很多需要复习的点先堆积着😿文章来源地址https://www.toymoban.com/news/detail-469043.html

到了这里,关于第Y2周:训练自己的数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TransUnet训练自己的数据集

    1.原始数据集如下图所示分images和labels,若数据集是png/jpg....格式,首先需要将每一张图的image和其对应的label合并转化为一个.npz文件. train文件转化为 train_npz文件;val转化为test_vol_h5文件,如图(注意这里训练集与测试集均转化为.npz格式,需修改读取文件的方法,具体是修改

    2023年04月12日
    浏览(41)
  • Openpcdet训练自己的数据集

    * Openpcdet详细内容请看以下链接: GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection. 1.首先gitclone原文代码 2. 这里我建议自己按照作者github上的docs/install文件夹下指示一步步安装,(之前根据csdn上教程一直有报错),然后下载spconv,以及cumm, github链接如下: GitH

    2024年03月24日
    浏览(37)
  • PaddleOCR训练自己模型(1)----数据准备

    PaddleOCR开源代码(下载的是2.6RC版本的,可以根据自己需求下载) 具体环境安装就不详细介绍了, 挺简单的,也挺多教程的。 二、数据集准备及制作 (1)下载完代码及配置完环境之后,运行PPOCRLabel.py文件,打开标注软件( 2.7版本的会运行报错,解决方案如下 )解决PPOCR

    2024年04月16日
    浏览(45)
  • 使用MMDetection训练自己的数据集

    本文主要阐述如何使用 mmdetection 训练自己的数据,包括配置文件的修改,训练时的数据增强,加载预训练权重以及绘制损失函数图等。这里承接上一篇文章,默认已经准备好了 COCO 格式数据集且已安装 mmdetection ,环境也已经配置完成。 这里说明一下,因为 mmdetection 更新至

    2024年02月06日
    浏览(58)
  • 使用SwinUnet训练自己的数据集

    参考博文: https://blog.csdn.net/qq_37652891/article/details/123932772 遥感图像多类别语义分割,总共分为7类(包括背景) image: label_rgb label(这里并不是全黑,其中的类别取值为 0,1,2,3,4,5,6 ),此后的训练使用的也是这样的数据 数据地址 百度云: https://pan.baidu.com/s/1zZHnZfBgVWxs6T

    2024年02月04日
    浏览(49)
  • PointNet++训练自己的数据集(附源码)

    本文针对PointNet++强大的三维点云分类功能,详细讲解怎么训练自己的数据集,在此之前,需要确保已经能够跑通源码的训练和测试,如果没有,请参考PointNet++的源码运行。 1.1. 在mytensor_shape_names.txt中配置自己的分类,以及分类名称: 1.2. 在filelist.txt中填入对应的不同类别的

    2024年01月20日
    浏览(37)
  • Mask RCNN训练自己的数据集

    Mask RCNN作为实例分割的经典算法,对于图像分割的初学者来说,还是很有必要了解下的。 原mask rcnn的Tensorflow版本是1.13,这里提供tf2.5的mask rcnn的github源码地址:https://github.com/zouyuelin/MASK_RCNN_2.5.0 目录 一、制作数据集 1.下载安装labelme  2.标注数据集 3.labelme数据集转化 二、模

    2024年02月15日
    浏览(41)
  • detectron2训练自己的数据集

      Detectron2是Facebook AI Research的下一代库,是一个提供最先进的检测和分割算法的平台。它是Detectron和mask-benchmark的继承者。Detectron是Facebook人工智能研究的软件系统,它实现了最先进的目标检测算法,包括了Mask R-CNN,它是由python编写的,由caffe2深度学习框架提供支持。   在

    2024年02月02日
    浏览(43)
  • MMSegmentation训练自己的语义分割数据集

    然后 ctrl +N 开启多边形标注即可,命名类为person 之后会保存到同目录下json文件: 下载labelme代码里的转换代码: labels里存储的如下形式 运行指令 生成如下 mmseg/datasets里生成一个my_data.py文件,这个文件存储的是类别信息和seg颜色 需要多加一个backbone mmseg/utils/class_names.py文件

    2024年02月10日
    浏览(44)
  • YOLOv7——训练自己的数据集

    论文地址:https://arxiv.org/abs/2207.02696 源码地址:https://github.com/WongKinYiu/yolov7 下载好代码包,解压后配置环境,在终端直接下载requirements.txt的代码就好 (本人环境:torch 1.8.0,当然有一些tensorboard、wandb等工具包需要自己下载啦~) wandb安装教程看这个:wandb使用_ai-ai360的博客

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包