史上最详细yolov5环境配置搭建+配置所需文件

您所在的位置:网站首页 如何进行环境配置设计 史上最详细yolov5环境配置搭建+配置所需文件

史上最详细yolov5环境配置搭建+配置所需文件

2024-07-11 11:29| 来源: 网络整理| 查看: 265

yolov5的配置过程总体来说还算简单,但是网上大部分博客都没有仔细介绍具体步骤,本文将从最细节的层面记录windows10系统下的yolov5环境配置的全过程,以及yolov5使用的一些细节,以及如何制作和训练自己的数据集。

注:yolov5官网代码更新速度较快,相关依赖环境如pytorch,apex(后续已集成到高版本torch中,无需额外安装)等也会采用更新的版本,具体版本信息请结合官方代码requirements.txt文件查看。博主上传了2020年8月配置成功的老版本代码工程文件,如需要老版本代码可以自行下载或从官网下载。若配置遇到困难可以参考评论区的一些回答,若还未解决,欢迎评论区留言或私信,博主将尽力解决。

本文较长,建议收藏之后再看,博主将持续更新yolov5的相关博客

文章目录 yolov5介绍资料一、基础部分:二、代码部分:三、优秀的实际应用: 写在开始配置之前-新手必看CUDAPytorch 环境配置所需资源第一步-下载源码第二步-安装anaconda与pycharm第三步-安装cuda10.2和cudnn-10.2-windows10-x64-v7.6.5.32第四步-安装pytorch1.5.1以及其他库第五步-下载权重文件第六步-实际测试第七步(可选操作)-安装apex第八步-训练自制数据集1.coco128数据集2.coco2017数据集3.真正的自制数据集4.虚假的自制数据集1.生成随机数据集的代码如下2.创建yaml文件3.更改train.py的设置 疑难解决

yolov5介绍

先来介绍一下yolov5 在这里插入图片描述 yolov5的特点之一就是权重文件非常之小,可以搭载在配置更低的移动设备上 在这里插入图片描述 而且yolov5的速度较yolov4更快,准确度更高 在这里插入图片描述 此博客还包括一些在学习过程中从其他大佬那整理的资料,包括:

资料 一、基础部分:

1.深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解 2.深入浅出Yolo系列之Yolov5核心基础知识完整讲解 3.从V1到V4,让你读懂YOLO原理

二、代码部分:

4.YOLOv5代码详解(yolov5l.yaml部分) 5.YOLOv5代码详解(common.py部分) 6.YOLOv5代码详解(test.py部分) 7.YOLOv5代码详解(train.py部分)

三、优秀的实际应用:

8.实时吸烟目标检测

写在开始配置之前-新手必看 CUDA

CUDA(Compute Unified Device Architecture,统一计算设备架构),是显卡厂商NVIDIA在2007年推出的并行计算平台和编程模型。它利用图形处理器(GPU)能力,实现计算性能的显著提高。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,从而能通过程序控制底层的硬件进行计算。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员可以使用C/C++/C++11语言来为CUDA架构编写程序。CUDA提供host-device的编程模式以及非常多的接口函数和科学计算库,通过同时执行大量的线程而达到并行的目的。

Pytorch

Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。与Tensorflow的静态计算图不同,pytorch的计算图是动态的,可以根据计算需要实时改变计算图。但由于Torch语言采用 Lua,导致在国内一直很小众,并逐渐被支持 Python 的 Tensorflow 抢走用户。作为经典机器学习库 Torch 的端口,PyTorch 为 Python 语言使用者提供了舒适的写代码选择。

环境配置所需资源

使用到的工具有 1.anaconda,pycharm 2.cuda10.2+cudnn-10.2-windows10-x64-v7.6.5.32+pytorch1.5.1-gpu+。。。。。。。。 ps(对于本文使用的旧版代码pytorch只要大于等于1.5.1即可,新版代码需与官网要求相同–1.6.0+,本文将在之后说明安装步骤)

所需资源: 本博客免费提供所有win10的cuda和cudnn,百度云,提取码:1111 以及anaconda和pycharm的安装包百度云,提取码:1111 以及权重文件百度云,提取码:1111 以及GitHub官方yolov5源码百度云,提取码:1111 以及官方提供的coco测试数据集百度云,提取码:1111

配置正式开始

第一步-下载源码

本文采用的是yolov5官网提供的pytorch框架下的源码(官方代码为最新修改,建议使用本文提供的的代码版本–7月31日更新,可从上文百度云链接中下载),点击红色区域即可下载源码压缩包 在这里插入图片描述将其解压到一个不带中文字符的文件夹下(如果带有中文字符,会使OpenCV的cv2.imread()函数读取不了待检测图片或视频)

第二步-安装anaconda与pycharm

两个开发工具从官网均可下载。 anaconda是一个管理用于python开发的包含不同库的虚拟环境的平台,可以高效的管理和创建适用于多个不同项目的project interpreter。安装完成自带一个根环境,路径在conda的安装目录下。进入后可以在环境管理页面创建新环境,新环境的路径在安装目录下的envs中存储,在pycharm中设置interpreter时需要找到所需环境的存储位置,interpreter设置选择conda enviroment,填写python.exe的路径即可完成编译环境与项目的绑定。之后进行虚拟环境设置,安装新的库的时候只需打开cmd,输入activate 环境名,即可进入环境目录,之后pip安装所需库即可。

首先从官网上下载anaconda-py3.7-64版本,勾选这两项方便环境配置,如果安装时没有勾选这两项建议重新安装,并!重!启!,涉及到环境变量的改动都建议在修改后重启。 在这里插入图片描述 等待anaconda安装完进入environment界面,点击create,将新环境命名为yolov5test,python版本选择python3.7,点击ok,等待自动生成初始环境,之后即可关闭anaconda。 ps(如果出现anaconda卡load application的情况,可以参考Anaconda创建新的python环境使用cmd创建新环境与操作包的安装) 在这里插入图片描述

完成anaconda安装后,从官网下载pycharm,解压安装完成后创建工程,路径选择到之前解压源码的无中文字符路径,注意!!!!,创建完成后此处有红框标记的文件即为路径正确(也可先创建再解压到工程文件中) 在这里插入图片描述 之后进入pycharm中选择工程所需的interpreter 在这里插入图片描述

第三步-安装cuda10.2和cudnn-10.2-windows10-x64-v7.6.5.32

在这里插入图片描述

因为本次使用pytorch1.5.1(如果使用最新版的官网代码,请按照requirement.txt中的环境要求安装,将pytorch升级为1.6即可),对应的cuda为10.1(其实cuda≥10.1即可,只需将cudnn与cuda版本对应上就行),ps(本人之前使用tf=1.14+cuda10.0进行深度学习开发,但是pytorch1.5.1需要安装新的cuda,故安装cuda10.2。下面给出这种情况的解决方法) 第一步:下载双击运行,选自定义 在这里插入图片描述 第二步:不要选择visual studio integration,否则无法安装 在这里插入图片描述 等待安装完成–约2分钟,期间若有GeForce experience失败则重复上述步骤即可

第三步:更改环境变量 进入环境变量编辑页面,此时已经将cuda10.2安装到默认的NVIDIA cumputing toolkit路径下,需要将系统的环境变量修改为cuda10.2,把10.0的变量去掉。同一台电脑可以拥有多个不同版本的cuda,如果需要用低版本的cuda,只需要将系统环境变量修改为低版本,将高版本的删除即可。 在这里插入图片描述 新建环境变量 在这里插入图片描述

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\CUPTI\lib64 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\bin\win64 C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.2\common\lib\x64

此时应该有如下两个变量,如果以前安装的有残存的cuda10.0的路径,删除即可 在这里插入图片描述 第四步:安装cudnn 将cudnn解压后,将其中的所有内容复制到以下路径中,ps(默认路径,可以直接用)

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2

第五步:验证 打开cmd,输入nvcc -V验证cuda是否安装成功,出现如下界面即为成功在这里插入图片描述

第四步-安装pytorch1.5.1以及其他库

以管理员身份进入cmd,输入activate yolov5test进入环境目录下,输入

pip install torch===1.5.1 torchvision===0.6.1 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.douban.com/simple

使用豆瓣源安装,很多是使用清华源,但是清华源安装时容易超时而导致安装失败,有条件的可以翻墙直接安装,效果非常好。 更多的安装方法(适用于Windows和Linux),版本包括:1.7.1,1.6.0,1.5.1,1.5.0,1.4.0,1.2.0,1.1.0,1.0.1,1.0.0; 以下安装方法建议番羽墙

1.7.1 # CUDA 11.0 conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch # CUDA 10.2 conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch # CUDA 10.1 conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch 1.6.0 # CUDA 9.2 conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=9.2 -c pytorch # CUDA 10.1 conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch # CUDA 10.2 conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.2 -c pytorch # CPU Only conda install pytorch==1.6.0 torchvision==0.7.0 cpuonly -c pytorch 1.5.1 # CUDA 9.2 conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=9.2 -c pytorch # CUDA 10.1 conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.1 -c pytorch # CUDA 10.2 conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.2 -c pytorch # CPU Only conda install pytorch==1.5.1 torchvision==0.6.1 cpuonly -c pytorch 1.5.0 # CUDA 9.2 conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=9.2 -c pytorch # CUDA 10.1 conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.1 -c pytorch # CUDA 10.2 conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.2 -c pytorch # CPU Only conda install pytorch==1.5.0 torchvision==0.6.0 cpuonly -c pytorch 1.4.0 # CUDA 9.2 conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=9.2 -c pytorch # CUDA 10.1 conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch # CPU Only conda install pytorch==1.4.0 torchvision==0.5.0 cpuonly -c pytorch 1.2.0 # CUDA 9.2 conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=9.2 -c pytorch # CUDA 10.0 conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch # CPU Only conda install pytorch==1.2.0 torchvision==0.4.0 cpuonly -c pytorch 1.1.0 # CUDA 9.0 conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch # CUDA 10.0 conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0 -c pytorch # CPU Only conda install pytorch-cpu==1.1.0 torchvision-cpu==0.3.0 cpuonly -c pytorch 1.0.1 # CUDA 9.0 conda install pytorch==1.0.1 torchvision==0.2.2 cudatoolkit=9.0 -c pytorch # CUDA 10.0 conda install pytorch==1.0.1 torchvision==0.2.2 cudatoolkit=10.0 -c pytorch # CPU Only conda install pytorch-cpu==1.0.1 torchvision-cpu==0.2.2 cpuonly -c pytorch 1.0.0 # CUDA 10.0 conda install pytorch==1.0.0 torchvision==0.2.1 cuda100 -c pytorch # CUDA 9.0 conda install pytorch==1.0.0 torchvision==0.2.1 cuda90 -c pytorch # CUDA 8.0 conda install pytorch==1.0.0 torchvision==0.2.1 cuda80 -c pytorch # CPU Only conda install pytorch-cpu==1.0.0 torchvision-cpu==0.2.1 cpuonly -c pytorch

安装完成后再pycharm中创建文件,输入验证pytorch安装是否成功

import torch print(torch.cuda.is_available()) print(torch.__version__)

出现以下结果即为安装成功 在这里插入图片描述 其他库的安装建议根据requirement.txt文件逐个安装。。。清华源太容易崩了 下面给出requirement.txt的内容

# pip install -U -r requirements.txt Cython numpy>=1.18.5 opencv-python torch>=1.5.1 matplotlib pillow tensorboard PyYAML>=5.3 torchvision>=0.6 scipy tqdm # pycocotools>=2.0 # Nvidia Apex (optional) for mixed precision training -------------------------- # git clone https://github.com/NVIDIA/apex && cd apex && pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . --user && cd .. && rm -rf apex # Conda commands (in place of pip) --------------------------------------------- # conda update -yn base -c defaults conda # conda install -yc anaconda numpy opencv matplotlib tqdm pillow ipython # conda install -yc conda-forge scikit-image pycocotools tensorboard # conda install -yc spyder-ide spyder-line-profiler # conda install -yc pytorch pytorch torchvision # conda install -yc conda-forge protobuf numpy && pip install onnx==1.6.0 # https://github.com/onnx/onnx#linux-and-macos

可以根据下面的指令,依次输入以下命令安装相应的库:

pip install Cython pip install numpy pip install opencv-python pip install matplotlib pip install pillow pip install tensorboard pip install PyYAML pip install torchvision pip install scipy pip install tqdm 第五步-下载权重文件

将下载的权重文件放入项目文件夹中!!!!注意是项目文件夹,而不是weights文件夹!!!!!! 权重文件需要与代码版本统一,请在官网中下载与代码版本对应的权重文件。之后需要查看代码中关于模型权重文件的路径选项,看是在weights文件夹下还是在项目文件夹下(总之就这两个地方,一个不行就换一个)。 在这里插入图片描述

第六步-实际测试

打开项目文件夹,找到inference,这里images存储测试数据,output存储测试结果,同样,测试数据名称不能带有中文字符 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 基本测试需要运行detect.py,pycharm中运行结果如下 在这里插入图片描述 说明:测试数据可以是图片或视频,也可以是本机摄像头。 使用方法为在detect文件最后找到

# default='yolov5s.pt' to default='runs\\exp7\\weights\\best.pt' parser.add_argument('--weights', nargs='+', type=str, default='runs\\exp66\\weights\\best.pt', help='model.pt path(s)')# 权重测试使用的权重文件路径,默认权重文件放在外面 parser.add_argument('--source', type=str, default='inference/images', help='source') # file/folder, 0 for webcam parser.add_argument('--output', type=str, default='inference/output', help='output folder') # output folder parser.add_argument('--img-size', type=int, default=320, help='inference size (pixels)') parser.add_argument('--conf-thres', type=float, default=0.3, help='object confidence threshold')# 选中目标的阈值,越高,选中的目标越少 parser.add_argument('--iou-thres', type=float, default=0.5, help='IOU threshold for NMS') parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') parser.add_argument('--view-img', action='store_true', help='display results') parser.add_argument('--save-txt', default='False', action='store_true', help='save results to *.txt') parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3') parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') parser.add_argument('--augment', action='store_true', help='augmented inference') parser.add_argument('--update', action='store_true', help='update all models')

默认值改成0即可 本人使用i7-8750+1050Ti跑手机录像30~50FPS,效果还可以

ps:如果出现页面文件太小,无法完成操作,这样的错误是因为虚拟内存不足(虚拟内存定义参考操作系统的虚拟内存),参考修改页面文件即可解决

第七步(可选操作)-安装apex

官网地址

介绍: 这个存储库包含nvidia维护的实用程序,以简化Pytorch中的混合精度和分布式培训。这里的一些代码将包括在上游Pytorch最终。Apex的目的是尽可能快地为用户提供最新的实用程序。

Windows support is experimental, and Linux is recommended. pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . may work if you were able to build Pytorch from source on your system. pip install -v --no-cache-dir . (without CUDA/C++ extensions) is more likely to work. If you installed Pytorch in a Conda environment, make sure to install Apex in that same environment.

1.从官网上下载源码,降里面的内容解压到yolov5工程文件夹下 2.打开pycharm的terminal界面,输入

pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext"

但是感觉貌似不太对。。输入会报

ERROR: You must give at least one requirement to install (see "pip help install")

可以尝试在terminal中输入

python setup.py install --cpp_ext --cuda_ext

等待1-2分钟即可完成安装

第八步-训练自制数据集 1.coco128数据集

训练数据集需要下载coco数据集,解压到与工程文件并列的位置,运行train.py 注:如果使用自制训练集训练自己的网络模型且GPU不太给力,可以调小网络参数和训练规模。(因为coco128数据集只有128张图片,且标记的种类较多,所以训练出来的网络最终效果不太理想,只是用来测试是否可以训练)

2.coco2017数据集

因为数据集较大,且标注为json格式。。。。(听说要转xml再转txt才能训练yolov5?),顾再研究研究,有大佬知道的可以评论去补充一波 感谢Thanks♪(・ω・)ノ coco2017标注为json格式 在这里插入图片描述 目标检测只需要用到instances_train2017.json和instances_val2017.json两个标注文件,一个是训练集的标注,一个是验证集的标注

在此给出已经完成转换的两种格式的压缩包xml,txt 在这里插入图片描述 在这里插入图片描述

并给出将json->xml->txt格式标注的源码

json2xml.py

# 使用时仅需修改21、22、24行路径文件 import os import time import json import pandas as pd from tqdm import tqdm from pycocotools.coco import COCO def trans_id(category_id): names = [] namesid = [] for i in range(0, len(cats)): names.append(cats[i]['name']) namesid.append(cats[i]['id']) index = namesid.index(category_id) return index root = 'coco2017' # 你下载的 COCO 数据集所在目录 dataType = 'train2017' anno = '{}/annotations/instances_{}.json'.format(root, dataType) xml_dir = '{}/xml/{}_xml'.format(root, dataType) coco = COCO(anno) # 读文件 cats = coco.loadCats(coco.getCatIds()) # 这里loadCats就是coco提供的接口,获取类别 # Create anno dir dttm = time.strftime("%Y%m%d%H%M%S", time.localtime()) if os.path.exists(xml_dir): os.rename(xml_dir, xml_dir + dttm) os.mkdir(xml_dir) with open(anno, 'r') as load_f: f = json.load(load_f) imgs = f['images'] df_cate = pd.DataFrame(f['categories']) df_cate_sort = df_cate.sort_values(["id"], ascending=True) categories = list(df_cate_sort['name']) print('categories = ', categories) df_anno = pd.DataFrame(f['annotations']) for i in tqdm(range(len(imgs))): xml_content = [] file_name = imgs[i]['file_name'] height = imgs[i]['height'] img_id = imgs[i]['id'] width = imgs[i]['width'] xml_content.append("") xml_content.append(" VOC2007") xml_content.append(" " + file_name + "") xml_content.append(" ") xml_content.append(" " + str(width) + "") xml_content.append(" " + str(height) + "") xml_content.append(" ") xml_content.append(" 0") # 通过img_id找到annotations annos = df_anno[df_anno["image_id"].isin([img_id])] for index, row in annos.iterrows(): bbox = row["bbox"] category_id = row["category_id"] cate_name = categories[trans_id(category_id)] # add new object xml_content.append(" ") xml_content.append(" " + cate_name + "") xml_content.append(" Unspecified") xml_content.append(" 0") xml_content.append(" 0") xml_content.append(" ") xml_content.append(" " + str(int(bbox[0])) + "") xml_content.append(" " + str(int(bbox[1])) + "") xml_content.append(" " + str(int(bbox[0] + bbox[2])) + "") xml_content.append(" " + str(int(bbox[1] + bbox[3])) + "") xml_content.append(" ") xml_content.append(" ") xml_content.append("") x = xml_content xml_content = [x[i] for i in range(0, len(x)) if x[i] != "\n"] ### list存入文件 xml_path = os.path.join(xml_dir, file_name.replace('.jpg', '.xml')) with open(xml_path, 'w+', encoding="utf8") as f: f.write('\n'.join(xml_content)) xml_content[:] = []

xml2txt.py

import os.path import xml.etree.ElementTree as ET class_names = ['lip'] xmlpath = 'F:\\share\\标注\\xml\\' # xml文件的位置 txtpath = 'F:\\share\\标注\\txt\\' # 导出txt的位置 files=[] for root, dirs, files in os.walk(xmlpath): None number = len(files) i = 0 while i default='yolov5s.pt' parser.add_argument('--weights', type=str, default='', help='initial weights path') # 重命名results.txt to results_name.txt parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied') # cuda device, i.e. 0 or 0,1,2,3 or cpu parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') # 多尺度训练,img-size +/- 50% parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%') # 单类别的训练集 parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')

打开train.py,找到后面位置的这个语句,将default改为自己的circle.yaml的路径

parser.add_argument('--data', type=str, default='data/circle.yaml', help='data.yaml path')

本人使用1050Ti+i7-8750的笔记本电脑,采用320,320图片输入,训练100轮次,训练时间大约1.5小时

完成训练后会在yolov5文件夹的run下保存有训练模型以及训练参数的图表

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 使用detect.py检测训练结果需要更改模型路径,改为run/exp…/weights/best.py(完成训练后会提示生成的权重文件在哪) 之后与前文步骤类似,将从数据集中挑几张图片输入,运行即可得到输出 在这里插入图片描述 在这里插入图片描述

疑难解决

1.yolov5官网问题讨论区 2.本博客评论区 3.评论or私信博主

在这里插入图片描述

如果觉得这篇博客有用的话欢迎 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3