Yolov5数据集混合训练

导师非让训练一个应急场景balabala数据集
那就拼拼凑凑训练下“人+安全帽+火灾”三个分类的数据集吧

准备

首先准备了两份数据集,一份是一位大神的安全帽检测,另一份是火灾检测。
这两份的数据集都是开源的,基本是只给了weights和images的,但是没有给labels,所有都是要自己批处理检测后进行混合训练的。

步骤

1.批处理生成labels的.txt文件(helmet数据集)

python detect.py --save-txt --source 数据集的路径 --weights 标有你想要检测目标的权重文件位置

注意,权重文件必须包含你想要的检测对象,比如要留下person,那么用yolov5x就可以了;要识别安全帽,可以借用大神训练好的helmet数据集(链接https://pan.baidu.com/s/1UbFkGm4EppdAU660Vu7SdQ)

2.这是会是生成的一张图片对应一个txt文件,那么写个脚本取出其中的txt文件

import os

YOLOV5_LABEL_ROOT = r"D:\dataset\yolov5\inference\output\fire\\"  # yolov5 导出的推理图片的 txt
DATASET_LABEL_ROOT = r"D:\dataset\converg\helmet-dataset\VOC2028\txt\\"  # 数据集的路径

if __name__ == '__main__':
    yolo_file = os.listdir(YOLOV5_LABEL_ROOT)

    # 遍历文件里面有 .txt 结尾的
    for file_name in yolo_file:

        # 判断 txt 文件才进行读取
        if not file_name.endswith(".txt"):
            continue

        file_path = YOLOV5_LABEL_ROOT + file_name
        with open(file_path, "r+") as f:
            for line in f.readlines():
                # #只需要提取 0 -> 检测目标映射 的数据
                if line.split()[0] != '0':
                    continue
                line = line[1:]
                line = '3'+line
                data_path = DATASET_LABEL_ROOT + file_name
                print(data_path)
                # 汇总到数据集的标注文件
                with open(data_path, "a") as fd:
                    fd.write(line)

但是两个数据集融合的时候,标签也需要改变,比如要把如下的txt的第一列0换成3
在这里插入图片描述
再写个脚本进行批处理

import os

YOLOV5_LABEL_ROOT = r"D:\dataset\converg\fire_dataset\VOC2020\txt\\"  # yolov5 导出的推理图片的 txt
DATASET_LABEL_ROOT = r"D:\dataset\converg\helmet-dataset\VOC2028\fire_labels\\"  # 数据集的路径

if __name__ == '__main__':
    yolo_file = os.listdir(YOLOV5_LABEL_ROOT)

    # 遍历文件里面有 .txt 结尾的
    for file_name in yolo_file:

        # 判断 txt 文件才进行读取
        if not file_name.endswith(".txt"):
            continue

        file_path = YOLOV5_LABEL_ROOT + file_name
        with open(file_path, "r+") as f:
            for line in f.readlines():
                line = line[1:]
                line = '3'+line
                data_path = DATASET_LABEL_ROOT + file_name
                print(data_path)
                # 汇总到数据集的标注文件
                with open(data_path, "a") as fd:
                    fd.write(line)

第二步
把数据集的images和label变为train和val的树状结构

在这里插入图片描述

第三步
这里准备工作就正式结束了
修改下coco128.yaml和yolov5s.yaml的参数个数以及集合就可以了

data.yaml
在这里插入图片描述
yolov5s.yaml

第四步
放到服务器训练

CUDA_VISIBLE_DEVICES=0,1(可选的gpu) python train.py --img 640 --data data/data.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 100

在这里插入图片描述

训练结果

在这里插入图片描述
预测一张:
在这里插入图片描述
另外找的两张图拼接的,没啥问题,ok

需要数据集或者交流的小伙伴欢迎私信

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
yolov5中,使用了多种数据增强技巧来改善模型的性能。这些技巧包括: 1. Mosaic数据增强:将多个不同的图像拼接在一起,以增加训练数据的多样性。 2. Copy paste数据增强:将目标从一张图像中复制并粘贴到另一张图像中,以增加目标的种类和位置的变化。 3. Random affine仿射变换:对图像进行随机的平移、旋转、缩放和错切等变换,以增加模型对目标的视角和形状的鲁棒性。 4. MixUp数据增强:将两个不同的图像混合在一起,生成一个新的图像,以增加目标之间的语义关联性,帮助模型学习更好的特征。 5. HSV随机增强图像:对图像的颜色空间进行随机的调整,如改变亮度、对比度和饱和度等,以增加模型对不同颜色条件下目标的识别能力。 6. 随机水平翻转:对图像进行随机的水平翻转,以增加模型对目标的方向变化的适应能力。 7. Cutout数据增强:随机将图像中的一部分区域用随机颜色或者均值进行遮挡,以增加模型对目标局部遮挡情况下的识别能力。 8. Albumentations数据增强工具包:使用开源的Albumentations库来进行数据增强,该库提供了丰富的图像增强方法,如旋转、平移、缩放、剪切等,以增加模型对不同变换情况下目标的识别能力。 这些数据增强技巧可以帮助提高yolov5模型的鲁棒性和泛化能力,从而提升其在目标检测任务中的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值