物体检测-系列教程8:YOLOV5 项目配置

news2024/10/6 0:34:41

1、项目配置

yolo的v1、v2、v3、v4这4个都有一篇对应的论文,而v5在算法上没有太大的改变,主要是对v4做了一个更好的工程化实现

1.1 环境配置

深度学习环境安装请参考:PyTorch 深度学习 开发环境搭建 全教程

要求torch版本>=1.6,因为需要torch1.6中的混合精度,python>=3.7,其他详细工具包,直接安装yolov5的requirements.txt

pip install -r requirements.txt

请务必要把torch版本、torchvision版本、cuda版本、python版本、cudnn版本一一对应

1.2 训练自己的数据集

在roboflow中有很多公开数据集,都是已经做好标注的,比如有检测车辆的、检测象棋的、检测有没有戴口罩的,数据量有大有小。

在这里下载好合适的数据集
在这里插入图片描述
然后把数据和源码放在同一级的目录中,就可以进行训练了。

1.3 口罩数据集

以口罩数据集为例,可以下载多个版本:
在这里插入图片描述

对应有多个标注的版本,json、xml、txt、csv,使用txt - yolo - v5 - pytorch版本,一张图像对应一个标注的txt文件

分别有训练集train文件夹、验证集valid文件夹、测试集test文件夹、配置文件data.yaml文件,在训练验证测试的3个文件夹中都包含两个文件夹,分别都是images文件夹和labels文件夹,这两个文件夹的文件数量都是一样的,名称相同,文件的后缀不同。

如图,左边是一张有3个人的图像,3个人都有带口罩,而右边是这3个人的头部的标注数据,在标注数据中有3行数据,每一行代表一个头部的标注数据,每一行数据分为两个部分,第一部分是分类标签,这里只有2分类,就是分别代表带上了口罩0和没有带上口罩1,后面的4个值,是这个人对应的头部的检测框的4个坐标值

在下载的数据中,还有一个yaml格式的文件,它记录了数据集对应的位置,而配置文件data.yaml需要在代码中指定,yaml文件的内容:

train: ../train/images
val: ../valid/images

nc: 2
names: ['mask', 'no-mask']

分别是训练集路径、验证集路径、分类的类别个数,以及分类对应的检测显示的名称,也可以以相同的方式加上测试集的路径,如果需要测试的话

如果是自己拍的数据,那么就需要自己来标注数据,可以使用labelme工具进行打框

2、训练数据参数配置

在训练一个任务时,可以选择加载一个预训练模型,yolov5提供了多个预训练模型:

n、s、m、l、x这5个版本,参数量、mAP值都是按照顺序越来越高的,而速度、帧率FPS是越来越低的,可以简单解释为检测速度越来越慢,模型越来越复杂,但是检测准确率越来越高。

所以如果是自己学习这个算法,使用5s来跑就可以了

训练的配置参数:

python train.py:

--data coco.yaml --epochs 300 --weights yolov5s.pt --cfg yolov5s.yaml  --batch-size 128
  1. data ,分别是训练数据的配置文件
  2. epochs ,训练次数
  3. weights ,预训练模型
  4. cfg ,预训练模型的配置文件
  5. batch-size,根据GPU资源进行指定

执行训练后,首先会打印一些项目的参数:

D:\0_conda\0_conda\envs\pytorch\python.exe A:\CV\object_detection\yolo\yolov5\yolov5-5.0\train.py --data data.yaml --epochs 300 --weights yolov5s.pt --cfg yolov5s.yaml --batch-size 128 
github: skipping check (not a git repository)
YOLOv5  2021-4-11 torch 1.8.1+cu111 CUDA:0 (NVIDIA GeForce RTX 4080, 16375.5MB)

然后打印一些训练的参数:

Namespace(adam=False, artifact_alias='latest', batch_size=128, bbox_interval=-1, bucket='', cache_images=False, cfg='.\\models\\yolov5s.yaml', data='data.yaml', device='', entity=None, epochs=300, evolve=False, exist_ok=False, global_rank=-1, hyp='data/hyp.scratch.yaml', image_weights=False, img_size=[640, 640], label_smoothing=0.0, linear_lr=False, local_rank=-1, multi_scale=False, name='exp', noautoanchor=False, nosave=False, notest=False, project='runs/train', quad=False, rect=False, resume=False, save_dir='runs\\train\\exp41', save_period=-1, single_cls=False, sync_bn=False, total_batch_size=128, upload_dataset=False, weights='yolov5s.pt', workers=0, world_size=1)
tensorboard: Start with 'tensorboard --logdir runs/train', view at http://localhost:6006/
hyperparameters: lr0=0.01, lrf=0.2, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0
wandb: Install Weights & Biases for YOLOv5 logging with 'pip install wandb' (recommended)
Overriding model.yaml nc=80 with nc=2

然后打印每一层网络的参数(太多,我省略大部分):

                 from  n    params  module                                  arguments                     
  0                -1  1      3520  models.common.Focus                     [3, 32, 3]                    
  1                -1  1     18560  models.common.Conv                      [32, 64, 3, 2]                
 ...
 21                -1  1    590336  models.common.Conv                      [256, 256, 3, 2]              
 22          [-1, 10]  1         0  models.common.Concat                    [1]                           
 23                -1  1   1182720  models.common.C3                        [512, 512, 1, False]          
 24      [17, 20, 23]  1     18879  models.yolo.Detect                      [2, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]
Model Summary: 283 layers, 7066239 parameters, 7066239 gradients, 16.5 GFLOPS

接着打印了一些数据增强的参数:

Transferred 354/362 items from yolov5s.pt
Scaled weight_decay = 0.001
Optimizer groups: 62 .bias, 62 conv.weight, 59 other
train: Scanning '..\train\labels.cache' images and labels... 105 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 105/105 [00:00<?, ?it/s]
val: Scanning '..\valid\labels.cache' images and labels... 29 found, 0 missing, 0 empty, 0 corrupted: 100%|██████████| 29/29 [00:00<?, ?it/s]
Plotting labels... 

最后打印了一些锚框相关的信息、输入数据的大小、单机单卡还是多机多卡、训练结果的保存、训练轮次的信息

autoanchor: Analyzing anchors... anchors/target = 5.95, Best Possible Recall (BPR) = 0.9986
Image sizes 640 train, 640 test
Using 0 dataloader workers
Logging results to runs\train\exp41
Starting training for 300 epochs...

开始一个epoch一个epoch的训练:

     Epoch   gpu_mem       box       obj       cls     total    labels  img_size
     0/299     10.1G    0.1181   0.07153   0.03079    0.2205      1013       640: 100%|██████████| 1/1 [00:16<00:00, 16.94s/it]
D:\0_conda\0_conda\envs\pytorch\lib\site-packages\torch\optim\lr_scheduler.py:129: UserWarning: Detected call of `lr_scheduler.step()` before `optimizer.step()`. In PyTorch 1.1.0 and later, you should call them in the opposite order: `optimizer.step()` before `lr_scheduler.step()`.  Failure to do this will result in PyTorch skipping the first value of the learning rate schedule. See more details at https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate
  warnings.warn("Detected call of `lr_scheduler.step()` before `optimizer.step()`. "
               Class      Images      Labels           P           R      mAP@.5  mAP@.5:.95: 100%|██████████| 1/1 [00:01<00:00,  1.30s/it]
                 all          29         162     0.00479      0.0106    0.000364    5.07e-05

3、项目文件

runs文件夹,包含3个train、test、detect,以train为例,每次执行train.py都会生成一个文件夹exp、exp1、exp2、…exp100等,这记录了训练的结果,一些可视化展示,训练日志等

detect.py,加载你训练的模型,对图像、视频、开启摄像头进行检测,并且在runs中生成检测的结果,
执行的配置参数:

python detect.py --weights yolov5s.pt --source 0                               # webcam
                                               img.jpg                         # image
                                               vid.mp4                         # video
                                               screen                          # screenshot
                                               path/                           # directory
                                               list.txt                        # list of images
                                               list.streams                    # list of streams
                                               'path/*.jpg'                    # glob
                                               'https://youtu.be/LNwODJXcvt4'  # YouTube
                                               'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

–source表示你要检测的对象,如果为0表示开启你的设备中的编号为0的摄像头进行检测,还可以指定一个参数–conf 0.4,表示置信度为0.4

使用测试图片开启检测,在runs/detect文件夹中会生成检测的结果,将原始图像和检测结果进行对比:

data文件夹,这个用不上,项目测试的数据

models文件夹,主要是模型构建的代码文件,还有预训练的模型的配置文件和预训练的模型文件,yolo.py和common.py是网络结构的文件

所以yolov5需要指定正确的运行配置参数,以及安装正确版本的工具包,还要有对应匹配的数据集,但是yolov5更新的速度实在太快了,基本2-3个月就会出一个新的版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1460633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Mapbox展示GDAL处理的3D行政区划展示实践

目录 前言 一、Gdal数据处理 1、数据展示 2、Java数据转换 二、Mapbox可视化 1、定义Mapbox地图 2、地图初始化 3、创建地图 三、界面优化 1、区域颜色设置 2、高度自适应和边界区分 3、中文标注 总结 前言 最近有遇到一个需求&#xff0c;用户想在地图上把行政区划…

Qt _day1

1.思维导图 2.设计一个简单登录界面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("原神启动"); // this->setStyleSheet("background-color:rgb(255,184,64)");this->setStyl…

力扣爆刷第76天--动态规划完全背包和多重背包

力扣爆刷第76天–动态规划完全背包和多重背包 文章目录 力扣爆刷第76天--动态规划完全背包和多重背包一、139.单词拆分二、56. 携带矿石资源&#xff08;第八期模拟笔试&#xff09; 一、139.单词拆分 题目链接&#xff1a;https://leetcode.cn/problems/word-break/descripti…

华为OD机试真题C卷-篇5

100分值题 小朋友来自多少小区堆内存申请跳格子3测试用例执行计划 小朋友来自多少小区 nums [int(x) for x in input().split(" ")] #index为报告的结果&#xff0c;zones[index]为报告相同结果的总人数 zones [0 for x in range(1000)] count 0i0 while(True):if…

算法项目(2)—— LSTM、RNN、GRU(SE注意力)、卡尔曼轨迹预测

本文包含什么? 项目运行的方式(包教会)项目代码LSTM、RNN、GRU(SE注意力)、卡尔曼四种算法进行轨迹预测.各种效果图运行有问题? csdn上后台随时售后.项目说明 本文实现了三种深度学习算法加传统算法卡尔曼滤波进行轨迹预测, 预测效果图 首先看下不同模型的指标: 模型RM…

解锁服务器外联:TinyProxy一键搭建指南

引言 在服务器需要访问外网的情况下&#xff0c;由于网络安全等原因&#xff0c;许多生产服务器限制了对外网的访问。本文介绍如何通过在一台能够访问外网的服务器上部署TinyProxy来实现代理&#xff0c;使得其他服务器可以通过该代理访问外网。 安装 TinyProxy是一个轻量级…

加固平板电脑在无人机的应用|亿道三防onerugged

无人机技术的快速发展已经在许多领域展现出巨大潜力&#xff0c;而加固平板电脑的应用在无人机领域中扮演着重要角色。 首先&#xff0c;加固平板电脑在无人机探测设备中发挥着关键作用。无人机探测设备通常需要实时传输高清图像和数据&#xff0c;以支持各种监测、勘测和检测…

Vue26 内置标签 v-text v-html

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>v-text指令</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script></head><…

使用备份工具xtrabackup进行差异备份详细讲解

差异备份 基于第一天进行差异备份 删除之前修改的数据备份 [rootservice ~]# rm -rf /data/backup/* [rootservice ~]# ls /data/backup 完整备份 [rootservice ~]# xtrabackup --defaults-file/etc/my.cnf --backup --target-dir/data/backup/base/ -uroot -pWyxbuke00. -H…

OpenGL学习——16.多光源

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

Clion stm32 .elf not found

用Clion新建的STM32CubeMX工程&#xff0c;第一次打开配置的时候可以正常工作。修改了CMakeLists.txt文件&#xff0c;但是关闭后第二次打开时&#xff0c;系统报错提示找不到.elf文件。 尝试解决方法&#xff1a; 重载clion项目 file ->invalidate caches --> invalid…

17.3.1.6 自定义处理

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 模拟某款图像处理软件的处理&#xff0c;它只留下红色、绿色或者蓝色这样的单一颜色。 首先按照颜色划分了6个色系&#xff0c;分别…

集成使用 GitHub Copilot 提升 IDEA 开发效率

集成使用 GitHub Copilot 提升 IDEA 开发效率 在现代软件开发中&#xff0c;集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA已经成为开发人员不可或缺的工具。它们提供了代码编辑、调试、版本控制等一系列功能&#xff0c;极大地提高了开发效率。而GitHub Copilot作…

【云原生】Docker consul的容器服务更新与发现

目录 什么是服务注册与发现 什么是consul consul提供的一些关键特性&#xff1a; consul 部署 consul服务器 1. 建立 Consul 服务 设置代理&#xff0c;在后台启动 consul 服务端 2. 查看集群信息 查看members状态 查看集群状态 3. 通过 http api 获取集群信息 regi…

kali linux出现添加源无法更新的问题:更新时显示签名无效和没有数字签名

kali linux更新源时显示签名无效和没有数字签名 一、出现显示签名无效和没有数字签名二、 解决办法三、几种开源镜像站 一、出现显示签名无效和没有数字签名 原因&#xff1a;因为没有下载签名&#xff0c;所以显示签名无效和没有数字签名 二、 解决办法 wget archive.kali.o…

mysql online ddl更改varchar长度的锁表情况

我们只看5.7及其之后的版本&#xff0c;官方文档&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl.html https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl.html mysql online ddl的特性是指&#xff0c;支持以instant&#xff08;8.0版本开…

线性筛法与欧拉函数

文章目录 筛法求质数欧拉函数基本模板筛法求欧拉函数 每次从最小质数开始遍历&#xff0c;可以保证n只会被最小质数筛到&#xff0c; 避免多次筛到&#xff0c; 每个数只会被筛一次&#xff0c; 即时间复杂度为 O ( n ) O(n) O(n)&#xff0c; 线性筛法 筛法求质数 原题链接&a…

3、windows环境下vscode开发c/c++环境配置(二)

前言&#xff1a;上一篇文章写了windows环境下&#xff0c;配置vscode的c/c开发环境&#xff0c;这一篇讲vscode开发c/c的配置文件&#xff0c;包括c_cpp_propertues.json&#xff0c;task.json及launch.json。 一、总体流程 通过c/c插件我们就可以来编写c/c程序了&#xff0c…

77、Spring、Spring Boot和Spring Cloud的关系

77、Spring、Spring Boot和Spring Cloud的关系 随着 Spring、Spring Boot 和 Spring Cloud 的不断发展&#xff0c;越来越多的开发者加入 Spring 的大军中。对于初学者而言&#xff0c;可能不太了解 Spring、Spring Boot 和 Spring Cloud 这些概念以及它们之间的关系&#xff…

强化学习入门(Matlab2021b)-创建环境【2】

目录 1 前言2 利用step和reset函数创建自定义环境2.1 对象描述2.2 reset函数2.3 step函数2.3 构建自定义环境3 使用匿名函数传递额外的参数4 可视化检查自定义函数的输出参考链接1 前言 本文介绍如何基于MATLAB编写step、reset函数,创建自己的强化学习环境(Environment)。 使…