文章目录

  • 前言
  • 一、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——配置深度学习环境


补丁:
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作为预训练模型。

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:科科带你学

网络结构文字化表达:

common.py部分结构模块理解:

yolov5.yaml:

整体:

部分:

3. train.py文件

整体:

部分:

未完待续。。。

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

  1. amazeui学习笔记--css(HTML元素2)--代码Code

    amazeui学习笔记--css(HTML元素2)--代码Code 一.总结 1.行内代码:code标签<code> 2.代码片段:pre标签<pre> 3.限制代码块高度:添 ...

  2. OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7866 ...

  3. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  4. 影像组学视频学习笔记(7)-特征筛选之LASSO回归(代码)、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(7)主要介绍: 特征筛选之LASSO回归分析(代码实现) import pandas as pd import numpy as np ...

  5. JAVASE的学习笔记(四)(抽象类,代码块,接口)

    JAVASE的学习笔记(四) 抽象类与接口 JAVASE的学习笔记(四) 代码块 例题: 静态代码块 加载类的方法 手动加载类 抽象类(**只能被继承使用,自己应该无法创建对象**) 重要: 抽象类由 ...

  6. Spring Boot基础学习笔记16:项目打包部署

    文章目录 零.学习目标 一.Web项目打包部署概述 二.Jar包方式打包部署 (一)添加Maven打包插件 (二)使用IDEA进行打包 (三)Jar包目录结构说明 (四)Jar包方式部署 1.在控制台 ...

  7. 爬虫学习笔记,从基础到部署。

    爬虫基础知识: 笔记中出现的代码已经全部放到了github上https://github.com/liangxs0/python_spider_save.git 1.http基本原理 http:协议. ...

  8. 320、Vue学习笔记26 -【生产环境部署】 2020.04.20

    0.目录 1.开启生产环境模式 1.1 不使用构建工具 1.2 使用构建工具 2.模板预编译 3.提取组件的 CSS 4.跟踪运行时错误 5.参考链接 1.开启生产环境模式 开发环境下,Vue 会提供 ...

  9. Ceph学习笔记1-Mimic版本多节点部署

    特别说明: 本方法也可以用于单节点部署,只部署一个 Monitor (只是会形成单点故障而已),最低要求是使用两个分区创建 2 个 OSD (因为默认最小副本是 2 ):如果不需要使用 CephFS ...

最新文章

  1. rsync 同步数据
  2. C 语言 cgi 程序简单总结
  3. appium环境搭建参考
  4. 硬盘安装Fedora16
  5. python获取局域网内的设备_python调用nmap探测局域网设备
  6. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录
  7. android mvvm 官方例子,详解Android的MVVM框架 - 数据绑定
  8. 前端框架 Bootstrap 5.0 alpha 发布
  9. java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
  10. mysql中字符串和数字的互转函数
  11. 在线可视化python网站_利用Python优雅地可视化数据
  12. wxpython控件字体_wxPython获取系统字体代码
  13. linux limbo镜像文件下载,limbo 2000镜像下载
  14. 软件测试人员如何月薪过万、月薪过万的秘籍
  15. 我的河海大学计算机考研专业课总结
  16. ADSL上网全攻略——故障解决
  17. 一周精彩内容分享(第 1 期):“世纪逼空大战“
  18. javaone_Java SE 9在JavaOne 2017上达到了Atari般的性能
  19. 出色的领导者 多普达智能最新旗舰830评测
  20. 关于IRIG-B码对时的理解和分析

热门文章

  1. 一个很简单的淘宝优惠券搜索助手 大家看看有没有用吧 下载地址:http://pan.baidu.com/s/1skRHTDF
  2. 教师专业发展规划计算机教师,初中信息技术教师个人发展计划
  3. 观点七、中国智业的第二生态
  4. 海尔微型台式计算机重装系统,海尔台式电脑怎么进行U盘一键重装win10系统
  5. 一个屌丝程序猿的人生(一百一十五)
  6. 计算机网络:网间互联协议
  7. Java会被禁吗_关于java:如果字符串对象被禁闭,那么为什么一个更改不会影响其他对象...
  8. Kafka知识体系总结【附大厂高频面试题】
  9. 计算机教师继续教育心得,教师继续教育学习心得体会范文(精选8篇)
  10. java实现视频弹幕效果,SpringBoot实现视频弹幕功能 DanmuPlayer插件的使用