完整程式码!

https://github.com/yu-ken0207/PascalVOCtoYolo

在训练 YOLO(You Only Look Once)模型时,产生 train.txt 和 val.txt 这样的档案是非常重要的主要是用来指示 YOLO 模型在哪里找到训练和验证数据集的图像和标注。这些档案包含了图像文件的路径,它们是 YOLO 训练过程中的关键部分

数据集的组织与管理

训练 YOLO 模型时,我们通常会有大量的图像和相对应的标注(例如标注文件如 .txt 或 .xml 文件)。这些图像和标注文件需要按照特定的路径和格式来组织,以便 YOLO 训练程式能够正确读取和加载数据。

将一个指定资料夹中的图像文件随机分割成训练集和验证集

并将它们分别储存到 train.txt 和 val.txt 档案中。

1. 汇入模组

import os
import random

os 模组:提供与作业系统互动的功能,特别是文件和目录操作,例如列出档案列表和组合路径。random 模组:用于随机操作,例如打乱数据。这里用来随机打乱图像文件的顺序,以确保训练和验证集是随机分配的。

2. 设定资料夹路径

dataset_folder = \'/home/ken/Desktop/program/yolov7/yolo-animal-detection-small/test/\'

dataset_folder:设定图像文件所在的资料夹路径。这个路径指向存放所有 .jpg 格式图像的资料夹。

3. 获取所有图像文件

image_files = [os.path.join(dataset_folder, f) for f in os.listdir(dataset_folder) if f.endswith(\'.jpg\')]

os.listdir(dataset_folder):列出资料夹中所有的文件和子目录。if f.endswith(\'.jpg\'):过滤出副档名为 .jpg 的文件,这些文件将被认为是图像文件。os.path.join(dataset_folder, f):将档案名 f 和 dataset_folder 路径组合成图像的完整路径。最终,image_files 是一个包含所有图像文件完整路径的列表。

4. 随机打乱并分割资料集

random.shuffle(image_files)
split_idx = int(0.8 * len(image_files))
train_files = image_files[:split_idx]
val_files = image_files[split_idx:]

random.shuffle(image_files):随机打乱图像文件列表,这样可以确保分配的训练和验证数据集是随机的。split_idx = int(0.8 * len(image_files)):计算训练集的索引位置,这里选择了 80% 的图像用作训练数据,剩余 20% 的图像作为验证数据。train_files = image_files[:split_idx]:前 80% 的图像分配给训练集。val_files = image_files[split_idx:]:后 20% 的图像分配给验证集。

5. 写入 train.txt 和 val.txt

5.1 写入 train.txt

with open(\'test.txt\', \'w\') as train_f:
for file in train_files:
train_f.write(f"{file}\\n")

open(\'test.txt\', \'w\'):打开 test.txt 文件并以写入模式(\'w\')开启。如果文件不存在,则会创建新文件。for file in train_files:迭代 train_files 列表中的每一个图像文件。train_f.write(f"{file}\\n"):将每个图像文件的路径写入文件中,并在每行的末尾添加一个换行符 \\n。需要注意的是,这里写入的是 test.txt 而不是 train.txt,应该根据需要修改为 train.txt。

5.2 写入 val.txt

with open(\'val.txt\', \'w\') as val_f:
for file in val_files:
val_f.write(f"{file}\\n")

open(\'val.txt\', \'w\'):打开 val.txt 文件并以写入模式开启,将验证集的文件路径写入其中。val_f.write(f"{file}\\n"):将每个验证集图像文件的路径写入 val.txt,每行一个路径。

总结

有了资料集和train.txt和test.txt后,可以复制coco.yaml来制作成你需要的yaml档

路径记得更改成你数据集的路径!!!

coco.yaml

cat_dog_monkey.yaml

开始训练

python train.py --device 0 --batch-size 8 --data data/cat_dog_monkey.yaml --img 640 --cfg cfg/training/yolov7.yaml --weights yolov7.pt

  • \'--data\' : 后面接的路径为最后制作出的yaml档
  • \'--cfg\' : cfg则是配置yolov7细节的档案,在这篇文章先不介绍内容的配置留到下次介绍~~~