yolo数据集建立

yolo数据集建立学习记录

使用labelImg软件建立自己的Yolo数据集

labelImg是一个非常方便好用的标注软件,可以在labelImg官方网站下载安装包,直接调用.exe文件就可以使用
下载地址:
链接:https://pan.baidu.com/s/15XcoAGaDG-GGaf24K8KcTw
提取码:zhhh
解压安装包,打开软件,运行程序如图
在这里插入图片描述
可得到labelImg软件界面,就可以开始数据集标注了
在这里插入图片描述
如果是标注一张图片的话,可以选择Open打开需要标注的图片。一般来说yolo数据集都是较多数据,选择Open Dir打开数据存放路径,就可以通过选择Next Image选择文件夹中的全部图片一一进行标注。

在构建yolo数据集时,点击Pascal Val,可以切换为yolo数据格式。在yolo数据格式下点击Create\nRectBox就可以建立标注框了。点击按钮后拖动鼠标到想得到的标注框左上角,点下鼠标左键不放继续拖动到标注框右下角,松开鼠标,就完成了一次标注,得到标注框后还可以继续拖动边界调整大小。在标注中可以选择labelImg自带的14类标签之一,也可以在界面的右边框里自定义标签的类别。标注合适自己数据集的名称。在这里插入图片描述
一张图片标注结束后记得点击Save保存标注,默认路径是保存在原路径下,标注的yolo格式坐标会保存在与标注图片同名的.txt文件中,也可以通过Change Save Dir改变保存路径。

整理数据,准备训练

通过labelImg标注得到完整的数据集,接下来的工作为划分训练集与测试集,建立数据List。
我在标注过程中没有改变保存路径,所以得到的数据.jpg与.txt都在同一个文件夹里,对数据进行处理,先按照9:1的比例划分训练集与验证集,并将文件路径与名称写成.txt文件,为训练做准备。当时使用官方的数据集划分文件一直保存,所以自己写了一个python脚本如下:

import numpy as np
import os
import cv2
import random
a=[]
file_path = "/home/yolo/images/"    //读取数据路径
path1="/home/yolo/labels/"         //保存labels路径
path_list = os.listdir(file_path)    //遍历文件夹
n=len(path_list)
index = int(round(n*0.9))  
indexes = np.array(range(0,n))
random.shuffle(indexes)  
train_idxes = indexes[0:index]  //随机取90%数据建立训练集
test_idxes = indexes[index:n]   //取剩余10%数据建立验证集
 
for i in train_idxes:
     path=file_path+path_list[i]
     img=cv2.imread(path)   //读取训练集名单
     cv2.imwrite("/home/yolo/images/train/"+path_list[i],img) //将train数据保存在train文件夹中
     txt_name=path.split('/')[-1]
     txt_name=txt_name.split('.')[0]
     txt_name+='.txt'
     txt_path=path1+txt_name
     with open(txt_path,'r')as fb:
            a=fb.read()
     with open("/home/yolo/labels/train/"+txt_name,'a')as f:
            f.write(a)     //读取.txt文件并保存在labels文件夹中

for i in test_idxes:
     path=file_path+path_list[i]
     img=cv2.imread(path)
     cv2.imwrite("/home/yolo/images/test/"+path_list[i],img)
     txt_name=path.split('/')[-1]
     txt_name=txt_name.split('.')[0]
     txt_name+='.txt'
     txt_path=path1+txt_name
     with open(txt_path,'r')as fb:
            a=fb.read()
     with open("/home/yolo/labels/test/"+txt_name,'a')as f:
            f.write(a)

把所有数据通过生成90%的随机数与10%的随机数进行划分训练集与验证集,先在0~n中随机抽取90%个数字,并在文件夹中读取这0.9n个数对应的图片与标注,保存为训练集,将剩余的10%保存为验证集,得到两个命名为images与labels的文件夹,每个文件夹下面包含train文件夹与test文件夹,分别包含对应的图片与标签。
接下来生成训练所需的数据名称文件,我比较倾向于使用绝对路径,代码如下:

import os
images_train_path = '/home/yolo/images/train/'
images_test_path = '/home/yolo/images/test/'
labels_train_path = '/home/yolo/labels/train/'
labels_test_path = '/home/yolo/labels/test/'
save_path1 = '/home/yolo/train.txt'
save_path2 = '/home/yolo/test.txt'
save_path3 = '/home/yolo/labels/train.txt'
save_path4 = '/home/yolo/labels/test.txt'

f1 = open(save_path1,'a')
for filename in os.listdir(images_train_path):  
    f1.write('/home/yolo/images/train/'+filename)
    f1.write("\n")
f1.close()

f2 = open(save_path2,'a')
for filename in os.listdir(images_test_path):  
    f2.write('/home/yolo/images/test/'+filename)
    f2.write("\n")
f2.close()

f3 = open(save_path3,'a')
for filename in os.listdir(labels_train_path):  
    f3.write('/home/yolo/labels/train/'+filename)
    f3.write("\n")
f3.close()

f4 = open(save_path4,'a')
for filename in os.listdir(labels_test_path):  
    f4.write('/home/yolo/labels/test/'+filename)
    f4.write("\n")
f4.close()

生成四个.txt文件,按照格式分别置于yolo路径下与labels路径下。接下来按照我们的路径更改yolo网络中的数据路径,就可以开始训练啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值