【YOLOV5环境安装+训练自己的数据集全流程】


前言

yolo图像识别最近非常火爆,本人之前学习yolo的过程中,发现想搭个环境,还是挺麻烦的,配置各种版本的库各个版本的torch也是焦头烂额,各种教程的方法也尽不相同,我就把自己安装环境以及简单的应用的整个流程记录一下。仅供大家参考,文末会把参考到的文章贴出来。
本文仅供大家参考。转载请附原文链接。
有不对的地方还请各位多多包涵。

各个需要下载的东西都给出对应的官方下载链接了,点击超链接即可跳转进行下载。
在下载各个软件,依赖库时如果发现速度特别慢,可以考虑使用镜像源或者magic
各个文件夹以及文件的命名最好最好不要使用中文,文件路径也不要含有中文。


一、安装清单

需要安装的一些软件和库,尽量都安上,如果有经验的话可以自行选择。

1.anaconda的安装

首先,从Anaconda官网下载并安装Anaconda。
Anaconda官网:Anaconda官网
进入后选择合适的版本下载:

在这里插入图片描述

下载好后直接开始安装即可。安装时建议勾选“Add Anaconda to my PATH environment variable”和“Register Anaconda as my default Python 3.x”这两项,以便于环境配置。
从开始菜单找到Anaconda Prompt。

在这里插入图片描述

打开Prompt后,输入代码创建环境,"yolo5"就是环境的名字,可以自己更改。

conda create -n yolo5 python=3.9

即指定创建一个环境名叫yolo5,使用python版本为3.9的conda环境。

2.pycharm的安装

进入这个链接去官网进行下载即可Pycharm官网

在这里插入图片描述

进入后下载社区版的即可,下载完直接安装就行。安装好后不用进行配置,后续会有详细的配置教程。

3.下载YOLOV5项目

本文使用yoloV5为例,所以python的版本、opencv的版本都是适合yoloV5的,如果你需要用其他版本的yolo,可以酌情调整,不过大致的流程不变。
直接去github上下载yolov5项目压缩包,然后解压即可。
Yolov5项目下载地址

在这里插入图片描述

4.安装yolov5的依赖库(分为CPU版和GPU版)

首先在pycharm中以项目形式打开yolov5文件夹。

在这里插入图片描述

在pycharm侧边找到requirements.txt这个文件,这个就是yolov5需要的依赖库和对应的版本。

在这里插入图片描述

然后从pycharm里面给yolov5项目配置一个环境,就是在第一章中用conda创建好的那个环境。

在这里插入图片描述

选择添加现有环境,找到刚刚使用conda创建的环境并使用。我刚刚创建的就叫yolo5所以直接找到yolo5即可。

然后如果是想使用GPU版本的,这时候需要在requirements文件中把图中所示的两行给注释掉,因为我是要使用GPU版本的torch,如果是使用CPU即可跳过这一步。

在这里插入图片描述

然后从pycharm打开终端,检查目录前面括号里的环境是否正确。

在这里插入图片描述

然后输入以下指令

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

这里我们使用了清华的镜像源,下载更稳定更快一些。等到显示安装成功即可。

5.下载图片标注软件labelimg

从我的链接下载labelimg文件。
Labelimg的Github下载地址

在这里插入图片描述

到此为止,使用CPU的话,所有需要安装和下载的东西都准备好了。
但是我本人是使用GPU运行YOLOV5的,所以还需要继续安装GPU所需的东西。

6.安装CUDA和cudnn

打开终端输入以下命令

nvidia-smi

在这里插入图片描述

那个CUDA Version,能够看到自己电脑支持安装的CUDA版本。然后去到英伟达官网下载安装CUDA
英伟达官网下载CUDA

在这里插入图片描述

找到小于等于自己电脑最高支持的CUDA版本,点进去后根据自己的电脑选择对应的选项即可。然后下载。

在这里插入图片描述

下载完就开始安装。要记住你安装的目录文件夹,一会需要用到。

在这里插入图片描述

然后去下载cudnn,下载这个需要有一个账号登录才行,没有的话根据提示注册一个即可。
Cudnn下载地址

在这里插入图片描述

选择对应的版本下载即可。一定要与CUDA的版本对应,下载好后解压,然后把这些文件复制到cuda的安装目录。

在这里插入图片描述

cuDNN其实就是 CUDA 的一个补丁而已,专为深度学习运算进行优化的。

7.下载并安装GPU版本的torch

Torch官网
进去后,根据自己的需求选择好版本,然后复制命令,打开prompt。

在这里插入图片描述

首先在conda里面激活之前创建的环境
打开Anaconda Prompt输入以下命令

conda activate yolo5

conda activate “your-env-name” ,把your-env-name换成你之间创建好的conda环境即可。

在这里插入图片描述

前面的base变成了你的环境名就激活成功了。
然后把刚刚的torch下载命令进行粘贴,敲下回车就开始下载了。我这里之前已经安装好了就不演示过程了。
等他加载完就是已经下载完了并且安装好了。

8.验证环境和torch是否安装成功

打开pycharm,选择GPU环境,输入以下代码

import torch
print(torch.cuda.is_available())  # 输出True表示可以使用GPU
print(torch.cuda.device_count())   # 返回GPU的数量
print(torch.cuda.get_device_name(0))  # 返回GPU的名字

在这里插入图片描述

如图所示,会输出cuda是否可用,GPU的数量,以及GPU的型号名字,如果能够正常输出,就证明你已经安装好了GPU的环境。到此为止,GPU的环境搭建完毕。

二、YOLOV5的简单应用

1.数据收集以及数据标注

这里我想要识别的是显示器,所以我直接用手机照了一些显示器的图片,然后改好名字,并且要注意把图片文件格式改成.JPG形式。
图片名字以及各级目录尽量不要出现中文,此外我还录制了一个显示器的视频,一会用来检测训练的模型的结果。

在yolov5-master文件夹下创建一个VOCData文件夹。后面的所有文件夹都创建在VOCData下。
创建一个images文件夹用于存放需要标注的图片。再创建一个名为‘Annotations’的文件夹,一会用来存放标注文件。

在这里插入图片描述

在pycharm中直接打开之前下载的labelimg文件夹,并打开labelimg.py文件,然后点击运行即可。

在这里插入图片描述

然后打开存放图片的images目录,并把存放目录改为‘Annotations’

在这里插入图片描述

介绍一些简单的使用方法:
按‘w’画框,进行物体标注,把你想要识别的物体用框画出来,并输入对应的标签,点击保存即可,也可以直接开启自动保存功能。
然后‘D’进行下一张图片的标注。所有图片标注完成后就可以关闭labelimg。图片标注的工作就完成了。

在这里插入图片描述

2.数据集分类以及配置文件修改

使用以下代码进行数据集的划分,会自动生成一个文件夹,存放分类好的数据集名字
default='Annotations’就是刚刚创建好的那个文件夹,检查是否正确创建。
其他地方可以根据需求进行更改,均有注释。

# coding:utf-8

import os
import random
import argparse

parser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 1.0  # 训练集和验证集所占比例。 这里没有划分测试集
train_percent = 0.9     # 训练集所占比例,可自己进行调整
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)

file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')

for i in list_index:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        file_trainval.write(name)
        if i in train:
            file_train.write(name)
        else:
            file_val.write(name)
    else:
        file_test.write(name)

file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

然后再把xml文件(也就是使用labelimg生成的标注文件,放在Annotations文件夹下)转换成yolo需要的文本格式文件,直接用py文件转换即可,把in_file和out_file中的路径换成自己的。
只需要换部分路径,代码是我自己的文件路径,仅供参考。

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwd

sets = ['train', 'val', 'test']
classes = ["display"]  # 改成自己的类别
abs_path = os.getcwd()
print(abs_path)


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return x, y, w, h


def convert_annotation(image_id):
    in_file = open('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/Annotations/%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        # difficult = obj.find('Difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        b1, b2, b3, b4 = b
        # 标注越界修正
        if b2 > w:
            b2 = w
        if b4 > h:
            b4 = h
        b = (b1, b2, b3, b4)
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


wd = getcwd()
for image_set in sets:
    if not os.path.exists('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/labels/'):
        os.makedirs('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/labels/')
    image_ids = open('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()

    if not os.path.exists('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/dataSet_path/'):
        os.makedirs('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/dataSet_path/')

    list_file = open('dataSet_path/%s.txt' % (image_set), 'w')
    # 这行路径不需更改,这是相对路径
    for image_id in image_ids:
        list_file.write('E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

如果按照步骤一步步做下来,那么此时你的文件夹下应该会有这几个文件夹,请自行检查是否缺失。
文件夹和命名不太懂建议跟着教程做一样的。

在这里插入图片描述

生成好了如上的文件夹后,数据集的划分和转换就完成了。

现在就需要更改一下配置文件。
在yolov5的data文件夹下创建一个myvoc.yaml文件,并打开。
(建议用pycharm打开,方便看格式是否正确。)

在这里插入图片描述

里面的内容为数据集的路径,如下图所示。

在这里插入图片描述

nc为需要识别的物体种类
names里面为该种类的标签名
train和val即为训练数据集和验证数据集的路径。

然后需要选择一个模型配置文件,有n、s、m、l、x版本,逐渐增大
(随着架构的增大,训练时间也是逐渐增大)。
该配置文件存放在yolov5下的models文件夹

在这里插入图片描述

我选用yolov5s这个配置文件,用记事本打开并进行更改,把这个nc改为你需要识别的种类数即可,我这里是一种。所以把nc的值改为1。

所有准备工作已经完成,然后就可以开始进行训练模型了。

3.使用YOLOV5进行模型训练

打开anaconda prompt,进入之前创建好的环境。
怎么进入环境前面有教,通过cd /d 路径名,进入yolov5项目的路径。还是不懂的可以看看下图,照着做,把路径改成你自己的就行。

在这里插入图片描述

输入训练命令,我的训练命令及参数如下:输入后,回车就开始训练。

python train.py --weights weights/yolov5s.pt  --cfg models/yolov5s.yaml  --data data/myvoc.yaml --epoch 300 --batch-size 2 --img 640  --device 0

参数的含义如下:
–weights weights/yolov5s.pt :这个也许你需要更改路径。我是将yolov5的pt文件都放在weights目录下,你可能没有,需要更改路径。
–epoch 300 :训练300次
–batch-size 2:训练8张图片后进行权重更新
–device 0:使用GPU训练。

输入训练命令后,如下图所示,即成功开始训练。静静等待训练完成即可。

在这里插入图片描述

如下图,训练完成了,训练好的权重文件存放到runs文件夹下了。一会检测的时候需要用到的。

在这里插入图片描述

权重文件就在weights中。
分为效果最好的权重文件和最后一次训练的权重文件,我们一会直接使用效果最好的即可。

在这里插入图片描述
在这里插入图片描述

到此为止,YOLOV5的训练模型就完成了。后面,我将使用训练好的权重文件对显示器进行检测。

4.使用训练好的权重文件进行检测

同样在anaconda prompt中进行,进入环境,进入yolov5项目文件夹。
然后输入指定的检测命令,我输入的检测命令如下:

python detect.py --weights runs/train/exp2/weights/best.pt --source E:/pycode/pythontool/yolov5-master/yolov5-master/VOCData/display.mp4

把source后面的路径改成需要检测的文件路径即可。我这里是检测一个我拍的各个显示器的视频。
输入指令后敲回车就开始检测

等一会就能够检测好,就如图所示,把检测后的结果文件保存到runs的detect目录下了。

在这里插入图片描述

最终的检测结果存放到runs\detect\exp下,简单的放一张检测视频的截图。
可以看到效果不错,基本是识别出来了

在这里插入图片描述

以上就是yolov5的GPU版本的环境搭建,以及基于YOLOV5识别显示器的全部内容。

5.补充一个在训练过程中可能会碰到的问题

在输入训练命令后,可能会出现如下图所示的报错,是页面文件太小的问题,去改一下虚拟内存即可。

在这里插入图片描述

进入电脑设置——找到系统——点开系统信息——高级系统设置
自定义虚拟内存的大小,改大一些就行。

在这里插入图片描述

在这里插入图片描述

总结

以上就是今天要讲的内容,本文详细介绍了YOLOV5的的CPU/GPU环境安装,并做了一个简单的标注+训练+识别的测试。
我主要基于所学的教程做了一个整合性的教程。从环境配置到软件安装再到简单的训练测试。

参考致谢

之前我自己在配置环境的时候就学习这几位博主的文章,写得非常好,大家有兴趣可以去看看。

写得非常好的一篇训练数据集的教程——>Yolov5训练自己的数据集
环境搭建的一篇教程——>python:yolo5使用

### 使用清华大学镜像源配置YOLOv8环境 #### 准备工作 为了确保顺利安装所需的依赖项,在开始之前需确认已创建并激活了一个Python虚拟环境。这有助于隔离不同项目的依赖关系,防止冲突。 #### 安装PyTorch 通过访问清华大学开源软件镜像站获取适用于当前系统的PyTorch版本[^2]。具体操作如下: 1. 访问[Tsinghua Open Source Mirror](https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/)页面; 2. 根据计算机的具体配置(如操作系统位数、CUDA版本),挑选合适的`.whl`文件进行下载; 3. 利用命令行工具进入目标路径执行安装指令: ```bash pip install 路径\至\下载的.whl文件名 ``` 此过程能够有效缩短下载时间,并提高成功率。 #### 配置YOLOv8所需库 完成上述步骤之后,则可以继续设置YOLOv8运行所必需的各项组件。通常情况下,推荐采用pip来管理这些第三方模块。考虑到网络因素的影响,建议同样借助于国内较稳定的镜像站点加速下载速度。例如,可以通过指定清华源的方式简化整个流程: ```bash pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple ``` 接着按照官方文档指示依次安装必要的扩展包,比如`ultralytics`等核心库以及可能涉及的数据处理类目,图像增强插件等等。 #### 测试验证 当所有准备工作完成后,可通过简单的测试案例检验环境是否正常运作。尝试加载预训练模型并对单张图片实施推理分析是一个不错的选择: ```python from ultralytics import YOLO model = YOLO('yolov8n.pt') # 加载轻量级预训练模型 results = model.predict(source='path/to/image', show=True, save=True) ``` 这段代码会读取指定位置上的图片作为输入样本,调用YOLOv8 nano版检测其中的对象并将结果显示出来的同时保存到本地磁盘上[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值