YOLOv5自制数据集训练与部署

本文将详细讲解如何自制数据集,并复习上一篇博客中训练部署的相关步骤,希望大家能熟练运用,真正掌握 数据及制作-训练-检测推断 这一基本流程。

数据集制作

建立文件夹

新建一个结构如下的文件夹

dataset
├── images
│  ├── train(用来放训练集图片)
│  ├── val(用来放验证集张图片)
│
├── labels
│  ├── train(用来放训练集图片的标签)
│  ├── val(用来放验证集图片的标签)
│
│  ├── predefined_classes.txt  定义自己要标注的所有类别
图像采集

可以直接拍摄图片,也可以用无人机拍一段视频,用视频切片代码切成图片集。这里为了演示方便,我直接用电脑摄像头拍了一些照片(别学我,实际项目中数据集采集是非常关键的步骤,会直接影响最终目标检测效果)。然后将图片全部放到dataset/images/train目录下(图片名称随意)。

我要识别的标志有两个,分别命名为H、O,因此在predefined_classes.txt中填入H、O(中间用换行),如果有其他类别也要像这样每个类别占一行,这样标注的时候会很方便。

左边的命名为H,右边的命名为O

使用labeling工具进行标注(存储为yolo格式)
  1. 在windows终端(快捷键:win+R,在其中输入cmd打开)中安装labeling工具

pip install labelimg -ihttps://pypi.tuna.tsinghua.edu.cn/simple

  1. 安装完成后终端进入dataset路径(注意,路径改成自己的)

cd C:\Users\HDJ\Desktop\dataset

  1. 输入labelimg images predefined_classes.txt 打开标记软件

labelimg images predefined_classes.txt

  1. 打开后会出现下面界面(没有出现图片也不要紧,按照下面步骤设置完成后就有了)

  • Open Dir选择路径dataset\images\train

  • Change Save Dir 选择路径 dataset\labels\train

  • 第三条红线必须选YOLO格式(否则后面还要调回YOLO格式)

  1. 在最上方菜单栏的view选项下,选择下面几个模式(方便标注)

  1. 开始进行标注

操作:W(调出标注十字架)—鼠标框住要识别物体—选对应标签—D(切换到下一张图片)

循环操作直到完成所有图片标注,这个时候进入dataset\labels\train目录可以看到所有图片对应的标签

训练预处理

使用下面代码将训练集的部分划归到验证集中(记住路径修改成自己的)然后将dataset文件夹放到yolo工程中。

import os, random, shutil

def moveimg(fileDir, tarDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    rate = 0.2  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    print(sample)
    for name in sample:
        shutil.move(fileDir + name, tarDir + "\\" + name)
    return

def movelabel(file_list, file_label_train, file_label_val):
    for i in file_list:
        if i.endswith('.jpg'):
            filename = file_label_train + "\\" + i[:-4] + '.txt'  
            if os.path.exists(filename):
                shutil.move(filename, file_label_val)
                print(i + "处理成功!")

if __name__ == '__main__':
    fileDir = r"C:\Users\HDJ\Desktop\dataset\images\train" + "\\"  # 图片训练集文件夹
    tarDir = r'C:\Users\HDJ\Desktop\dataset\images\val'  # 标签验证集文件夹
    moveimg(fileDir, tarDir)
    file_list = os.listdir(tarDir)
    file_label_train = r"C:\Users\HDJ\Desktop\dataset\labels\train"  # 图片训练集文件夹
    file_label_val = r"C:\Users\HDJ\Desktop\dataset\labels\val"  # 标签验证集文件夹
    movelabel(file_list, file_label_train, file_label_val)

训练部署实现

  1. 找到data目录下的coco128.yaml文件,将该文件复制一份,将复制的文件重命名为signal.yaml,在signal.yaml文件中先注释掉一行代码再修改参数,train改成训练集所在路径;val改成验证集所在路径(必须要用绝对路径),因为我训练标注的只有两个标志,所以nc改成2,names改成[H,O].

  1. 在models目录将yolov5s.yaml文件复制一份,将其重命名为yolov5_signal.yaml。在yolov5_signal.yaml文件中将类型数修改为2

  1. 在train.py的(1)(2)中修改默认yaml文件,在(3)中更改训练轮数(这里我用50轮)

parser.add_argument('--epochs',type=int, default=50)
  1. 点击运行,可能会出现页面文件太小,无法完成操作的报错,详见常见下方“报错与解决”

训练成功

训练完成后会在runs/train中产生exp2文件(exp是上一篇博客训练得到的,没删)

在detect.py中将推断使用的权重模型改成训练得到的模型,运行即可实现自训练模型目标识别

我的路径为
C:/Users/HDJ/Desktop/yolov5-5.0/runs/train/exp2/weights/best.pt
parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp2/weights/best.pt', help='model.pt path(s)')

实时检测效果

常见报错与解决

1、OSError: [WinError 1455] 页面文件太小,无法完成操作。

这是由于pycharm虚拟内存不够,在utils路径下找到datasets.py这个文件,将里面的第81行里面的参数nw改为0

2、AssertionError:Image Not Found D:\PycharmProjects\yolov5-hat\VOCdevkit\images\train\000000.jpg

在另一台电脑上训练时,要先把标签文件的.cache删掉(这两个文件是在训练中产生的)

不然会报“找不到图片0”的错(可以理解为由于这两个文件的存在,把训练的路径锁成了之前训练的路径)

3、OMP:Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll alreadyinitialized

是numpy库的一个小bug

在train.py文件的顶头部分添加

importos

os.environ['KMP_DUPLICATE_LIB_OK']='True'

求学路上,你我共勉(๑•̀ㅂ•́)و✧

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要在YOLOv5中使用自己制作的数据集,您可以按照以下步骤进行操作: 1. 使用labelImg等工具标注数据集:下载并使用labelImg工具标注您的数据集。确保将标注后的图像和相应的标签文件存放在正确的位置。 2. 将VOC标签转换为YOLO标签格式:YOLOv5使用自定义的标签格式,因此您需要将VOC格式的标签转换为YOLO格式。这可以通过使用脚本或在代码中进行转换实现。 3. 数据集划分:将数据集划分为训练集、验证集和测试集。确保在划分过程中保持数据集的平衡和代表性。 4. 设置数据集文件夹的位置:在您的文件系统中创建一个数据集文件夹,并将图像和标签文件分别存放在相应的文件夹中。同时,创建一个data.yaml文件,其中包含数据集的相关信息,如类别数和文件路径。 5. 使用YOLOv5训练:使用YOLOv5源码位置中的代码,按照官方文档中的说明进行训练。确保在训练过程中正确指定数据集文件夹和相关参数。 综上所述,这些是在YOLOv5中使用自制数据集的一般步骤。您可以参考相关文档和教程来获取更详细的操作指南。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [制作YOLOv5数据集](https://blog.csdn.net/Z960515/article/details/121945811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [YOLOv5系列 1、制作自己的数据集](https://blog.csdn.net/fjlaym/article/details/123992962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值