德州手机网站建设电话,全网推广平台推荐,网站漂浮图片代码,柳州网站建设柳州1、项目配置
yolo的v1、v2、v3、v4这4个都有一篇对应的论文#xff0c;而v5在算法上没有太大的改变#xff0c;主要是对v4做了一个更好的工程化实现
1.1 环境配置
深度学习环境安装请参考#xff1a;PyTorch 深度学习 开发环境搭建 全教程
要求torch版本1.6#xf…1、项目配置
yolo的v1、v2、v3、v4这4个都有一篇对应的论文而v5在算法上没有太大的改变主要是对v4做了一个更好的工程化实现
1.1 环境配置
深度学习环境安装请参考PyTorch 深度学习 开发环境搭建 全教程
要求torch版本1.6因为需要torch1.6中的混合精度python3.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/imagesnc: 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 128data 分别是训练数据的配置文件epochs 训练次数weights 预训练模型cfg 预训练模型的配置文件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.1cu111 CUDA:0 (NVIDIA GeForce RTX 4080, 16375.5MB)然后打印一些训练的参数
Namespace(adamFalse, artifact_aliaslatest, batch_size128, bbox_interval-1, bucket, cache_imagesFalse, cfg.\\models\\yolov5s.yaml, datadata.yaml, device, entityNone, epochs300, evolveFalse, exist_okFalse, global_rank-1, hypdata/hyp.scratch.yaml, image_weightsFalse, img_size[640, 640], label_smoothing0.0, linear_lrFalse, local_rank-1, multi_scaleFalse, nameexp, noautoanchorFalse, nosaveFalse, notestFalse, projectruns/train, quadFalse, rectFalse, resumeFalse, save_dirruns\\train\\exp41, save_period-1, single_clsFalse, sync_bnFalse, total_batch_size128, upload_datasetFalse, weightsyolov5s.pt, workers0, world_size1)
tensorboard: Start with tensorboard --logdir runs/train, view at http://localhost:6006/
hyperparameters: lr00.01, lrf0.2, momentum0.937, weight_decay0.0005, warmup_epochs3.0, warmup_momentum0.8, warmup_bias_lr0.1, box0.05, cls0.5, cls_pw1.0, obj1.0, obj_pw1.0, iou_t0.2, anchor_t4.0, fl_gamma0.0, hsv_h0.015, hsv_s0.7, hsv_v0.4, degrees0.0, translate0.1, scale0.5, shear0.0, perspective0.0, flipud0.0, fliplr0.5, mosaic1.0, mixup0.0
wandb: Install Weights Biases for YOLOv5 logging with pip install wandb (recommended)
Overriding model.yaml nc80 with nc2然后打印每一层网络的参数太多我省略大部分 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_size0/299 10.1G 0.1181 0.07153 0.03079 0.2205 1013 640: 100%|██████████| 1/1 [00:1600: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-ratewarnings.warn(Detected call of lr_scheduler.step() before optimizer.step(). Class Images Labels P R mAP.5 mAP.5:.95: 100%|██████████| 1/1 [00:0100:00, 1.30s/it]all 29 162 0.00479 0.0106 0.000364 5.07e-053、项目文件
runs文件夹包含3个train、test、detect以train为例每次执行train.py都会生成一个文件夹exp、exp1、exp2、…exp100等这记录了训练的结果一些可视化展示训练日志等
detect.py加载你训练的模型对图像、视频、开启摄像头进行检测并且在runs中生成检测的结果 执行的配置参数
python detect.py --weights yolov5s.pt --source 0 # webcamimg.jpg # imagevid.mp4 # videoscreen # screenshotpath/ # directorylist.txt # list of imageslist.streams # list of streamspath/*.jpg # globhttps://youtu.be/LNwODJXcvt4 # YouTubertsp://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个月就会出一个新的版本