首页 > 其他分享 >YOLOv5快速入门和使用

YOLOv5快速入门和使用

时间:2024-06-22 18:33:04浏览次数:6  
标签:YOLOv5 入门 img -- list 虚拟环境 https path 快速

YOLOv5快速入门使用

官方文档地址:https://docs.ultralytics.com/zh/yolov5/

如果文章看不懂,过一遍自己整理过程,然后去参考视频中看对应的视频:环境准备-->代码拉取-->打标-->训练模型-->运行

 

一、配置虚拟环境(不止是YOLO如果使用其余的需要隔离环境也可以这样操作)

为了防止影响我们电脑上已有的Python环境,我们可以使用Anaconda配置虚拟环境,如果没有请先找教学安装一下。

 

(一)、创建虚拟环境

使用 Anaconda 自带的cmd命令行,不知道在哪里?直接使用电脑搜索框搜一下:Anaconda Prompt 这个就是了

提示:(一)到(七)均是在Anaconda的cmd中运行哦

conda create -n yolov5 python=3.8  # 创建一个名为 yolov5 的虚拟环境,使用的是python3.8

 

(二)、激活虚拟环境
conda activate yolov5
 
(三)、查看已经安装好的包
pip list

 

(四)、配置国内源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

 

(五)、运行环境安装

1、先切换到指定路径下:

# 切换盘符,你的yolov5源码所在的盘符
F:
​
# 到达指定路径
cd 这里是你从github上拉取的yolov5的源码文件根目录

 

2、根据自己的NVIDIA的控制面板选择合适(比自己的NVIDIA CUDA低的就行)的PyTorch(https://pytorch.org/get-started/previous-versions/)版本:

image-20240622162629183

 

比如选择一下这个版本安装(可以将pip3 换为 pip):

image-20240622163247920

 

 

3、安装其他环境(安装前先参考一下我的配置文件):

# 安装其他的依赖,如果你的目录下没有这个文件,说明你还没有到项目根目录下,或者你拉取的代码有误
pip install -r requirements.txt
​
################  参考文件,修改了其中的numpy版本为等于  ################
# YOLOv5 requirements
# Usage: pip install -r requirements.txt
​
# Base ------------------------------------------------------------------------
gitpython>=3.1.30
matplotlib>=3.3
numpy==1.20.3
opencv-python>=4.1.1
Pillow>=9.4.0
psutil  # system resources
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
thop>=0.1.1  # FLOPs computation
torch>=1.8.0  # see https://pytorch.org/get-started/locally (recommended)
torchvision>=0.9.0
tqdm>=4.64.0
ultralytics>=8.0.232
# protobuf<=3.20.1  # https://github.com/ultralytics/yolov5/issues/8012
​
# Logging ---------------------------------------------------------------------
# tensorboard>=2.4.1
# clearml>=1.2.0
# comet
​
# Plotting --------------------------------------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
​
# Export ----------------------------------------------------------------------
# coremltools>=6.0  # CoreML export
# onnx>=1.10.0  # ONNX export
# onnx-simplifier>=0.4.1  # ONNX simplifier
# nvidia-pyindex  # TensorRT export
# nvidia-tensorrt  # TensorRT export
# scikit-learn<=1.1.2  # CoreML quantization
# tensorflow>=2.4.0,<=2.13.1  # TF exports (-cpu, -aarch64, -macos)
# tensorflowjs>=3.9.0  # TF.js export
# openvino-dev>=2023.0  # OpenVINO export
​
# Deploy ----------------------------------------------------------------------
setuptools>=65.5.1 # Snyk vulnerability fix
# tritonclient[all]~=2.24.0
​
# Extras ----------------------------------------------------------------------
# ipython  # interactive notebook
# mss  # screenshots
# albumentations>=1.0.3
# pycocotools>=2.0.6  # COCO mAP
wheel>=0.38.0 # not directly required, pinned by Snyk to avoid a vulnerability

 

(六)、查看和删除对应的虚拟环境(一点补充)
# 查看所有的虚拟环境
conda env list
​
# 删除指定的虚拟环境
conda env remove --name yolov5

 

(七)、如果遇到换源的地址没有对应版本(没遇到就不管):
# 如阿里云没有的环境就需要单独安装,这里只是一个例子
pip install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu102

 

(八)、在PyCharm中设置虚拟环境

在此处找到我们设置的虚拟环境地址并选择其中的.exe文件即可:

image-20240622161839830

 

查看是否成功(使用终端打开,看到命名行前面又这个环境即可):

image-20240622161950139

 

确定安装好了:

可以使用默认的训练文件看看能不能检测,这里推荐使用本机摄像头,可以正常运行识别就表示你的环境好了,就算失败也是虚拟环境不怕,根据问题去网上找答案吧,大概率没有配置好。

python detect.py --weights yolov5s.pt --source 0                # webcam    本机摄像头
                                               img.jpg          # image
                                               vid.mpp4         # video
                                               screen           # screenshot
                                               path/            # directory
                                               list.txt         # list of images
                                               list.streams     # list of streams
                                               'path/*.jpg'     # glob

 

 

二、训练自己的模型(使用PyCharm)

友情提示: 为了防止 labelimg打标签 闪退和辛勤付出打水漂,推荐使用在线的打标网站打标,而且有些网站还可以团队合作和选择更多形状的框框出特征:https://www.makesense.ai/ 这样的网站很多,如果有好的也可以推荐给我,可以先找好并会用了再开始。——工欲善其事,必先利其器

 

(一)、数据准备:

首先准备好原始图片数据,可以使用下面程序通过旋转生成更多图片:

from math import *
import cv2
import os
import glob
import imutils
import numpy as np
# 如果这里导入依赖有问题,可以直接使用pip 在已经配置号python环境的基础上
​
# 通过旋转角度来快速获取大量图片
def rotate_img(img, angle):
    '''
    img   --image
    angle --rotation angle
    return--rotated img
    '''
    h, w = img.shape[:2]
    rotate_center = (w / 2, h / 2)
    # 获取旋转矩阵
    # 参数1为旋转中心点;
    # 参数2为旋转角度,正值-逆时针旋转;负值-顺时针旋转
    # 参数3为各向同性的比例因子,1.0原图,2.0变成原来的2倍,0.5变成原来的0.5倍
    M = cv2.getRotationMatrix2D(rotate_center, angle, 1.0)
    # 计算图像新边界
    new_w = int(h * np.abs(M[0, 1]) + w * np.abs(M[0, 0]))
    new_h = int(h * np.abs(M[0, 0]) + w * np.abs(M[0, 1]))
    # 调整旋转矩阵以考虑平移
    M[0, 2] += (new_w - w) / 2
    M[1, 2] += (new_h - h) / 2
​
    rotated_img = cv2.warpAffine(img, M, (new_w, new_h))
    return rotated_img
​
​
if __name__ == '__main__':
​
    output_dir = "train-image"  # 生成到的文件夹
    image_names = glob.glob("images/b-zu.png") # 对应图片
​
    for image_name in image_names:
        image = cv2.imread(image_name, -1)
​
        for i in range(1, 361): # 1 —— 360左闭右开
            rotated_img1 = rotate_img(image, i)
            basename = os.path.basename(image_name)
            tag, _ = os.path.splitext(basename)
            cv2.imwrite(os.path.join(output_dir, 'b-zu-%d.jpg' % i), rotated_img1)

 

 

(二)、安装对应的标记软件——labelimg(为防闪退一标到底,随意切换恨意满满)
1、安装
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

 

2、打开 pycharm 控制台
labelimg

 

3、使用

先设置:

 

 

 

创建两个文件用于存放训练的图片和标签:

 

 

保存标签文件的地址:

 

选择需要标记的图片:

 

 

操作(标记和下一张):

按下 W 键即可出现一个十字架,按下鼠标左键就可以圈定范围,然后可以给这个访问标记一个名字

注意:标记名不要使用中文,同时标记特征尽可能不要涵盖其他特征

 

按下d进入下一张图片,可以这样依次打完

 

 

(三)、准备对应的GPU环境(你也可以使用自己的电脑训练只是有点久,但是这个将代码上传的速度也吃网速)

这里如果自己电脑配置不好可以去租用云GPU来进行模型训练,例如矩池云地址:https://www.matpool.com/

1、先冲值一定金额,在网盘中准备好需要使用的文件

2、然后租用一个GPU选择对应的镜像配置(这里有现成的YOLOv5环境)

1668672313992

3、租用成功后 鼠标右击win键然后选择Windows PowerShell 进行连接

 

注意:对应运行好的实例有对应连接地址和密码复制后鼠标右键粘贴即可,密码复制右键就粘贴上了

1668672883811

 

连接好后:

# 在这个目录下看看能不能找到自己上传到云盘上的YOLOv5
cd /mnt

 

 

(四)、训练运行(特别注意,这里是使用了矩池云的云盘后的默认根路径:/mnt)

在此之前请确定好对应的图片和标签的对应位置以及配置文件信息:

参考配置文件:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: /mnt/yolov5-master/data/ChineseChess  # dataset root dir
train: images/train  # train images (relative to 'path')
val: images/val  # val images (relative to 'path')
test:  # test images (optional)
​
# Classes
nc: 2  # number of classes
names: ['no-arse', 'no-bosom']  # class names

 

 

图片标签配置文件放置(这里是一个放置参考,主要注意看看路径)

 

 

训练配置文件分析
数据集相关信息:
​
数据集根目录:/mnt/yolov5-master/data/ChineseChess
训练集图片目录:images/train(相对于数据集根目录)
验证集图片目录:images/val(相对于数据集根目录)
测试集图片目录:如果需要指定测试集图片目录,可以在test字段中填写相应的路径。在这个配置中,测试集图片目录是可选的。
类别信息:
​
# 这是标签的分类数量和名称:
类别数量:2(nc: 2)
类别名称:['r-bing', 'b-zu'],表示有两个类别,分别是'r-bing'和'b-zu'
​
# ----------------------
​
训练集(Train set):训练集包含用于模型训练的图像数据。模型通过观察训练集中的图像和相应的标注来学习目标物体的特征和位置信息。
​
验证集(Validation set):验证集用于在训练过程中对模型进行验证和调参。通常会从训练集中分割一部分数据作为验证集,用于评估模型在未见过的数据上的表现。这有助于监控模型的泛化能力,并避免过拟合。
​
测试集(Test set):测试集包含模型从未见过的图像数据,用于最终评估模型的性能和泛化能力。测试集的设计目的是模拟模型在实际应用中遇到的新数据,以便评估模型的真实表现。

 

训练(如果你使用的是自己的配置高的电脑,注意改对应的地址)
# 参考指令:
# data/ChineseChess/ChineseChess.yaml 对应你的配置文件地址
python3 train.py --weights yolov5s.pt --data data/ChineseChess/ChineseChess.yaml --workers 4 --batch-size 20 --epochs 100

 

结果的权重文件就在:runs/train/exp/weights/ 下 这里多次训练exp文件名会依次增加 exp exp2...

图片识别测试结果
Validating runs/train/exp/weights/best.pt...
Fusing layers...
Model summary: 157 layers, 7015519 parameters, 0 gradients
                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 1/1 [00:00<00:00,  6.54it/s]
                   all         20         56      0.766      0.474       0.53      0.225
               no-arse         20         30      0.658      0.333      0.383      0.126
              no-bosom         20         26      0.874      0.615      0.676      0.324

 

 

三、运行

(一)、将训练好的模型文件下载并放在yolov5源码更目录下的自定一目录下
# 比如你放在:
C:\Users\YAN\Desktop\yolov5\myModel\xxx.pt  # 注意,那你的运行指令的对应模型文件地址就要变哦,不是直接放在根路径下

 

 

(二)、在PyCharm中的控制台上运行

detect.py 这里是关键代码,Python好的可以自行学习修改,也可以通过Flask接口使其可以通过Http接口访问,当然写好了可以分享给我康康啊

python detect.py --weights best.pt【即你训练的模型文件】 --source 0                # webcam    本机摄像头
                                               img.jpg          # image
                                               vid.mpp4         # video
                                               screen           # screenshot
                                               path/            # directory
                                               list.txt         # list of images
                                               list.streams     # list of streams
                                               'path/*.jpg'     # glob

 

四、参考视频和总结展望

(一)、B站参考视频:

1、在这里你可以学到YOLOv5的使用,对于环境没有配置好的和想进一步了解的看这个(感谢作者的教学):

https://www.bilibili.com/video/BV1ZF4m1K7WY/?spm_id_from=333.999.0.0&vd_source=3482c0c40f6a05b99c21075cb9535764

2、在这里你可以学到YOLOV5于树莓派结合,对于矩池云那里有问题和没看清楚的看这个(感谢作者的教学):

https://www.bilibili.com/video/BV1vK411U7Br/?spm_id_from=333.337.search-card.all.click&vd_source=3482c0c40f6a05b99c21075cb9535764

3、一篇外网作者文章(使用 Flask 进行视频流传输,脑洞大的你可以猜想,看懂就机器翻译,哈哈哈): https://blog.miguelgrinberg.com/post/video-streaming-with-flask

(二)、总结展望:

作为一个Java菜鸟程序员,目前并对YOLO了解不太多。但是我们可以看到其在图像和实时流的识别上可以做很多事情,比如我们可以通过YOLO做图片的检测,再通过Flask或者Python后端提供对应的Http接口服务供Java或者直接供前端使用,这点Python后端程序员比我熟。

然后我们也可以看到还能用YOLOv5检测实时流(文中只是提及了摄像头,但是如果是流媒体的实时流也是可以的所以可以尝试作为直播场景下的违规检测),那么其实可以做一些监控设备或者是实时流的检测,这里比如:车库往来车辆检测提取车票获取司机信息扣费或者是高速路检测超速,当然可能也不一定会用YOLOv5类似的专业人士比我熟。

当然也可以和硬件结合起来,以YOLO为眼,然后要不就是自动根据其控制一些硬件操作,或者就是可以识别报警,人工进行控制。至于可视化怎么做那就看你的脑洞了。

最后,有好的方法记得分享给我哈。

标签:YOLOv5,入门,img,--,list,虚拟环境,https,path,快速
From: https://www.cnblogs.com/fragmentary/p/18262591

相关文章

  • python 快速排序
     快速排序快速排序是一种非常高效的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 以下是一个使用Python实现的快速排序的示例代码: pythond......
  • NSIS 入门教程 (二)
    引言   在教程的第一部分中创建第一个安装程序后,我们还将需要删除其安装区段中已安装的文件。我们还将展示更多安装引导页面,让用户有机会选择安装的某些部分。   卸载   创建一个安装程序.可以干净的卸载,不仅是一种礼貌,对于程序的开发与发行方也有很多好处: ......
  • 如何用GO语言实现快速排序算法?
    本章教程,介绍一下如何用GO语言实现基础排序算法中的快速排序。快速排序(Quicksort)是一种高效的排序算法,它采用分治法策略,将一个数组分成两个子数组,然后递归地对这两个子数组进行排序。一、程序代码packagemainimport( "fmt" "math/rand" "time")//quickSo......
  • 模拟退火算法(Simulated Annealing, SA)及微优化(入门)
    模拟退火算法(SimulatedAnnealing,SA)是一种启发式搜索算法,常用于解决优化问题。该算法以概率的方式搜索问题的解空间,并在搜索过程中逐渐降低温度,从而有助于找到全局最优解。模拟退火算法的基本原理如下:初始化:随机生成一个初始解。迭代过程:生成一个新解,这个新解通过一......
  • Michael M. Tiller《Modelica多领域物理系统建模入门与提高》Chapter 4学习笔记
    文章目录第四章组件重用4.1概述4.2公共代码开发4.2.1识别和定义公共代码4.2.2使用公共代码定义模型4.3构建可重用的块4.3.1建立控制器模型4.3.2传递信息4.3.3小结4.4允许替换的组件4.4.1通用控制器接口4.4.2特定控制器模型4.4.3使用可替换组件4.4.4小结......
  • MyBatis-Plus入门教程(一)
    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上为其提供了许多便捷功能,使开发者能够更快速、高效地进行数据库操作。MyBatis-Plus简介1.什么是MyBatis-Plus?MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它旨在简化开发过程,减少重复代码,提高开发效率。MP通......
  • Mybatis-plus入门教程(二)
    第一步:环境准备1.添加依赖确保在项目的构建文件中添加MyBatis-Plus依赖。Maven:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version></dependency>Gradle:im......
  • Qt入门程序
    一、QtCreator简介    QtCreator为应用程序开发人员提供了一个完整的跨平台、集成开发环境(IDE)以便为桌面、嵌入式和移动设备平台(如Android和ios)创建应用程序。    QtCreator提供了在整个应用程序开发生命周期所需的工具,从创建项目到将应用程序部署......
  • 掌握ChatGPT:提示工程入门详解
    随着人工智能的发展,提示工程成为了使用ChatGPT等语言模型的核心技术。对于初学者,理解和运用提示工程是提高与ChatGPT互动效果的关键。什么是提示工程?提示工程是通过设计和优化输入文本(提示)来引导AI生成特定输出的过程。它包括思路链(Chain-of-Thought)、提示链接(PromptChain......
  • NSIS 入门教程 (一)
     介绍大多数应用程序都附带一个安装程序,它将所需的文件复制到正确的文件夹中,创建注册表项,并提供卸载例程以(希望)从计算机中彻底删除应用程序有多种解决方案可以为自主开发的应用程序配备安装程序。除了InstallShield或Wise等商业产品外,还有开源安装工具NullsoftScriptableIns......