栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Yolov5】1.认真总结6000字Yolov5保姆级教程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Yolov5】1.认真总结6000字Yolov5保姆级教程

目录

一、前言

二、学习内容

二、版本与配置声明

三、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:Anacondapython.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:Users86189Desktopyolov5-masteryolov5-masterdataimagesbus.jpg: 640x480 4 persons, 1 bus, 1 fire hydrant, Done. (0.055s)
image 2/2 C:Users86189Desktopyolov5-masteryolov5-masterdataimageszidane.jpg: 384x640 2 persons, 2 ties, Done. (0.024s)
Results saved to runsdetectexp
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 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中(还记得下面这张图吗)

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

五、修改配置文件

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效果如上图所示)

在runstrainexpweights中能看到有一个best和last,意思是最好的和最近的

七、识别detect

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

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

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

一是因为用了最拉的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中会不断提高的

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号