零基础入门YOLOv5——从制作数据集到最终训练与测试

这篇具有很好参考价值的文章主要介绍了零基础入门YOLOv5——从制作数据集到最终训练与测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零基础入门YOLOv5——从制作数据集到最终训练与测试


前言

学习YOLOv5已经有两个月的时间了,这段时间走了不少的弯路,也看了很多文章,今天来简单整理一下,也算是帮助小白快速入门一下。因为我的学习时间也不长,所以如有错误请在评论区指出,大家多多包涵


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是YOLOv5

在开始之前,先简单介绍一下什么是YOLOv5。YOLOv5是一个one stage目标检测算法,相对于two stage,其检测速度快、易上手、且精度不低。因此是目前最流行的目标检测算法。

二、如何制作数据集

制作数据集的方法有很多种,这里推荐一个最简单的线上数据集制作工具——Make Sense。
网址为:https://www.makesense.ai/
进入网站后,是这样一个界面:
零基础入门YOLOv5——从制作数据集到最终训练与测试
点击中间的小盒子,即可加入你的数据集图片。
添加图片后,即可选择你要制作的数据集类型。左边的是用于目标检测的数据集,右边是用于图像分类的数据集,我们选择左边的目标检测,即可进入下面这样一个界面
零基础入门YOLOv5——从制作数据集到最终训练与测试
在开始下一步之前,我们需要先创建一个.txt文件,用于存放我们的label。这里我只传入一张飞机的图片,所以只有一个类别。大家可以根据自己的需要写入自己的label
零基础入门YOLOv5——从制作数据集到最终训练与测试
建立完.txt文件后,点击load label from file,然后点击中间的小盒子,插入自己的.txt文件,再点击creat labels list即可创建label
零基础入门YOLOv5——从制作数据集到最终训练与测试
零基础入门YOLOv5——从制作数据集到最终训练与测试
这样做是为了能够高效的创建多个label,当然,如果label较少,也可以直接在界面创建,这里就不详细赘述了。
完成后,点击Start project,就可以开始创建自己的数据集了。
进入绘制界面,选中要检测的对象,在右侧找到对应的标签,就可以完成图片的标定零基础入门YOLOv5——从制作数据集到最终训练与测试
点击左上角的Actions,选择第四个选项,就可以将创建好的数据集下载下来(注意,这里要选择第一个YOLO格式的数据集文件)
零基础入门YOLOv5——从制作数据集到最终训练与测试
零基础入门YOLOv5——从制作数据集到最终训练与测试
零基础入门YOLOv5——从制作数据集到最终训练与测试
截止到这里,数据集的创建就正式完成了。

二、将数据集导入YOLOv5

在训练之前,我们要先将数据集保存到YOLOv5的文件夹中。具体做法为:
1.创建一个文件夹,这里博主取名为airdata,大家可以自己取名
2.在文件夹里建立两个新文件夹,依次取名为images和labels
3.依次在images和labels文件夹中创建train、test文件夹
零基础入门YOLOv5——从制作数据集到最终训练与测试
零基础入门YOLOv5——从制作数据集到最终训练与测试
4.将训练集和测试集的图片依次导入images文件中的train和test,将训练集和数据集的标签依次导入labels文件夹中的train和test,这里注意顺序不能错,即训练集中的第一张图片一定要对应训练集中的第一个标签。
在完成这一步后,即可打开YOLOv5进行训练了

使用YOLOv5进行训练

因为YOLOv5已经封装好了,所以我们只需要创建几个新的文件,然后调节几个参数就可以了。
首先找到train文件,找到其中的代码块:def parse_opt(known=False):

def parse_opt(known=False):
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='models/hub/yolov5_iron_s.yaml', help='model.yaml path')
    parser.add_argument('--data', type=str, default=ROOT / 'data/mydatatest.yaml', help='dataset.yaml path')
    parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=100)
    parser.add_argument('--batch-size', type=int, default=4, help='total batch size for all GPUs, -1 for autobatch')
    parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--noval', action='store_true', help='only validate final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable AutoAnchor')
    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)')
    parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--cos-lr', action='store_true', help='cosine LR scheduler')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')
    parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone=10, first3=0 1 2')
    parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')

我们主要是对weights、cfg和data这三个参数进行修改。其中,weights为初始的权重,可以在GitHub自行下载,这里博主用的是最小的s文件,这个模型所占空间小,但精度相对较低。
接着,我们找到model中的yaml文件,选择其中一个文件进行复制,这里博主依然选择的是最小的yolov5s
零基础入门YOLOv5——从制作数据集到最终训练与测试
复制一份后,重新命名,因为我之前做的是锻钢瑕疵检测,所以命名为yolov5s_iron。双击打开文件,将这里的nc改为自己的类别数量(如果你的数据集一共有6个类别,那么这里的nc对应的就是6)
零基础入门YOLOv5——从制作数据集到最终训练与测试
完成这一步后,找到data文件,找到其中的coco128.yaml,依然是复制一份,重新命名
零基础入门YOLOv5——从制作数据集到最终训练与测试
这里我命名的是mydatatest,yaml,双击复制好的文件打开,将下图中的两部分删掉
零基础入门YOLOv5——从制作数据集到最终训练与测试
零基础入门YOLOv5——从制作数据集到最终训练与测试
下面我们要修改的参数主要是以下这部分:

train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 80  # number of classes
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names

将代码中的nc依然改为自己的类别数量,names改为标签名,例如我的图像标签是airplane,那么这里就要写入airplane
零基础入门YOLOv5——从制作数据集到最终训练与测试
最后,要在上面写入自己的训练集和测试集的地址。这里我写入的是相对地址,当然也可以写绝对地址,而且推荐大家写绝对地址。
零基础入门YOLOv5——从制作数据集到最终训练与测试
所有的步骤完成后,我们就可以在train文件中填入这两个个文件的地址,进行训练了
零基础入门YOLOv5——从制作数据集到最终训练与测试
其中,1填入的是model文件夹中的文件地址,2填入的是data文件夹中的地址

零基础入门YOLOv5——从制作数据集到最终训练与测试
在epochs中的default可以编辑自己的训练次数,这里我选择的是训练一百轮
在batch–size的default中可以选择每次训练的图片数量,如果训练过程中显示“文件无法显示”,就需要把这里的参数调小
零基础入门YOLOv5——从制作数据集到最终训练与测试
找到这一个参数,填入default=0,可以使用gpu训练。但是要注意的是,yolov5不支持高版本的pytorch的cuda,如果要使用GPU训练,需要使用低版本的cuda才可以。
开始训练后,在命令控制台输入tensorboard --logdir=runs即可通过tensorboard查看训练过程
零基础入门YOLOv5——从制作数据集到最终训练与测试
训练完成后的权重文件,可以在runs-train-exp中查看
零基础入门YOLOv5——从制作数据集到最终训练与测试
找到detect文件,找到该部分代码块:

parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'runs/train/exp19/weights/last.pt', help='model path(s)')
    parser.add_argument('--source', type=str, default=ROOT / 'data/iron_images', help='file/dir/URL/glob, 0 for webcam')
    parser.add_argument('--data', type=str, default=ROOT / 'data/mydatatest.yaml', help='(optional) dataset.yaml path')
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')
    parser.add_argument('--conf-thres', type=float, default=0.1, help='confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')
    parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--view-img', action='store_true', help='show results')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes')
    parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--visualize', action='store_true', help='visualize features')
    parser.add_argument('--update', action='store_true', help='update all models')
    parser.add_argument('--project', default=ROOT / 'runs/detect', help='save results to project/name')
    parser.add_argument('--name', default='exp', help='save results to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')
    parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')
    parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')
    parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')
    parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')

在这里需要对前三个参数进行修改:
零基础入门YOLOv5——从制作数据集到最终训练与测试
在第一个weights的参数中填入训练好的权重文件的路径地址,在第二个source参数中填入要检测的图片,在第三个参数中填入之前复制修改的data文件夹中的yaml文件。点击运行即可

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了yolov5的简单使用过程,对于其中很多参数以及yolov5的网络模型,后续将出其他博客进行详细解释。文章来源地址https://www.toymoban.com/news/detail-447141.html

到了这里,关于零基础入门YOLOv5——从制作数据集到最终训练与测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5入门实践(4)——手把手教你训练自己的数据集

      在上一篇文章中我们介绍了如何划分数据集,划分好之后我们的前期准备工作就已经全部完成了,下面开始训练自己的数据集吧! 前期回顾: YOLOv5入门实践(1)——手把手带你环境配置搭建 YOLOv5入门实践(2)——手把手教你利用labelimg标注数据集

    2024年04月10日
    浏览(39)
  • 【yolov5 安装教程】(入门篇)避免踩雷保姆级教程 在m1芯片下 使用yolov5本地训练自己的数据集 ——mac m1

    ​​​​​​​ 目录 一、简介 配置 环境准备 二、环境配置 1.安装anaconda 2.安装TensorFlow 3.安装pytorch 4.pyqt5安装  5.安装labelimg 6.下载yolov5 7.pycharm安装 三、使用labelimg标记图片 1.准备工作 2.标记图片 四、 划分数据集以及配置文件修改 1. 划分训练集、验证集、测试集 2.XML格式转

    2024年02月05日
    浏览(36)
  • yolov8代码梳理 训练自己的数据 最终版

    最开始为了检测不规则的麻包袋,所以采用了目标检测。yolov3,fasterrcnn,ssd。这种矩形框还是可以用。后面检测的物体变成了规则的纸箱,我们还用目标检测发现,没有旋转角度,因为箱子的摆放不是正的。只能通过opencv的minarea去找到最小矩形框去寻找角度。但是opencv的方

    2024年02月12日
    浏览(33)
  • yolov5训练自己的数据集

    1.YOLOv5为开源代码,直接从github上下载,首先打开github官网,下载。 下载使用pycharm打开,有图中这些文件,   其中 data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称)

    2024年02月07日
    浏览(38)
  • YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解

    前言: Hello大家好,我是小哥谈。 YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法,存在着很多可以学习的地方。本文将对YOLOv5检测算法的核心基础知识进行

    2024年02月14日
    浏览(38)
  • yolov5训练自己的数据集问题排除

    D:ProgramDataAnaconda3envsyolov5python.exe D:/yxt/yolov5-master/train.py Traceback (most recent call last):   File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 140, in module     refresh()   File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 127, in refresh     if not Git.refresh(p

    2024年04月11日
    浏览(44)
  • 【YOLO】yolov5训练自己的数据集

    【Python】朴实无华的yolov5环境配置(一)   上面前期教程中,大致介绍了yolov5开发环境的配置方法和yolov5项目的基本结构,下一步就是基于yolov5预训练模型来训练自己的数据集,这对于只是想要使用yolov5这个工具的人,还是想要深入研究yolov5类似的目标识别算法的人,都是

    2024年02月11日
    浏览(27)
  • 【矩池云】YOLOv3~YOLOv5训练红外小目标数据集

    数据集下载地址:https://github.com/YimianDai/sirst 参考链接:https://github.com/pprp/voc2007_for_yolo_torch 1.1 检测图片及其xml文件 1.2 划分训练集 1.3 转为txt标签 1.4 构造数据集 最终数据集格式如下: 根据以上数据集 需要单独构建一个datasets文件夹,存放标签和图像,具体格式如下: 可以

    2024年02月08日
    浏览(51)
  • labelme制作yolov5模型的数据集

    labelme制作yolov5模型的数据集,超级详细,主要步骤: labelme安装和使用教程 python实现json文件转txt文件格式 python实现对指定格式文件进行提取 找一批牛和马的数据集,用来做YOLOv5实现牛马检测识别任务,数据集格式如下: 1、安装labelme环境和labelme标注教程 (1)进入pycharm在

    2024年02月15日
    浏览(88)
  • YOLOv5系列 1、制作自己的数据集

    YOLOv5系列 1、制作自己的数据集 YOLOv5系列 2、使用yolov5识别自己的数据 本文所使用的Yolov5为6.1版本,所用为GPU版(亲测CPU也一样能跑,只是速度会慢很多),使用的环境是torch1.7.1+cuda10.1。 Labelme的安装很简单,如果想直接安装就直接在命令行中: 如果是想把labelme安装在Anac

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包