yolov8数据集划分
时间: 2025-01-05 20:15:06 浏览: 208
### YOLOv8 数据集划分方法
对于YOLOv8的数据集划分,一种常见的方式是按照7:2:1的比例来分配训练集、验证集和测试集[^1]。具体操作如下:
#### 准备工作
确保数据集中每张图片都有对应的标签文件,并且这些文件存放在同一目录结构内。
#### 创建配置文件
创建或编辑`.yaml`格式的配置文件用于定义各个子集的位置以及类别名称列表。例如,在`my_dataset.yaml`中指定路径:
```yaml
path: ./datasets/mydataset/
train: images/train/
val: images/valid/
test: images/test/
nc: 3 # 类别数量
names: ['class1', 'class2', 'class3']
```
#### 脚本实现自动划分
可以编写Python脚本来自动化完成这一过程。下面是一个简单的例子,该脚本会读取源图像文件夹并将它们随机分为三个部分:
```python
import os
from sklearn.model_selection import train_test_split
import shutil
def split_data(src_dir, dst_base_dir, ratio=(0.7, 0.2)):
all_files = [f for f in os.listdir(src_dir) if not f.startswith('.')]
labels = {os.path.splitext(f)[0]: src_dir+f for f in all_files}
keys = list(labels.keys())
files_train_val, files_test = train_test_split(keys, test_size=ratio[1], random_state=42)
files_train, files_valid = train_test_split(files_train_val, test_size=ratio[1]/(ratio[0]+ratio[1]), random_state=42)
sets = [('train', files_train), ('valid', files_valid), ('test', files_test)]
for set_name, file_list in sets:
dest_path = os.path.join(dst_base_dir, set_name)
if not os.path.exists(dest_path):
os.makedirs(dest_path)
for fname in file_list:
try:
shutil.copyfile(os.path.join(src_dir, '{}.jpg'.format(fname)),
os.path.join(dest_path, '{}.jpg'.format(fname)))
label_file = "{}.txt".format(fname)
if os.path.isfile(label_file):
shutil.copyfile(os.path.join(src_dir, label_file),
os.path.join(dest_path, label_file))
except Exception as e:
print(e)
if __name__ == '__main__':
source_directory = './source_images/'
destination_base_directory = './splitted_datasets/'
split_data(source_directory, destination_base_directory)
```
此代码片段展示了如何通过编程手段将原始数据集划分为不同的集合并移动到相应的目标位置。
阅读全文
相关推荐















