yolov5只训练数据集中的某几个类别


前言

提示:在训练网络过程中,我们找到的公开数据集可能有很多分类,但是我们的检测任务又不需要那么多,或者说是对自己的训练集做一个取舍:

例如:一个训练集有猫和狗,但是我不想训练猫了,只想训练狗,所以就只加载狗的标签。


基本思路:只训练某几类标签的话,那就需要修改dataset中的labels,本文提供两种思路

一、直接修改数据集标签

通过直接修改数据集标签(*.txt)来删去某种类别的数据。

这种方法很直接,但是也意味着你多了一个整个数据集文件,虽然内存不大,但是感觉比较呆。

二、修改加载labels的代码

数据集labels在加载进dataloader过程中本身就有某些处理过程(如检验是否为空),我们可以在上面加些筛选条件就可以做到过滤效果。

1.train

在train.py文件下找到加载数据集的代码,如:

# Trainloader
train_loader, dataset = create_dataloader(train_path, imgsz, batch_size // WORLD_SIZE, gs, single_cls,
                                          hyp=hyp, augment=True, cache=opt.cache, rect=opt.rect, rank=LOCAL_RANK,
                                          workers=workers, image_weights=opt.image_weights, quad=opt.quad,
                                          prefix=colorstr('train: '))

然后我们进入create_dataloader继续跟踪

2.create_dataloader

找到加载数据集LoadImagesAndLabels:

dataset = LoadImagesAndLabels(path, imgsz, batch_size,
                                      augment=augment,  # augment images
                                      hyp=hyp,  # augmentation hyperparameters
                                      rect=rect,  # rectangular training
                                      cache_images=cache,
                                      single_cls=single_cls,
                                      stride=int(stride),
                                      pad=pad,
                                      image_weights=image_weights,
                                      prefix=prefix)

3.LoadImagesAndLabels

其中,下面这一段代码是加载cache缓存文件,这里不细说,就把它简单看成数据集文件。如果cache已存在,就直接加载,不存在才创建(所以我们要在数据集的文件夹下把cache文件删掉!把cache文件删掉!!把cache文件删掉!!!),我们需要进入创建部分cache_labels
在这里插入图片描述

try:
   cache, exists = np.load(cache_path, allow_pickle=True).item(), True  # load dict
   assert cache['version'] == self.cache_version  # same version
   assert cache['hash'] == get_hash(self.label_files + self.img_files)  # same hash
except:
    cache, exists = self.cache_labels(cache_path, prefix), False  # cache

4.cache_labels

这个部分就是处理数据集的信息统计(如是否为空等),其中一段遍历整个数据集的代码

pbar = tqdm(pool.imap(verify_image_label, zip(self.img_files, self.label_files, repeat(prefix))),
                        desc=desc, total=len(self.img_files))

这段代码含义大致就是将img_files, label_files, prefix打包丢进verify_image_label函数中处理后返回

5.verify_image_label

这段函数就是我们的最终目标了,这里面有加载图片,标签的功能,还可以进行一定筛选,我们就从这里修改。找到加载labels的代码:

withopen(lb_file) as f:
	l = [x.split() for x in f.read().strip().splitlines() if len(x)]

这段代码就是将labels的内容加载进列表l中,如这里有个label文件
在这里插入图片描述
有类别6、7,通过代码加载进去就是
在这里插入图片描述
list L 中有两个list,代表两个目标,每个list第一位就是类别。这个时候效果就很明显了,如果我们不想要类别6,我们只需要修改成

withopen(lb_file) as f:
	l = [x.split() for x in f.read().strip().splitlines() if len(x) and x[0]!='6']

就行了,最后效果为

思路就是这样,还有些其他的修改方法根据自己的需要再操作,内核就是对list的处理而已,基本功。

总结

上面都是我在做项目过程中遇到的问题,而且在csdn上没找到详细的解答,于是自己动手解决并分享。

  • 31
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
开源神器YOLOv5已经成为了许多科研、工业领域检测任务的首选模型,而我们经常需要基于自己的数据集进行模型训练。本文将简单介绍YOLOv5训练自己数据集的方法。 第一步:安装YOLOv5 首先需要在自己的电脑或服务器上安装YOLOv5。可以通过以下命令获取YOLOv5: ``` git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt ``` 在安装依赖库的过程可能会出现各种问题,例如需要安装cmake、cuda等,可以参考github的一些安装教程。 第二步:准备数据集YOLOv5训练自己的数据集需要准备如下文件: - 图像:保存在一个文件夹,文件夹名字可以是任意的。 - 标注文件:包含每张图像物体的位置信息,通常使用xml格式或者txt格式。 图像和标注文件的命名需保持一致,例如: ``` folder ── 000001.jpg ── 000001.txt ── 000002.jpg ── 000002.txt ... ``` 标注文件格式如下: ``` <class_name> <x_center> <y_center> <width> <height> ``` 其`<class_name>`是物体的标签,`<x_center> <y_center>`是物体心点的坐标,`<width> <height>`是物体的宽度和高度。 第三步:修改配置文件 修改YOLOv5的配置文件,包括yaml文件和python文件。首先根据要训练数据集的数量和类别数修改yaml文件,例如voc.yaml。将nc(数据集类别个数)修改为自己需要的数量,并在names项添加自己的类别名称。 然后修改train.py文件,将--data参数指向yaml文件路径,将--cfg参数指向yolov5s.yaml。 第四步:训练模型 完成上述步骤后,就可以开始训练模型了,可以通过以下命令启动训练过程: ``` python train.py --img 640 --batch 16 --epochs 20 --data path/to/voc.yaml --cfg yolov5s.yaml ``` 其的`--img`参数指定了输入图像的大小,`--batch`参数指定了批次大小,`--epochs`参数指定了训练的轮数。可以根据自己的需求进行调整。 训练模型需要一定的时间,训练过程可以通过tensorboard观察模型的训练效果和训练过程的损失函数变化。 第五步:测试模型 训练完模型后,可以通过以下命令进行模型测试: ``` python detect.py --source ./data/images --weights runs/train/exp/weights/best.pt --conf 0.4 ``` 其的`--source`参数指定了测试图像的文件路径,`--weights`参数指定了模型权重文件的路径,`--conf`参数指定了置信度的阈值。 最后,通过以上几个步骤,就可以使用YOLOv5训练自己的数据集。当然,训练模型需要足够多的数据量和标注数量,以及对数据集进行一定的扩增,才能获取更好的检测效果。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值