视觉学习笔记6——YOLOv5(v6.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

把自己编译过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:因为下载不稳定容易掉,所以给他补个时间

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


三、自定义训练

模型训练

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

扫描二维码关注公众号,回复: 15348156 查看本文章

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即可。
在这里插入图片描述

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

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

报错:

1、images.cache. Can not train without labels.
数据位置不对,不符合代码逻辑位置
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来缓解

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

模型测试

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

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

在这里插入图片描述


四、源码个人理解

1.detect.py文件

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

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

2.yolo.py文件

网络结构可视化表达:
B站UP科科带你学
图来自B站UP:科科带你学

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

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

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

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

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

3. train.py文件

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

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

未完待续。。。

猜你喜欢

转载自blog.csdn.net/qq_45848817/article/details/126342364