当前位置:   article > 正文

视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_yolov5 6.2

yolov5 6.2


前言

在人工智能机器学习领域中,目前最火的莫过于计算机视觉,在计算机视觉方向中,目前最火的莫过于图像分类目标检测,在图像分类目标检测算法中,目前最火的莫过于图像分类目标检测YOLO体系。目前最新的是YOLOv7,不过因为还不稳定,所以选择更为成熟的v5进行研究,而且v7也是在v5的基础上改进来的,所以还是很有研究意义的。虽然在2020年的时候我就开始接触YOLO体系,不过一直都只是把它工具化,对其中的网络结构、模型优化、锚框设置等方式只是略知一二,没有真正去理解和精学其中的算法思想,借这个机会打算好好去学习一番,本文作为学习笔记。


一、YOLOv5是什么?

Yolo就是一个是用于目标检测的模型,简单来讲就是是在一张图片中找出物体,并给出它的类别和位置。
目标检测是基于监督学习的,每张图片的监督信息是它所包含的N个物体,每个物体的信息有五个,分别是物体的中心位置(x,y)和它的高(h)和宽(w),最后是它的类别。
Yolo 模型的预测是基于整个图片的,并且它会一次性输出所有检测到的目标信息,包括类别和位置。
而YOLOv5是在 COCO 数据集上预训练的一系列对象检测架构和模型,代表Ultralytics 对未来视觉 AI 方法的开源研究,结合了经过数千小时的研究和开发的经验教训和最佳实践。

二、环境搭建

1.基本环境

官方要求:Python>=3.7.0、 PyTorch>=1.7。
本机环境:Ubuntu18、NVIDIA 、cuda10.1、cudnn、pycharm、OpenCV4、anaconda3(虚拟环境python3.7、pytorch1.7),具体搭建方法可参考我的视觉学习笔记1——配置深度学习环境

在这里插入图片描述
补丁:
requirements.txt文件要求torch>=1.7.0,torchvision>=0.8.1,所以要对于一下版本

2.特殊环境

其他的环境依赖都写在了requirements.txt文件里,具体内容如下:

# YOLOv5 requirements
# Usage: pip install -r requirements.txt

# Base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.1
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.64.0
protobuf<=3.20.1  # https://github.com/ultralytics/yolov5/issues/8012

# Logging -------------------------------------
tensorboard>=2.4.1
# wandb
# clearml

# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0

# Export --------------------------------------
# coremltools>=5.2  # CoreML export
# onnx>=1.9.0  # ONNX export
# onnx-simplifier>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn==0.19.2  # CoreML quantization
# tensorflow>=2.4.1  # TFLite export (or tensorflow-cpu, tensorflow-aarch64)
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev  # OpenVINO export

# Extras --------------------------------------
ipython  # interactive notebook
psutil  # system utilization
thop>=0.1.1  # FLOPs computation
# albumentations>=1.0.3
# pycocotools>=2.0  # COCO mAP
# roboflow
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

把自己编译过opencv4.4的cv2.so文件复制到虚拟环境中,且已经安装了torch1.7.0,torchvision0.8.1,所以可以把opencv-python>=4.1.1,torch>=1.7.0,torchvision>=0.8.1注释掉(加#)。

执行以下命令,直接一键安装所有依赖

pip install -r requirements.txt --default-timeout=5000
#--default-timeout=5000:因为下载不稳定容易掉,所以给他补个时间
  • 1
  • 2

在这里插入图片描述
断断续续的弄了一圈,运行detect文件时发现下载好的库和依赖居然没有自动安装(摸不着头脑),于是手动安装。。。
安装后再次运行,开始自动下载模型
在这里插入图片描述
运行成功后,会在runs/detect/exp保存被处理过的标签,若程序报错,大概率是因为有的库版本不正确或者还未安装,这个自己调试一下即可。
在这里插入图片描述


三、自定义训练

模型训练

因为是个人电脑,所以算力有限,把yolov5s.pt作为预训练模型。

cocollw.yaml从coco128.yaml复制,将自定义测试的图像数据和标签数据集分别 划分为:训练集、验证集、测试集,,比例根据数据量不同,一般可以为 90%:5%:5%(主要看具体数据量,我使用的是公司废弃数据集,数据量为近2万张图片)。需要按照Yolov5代码规则,创建images、labels两个子目录,两目录下是train、val、test,三个数据集中就是图片和标注文件。修改path、train、val、test、nc、names,删除download。
在这里插入图片描述

yolov5llw.yaml从yolov5s.yaml复制,修改nc即可。
在这里插入图片描述

train.py功能调试

预训练模型

parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
  • 1

模型结构文件

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

模型配置文件

parser.add_argument('--data', type=str, default='data.yaml', help='dataset.yaml path')
  • 1

迭代训练轮数

parser.add_argument('--epochs', type=int, default=2000, help='total training epochs')
  • 1

batch-size大小设置

    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs, -1 for autobatch')
  • 1

使用哪块GPU或者几块GPU或者使用CPU

parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
  • 1

detect.py功能调试

参数conf-thres的default值需要调整,较好的置信度可以减少同一个目标多个检测框问题,这里选择50%置信度。

parser.add_argument('--conf-thres',type=float,default=0.50,help='confidence threshold')
  • 1

参数save-txt的末尾添加default = True,这个参数就是保存检测的标签文件,设置保存。

parser.add_argument('--save-txt', action='store_true', help='save results to *.txt',default=True)
  • 1

参数nosave的的末尾添加default = True,这个参数是是否保存检测后图片,设置不保存。

parser.add_argument('--nosave', action='store_true', help='do not save images/videos',default=True)
  • 1

yolo文件夹下打开终端,执行命令

python train.py --img 640 --cfg models/yolov5llw.yaml --data data/cocollw.yaml --weights yolov5s.pt --epoch 100 --batch 8
  • 1

报错:

1、images.cache. Can not train without labels.
数据位置不对,不符合代码逻辑位置
  • 1
  • 2
2、RuntimeError: Unable to find a valid cuDNN algorithm to run convolution
3、RuntimeError: CUDA out of memory. Tried to allocate 126.00 MiB (GPU 0; 7.79 GiB total capacity; 6.38 GiB already allocated; 115.75 MiB free; 6.61 GiB reserved in total by PyTorch)
可能是cuda、cudnn不匹配,也可能是算力不足,算力问题可以通过降低batch,epoch和yolov5.pt来缓解
  • 1
  • 2
  • 3

在这里插入图片描述在这里插入图片描述在这里插入图片描述
最后建议还是用服务器跑,本地电脑跑的温度飙升,疯狂喘气。

实时训练

命令行进入到YOLOv5的目录下

tensorboard --logdir=runs
  • 1

在这里插入图片描述

模型测试

使用detect.py,weights使用新训练后的best.pt,测试图片可以拍一个新照片,或者找一个之前没有用到的图片,这里直接用它的图片(标签不对是因为废弃数据集数据混乱,比值小是因为训练次数太少)。

python detect.py --weights runs/train/exp5/weights/best.pt --source yolov5/data/images/bus.jpg
  • 1

在这里插入图片描述


四、模型结构

模型结构可以在yaml文件或者netron去观察,其中netron对pt文件支持不友好,需要转为onnx文件才勉强能用。
在 export.py 设置–data、–weights和–opset等参数,通过参数修改后运行,待转换的权重文件与导出格式即可。

错误1
ONNX: export failure ❌ 0.0s: Unsupported ONNX opset version: 12
  • 1
  • 2

onnx版本需要提高到1.12版本或以上才行。

错误2
ONNX: export failure: Exporting the operator silu to ONNX opset version 12 is not supported. Please open a bug to request ONNX export support for the missing operator.
  • 1
  • 2

找到anaconda虚拟环境下的/site-packages/torch/nn/modules/activation.py并修改:

# 重写394行
def forward(self, input: Tensor) -> Tensor:
	# 原始
	# return F.silu(input, inplace=self.inplace)
	# 重写
	return input * torch.sigmoid(input)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

网络结构可视化表达:
在这里插入图片描述

图来自博主:创不了浩,画的很好看

在这里插入图片描述

网络结构文字化表达:
在这里插入图片描述

1.detect.py文件

整体:
在这里插入图片描述

部分:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.yolo.py文件

common.py部分结构模块理解:
在这里插入图片描述

yolov5.yaml:
在这里插入图片描述

整体:
在这里插入图片描述

部分:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3. train.py文件

整体:
在这里插入图片描述

部分:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

未完待续。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/569605
推荐阅读
相关标签
  

闽ICP备14008679号