当前位置: 首页 > news >正文

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

【YOLO V5】目标检测 WSL2 AutoDL VScode SSH

  • 前言
  • 整体思路
    • 理解向
    • YOLO 目标检测完整流程
  • 环境配置
    • Anaconda
  • 获取 YOLO 代码与预训练模型
    • 下载 YOLOv5 代码和预训练模型
    • 配置 YOLOV5 工程环境
      • 解压 YOLOv5 源代码 并 添加预训练模型
      • 调整依赖版本
      • 选择对应的 Python 解释器
  • 数据集准备
    • 下载 COCO 动物数据集
    • 存放数据集
    • 执行 Python 脚本,转换标签格式
    • 正确的数据集格式
  • 训练 YOLO 模型
    • 参数配置
    • 路径管理注意事项
    • 本地训练
    • AutoDL 服务器训练
      • JupyterLab 连接
      • VScode SSH 远程连接
    • 训练结果
  • YOLO 推理

前言

对于初学者来说,学习YOLO和实现目标检测时,其实不需要了解底层原理,比如CNN神经网络。虽然这些知识有助于深入理解,但如果只是想快速上手YOLO,不必从这些复杂的原理开始。本篇内容正是基于这个思路,重点讲解如何快速上手YOLO,如何在服务器上训练自己的模型,并实现目标检测。

本文以 YOLOv5 在 COCO 数据集上的训练为例,阐述 YOLOv5 目标检测任务的完整实现流程。

我的环境:
WSL2 Ubuntu 20.04 YOLOv5 PyTorch 1.7.0 VSCode SSH连接autoDL服务器

参考资料:
【干货】两小时带你训练和使用yolov5,yolov5详细教学,yolov5环境配置,2024年
【手把手带你实战YOLOv5-拓展篇】使用AutoDL服务器进行模型训练
【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接
【基于Ubuntu下Yolov5的目标识别】保姆级教程 | 虚拟机安装 - Ubuntu安装 - 环境配置(Anaconda/Pytorch/Vscode/Yolov5) |全过程图文by.Akaxi
【Anaconda】Linux系统下Anaconda详细安装过程

整体思路

理解向

我们可以将 YOLO 理解为一个 学生
训练集 = 有标准答案的习题集(帮助学生根据答案总结规律,提升能力)
验证集 = 单元检测卷(让学生训练完后做题并根据表现进行这一轮训练的评分)
测试集 = 期末考试(学期结束时,测试学生的最终学习的成果)

训练YOLO模型的过程: 就是给这个学生提供一套标准答案的习题集(有标注的训练集),让学生据答案总结规律并逐渐提升。随着训练的进行,模型(学生)会不断变强,最终变成一个更“厉害”的学生——这就是训练后的 YOLO 模型(也叫权重)。
验证YOLO模型的过程: 当学生完成一套有标准答案的习题集后,能力有所提升,成为更“厉害”的学生。接着,我们给更“厉害”的学生一套单元检测卷,检查他在这一轮学习后的掌握情况。
测试YOLO模型的过程: 经过多轮习题集的学习和单元检测卷的验证后,我们让最优秀的学生(最优权重 best weights):参加期末考试,以此测试他在所有学习轮次后的最终能力。

举个栗子:
如果我们希望 YOLO 识别水果,就需要提供大量带标签的水果图片(相当于给学生提供带标准答案的习题)。YOLO 通过学习这些图片,掌握规律,最终训练出一个能够识别水果的模型(擅长检测水果的“学生”)。
在训练过程中,YOLO 每训练一轮就会“升级”一次,就像学生每做完一轮习题,能力都会有所提升。每次升级后,我们需要验证它的表现,于是给它一套没有标准答案的题目(验证集),再对比标准答案,评估它这一轮的学习效果。
经过多轮训练和验证,最终会使用测试集进行“终极考核”,类似于学生的期末考试。测试集能衡量模型的最终表现,确保它在实际应用中足够可靠。
训练完成后,我们会选择表现最好的模型(最佳权重)用于后续的水果的目标检测任务,就像学生经过专项训练后,能在相关的专项习题中有更好的表现。

YOLO 目标检测完整流程

环境配置–获取YOLO代码与预训练模型–数据集准备–训练YOLO模型–评估与测试–模型部署与应用

  1. 环境配置 – 安装 Anaconda,并配置 PyTorch 与 CUDA(如果使用本地 GPU 训练)
  2. 获取 YOLO 代码与预训练模型 – 下载 YOLOv5 官方代码库,并准备预训练的权重文件
  3. 数据集准备 – 下载并转换数据集,使其符合 YOLO 格式;若使用自定义数据集,则需收集图片并进行标注。
  4. 训练 YOLO 模型 – 在本地或服务器上进行模型训练,调整超参数并优化权重,提高检测效果。
  5. 模型评估与测试 – 选择训练过程中表现最优的模型,并在测试集上进行评估
  6. 模型部署与应用 – 将训练好的 YOLO 模型部署到实际场景

环境配置

Anaconda

该部分内容可以参考:【Anaconda】Linux系统下Anaconda详细安装过程

安装Anaconda:

在 Windows 下,前往 Anaconda清华镜像站 下载适合的 Anaconda 安装包。本次示例下载的是 Anaconda3-2021.05-Linux-x86_64.sh
在这里插入图片描述

下载完成后,将安装包复制到 WSL,并进入其所在目录执行安装:

cd ~
bash Anaconda3-2021.05-Linux-x86_64.sh

环境变量配置:
安装完成后,需要将 Anaconda 添加到环境变量,使其能够在终端中直接使用

  1. 打开 .bashrc 文件:
    nano ~/.bashrc
    
  2. 在文件末尾添加 Anaconda 路径(请替换 XXX 为你的实际安装路径):
    export PATH="XXX/anaconda3/bin:$PATH"
    
  3. 使环境变量生效:
    source ~/.bashrc
    

最后,关闭并重新打开终端,如果命令行前面显示 (base),就说明 Anaconda 已成功配置并生效

创建虚拟环境:

  1. 创建虚拟环境:(指定 Python 版本 3.8,兼容性较好)

    conda create yolo_v5 python=3.8
    
  2. 激活虚拟环境:

    conda activate yolo_v5
    
  3. 更换 pip 源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
  1. 更换 conda 源
sudo nano ~/.condarc

在打开的文件中,复制并粘贴以下内容,然后保存:

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

后续所有操作均需在(yolo_v5)环境中进行

获取 YOLO 代码与预训练模型

下载 YOLOv5 代码和预训练模型

下载 YOLOv5 源代码

  • 访问 YOLOv5 官方仓库
  • Tags 选项中查看所有历史版本,并选择 v6.0(该版本兼容性较好,较新版本在 Jetson Nano 部署时可能存在依赖兼容性问题)
  • 在 YOLOv5-6.0 中点击 Source code (zip) 下载 YOLOv5 6.0 版本的源代码压缩包

YOLOv5 版本选择

下载预训练模型

  • 在 YOLOv5-6.0 页面中,可以看到官方提供的多种预训练模型,并附带性能参数供选择
  • 根据需求选择适合的模型,这里推荐 YOLOv5s(轻量化,速度快,适用于大多数场景)。
  • 点击 yolov5s.pt 下载 YOLOv5s 预训练权重文件。

预训练模型的性能参数
YOLOv5 预训练模型

yolov5s.pt 预训练的权重文件
下载 yolov5s.pt

配置 YOLOV5 工程环境

解压 YOLOv5 源代码 并 添加预训练模型

  1. 将下载的 yolov5-6.0.zip 复制到 WSL 的 YOLO 项目目录中 解压文件

    tar -xvf yolov5-6.0.zip
    
  2. 进入项目目录,打开该文件夹

    cd yolov5-6.0
    code .
    
  3. yolov5s.pt 预训练权重文件复制到 weights 目录(如果没有该目录,则手动创建):

    mkdir -p weights  # 创建 weights 目录(若不存在)
    mv yolov5s.pt weights/  # 移动权重文件
    

调整依赖版本

打开 requirements.txt,将所有 >= 替换为 =,确保依赖版本固定,避免因版本过新导致兼容性问题

在这里插入图片描述

注释 PyTorch 相关依赖:由于训练将在服务器上进行,本地无需安装 PyTorch,因此需在 requirements.txt 中注释掉 torch 和 torchvision。但请记住 PyTorch 版本要求,确保在服务器上选择符合要求的 PyTorch 版本

关于 PyTorch 的安装及 requirements.txt 依赖安装过程中可能遇到的报错,可以参考 【干货】两小时带你训练和使用 YOLOv5,YOLOv5 详细教学,YOLOv5 环境配置(2024) 视频的 21 分钟 部分

选择对应的 Python 解释器

在 VSCode 中,按下 Shift + Ctrl + P 调出命令面板,在搜索栏输入 “Python: Select Interpreter”,然后选择 yolo_v5 虚拟环境下的 Python 3.8 解释器,如下图所示

在这里插入图片描述

数据集准备

本次示例使用 COCO 动物数据集,但由于 COCO 数据集的标签格式与 YOLO 格式不兼容,因此需要进行格式转换。

下载 COCO 动物数据集

Files 目录中,找到 dataset.tar.gz 文件并下载
在这里插入图片描述

存放数据集

  • 下载完成后,将 dataset.tar.gz 解压,并将其复制到 YOLOv5-6.0 项目目录下的 data/dataset 文件夹。
  • 此外,还需将数据集复制一份至 data/data_org 目录,该目录用于格式转换。
  • 由于 COCO 数据集的标签格式不同于 YOLO(COCO 仅提供一个标签文件,而 YOLO 需要为每张图片生成一个对应的 .txt 标签文件),因此需编写脚本进行转换。

执行 Python 脚本,转换标签格式

import os
import cv2 as cv
import json

# 定义项目根目录
ROOT = os.path.dirname(os.path.abspath(__file__))  # 获取当前脚本所在目录

# 使用 Path 进行路径拼接
img_folder = ROOT / 'data/dataset/val/images'
label_path = ROOT / 'data/data_org/val/_annotations.coco.json'

# test 测试集图片文件名列表
img_path_lst = os.listdir(img_folder)

# 为每一张图片创建一个空白的 .txt 标签
for img_name in img_path_lst:
    with open(os.path.join(img_folder.replace("images","labels"),img_name.replace(".jpg",".txt")),'w') as f:

# 读取文件
with open(label_path, 'r') as f:
    content = json.load(f)
pass

# 创建一个id到图片名的映射,以字典形式存储
dict_id2img = dict()
for img_info in content['images']:
    dict_id2img[img_info['id']] = img_info['file_name']
pass

# 开始读取标注信息,处理后写入txt文件
for label_info in content['annotations']:
    img_name = dict_id2img[label_info['image_id']]
    class_name = label_info['category_id']
    x_center = (label_info['bbox'][0] + label_info['bbox'][2]) / 2 / 640
    y_center = (label_info['bbox'][1] + label_info['bbox'][3]) / 2 / 640
    w = label_info['bbox'][2] / 640
    h = label_info['bbox'][3] / 640

    with open(os.path.join(img_folder.replace("images", "labels"), img_name.replace(".jpg", ".txt")), 'a') as f:
        f.write("{} {} {} {} {}\n".format(class_name, x_center, y_center, w, h))

注意事项

  • 单次转换单个数据集
    该脚本 每次只能转换一个数据集(训练集 train、验证集 val 或测试集 test)。
    如需转换多个数据集,请分别修改 img_folderlabel_path 的路径,并 单独运行 脚本。

  • 数据转换完成后,数据集应符合 YOLO 格式

    转换后,dataset 目录下应包含:

    • images/ 文件夹(存放图像文件)。
    • labels/ 文件夹(存放与图像一一对应的 .txt 标签文件)。
  • 确保 COCO 格式 JSON 文件路径正确

    • label_path 需要正确指向 COCO 数据集的 JSON 标签文件,否则转换时会找不到数据,导致错误。
    • 建议 将 COCO 的 JSON 标签文件 单独存放在 labels/ 目录,确保 images/ 目录下 仅存放图片,避免混淆和潜在错误。

正确的数据集格式

your_project/
│── yolov5-6.0/             # YOLOv5 项目主目录
│   ├── data/               # 数据集相关文件
│   │   ├── dataset/        # 存放实际的图片和标签
│   │   │   ├── train/      # 训练集
│   │   │   │   ├── images/ # 训练集图片
│   │   │   │   │   ├── img_1.jpg
│   │   │   │   │   ├── img_2.jpg
│   │   │   │   │   ├── ...
│   │   │   │   ├── labels/ # 训练集标签(YOLO 格式,一一对应)
│   │   │   │   │   ├── img_1.txt
│   │   │   │   │   ├── img_2.txt
│   │   │   │   │   ├── ...
│   │   │   ├── val/        # 验证集
│   │   │   │   ├── images/
│   │   │   │   ├── labels/
│   │   │   ├── test/       # 测试集
│   │   │   │   ├── images/
│   │   │   │   ├── labels/
│   │   ├── data_org/       # 存放原始数据(COCO 格式)
│   │   │   ├── train/ 
│   │   │   │   ├── images/ 
│   │   │   │   ├── labels/   # 存放单个 COCO 的 JSON 文件
│   │   │   │   │   ├── _annotations.coco.json  
│   │   │   ├── val/ 
│   │   │   │   ├── images/  
│   │   │   │   ├── labels/  
│   │   │   │   │   ├── _annotations.coco.json  
│   │   │   ├── test/  
│   │   │   │   ├── images/  
│   │   │   │   ├── labels/  
│   │   │   │   │   ├── _annotations.coco.json  

训练 YOLO 模型

参数配置

YOLO的训练主要通过 train.py 函数进行,因此我们只需关注这个文件。以下是一些关键的传入参数,它们用于配置训练过程:

  1. weights (权重文件)
    这是预训练模型的文件,可以选择进行微调,使用官方模型(如 yolov5s),或者从零开始训练(不推荐)。

填写权重文件的路径时,ROOT 表示从项目根目录开始的相对路径。

  1. cfg (结构文件)
    该文件用于描述 YOLO 模型的架构和结构。根据所使用的模型选择对应的 YAML 配置文件。
    例如,若选择 yolov5s 模型,则应选择 yolov5s.yaml 配置文件。每个模型都有对应的 YAML 文件,其中定义了网络层、输入输出参数等结构信息。

  2. data (数据集文件)
    该文件定义了数据集(训练集、验证集、测试集)的路径、类别数量
    例如,以下文件包含了这些信息,用于告知模型如何加载和处理数据。

# 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: ../yolov5-6.0/data/dataset  # dataset root dir
train: train/images  # train images (relative to 'path') 118287 images
val: val/images  # train images (relative to 'path') 5000 images
test: test/images  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# Classes
nc: 11  # number of classes
names: ['animals', 'cat', 'chicken', 'cow', 'dog', 'fox', 'goat', 'horse', 'person', 'racoon', 'skunk'] # class names
  1. epochs (训练轮数)
    训练的轮次,轮数越高,模型训练得越充分,但训练时间也越长。YOLO 在训练到认为是最佳模型时会自动停止,因此不必担心过度训练。

  2. batchsize (批次大小)
    这是每次训练时投入的数据量,直接影响到 GPU 显存的使用。显存越大,可以设置更大的批次大小。
    PS:GPU显存的占用情况可以在训练过程中看到,每轮训练时会显示 GPU 显存的实时使用情况。如果使用租赁服务器,记得充分利用显卡的性能,以确保训练效率最大化。

  3. imgsz (图片尺寸)
    图像尺寸,通常默认设置为 640x640

  4. device (训练设备)
    指定用于训练的设备。如果使用 CPU,则填写 cpu;如果使用 GPU 训练,则填写指定 GPU 的编号(默认通常为 0)。如果使用多个 GPU,可以填写 0,1,...

路径管理注意事项

  • Python 中,建议使用 ROOT 变量表示项目的根目录,例如:
from pathlib import Path
import os

FILE = Path(__file__).resolve()  # 获取当前脚本的绝对路径
ROOT = FILE.parents[0]  # 获取项目根目录(即当前文件所在目录的父目录)
if str(ROOT) not in sys.path:  # 如果 ROOT 目录不在 sys.path 中,将其添加到 sys.path
    sys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # 使用相对路径获取 ROOT 目录相对于当前工作目录的路径

data_path = ROOT / 'data/dataset.yaml'  # 数据集路径
weights_path = ROOT / 'weights/yolov5s.pt'  # 预训练模型路径
  • YAML 文件中,使用 .. 表示回退上一级目录,例如:
train: ../yolov5-6.0/data/dataset/train/images
val: ../yolov5-6.0/data/dataset/val/images

在 YAML 文件中,使用 ../yolov5-6.0 来表示当前项目目录的上层文件夹。.. 表示回退到当前文件夹的上层文件夹,例如,若文件结构是 a/b/c,在 c 文件夹中,.. 就代表 a 文件夹。相对路径有时容易混淆,导致出错。如果无法区分清楚,使用绝对路径也是可行的,尽管修改时会更麻烦一些。

本地训练

1. 直接运行

python train.py

该命令会使用 train.py 中预设的默认参数进行训练

2. 运行时指定参数

python train.py --weights yolov5s.pt --epochs 100 --batch-size 16

这样可以 临时修改参数,不会影响 train.py 文件中的默认配置,方便灵活调整训练设置

AutoDL 服务器训练

该部分建议参考:
【手把手带你实战YOLOv5-拓展篇】使用AutoDL服务器进行模型训练
【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接

首先,我们需要创建服务器实例:

进入 AutoDL AI算力云 的算力市场选择所需的GPU

然后选择适合YOLO环境的镜像版本。注意镜像要满足YOLO依赖的框架(PyTorch)、Python版本以及CUDA版本。
如果你不清楚具体版本要求,可以查看YOLO项目中的依赖说明(一般在requirements.txt中)
确认镜像选择无误后,点击下方“立即创建”按钮创建实例。

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

JupyterLab 连接

服务器创建完成后,直接点击控制台中的JupyterLab按钮进行连接:
在这里插入图片描述
进入JupyterLab后,上传你的YOLO项目文件。接下来,参照前文说明修改相关参数(如weights路径等),即可在服务器上快速开始训练。其他的训练操作步骤与本地训练流程一致。

VScode SSH 远程连接

该部分内容建议参考:【手把手带你实战YOLOv5-拓展篇】Vscode基本使用与AutoDL服务器连接 9分钟 后的内容

步骤如下:

  • 在VSCode中点击左下角打开远程资源管理器,点击+添加SSH连接:

  • 将生成的SSH配置文件保存到默认位置即可,无需额外修改:

  • 输入AutoDL中的登录指令与对应的密码进行连接

  • 连接成功后,即可在VSCode远程环境中操作

后续具体流程和本地训练以及 JupyterLab 方式一致。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

训练结果

每次训练会生成一个 runs/train 文件夹,其中的 exp 目录代表实验编号(即训练的轮次)。我们主要关注 runs/train/exp/weights 文件夹中的**权重文件**,该文件夹包含:

  • 最新的权重文件:通常是 last.pt,代表当前训练过程中的最新模型权重。
  • 最佳权重文件:通常是 best.pt,代表在训练过程中性能最好的模型

通常我们重点关注 best.pt 作为最优模型

此外,在训练完成后,runs/train/exp 目录下会生成基于 best.pt 模型运行验证集的结果(即 best.pt 在验证集上的目标检测表现)。同时,还会包含损失、精度、mAP 等评估指标,用于衡量和优化模型的性能。在初学阶段,可以将这些细节放在一边,专注于模型的最终表现。

YOLO 推理

在训练出合适的模型后,我们可以使用最优模型进行推理。YOLO 推理主要通过 detect.py 脚本实现,和训练过程类似,我们需要修改一些参数来配置推理。

参数配置

  1. weights (权重文件)
    选择训练好的模型进行推理。如果任务简单,也可以使用预训练模型(例如 yolov5s.pt)进行推理。

  2. source(输入数据源)
    指定推理的输入数据源,可以是图片集、URL或者使用摄像头作为输入源(0 表示使用摄像头)。

  3. imgsz (图片尺寸)
    设置输入图像的尺寸,默认通常为 640x640

  4. conf-thres (置信度阈值)
    用于过滤低置信度的检测框。默认设置为 0.25,意味着只有置信度高于 25% 的目标才会被保留。根据实际情况调整,如果阈值设置得过低,可能会出现很多错误的检测框。

  5. device (设备)
    指定推理时使用的设备。如果使用 CPU,则填写 cpu;如果使用 GPU,则填写指定 GPU 的编号(通常默认为 0)。如果使用多个 GPU,则可以指定多个设备(如 0,1)。

注意:只需修改 source 参数,即可指定推理本地图片、视频文件或摄像头输入。
推理完成后,检测结果(标注后的图片和视频)默认保存在 runs/detect/exp/ 目录下。

相关文章:

  • 基于编译器特性浅析C++程序性能优化
  • Vue基础
  • 【Linux】自定协议和序列化与反序列化
  • 跨域-告别CORS烦恼
  • 【C++设计模式】第七篇:桥接模式(Bridge)
  • @PostConstruct注解的作用
  • 基于websocket的多用户网页五子棋 --- 测试报告
  • 小微企业友好方案:低成本智能客服系统如何落地
  • C# 基础知识总结(持续更新中...)
  • 数据仓库建模方法论:起源、发展与深度对比解析
  • ICLR 2025|香港浸会大学可信机器学习和推理课题组专场
  • 密码学基础-Hash、MAC、HMAC 的区别与联系
  • 计算机毕业设计SpringBoot+Vue.js个人博客系统(源码+文档+PPT+讲解)
  • react 19版中路由react-router-dom v7版的使用
  • 厦大第三发:《DeepSeek大模型及其企业应用实践》
  • 1.Big-endian/ little endian大端对齐、小端对齐
  • Camera相关配置
  • 带宽管理组网配置
  • Web Snapshot 网页截图 模块代码详解
  • 生活反思公园散步与小雨遇记
  • 国税总局上海市税务局通报:收到王某对刘某某及相关企业涉税问题举报,正依法依规办理
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 爱德华多·阿拉纳宣誓就任秘鲁新总理
  • 财政部党组召开2025年巡视工作会议暨第一轮巡视动员部署会
  • 上海国际电影节纪录片单元,还世界真实色彩