YOLO 划分数据集(训练集、验证集、测试集)_如何将yolo数据集分开训练集验证集测试集
img_path = ‘./VOCdevkit/VOC2007/JPEGImages’# 你的图片存放的路径(路径一定是相对于你当前的这个脚本文件而言的)label_path = ‘./YoloLabels’# 你的txt文件存放的路径(路径一定是相对于你当前的这个脚本文件而言的)split_list = [0.7, 0.2, 0.1]# 数据集划分比例[train:val:test]# Data
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
def split_img(img_path, label_path, split_list):
try: # 创建数据集文件夹
Data = ‘./VOCdevkit/VOC2007/ImageSets’
# 这里我的文件夹./VOCdevkit/VOC2007/ImageSets提前创建好了,所以注释了下一行,否则会抛异常
# os.mkdir(Data)
train_img_dir = Data + '/images/train'
val_img_dir = Data + '/images/val'
# test\_img\_dir = Data + '/images/test'
train_label_dir = Data + '/labels/train'
val_label_dir = Data + '/labels/val'
# test\_label\_dir = Data + '/labels/test'
# 创建文件夹
os.makedirs(train_img_dir)
os.makedirs(train_label_dir)
os.makedirs(val_img_dir)
os.makedirs(val_label_dir)
# os.makedirs(test\_img\_dir)
# os.makedirs(test\_label\_dir)
except:
print('文件目录已存在')
train, val = split_list
all_img = os.listdir(img_path)
all_img_path = [os.path.join(img_path, img) for img in all_img]
# all\_label = os.listdir(label\_path)
# all\_label\_path = [os.path.join(label\_path, label) for label in all\_label]
train_img = random.sample(all_img_path, int(train \* len(all_img_path)))
train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img]
train_label = [toLabelPath(img, label_path) for img in train_img]
train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label]
for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'):
_copy(train_img[i], train_img_dir)
_copy(train_label[i], train_label_dir)
all_img_path.remove(train_img[i])
val_img = all_img_path
val_label = [toLabelPath(img, label_path) for img in val_img]
for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'):
_copy(val_img[i], val_img_dir)
_copy(val_label[i], val_label_dir)
def _copy(from_path, to_path):
shutil.copy(from_path, to_path)
def toLabelPath(img_path, label_path):
img = img_path.split(‘\’)[-1]
label = img.split(‘.jpg’)[0] + ‘.txt’
return os.path.join(label_path, label)
if name == ‘__main__’:
img_path = ‘./VOCdevkit/VOC2007/JPEGImages’
label_path = ‘./YoloLabels’
split_list = [0.8, 0.2] # 数据集划分比例[train:val]
split_img(img_path, label_path, split_list)
## 训练集、验证集、测试集(7:2:1)
`split721.py`内容如下:
import os, shutil, random
from tqdm import tqdm
“”"
标注文件是yolo格式(txt文件)
训练集:验证集:测试集 (7:2:1)
“”"
def split_img(img_path, label_path, split_list):
try:
Data = ‘./VOCdevkit/VOC2007/ImageSets’
# Data是你要将要创建的文件夹路径(路径一定是相对于你当前的这个脚本而言的)
# os.mkdir(Data)
train_img_dir = Data + '/images/train'
val_img_dir = Data + '/images/val'
test_img_dir = Data + '/images/test'
train_label_dir = Data + '/labels/train'
val_label_dir = Data + '/labels/val'
test_label_dir = Data + '/labels/test'
# 创建文件夹
os.makedirs(train_img_dir)
os.makedirs(train_label_dir)
os.makedirs(val_img_dir)
os.makedirs(val_label_dir)
os.makedirs(test_img_dir)
os.makedirs(test_label_dir)
except:
print('文件目录已存在')
train, val, test = split_list
all_img = os.listdir(img_path)
all_img_path = [os.path.join(img_path, img) for img in all_img]
# all\_label = os.listdir(label\_path)
# all\_label\_path = [os.path.join(label\_path, label) for label in all\_label]
train_img = random.sample(all_img_path, int(train \* len(all_img_path)))
train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img]
train_label = [toLabelPath(img, label_path) for img in train_img]
train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label]
for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'):
_copy(train_img[i], train_img_dir)
_copy(train_label[i], train_label_dir)
all_img_path.remove(train_img[i])
val_img = random.sample(all_img_path, int(val / (val + test) \* len(all_img_path)))
val_label = [toLabelPath(img, label_path) for img in val_img]
for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'):
_copy(val_img[i], val_img_dir)
_copy(val_label[i], val_label_dir)
all_img_path.remove(val_img[i])
test_img = all_img_path
test_label = [toLabelPath(img, label_path) for img in test_img]
for i in tqdm(range(len(test_img)), desc='test ', ncols=80, unit='img'):
_copy(test_img[i], test_img_dir)
_copy(test_label[i], test_label_dir)
def _copy(from_path, to_path):
shutil.copy(from_path, to_path)
def toLabelPath(img_path, label_path):
img = img_path.split(‘\’)[-1]
label = img.split(‘.jpg’)[0] + ‘.txt’
return os.path.join(label_path, label)
if name == ‘__main__’:
img_path = ‘./VOCdevkit/VOC2007/JPEGImages’ # 你的图片存放的路径(路径一定是相对于你当前的这个脚本文件而言的)
label_path = ‘./YoloLabels’ # 你的txt文件存放的路径(路径一定是相对于你当前的这个脚本文件而言的)
split_list = [0.7, 0.2, 0.1] # 数据集划分比例[train:val:test]
split_img(img_path, label_path, split_list)
![在这里插入图片描述](https://img-blog.csdnimg.cn/075ed4b26efd45d897365f094ced588a.png)
完成我的另一篇博客 [VOC 格式与 YOLO 格式的相互转换](https://bbs.csdn.net/topics/618631832)以及本文[YOLO 划分数据集(训练集、验证集、测试集)](https://bbs.csdn.net/topics/618631832)之后,我的整个项目结构如下图所示:
![img](https://img-blog.csdnimg.cn/img_convert/fafe13c5f53ed30ebb616471768eff8f.png)
![img](https://img-blog.csdnimg.cn/img_convert/2f806e03c4b751d9a192d8b54aca42ef.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)