从数据读取的角度解读YOLOV5源码:如何使用YOLO V5训练自己的数据集?

本文聚焦YOLO V5模型,解析了数据集相关问题。介绍了数据集的位置、结构,以及直接读取媒介xx.yaml的位置和内容。阐述了数据集读入模型的三个步骤,从文件夹地址读取到图片信息矩阵处理。还解答了图片尺寸、Anchor框大小等细节问题,指出YOLO V5代码方便调整修改。

前言

对于任何一个模型来说,程序员在上手使用或是学习的过程中都会首先面对同样一些问题:这个负载的模型是如何读入训练集的?读入的训练集中的图片是以一种什么形式存储?读入的图片尺寸是否有要求,尺寸是否需要完全一致?

对应于YOLO V5这个模型,以上问题变得更加复杂:从之前YOLO V1-4的经验我们可以知道,对于训练集,需要人工标注物体所在的区域和种类。那么YOLO V5这样的一个模型需要的是什么样的训练集输入形式便愈加复杂。下面本文将首先从数据集的形式来一一解析上面提出的问题

问题一、数据集应该是什么样的呢?(序言:数据集的结构)

1.数据集的位置

如图所示,应该放置在和YOLO v5的源代码文件夹的相同目录下:

在程序中地址default写的是datasets这样一个文件夹之中,这个位置可以加以修改,修改方式见后文的yaml模块。

2.数据集的结构

数据集应该由什么组成呢?

如图:其中应该有两个文件夹,Images文件夹负责图片,而labels文件夹负责标签

Images

Images文件中有两个组成部分,一个是负责训练用的图片集,另一个是负责验证的图片集:

其中每一个文件夹中都是标有序号的图片

如图是我自己做的一个小的数据集:coco_test:采取了coco数据集中的1w张图片用于训练

Labels:

在label的文件夹中,整体的内容和上面的类似,如果该数据集已经被用于训练过,则会出现两个cache文件

cache文件

如果从云端下载的coco或者coco128,那么会在包中就有这两个文件。但是实际上,这两个文件的意义在于省去程序再读取一次train文件的时间,如果程序读取的时候没有的话,会自动生成!所以不用担心。

# Check cache
        self.label_files = img2label_paths(self.im_files)  # labels
        cache_path = (p if p.is_file() else Path(self.label_files[0]).parent).with_suffix('.cache')
        try:
            cache, exists = np.load(cache_path, allow_pickle=True).item(), True  # load dict
            assert cache['version'] == self.cache_version  # matches current version
            assert cache['hash'] == get_hash(self.label_files + self.im_files)  # identical hash
        except Exception:
            cache, exists = self.cache_labels(cache_path, prefix), False  # run cache ops

代码位置:dataloaders.py中LoadImagesAndLabels类的构造函数

    def cache_labels(self, path=Path('./labels.cache'), prefix=''):
        # Cache dataset labels, check images and read shapes

代码位置:dataloaders.py中LoadImagesAndLabels类的成员函数

Labels文件夹中的内容:

形式:txt

内容:如图:

1.文件名字是Labels对应的图片的序号

2.第一个数字对应的是识别出的物体的类别编号,编号对应的种类书写在yaml文件之中

3.后面这四个数字是图片中物体的相对位置,分别是左上角和右下角的相对坐标(将长宽置为一的情况下等比例缩小得到的坐标值)

4.间隔使用的是空格,不同的框信息换行

3.数据集的直接读取媒介:xx.yaml

(1)、xx.yaml的位置

代码的文件夹中的data文件夹

(2)、xx.yaml中的内容

第一部分:测试集,验证集和可能有的test集合的位置:

第二部分:类别信息:

如图,用数字对于识别物体的种类标号,记录于names栏下面。

实际上对于类似于coco.yaml中,还有一个download参数,目的是告诉计算机如何下载数据集,但是由于本文的主要目的是搭建自己的数据集这一块就不给出详解了,只给出关于download部分在代码中的读取位置和相应的处理方式:

读取位置:general.py中的check_dataset函数之中

处理方式:

不同情况/download不同内容

缺少数据集并且发现没有download内容或者选择不自动下载

            if not s or not autodo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值