文章目录

  • 前言
  • 一、主要代码介绍
    • 1.data文件夹
    • 2.model文件夹
    • 3.主要py文件
    • 4.新建weights文件夹
  • 二、数据集准备
  • 三、训练与测试
    • 1. 训练前准备
    • 2. 修改配置文件
    • 3. 训练--train.py
    • 4. 测试--val.py
    • 5. 检测--detect.py
  • 总结

前言

代码地址:https://github.com/ultralytics/yolov5

用yolov5有一段时间了,对这部分代码也比较熟悉一些了,写篇文章记录一下吧~

本文主要是介绍怎么利用官方代码训练与测试自己的数据集,对原理和代码的详细介绍可能少一些,因为已经有很多大牛们介绍过原理方面的知识了。

yolov5主要是有四种模型,分别是yolov5s,yolov5m,yolov5l,yolov5x,就跟我们买衣服的码一样的标号哈哈,网络的宽度深度也是依次递增。


一、主要代码介绍

1.data文件夹

data文件夹里面主要是放我们的图片、标注文件(.xml)和数据说配置文件 — 即指明数据存放位置(.yaml),当然你也可以自定义一个放数据集的文件,我是自定义了一个mydata文件夹专门放数据集,不然都放data文件夹有点乱。

2.model文件夹

model文件夹里主要放的是四种网络(s, m, l, x)的配置文件(.yaml);
common.py是每个模块的代码,如果要改进网络结构,添加新的模块可以模仿里面的代码写;
yolo.py是用于查看模型的结构和参数数量的,改一下299行的cfg,如改成下面的就可以查看yolov5x的模型结构和参数数量了。

parser.add_argument('--cfg', type=str, default='yolov5x.yaml', help='model.yaml')

3.主要py文件

  1. train.py用于训练模型
  2. val.py用于测试结果,输出precision, recall, mAP等信息
  3. detect.py用于对图片进行检测

4.新建weights文件夹

需要新建weights文件夹,放预训练的权重文件
下载地址:https://github.com/ultralytics/yolov5/releases

训练yolov5s模型则下载yolov5s.pt权重

二、数据集准备

我是新建了一个mydata文件夹专门存放数据的,.xml文件我是用labelImg进行标注的,网上有很多资料,我这里就默认大家都会用了(偷懒.jpg),数据集我是按下面方式存放的,当然其它方式也可以,改一下相关路径就行了。

-mydata(主目录)
–annotations(一级子目录)
–img_lab(一级子目录)
—images(二级子目录)
(说明:images文件夹放在img_lab文件夹里面,存放图片,annotations存放标注文件(.xml文件))

另外有两个.py文件用于生成labels和训练、验证、测试的txt说明文件,我放到另一篇文章里了

https://blog.csdn.net/weixin_50113231/article/details/123571036?spm=1001.2014.3001.5502
(训练yolo的数据集准备)

三、训练与测试

1. 训练前准备

首先安装各种库和包,在cmd或者python的终端(Terminal)运行:

pip install -r requirements.txt

注意要切换到yolov5的目录下

2. 修改配置文件

修改data文件夹里面的.yaml文件,可以新建一个也可以直接修改原来有的,我是新建了一个 mydata.yaml 文件:

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ./mydata/img_lab/train.txt
val: ./mydata/img_lab/val.txt
test: ./mydata/img_lab/test.txt
nc: 1  # 修改为自己类别数# class names
names: ['person']

3. 训练–train.py

修改train.py里面的设置,即parse_opt

def parse_opt(known=False):parser = argparse.ArgumentParser()# 修改成模型对应的权重文件parser.add_argument('--weights', type=str, default='weights/yolov5s.pt', help='initial weights path')# 修改成要训练的模型的配置文件parser.add_argument('--cfg', type=str, default='models/yolov5s.yaml', help='model.yaml path')# 上一节里修改的数据配置文件parser.add_argument('--data', type=str, default='data/mydata.yaml', help='dataset.yaml path')# 超参数设置,不需要修改parser.add_argument('--hyp', type=str, default='data/hyps/hyp.scratch.yaml', help='hyperparameters path')# 训练多少代parser.add_argument('--epochs', type=int, default=500)# 每批多少张图片parser.add_argument('--batch-size', type=int, default=64, help='total batch size for all GPUs')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')# 自动计算锚框,设置成False,则不会自动计算parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')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')# 是否用GPUparser.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('--adam', action='store_true', help='use torch.optim.Adam() 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='maximum number of dataloader workers')parser.add_argument('--project', default='runs/train', help='save to project/name')parser.add_argument('--entity', default=None, help='W&B entity')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('--linear-lr', action='store_true', help='linear LR')parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')parser.add_argument('--freeze', type=int, default=0, help='Number of layers to freeze. backbone=10, all=24')parser.add_argument('--patience', type=int, default=300, help='EarlyStopping patience (epochs without improvement)')opt = parser.parse_known_args()[0] if known else parser.parse_args()return opt

主要是修改 --weights, --cfg, --data, --epochs 和 --batch-size
修改完就可以train啦
train完生成 run/train 文件夹,里面保存有训练好的权重,best.pt 和 last.pt,按我的经验,best.pt的测试效果更好一些,可以都试试。

4. 测试–val.py

这里注意,因为我们的测试文件是放在test.txt里面的,所以在val.py里面需要修改102行、156行、166行,val都改成test:

task='test',  # train, val, test, speed or study
is_coco = isinstance(data.get('test'), str) and data['test'].endswith('coco/val2017.txt')  # COCO dataset
task = task if task in ('train', 'val', 'test') else 'test'  # path to train/val/test images

如果你的测试集是放在val.txt里面就不用修改了
然后改配置:

def parse_opt():parser = argparse.ArgumentParser()# 修改成之前修改的数据配置文件parser.add_argument('--data', type=str, default='data/mydata.yaml', help='dataset.yaml path')# 修改成run/train里面生成的权重文件parser.add_argument('--weights', nargs='+', type=str, default='run/train/exp/last.pt', help='model.pt path(s)')parser.add_argument('--batch-size', type=int, default=32, help='batch size')parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.001, help='confidence threshold')parser.add_argument('--iou-thres', type=float, default=0.6, help='NMS IoU threshold')# 因为测试集是在test.txt里面,所以val改成testparser.add_argument('--task', default='test', help='train, val, test, speed or study')parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')parser.add_argument('--single-cls', action='store_true', help='treat as single-class dataset')parser.add_argument('--augment', action='store_true', help='augmented inference')parser.add_argument('--verbose', action='store_true', help='report mAP by class')parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')parser.add_argument('--save-hybrid', action='store_true', help='save label+prediction hybrid results to *.txt')parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')parser.add_argument('--save-json', action='store_true', help='save a COCO-JSON results file')parser.add_argument('--project', default=ROOT / 'runs/val', 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('--half', action='store_true', help='use FP16 half-precision inference')parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')

主要是改 --data, --weights, --task这三个,如果你的测试集比较少也可以把 --batch-size 调小一些。

5. 检测–detect.py

修改下面三个就可以了

# 改成训练好的权重文件
parser.add_argument('--weights', nargs='+', type=str, default='run/train/exp/last.pt', help='model path(s)')
#改成要检测的图片路径
parser.add_argument('--source', type=str, default='data/images', help='file/dir/URL/glob, 0 for webcam')
# 改成数据配置文件
parser.add_argument('--data', type=str, default='data/mydata.yaml', help='(optional) dataset.yaml path')

总结

如果是要改进yolov5网络的话,就要修改model文件夹的.yaml文件,希望大家都可以把yolov5网络用懂、看懂~

基本上就是这么多,如果还有什么问题欢迎在下面留言,我看到就会回复哒~

yolov5-pytorch训练自己的数据集-超详细相关推荐

  1. YOLOv5训练自己的数据集(超详细)

      目录 一.准备深度学习环境 二. 准备自己的数据集 1.创建数据集 2.转换数据格式 3.配置文件 三.模型训练 1.下载预训练模型 2.训练 四.模型测试 五.模型推理 YOLOv5训练自己的数 ...

  2. YOLOv7训练自己的数据集(超详细)

       目录 一.准备深度学习环境 二. 准备自己的数据集 1.创建数据集 2.转换数据格式 3.配置文件 三.模型训练 1.下载预训练模型 2.训练 四.模型测试 五.模型推理 YOLOv7训练自己的 ...

  3. YOLOv8训练自己的数据集(超详细)

    一.准备深度学习环境 本人的笔记本电脑系统是:Windows10 YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可 ...

  4. SSD-MobileNetv2之Ubuntu18.04训练VOC格式数据集-超详细

    Ubuntu** python3.6 tensorflow1.15.0 TensorFlow Object Detection API下载 https://github.com/tensorflow/ ...

  5. 优化改进YOLOv5算法之添加RepVGG模块(超详细)

    在前面的文章中已经详细介绍了在本机上安装YOLOv5的教程,安装YOLOv5可参考前面的文章YOLOv5训练自己的数据集(超详细)https://blog.csdn.net/qq_40716944/a ...

  6. Yolov5训练自己的数据集(详细完整版)

    最近在网上看到有与本博客一模一样的,连图片都一样. 特此声明:这是原版,转载请附原文链接,谢谢. 这次我将大部分图片添加了水印 文章目录 一. 环境(不能含有中文路径) 二. 准备工作(文件夹及视频转 ...

  7. YOLOv5训练自己的数据集之详细过程篇

    软硬件配置:Ubuntu + Tesla m40 24GB + cuda10.2 + anaconda 一.环境部署 1.源码下载 https://github.com/ultralytics/yol ...

  8. Yolov5-5.0源码分享以及环境配置——Yolov5训练及测试教程(超详细含数据集制作,格式转换,数据集划分)

    yolov5-5.0百度网盘连接 链接: https://pan.baidu.com/s/1Hd2KKBixuEWRv3jcH6Bcsw 提取码: g6xf 复制这段内容后打开百度网盘手机App,操作 ...

  9. YOLOv8训练自定义数据集(超详细)

    借鉴 https://blog.csdn.net/qq_40716944/article/details/128648001 一.准备训练环境 安装 requirements.txt 下载:https ...

最新文章

  1. R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)
  2. 天翼云从业认证(3.1)了解天翼云计算产品
  3. SpringBoot添加JSP支持
  4. Linux 下配置 phpredis 的过程和遇到的问题
  5. flowable实现流程回退功能
  6. 华为鸿蒙系统学习笔记5-华为方舟编译器正式开源及相关源码下载
  7. 案例篇-HBase 实战之 MOB 使用指南
  8. @贾跃亭,证监会喊你本周回国对乐视负责!
  9. 冰城环保进入智慧时代
  10. 卸载linux订阅包
  11. 解决CMake Error : file does not recognize sub-command GL0B or GL0B_RECURSE 原因分析
  12. 谷歌浏览器翻译显示服务器失败,谷歌浏览器翻译失败怎么办
  13. OBJ文件解析之OBJ的整体结构
  14. 为什么很多企业使用TOM邮箱收发内部邮件?
  15. 002--YAML工具
  16. Dominating Patterns UVALive - 4670 (ac自动机)
  17. 谷歌浏览器导出导入插件
  18. 服务器正文15:Assert的使用技巧
  19. 系统栈与用户栈 以及 栈的内部实现
  20. Ubuntu创建Eclipse桌面快捷方式

热门文章

  1. 基于视频的实时人脸识别(含代码)
  2. django生产环境部署(四):asgi服务器daphne处理websocket请求
  3. 2022-03-22 学好大数据先攻克 Linux 之管道(重点)与网络管理
  4. 如何使用vite创建工程
  5. 2020美团前端笔试题
  6. 边界值法中的上点、内点和离点的定义
  7. MT【74】不可能是哪个函数?
  8. layui登录php,Thinkphp6 + layui 实现后台登录(验证码刷新)
  9. 【UE4】UE C1083 无法打开包括文件: “xxx.h”: No such file or directory
  10. python用Win32com连接excel与CAD实现自动绘图