赞
踩
旧版本2021.08.03
新版本https://blog.csdn.net/m0_53392188/article/details/119334634
以作备份
目录
1.集成的资源我放在了文末,包括我自己做成的成品,可以直接train与detect。我发在百度网盘上。
2.我本人没有学过深度学习,我只是在做视觉项目的时候记录了过程,主要是能够让读者复现,直接使用,而且我不讲原理。如果深入想了解yolov5的原理,可以去看热度比较高的博主做的
3.如果有问题可以在评论区里讨论,或者私信我都行,提问前请先点赞支持一下博主^_^。
2020年6月25日,Ultralytics发布了YOLOV5 的第一个正式版本,其性能与YOLO V4不相伯仲,同样也是现今最先进的对象检测技术,并在推理速度上是目前最强,yolov5按大小分为四个模型yolov5s、yolov5m、yolov5l、yolov5x。
今天我们来学习一下如何简单使用这个算法
文章特点:一个完整的流程,从头教到尾,不讲冗长的理论,实操,看完本篇文章,训练与识别都是没有问题的,我以王者荣耀作为训练集,可以先看看效果
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
https://github.com/ultralytics/yolov5,放在合理的位置,如果这个下的慢的话见文末资源
“版本声明”中的库需要安装的,主要的是这几个
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,刚好能兼容,作用就是对训练分析,如图所示
下载完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就是用于测试的
https://github.com/wkentaro/labelme,如果下载得慢的话见文末资源
点Download Zip,下载后找到该文件,解压,无需配置环境变量
在Anaconda Prompt里pip install pyqt5和pip install labelme
然后在Anaconda Prompt里输入labelme,打开界面如下
可以选择打开一个文件或者文件夹,如果是打开文件夹的话就会是下面那样子
右击,点击rectangle,即画矩形框,框选你要识别训练的东西,举王者荣耀的例子
框选之后输入标签的名字,注意,可以框选多个作为标签。框选完一张图后保存,然后接着下一张图。保存的文件格式是.json
由于yolov5只认txt而不认json,因此还要有一个转换的过程
在yolov5-master中创建一个.py文件,代码如下
- import json
- import os
-
- name2id = {'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 - 1
- y = (box[1] + box[3]) / 2.0 - 1
- w = box[2] - box[0]
- h = box[3] - box[1]
- x = x * dw
- w = w * dw
- y = y * dh
- h = h * dh
- return (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中(还记得下面这张图吗)
转化完后大概会是这样子,如果一张图有多个标签的话,这个数据就会变多
先复制一份,可以粘贴到my_dates中,改名为mydata(当然你想改啥名字,想放哪里都行,但是要记住路径记住名字,2.也一样)
注意这个mydata的路径,不要放错了;此外,mydata1_yaml应该是训练后自动生成的,不用管。
mydata.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字,王者荣耀的例子中有10个标签,标签名字都如下。同时要把path注释掉
还需要修改一个路径,注意这里是存放训练集图片的相对路径,斜杠别搞反了,相对路径就是对于yolov5-master的路径,我的如下(这就是我为什么建议创建文件夹的原因)
yolov5有4种配置,不同配置的特性如下,我这里选择yolov5s,速度最快,但是效果最拉胯
先复制一份yolov5s
可以粘贴到my_dates中,改名为mydata_1,需要修改的参数是nc,nc就是标签的数量,王者荣耀的例子是10个,故改成10
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个小时
在runs\train\exp\weights中能看到有一个best和last,意思是最好的和最近的
如下图所示是需要修改的参数,也是best和测试图片的相对路径,不要搞错了。结果在runs\detect\exp中看
我的测试是个视频(视频也可图片也可),出来的结果就是文章开头放的视频
效果不是很好,但是还是能分辨个大概,原因有两个
一是因为用了最拉的yolov5s,二是训练的文件还不够多
我猜测大多数问题为:
1.wandb报错。安装方法的链接已经在文中了。如果要使用wandb的话需要注册那个网站,然后他会给个码给你,复制后你在控制台里粘贴,然后才能用(大概是这样)。
2.文件路径没写对。有点惭愧,文件路径我搞的比较乱(自我吐槽),大家要注意。正因如此我做了个框架图。
3.显卡爆了,那就调低train中我列出来的那几行default
4.有朋友说他在训练时,box obj cls labels的值为0或nan。正常情况下是正常的数(我发了训练的时候的图片),我猜测可能是训练集标签没做好 或者 路径没写对 或者 default没调好
5.建议路径为全英文,不要带中文,否则可能会出现意料之外的错误
链接:https://pan.baidu.com/s/1YmZOPzcVaA0TuupMDW93SQ
提取码:vhw1
你们的每个赞都能让我开心好几天✿✿ヽ(°▽°)ノ✿
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。