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

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个月就会出一个新的版本

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MapGIS 10.6 Pro前端开发低代码,快速构建WebGIS应用

随着实景三维、CIM、数字孪生等的快速发展&#xff0c;相关应用开发需求的市场增长对企业IT交付能力的要求越来越高&#xff0c;为了确保质量并实现提效降本&#xff0c;并让专业开发者更加专注于更具有价值和创新型的工作&#xff0c;低代码开发技术成为大家的优先选择。 为了…

C++/C函数指针及函数指针数组

文章目录 什么是函数指针函数指针的使用为什么要使用函数指针&#xff1f;回调函数函数指针数组及使用阅读两段有趣的代码指向成员函数的指针&#xff08;C特有&#xff09; 什么是函数指针 首先它是一个指针&#xff0c;一个指向函数的指针&#xff0c;在内存空间中存放的是函…

如何申请GeoTrust证书?

什么是GeoTrust&#xff1f; GeoTrust是一家国际认证机构&#xff08;CA&#xff09;&#xff0c;提供广泛的安全产品&#xff0c;包括SSL/TLS证书、代码签名证书、电子邮件证书等。它成立于1996年&#xff0c;自那以来一直是网络安全领域的领导者。GeoTrust的证书以其强大的加…

美团外卖药店商品月销量数据

字段内容&#xff1a; shop_id varchar(50) NOT NULL, shop_id_str varchar(50) NOT NULL, shop_name varchar(400) DEFAULT NULL, shop_min_price varchar(10) DEFAULT NULL, shop_score varchar(10) DEFAULT NULL, shop_wm_score varchar(10) DEFAULT NU…

王者归来!Stability-AI又放大招 | Stable Cascade:更快更强的图像生成模型!

标题&#xff1a;王者归来&#xff01;Stability-AI又放大招 | Stable Cascade:更快更强的图像生成模型&#xff01; Stable Diffusion官方最新发布了Stable Cascade&#xff0c;相较于之前的SD-1.5以及SDXL模型有了质的提升。可谓开源王者归来&#xff01; 该模型是建立在 Wr…

代码随想录 -- 哈希表

文章目录 有效的字母异位词描述题解 两个数组的交集描述题解 快乐数描述题解 两数之和描述题解 四数相加II描述题解 赎金信描述题解&#xff1a;暴力题解&#xff1a;哈希表 三数之和描述题解&#xff1a;哈希表&#xff08;不适合&#xff09;题解&#xff1a;双指针 四数之和…

已解决Application run failed org.springframework.beans.factory.BeanNot

问题原因&#xff1a;SpringBoot的版本与mybiats-puls版本不对应且&#xff0c;spring自带的mybiats与mybiats-puls版本不对应 这里我用的是3.2.2版本的SpringBoot&#xff0c;之前mybiats-puls版本是3.5.3.1有所不同。 问题&#xff1a;版本对不上 解决办法&#xff1a;完整…

深入浅出JVM(三)之HotSpot虚拟机类加载机制

HotSpot虚拟机类加载机制 类的生命周期 什么叫做类加载? 类加载的定义: JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流) 一个…

Qt应用-视频播放器实例

本文讲解Qt视频播放器应用实例。 实现功能 视频的播放暂停、拖动进度控制,声音控制播放列表控制播放区域的暂停控制,全屏控制等。 界面设计 <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"><class>frmVide…

cmd命令开启windows桌面远程控制并设置防火墙允许远程

cmd命令开启桌面远程控制 1、开启之前&#xff1a; 2、使用管理员身份运行cmd 3、执行cmd命令 reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Control\Terminal server" /v fDenyTSConnections /t REG_DWORD /d 0 /f4、如果这台电脑的防火墙打开&#xf…

vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复

1. 问题 ElementUI的form表单&#xff0c;当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度&#xff0c;例如 ‘50px’。作为 Form 直接子元…

第3.3章:StarRocks数据导入--Stream Load

一、概述 Stream Load是StarRocks常见的数据导入方式&#xff0c;用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中&#xff0c;该导入方式不依赖其他组件。 Stream Load作是一种同步导入方式&#xff0c;可以直接通过请求的返回值判断导入是否成功&#xff0c;无法手…

PHP实践:Laravel中事件使用讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

【wu-lazy-cloud-network】Java自动化内网穿透架构整理

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 版本更新 1…

MySql重要知识梳理

文章目录 一.索引1.索引概述2.索引优缺点3. 索引结构为什么InnoDB存储引擎选择使用Btree索引结构? 4.索引分类思考InnoDB主键索引的Btree高度为多高? 5. 索引语法1.索引语法2.sql性能分析1.SQL执行频率2.慢查询日志3.explain执行计划 3.索引使用规则1.最左前缀法则2.索引失效…

机器学习 深度学习资料 资源machine learning

Kaggle入门&#xff0c;看这一篇就够了 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/25686876 day1-1.什么是机器学习_哔哩哔哩_bilibiliday1-1.什么是机器学习是10天学会机器学习从入门到深度学习的第1集视频&#xff0c;该合集共计62集&#xff0c;视频收藏或关注UP主&a…

时间获取、文件属性获取 2月20日学习笔记

执行两次代码&#xff0c;打印出两次执行过程中新增的文件及删除的文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <dirent.h>#def…

Kubernetes安装nginx-controller作为统一网关

nginx-controller是什么呢? 它是一个能调度nginx的一个kubernetes operator,它能监听用户创建,更新,删除NginxConf对象,来调度本地的nginx实现配置的动态更新。如添加新的代理(http,https,tcp,udp),缓存(浏览器缓存,本地缓存),ssl证书(配置本身,ConfigMap,Secret),更新,删除等…

解决pycharm中PIL安装失败

问题&#xff1a;在调用pil时显示pil标红 我在设置中下载每次失败&#xff0c;显示 ERROR: Could not find a version that satisfies the requirement PIL (from versions: none) ERROR: No matching distribution found for PIL我尝试了很久&#xff0c;查看了一些博客 &a…

论文阅读——SqueezeSAM

SqueezeSAM: User-Friendly Mobile Interactive Segmentation 比SAM更小&#xff0c;更快。 框架&#xff1a; 使用的U型结构 使用BatchNorm而不是LayerNorm节省计算&#xff1b; 对于用户点击和框&#xff0c;单独作为通道&#xff0c;前融合和后融合&#xff08;sam只有后融…