1. 数据集的目录结构
-
YOLOv5或者YOLOv7的数据集目录都叫datasets,按照YOLOv5和YOLOv7例程,datasets目录与项目目录的关系如下,其中可以看到,datasets与YOLOv5和YOLOv7目录是在同一级的。当然,你也自由放置datasets的路径,但需要在项目中修改datasets对应的配置文件路径。
-
coco比较严(死)谨(板),它的train、test、val集都是固定好,如val的图片就放在coco/images/val2017的目录下,对应的label(标注)文件也是放在labels目录下的coco/labels/val2017目录下。这样的好处是一目了然,但是数据样本都是预先定好的。
-
于是想了一个办法,用一个小python按照比例随机从总的样本数据中分组,组成train、val和test,ImagesSets里内容就是分组结果,再写一个小python生成note目录下的train.txt、test.txt、val.txt文件。这样处理后,不论000000.jpg用于train、test或val,它都存放与images目录下,对应的,它的坐标文件000000.txt都存放于labels目录下。变化的是指向它们的路径文件,也就是note/train.txt … 这样调用起来比较灵活方便。
├── datasets ####(数据集的根目录)
│ ├── coco ####(名为coco的数据集)
│ │ ├── annotations
│ │ ├── images
│ │ │ ├── test2017
│ │ │ ├── train2017
│ │ │ └── val2017
│ │ ├── labels
│ │ │ ├── train2017
│ │ │ └── val2017
│ │ ├── train2017.txt
│ │ ├── test-dev2017.txt
│ │ └── val2017.txt
│ └── note ###(名为note的数据集)
│ ├── annotations
│ ├── images
│ ├── ImageSets #### 非标准目录,用于生成上级目录的train.txt、test.txt和val.txt
│ │ ├── test.txt #test集文件集合,不含路径
│ │ ├── train.txt #train集文件集合,不含路径
│ │ ├── trainval.txt #trainval集文件集合,不含路径
│ │ └── val.txt #val集文件集合,不含路径
│ ├── labels
│ ├── train.txt #train集路径指向文件
│ ├── test.txt #test集路径指向文件
│ └── val.txt #val集路径指向文件
├── yolov5 ####(YOLOv5的项目根目录)
│ ├── data
│ ├── models
│ ├── __pycache__
│ ├── runs
│ │ └── train
│ │ └── exp5
│ │ └── weights #你的训练结果就存放在这里,best.pt或last.pt
│ ├── utils
│ ├── wandb
│ └── weights
└── yolov7####(YOLOv7的项目根目录)
├── cfg
│ ├── baseline
│ ├── deploy
│ └── training
├── data
├── deploy
├── figure
├── inference
├── models
├── paper
├── runs
│ └── train
│ └── yolov7-note3
│ └── weights #你的训练结果就存放在这里,best.pt或last.pt
├── scripts
├── tools
├── utils
└── wandb
2. datasets里的数据摆放
- 标准的coco数据集下载展开后如下图。其中所有的.cache文件建议在换模型后都删掉。 在YOLOv5跑过的coco模型,使用同一个数据集,但在YOLOv7下跑却报了一个莫名其妙的错误,后来幸亏在yolov7的github issue论坛找到了答案。新建的训练建议还是用干净的环境,包括数据集。
- coco目录下的train2017.txt、val2017.txt和test-dev2017.txt这三个文件分别记录了用于train、val和test这三步所需的文件,以及这些文件相对于coco目录的相对路径。如下图。