旧版本2021.08.03

新版本https://blog.csdn.net/m0_53392188/article/details/119334634​​​​​​​

以作备份

目录

一、前言

二、学习内容

​编辑

二、版本与配置声明

三、Yolov5的准备

1.下载Yolov5

2.安装依赖库

3.运行检测

四、训练集

五、制作标签

1.下载labelme

2.安装依赖库

3.labelme操作

4.json转txt

五、修改配置文件

1.coco128.yaml

2.yolov5配置

六、训练train

七、识别detect

八、debug

九、百度网盘资源

十、结语


一、前言

1.集成的资源我放在了文末,包括我自己做成的成品,可以直接train与detect。我发在百度网盘上。

2.我本人没有学过深度学习,我只是在做视觉项目的时候记录了过程,主要是能够让读者复现,直接使用,而且我不讲原理。如果深入想了解yolov5的原理,可以去看热度比较高的博主做的

3.如果有问题可以在评论区里讨论,或者私信我都行,提问前请先点赞支持一下博主^_^。

二、学习内容

2020年6月25日,Ultralytics发布了YOLOV5 的第一个正式版本,其性能与YOLO V4不相伯仲,同样也是现今最先进的对象检测技术,并在推理速度上是目前最强,yolov5按大小分为四个模型yolov5s、yolov5m、yolov5l、yolov5x。

今天我们来学习一下如何简单使用这个算法

文章特点:一个完整的流程,从头教到尾,不讲冗长的理论,实操,看完本篇文章,训练与识别都是没有问题的,我以王者荣耀作为训练集,可以先看看效果

Yolov5展示视频(b站),可以直接戳这个也可以看下面俩

Yolov5识别效果

原视频

以下是操作的流程图

二、版本与配置声明

官方要求python>=3.7,Pytorch>=1.5

我的:python                            3.7.1

----------------------------------------------------------Yolov5需要

# base --------------------------------------
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow
PyYAML>=5.3.1
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0

# logging --------------------------------------
tensorboard>=2.4.1
# wandb

# plotting --------------------------------------
seaborn>=0.11.0
pandas

# export --------------------------------------
# coremltools>=4.1
# onnx>=1.9.0
# scikit-learn==0.19.2  # for coreml quantization

# extras --------------------------------------
# Cython  # for pycocotools https://github.com/cocodataset/cocoapi/issues/172
# pycocotools>=2.0  # COCO mAP
# albumentations>=1.0.2
thop  # FLOPs computation

-----------------------------------------------------------labelme需要

PyQt5                              5.15.4

labelme                            4.5.9

----------------------------------------------------------

联想小新Air 15

三、Yolov5的准备

1.下载Yolov5

https://github.com/ultralytics/yolov5,放在合理的位置,如果这个下的慢的话见文末资源

2.安装依赖库

“版本声明”中的库需要安装的,主要的是这几个

requests

pandas

pyyaml

matplotlib

seaborn

cython

numpy

tensorboard

大部分都能pip install 。重点说两个

(1)对于Pytorch,在Anaconda Prompt里输入

pip install torch==1.7.0+cu101 torchvision==0.8.1+cu101 torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

(2)对于wandb,wandb安装方法,这个好像不是必须的,但我还是下了,版本为0.10.11,刚好能兼容,作用就是对训练分析,如图所示

3.运行检测

下载完yolov5后,点detect,运行

这个是帮你检测能不能正常运行的

若正常:

D:\Anaconda\python.exe C:/Users/86189/Desktop/yolov5-master/yolov5-master/detect.py
detect: weights=yolov5s.pt, source=data/images, imgsz=640, conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False
YOLOv5  2021-7-17 torch 1.7.0+cu101 CUDA:0 (GeForce MX350, 2048.0MB)Downloading https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt to yolov5s.pt...
100%|██████████| 14.1M/14.1M [01:32<00:00, 160kB/s]Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/2 C:\Users\86189\Desktop\yolov5-master\yolov5-master\data\images\bus.jpg: 640x480 4 persons, 1 bus, 1 fire hydrant, Done. (0.055s)
image 2/2 C:\Users\86189\Desktop\yolov5-master\yolov5-master\data\images\zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.024s)
Results saved to runs\detect\exp
Done. (0.197s)Process finished with exit code 0

在runs中能发现被处理过的标签,说明成功了!

若程序报错,大概率是因为有的库版本不正确或者还未安装,这个自己调试一下即可,应该没有太大难度

四、训练集

训练集至少50张起步才有效果

训练集就是你需要train并用于detect的东西,我以王者荣耀作为例子,你可以跟着我来一遍,资源在文末。要做自己的训练集的话再看第五步。跟着我的话可以不用做标签,因为资源中已经做好了

如下图所示创建文件夹,让操作更清晰方便

images就是训练集的图片,labels就是训练集的标签,train的话是用于训练的,test就是用于测试的

五、制作标签

1.下载labelme

https://github.com/wkentaro/labelme,如果下载得慢的话见文末资源

点Download Zip,下载后找到该文件,解压,无需配置环境变量

2.安装依赖库

在Anaconda Prompt里pip install pyqt5和pip install labelme

3.labelme操作

然后在Anaconda Prompt里输入labelme,打开界面如下

可以选择打开一个文件或者文件夹,如果是打开文件夹的话就会是下面那样子

右击,点击rectangle,即画矩形框,框选你要识别训练的东西,举王者荣耀的例子

框选之后输入标签的名字,注意,可以框选多个作为标签。框选完一张图后保存,然后接着下一张图。保存的文件格式是.json

4.json转txt

由于yolov5只认txt而不认json,因此还要有一个转换的过程

在yolov5-master中创建一个.py文件,代码如下

import json
import osname2id =  {'hero':0,'sodier':1,'tower':2}#标签名称def convert(img_size, box):dw = 1. / (img_size[0])dh = 1. / (img_size[1])x = (box[0] + box[2]) / 2.0 - 1y = (box[1] + box[3]) / 2.0 - 1w = box[2] - box[0]h = box[3] - box[1]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def decode_json(json_floder_path, json_name):txt_name = 'C:\\Users\\86189\\Desktop\\' + json_name[0:-5] + '.txt'#存放txt的绝对路径txt_file = open(txt_name, 'w')json_path = os.path.join(json_floder_path, json_name)data = json.load(open(json_path, 'r', encoding='gb2312',errors='ignore'))img_w = data['imageWidth']img_h = data['imageHeight']for i in data['shapes']:label_name = i['label']if (i['shape_type'] == 'rectangle'):x1 = int(i['points'][0][0])y1 = int(i['points'][0][1])x2 = int(i['points'][1][0])y2 = int(i['points'][1][1])bb = (x1, y1, x2, y2)bbox = convert((img_w, img_h), bb)txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')if __name__ == "__main__":json_floder_path = 'C:\\Users\\86189\\Desktop\\哈哈哈\\'#存放json的文件夹的绝对路径json_names = os.listdir(json_floder_path)for json_name in json_names:decode_json(json_floder_path, json_name)

标注地方是需要修改的,有几个标签名就写几个标签名,而且这是一个文件夹里所有的json一起转化,存放txt的路径改为labels的train中(还记得下面这张图吗)

转化完后大概会是这样子,如果一张图有多个标签的话,这个数据就会变多

五、修改配置文件

1.coco128.yaml

先复制一份,可以粘贴到my_dates中,改名为mydata(当然你想改啥名字,想放哪里都行,但是要记住路径记住名字,2.也一样)

注意这个mydata的路径,不要放错了;此外,mydata1_yaml应该是训练后自动生成的,不用管。

mydata.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字,王者荣耀的例子中有10个标签,标签名字都如下。同时要把path注释掉

(注意path那里要注释掉,评论区 Hariod 兄弟说原先是没有被注释的)

                         

还需要修改一个路径,注意这里是存放训练集图片的相对路径,斜杠别搞反了,相对路径就是对于yolov5-master的路径,我的如下(这就是我为什么建议创建文件夹的原因)

2.yolov5配置

yolov5有4种配置,不同配置的特性如下,我这里选择yolov5s,速度最快,但是效果最拉胯

先复制一份yolov5s

可以粘贴到my_dates中,改名为mydata_1,需要修改的参数是nc,nc就是标签的数量,王者荣耀的例子是10个,故改成10

六、训练train

1.train.py

打开这个文件,需要修改的参数比较多

第一个是with open,参数要加上encoding='utf-8',不然的话很可能会出现编码报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 577

以下修改的都是default处

第二个是484行的配置,用的是yolov5s

第三个是486行和488行的路径

第四个是491行,因为我的电脑拉胯,所以不能按照原配置搞(这就是我为什么在一开始就声明配置的原因)

第五个是495行,原来长宽都是640,不行的话减32直至可以run

第六个是513行

这一大串参数都是根据我的低配联想小新来的,我按照这样是能run的,游戏本的话配置还能再调高些

这个时间很长!我当时试过如果是5张图片,要花5分钟左右,如果是王者荣耀这个例子106张图,大概要1个小时

(train效果如上图所示)

在runs\train\exp\weights中能看到有一个best和last,意思是最好的和最近的

七、识别detect

如下图所示是需要修改的参数,也是best和测试图片的相对路径,不要搞错了。结果在runs\detect\exp中看

我的测试是个视频(视频也可图片也可),出来的结果就是文章开头放的视频

效果不是很好,但是还是能分辨个大概,原因有两个

一是因为用了最拉的yolov5s,二是训练的文件还不够多

detect效果如图所示,画红线的地方为识别出来的物体

八、debug

我猜测大多数问题为:

1.wandb报错。安装方法的链接已经在文中了。如果要使用wandb的话需要注册那个网站,然后他会给个码给你,复制后你在控制台里粘贴,然后才能用(大概是这样)。

2.文件路径没写对。有点惭愧,文件路径我搞的比较乱(自我吐槽),大家要注意。正因如此我做了个框架图。

3.显卡爆了,那就调低train中我列出来的那几行default

4.有朋友说他在训练时,box obj cls labels的值为0或nan。正常情况下是正常的数(我发了训练的时候的图片),我猜测可能是训练集标签没做好 或者 路径没写对 或者 default没调好

5.建议路径为全英文,不要带中文,否则可能会出现意料之外的错误

九、百度网盘资源

链接:https://pan.baidu.com/s/1YmZOPzcVaA0TuupMDW93SQ 
提取码:vhw1

十、结语

  • 我也是个小白,可能存在很多不足之处,希望有不足之处可以包容,我会改正的(⸝⸝•‧̫•⸝⸝)
  • 最后感谢我的hxd,很多都是他教的,我自己尝试过一遍并且成功了,整理排版才的来这篇文章
  • 如果遇到出现错误的,自己先多找一找问题,能力在debug中会不断提高的

你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿

【Yolov5】1.认真总结6000字Yolov5保姆级教程(旧版本2021.08.03作为备份)相关推荐

  1. Mysql8.0下载安装与配置保姆级教程 (MacOS版本)

    目录 一.下载 二.安装MySQL 1.Use Legacy Password Encryption 2.密码设置8位 3.安装成功 三. 数据库配置连接 1.配置与生效 打开文件 加入语句 使配置的 ...

  2. 【高效工具】Typora 使用保姆级教程 | 历史版本已被禁用

    pre:历史版本已被禁用,无法免费试用Typora了 TAT 如果不想付费的话,可以使用vscode来做markdown笔记 指路 ☞ 如何用vscode编写Markdown文件 前言:对 Typor ...

  3. yolov5 6.1官方模板TensorRT加速保姆级图文教程

    加速的基础流程今年春季已经写好了,可以完美复现加速. 需要补充的是运行export.py的报错,加一句: pip install onnx 这会写教程的时候,电脑是昨天新做的系统,没有python以及 ...

  4. 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 下

    文档大纲: 本文上半部分之前已经发过了,传送门:50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上 此篇文章是整个文档的下半部分,将接着上半部分从第五章开始. 五.实时数仓建设核心 ...

  5. 目标检测算法——YOLOv7训练自己的数据集(保姆级教程)

    >>>深度学习Tricks,第一时间送达<<< 目录 YOLOv7训练自己的数据集(保姆级教程): 一.YOLOv7源代码下载 二.安装深度学习环境 三.准备自己的 ...

  6. 判断是不是链接 正则_Python 正则表达式 保姆级教程,小学生都看得懂!!

    ~点击 蓝字 关注,获取更多资源~ 0 前言 上一篇文章,2020,还不会正则???,和小伙伴们一起学习了 Python 中的正则表达式,读完之后,总感觉少了点什么东西,无法尽兴?就好像爱你们的心少了 ...

  7. 图片适应窗口_毕业论文排版保姆级教程——图片和公式排版

    [小技巧]Origin作图过程中如何让图看起来更生动 2020-05-30 [小技巧]简单设置让你origin导出的图片不在有大白边 2020-05-29 [干货放送]萤火科研资源免费赠送第一期--必 ...

  8. Frp内网穿透保姆级教程 windows内网穿透

    Frp内网穿透保姆级教程 windows内网穿透 准备工作 一台具有公网ip的云服务器(我的是ubuntu) frp程序 流程 将frps放到具有公网ip的服务器上 将frpc放到需要内网穿透机器上, ...

  9. win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程

    win系统的阿里云服务器部署SpringBoot项目保姆级教程 前言 配置阿里云服务器 配置环境 环境配置中的坑 还有别的坑的话,私信我我补充......毕竟配置是最基本的,还想咋样... jar包导 ...

最新文章

  1. 模型可解释性-树结构可视化
  2. 贝叶斯定理( Bayes_Theorem)
  3. 上传文件按钮美化,上传文件前后状态控制
  4. nth_element
  5. 怎样的代码算是好代码?
  6. 展望Silverlight 5.0新版本更新与发展
  7. Android之PC浏览器上传表单格式大文件到手机客户端read函数阻塞问题
  8. Eval绑定日期时,修改日期显示的格式
  9. c++已知2点求中垂线_高中化学基于元素周期表的推断题知识总结!(2)
  10. 软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)
  11. Nero8刻录引导系统光盘镜像图文教程
  12. 基于JAVA高校实习实训管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  13. 设计模式之----依赖倒置(Dependency inversion principle)的理解
  14. 接入支付宝网页支付的个人记录
  15. [html代码] 几种美丽的分割线
  16. XM 玻璃钢一体化泵站特点及使用寿命
  17. 汉语拼音的5个声调该怎么学?
  18. 企业邮箱发送出去的邮件找不到了
  19. 什么是面向对象?面向对象的特征?面向对象和面向过程的区别?
  20. Android 应用升级方案

热门文章

  1. java中键盘输入语句
  2. Fikker 反向代理服务器CDN 应用优化参考
  3. (基于安卓app开发的毕业设计)智能手机图片管理.(附源码+论文)
  4. eclipse 字母大小写转换快捷键,eclipse快捷键
  5. EXCEL中替换换行符、回车符
  6. html影院选座模板,jQuery在线选座(影院版)
  7. Android(三十二):AlertDialog 对话弹窗
  8. 拼接 sql 防注入
  9. crontab 每天凌晨8点_关于定时执行任务:Crontab的20个例子
  10. 2022年JCR新功能更新了,新增的指标JCI究竟是什么含义?