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

文章目录

  • 前言
  • 一、YOLOv5是什么?
  • 二、环境搭建
    • 1.基本环境
    • 2.特殊环境
  • 三、自定义训练
    • 模型训练
    • 模型测试
  • 四、源码个人理解
    • 1.detect.py文件
    • 2.yolo.py文件
    • 3. train.py文件


前言

在人工智能机器学习领域中,目前最火的莫过于计算机视觉,在计算机视觉方向中,目前最火的莫过于图像分类目标检测,在图像分类目标检测算法中,目前最火的莫过于图像分类目标检测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——配置深度学习环境

视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第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:因为下载不稳定容易掉,所以给他补个时间

视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第2张图片
断断续续的弄了一圈,运行detect文件时发现下载好的库和依赖居然没有自动安装(摸不着头脑),于是手动安装。。。
安装后再次运行,开始自动下载模型
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第3张图片
运行成功后,会在runs/detect/exp保存被处理过的标签,若程序报错,大概率是因为有的库版本不正确或者还未安装,这个自己调试一下即可。
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第4张图片


三、自定义训练

模型训练

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

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

yolov5llw.yaml从yolov5s.yaml复制,修改nc即可。
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第6张图片

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来缓解

视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第7张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第8张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第9张图片
最后建议还是用服务器跑,本地电脑跑的温度飙升,疯狂喘气。

模型测试

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

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

视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第10张图片


四、源码个人理解

1.detect.py文件

整体:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第11张图片

部分:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第12张图片
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第13张图片
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第14张图片
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第15张图片
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第16张图片

2.yolo.py文件

网络结构可视化表达:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第17张图片
图来自B站UP:科科带你学

网络结构文字化表达:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第18张图片

common.py部分结构模块理解:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第19张图片

yolov5.yaml:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第20张图片

整体:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第21张图片

部分:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第22张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第23张图片
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第24张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第25张图片

3. train.py文件

整体:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第26张图片

部分:
视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第27张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第28张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第29张图片视觉学习笔记6——YOLOv5(v6.2)部署与代码理解_第30张图片

未完待续。。。

你可能感兴趣的:(深度学习,python,深度学习,目标检测)