物体检测-系列教程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 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install cython==0.29.36 -i https://pypi.tuna.tsinghua.edu.cn/simple

请务必要把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个月就会出一个新的版本

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 目标检测计算机视觉领域的一个重要任务,它可以在图像或视频中自动识别出特定的物体,并标注出它们的位置和类别。Yolov5是一种目标检测算法,它基于深度学习技术,可以快速、准确地检测出图像中的目标。 如果想要训练自己的目标检测模型,可以使用Yolov5进行训练。首先需要准备好训练数据集,包括标注好的图片和对应的标签文件。然后,可以使用Yolov5提供的命令行工具进行模型训练,具体步骤如下: 1. 安装Yolov5:可以在GitHub上下载Yolov5的源代码,并按照官方文档进行安装。 2. 准备数据集:将标注好的图片和标签文件放在同一个文件夹中,并将文件夹路径记录下来。 3. 配置训练参数:可以根据自己的需求,调整Yolov5的训练参数,如学习率、批次大小等。 4. 开始训练:使用命令行工具运行训练命令,等待训练完成。 5. 测试模型:训练完成后,可以使用Yolov5提供的测试工具对模型进行测试,检查模型的准确率和召回率等指标。 通过以上步骤,就可以训练出自己的目标检测模型了。当然,要想训练出高质量的模型,还需要不断调整参数、优化数据集等。 ### 回答2: 目标检测计算机视觉领域中的一项核心任务,它的主要目的是在一张图像或者视频中确定出特定的物体物体组合出现的位置和数量。随着深度学习算法的发展,目标检测的效果不断提升。其中,yolov5是近年来较为优秀的目标检测算法之一,其在速度和精度方面表现优异,在各种场景中都有广泛的应用。 训练一个自己的目标检测模型,需要几个步骤。首先,需要收集训练所需的图像和标签。这些图像可以是自己拍摄的,也可以从公开数据集中获取。而标签则应该明确指出图像中感兴趣的物体,以及它们所在的位置,标签的格式可以是PASCAL VOC和COCO等通用格式。 接下来,利用yolov5 进行模型的训练。yolov5的训练过程需要使用到PyTorch框架,因此需要先安装相应的环境和依赖。在训练时,应该选择合适的超参数,例如学习率、批量大小、迭代次数等等。调整这些参数的过程需要有一定经验和调试,才能得到一个较好的模型。 在训练结束后,需要对模型进行测试。测试的方法主要有两种,一是使用一些测试数据集来进行准确率和召回率的评估,二是在实际应用场景中进行验证。这些验证可以帮助我们找到模型的不足和改进之处。 总的来说,yolov5作为目标检测领域的研究热点,在实际应用场景中也有非常大的发展空间。通过学习利用yolov5训练自己的目标检测模型,可以更好地理解目标检测的原理和方法,并为自己的实际应用提供有力的技术支持。 ### 回答3: 目标检测计算机视觉领域中的一个重要问题,其主要应用于自动驾驶、无人机、安防监控、智能制造等领域。而yolov5是近年来比较流行的目标检测算法之一,具有较高的实时性和精度,本文将介绍如何利用yolov5训练自己的目标检测模型。 首先需要获取待检测的图片和标注。图片可以通过网络爬虫或者手动采集,标注可以使用标注工具进行标注,常用的工具有LabelImg、VoTT等。标注工具会在图片上框选出待检测物体的位置,并将其标注信息保存为xml或json格式的文件。 然后需要安装yolov5,可以通过github获取源码并按照说明进行安装。yolov5提供了一些预训练模型,可以使用它们进行fine-tune。选择合适的预训练模型并加载权重文件,然后修改配置文件进行自定义设置。常见的配置有训练集路径、测试集路径、类别数、batch size、学习率等参数。 接下来需要将标注信息转换为yolov5所需的格式。yolov5使用的标注格式为txt文件,每个txt文件对应一张图片,文件中每一行表示一个待检测物体,包括其所在的类别、中心坐标、宽度和高度,这些信息由标注工具提供。 然后进行训练。运行yolov5提供的训练脚本,可以使用GPU或者CPU进行训练。训练过程中有许多参数需要设置,例如训练轮数、优化器类型、loss函数等。在训练过程中可以监控模型的训练损失和精度,以确定训练时间和训练轮数。训练完成后,可以保存训练好的模型并进行推理。 最后就是模型推理。将待检测的图片输入模型,模型将会返回每个检测框的置信度和类别概率,根据一定的置信度阈值和NMS算法可以得到最终的检测结果。通常将置信度阈值设置为0.5~0.7之间,NMS阈值设置为0.5。 利用yolov5训练自己的目标检测模型需要完成许多工作,从数据采集到模型推理都需要逐一进行。但是通过这样的过程,用户可以深入了解目标检测的原理和流程,并且可以根据具体需求进行自定义设置,得到更好的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器学习杨卓越

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值