【目标检测算法实现之yolov8】yolov8训练并测试VisDrone数据集

news/2024/7/11 1:16:30 标签: 目标检测, 算法, YOLO, 深度学习, linux

目录

  • 1.环境准备
    • 创建yolov8虚拟环境
    • 进入虚拟环境
    • 安装pytorch v1.11.0
    • 下载yolov8的代码
    • 其他配置
  • 2.VisDrone数据集准备
    • 数据集下载
    • 数据集处理
    • 修改数据配置文件
  • 3.训练/验证/导出
    • 训练
    • 验证
    • 导出

1.环境准备

在这之前,需要先准备主机的环境,环境如下:

Ubuntu18.04
cuda11.3
pytorch:1.11.0
torchvision:0.12.0
在服务器上执行以下命令,

创建yolov8虚拟环境

conda create -n yolov8 python=3.8

进入虚拟环境

conda activate yolov8

安装pytorch v1.11.0

pytorch v1.11.0(torch1.11.0+cu1113 ,torchvision0.12.0+cu113)

# CUDA 11.3
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

下载yolov8的代码

先创建yolov8文件夹,存放等会要下载的yolov8代码mkdir yolov8
进入yolov8文件夹,cd yolov8
下载yolov8代码git clone https://github.com/ultralytics/ultralytics.git

其他配置

 pip install ultralytics

2.VisDrone数据集准备

数据集下载

github链接上下载:官方链接
下载Task1:Object Detectino in Images下面的四个VisDrone-DET dataset数据集
在这里插入图片描述
也可以在我的百度网盘链接里下载:
链接:https://pan.baidu.com/s/18TYcaRdJI7jF55c0ZlI3LA?pwd=ef7n
提取码:ef7n

下载好zip文件后,使用winscp将zip文件传输到远程服务器上。
在服务器上进入到zip文件所在的文件夹中使用unzip命令解压zip文件。
如: unzip VisDrone2019-DET-val.zip

数据集处理

和yolov5所需要的格式一致。参考yolov5数据处理方法。
主要是labels的生成,可以在yolov8下面新建一个visdrone2yolov.py文件。

from utils.general import download, os, Path
def visdrone2yolo(dir):
    from PIL import Image
    from tqdm import tqdm

    def convert_box(size, box):
        # Convert VisDrone box to YOLO xywh box
        dw = 1. / size[0]
        dh = 1. / size[1]
        return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh

    (dir / 'labels').mkdir(parents=True, exist_ok=True)  # make labels directory
    pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
    for f in pbar:
        img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
        lines = []
        with open(f, 'r') as file:  # read annotation.txt
            for row in [x.split(',') for x in file.read().strip().splitlines()]:
                if row[4] == '0':  # VisDrone 'ignored regions' class 0
                    continue
                cls = int(row[5]) - 1  # 类别号-1
                box = convert_box(img_size, tuple(map(int, row[:4])))
                lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
                with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl:
                    fl.writelines(lines)  # write label.txt
dir = Path('/home/yolov5/datasets/VisDrone2019')  # datasets文件夹下Visdrone2019文件夹目录
# Convert
for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
    visdrone2yolo(dir / d)  # convert VisDrone annotations to YOLO labels

正确执行代码后,会在’VisDrone2019-DET-train’, ‘VisDrone2019-DET-val’, 'VisDrone2019-DET-test-dev三个文件夹内新生成labels文件夹,用以存放将VisDrone数据集处理成YoloV8格式后的数据标

修改数据配置文件

记事本或notepad++打开ultralytics-main\ultralytics\datasets\文件夹下的VisDrone.yaml文件,将其中path参数修改为VisDrone2019文件夹所在的路径。
在这里插入图片描述

3.训练/验证/导出

训练

打开终端(或者pycharm等IDE),进入虚拟环境,随后进入yolov8文件夹,在终端中输入下面命令,即可开始训练。

yolo task=detect mode=train model=yolov8s.pt data=datasets/VisDrone.yaml batch=16 epochs=100 imgsz=640 workers=0 device=0

验证

激活yolov8虚拟环境conda activate yolov8
进入yolov8文件夹cd pyCode/yolov8/ultralytics/ultralytics/
使用如下命令,即可完成对验证数据的评估。
开始验证

yolo task=detect mode=val model=runs/detect/train4/weights/best.pt data=datasets/VisDrone.yaml device=0

验证结果如下。
在这里插入图片描述

导出

使用如下命令即可导出

yolo task=detect mode=export model=runs/detect/train4/weights/best.pt

http://www.niftyadmin.cn/n/181396.html

相关文章

Federation HDFS VS HDFS

序言主要是为了解决HDFS如何把NameNode升级为多个,之前只能部署一个NameNode加一个配合的计算节点 secondaryNameNode,注意secondaryNameNode 并不是主备模式的节点,而是用于协助NameNode做某些计算的节点,以提升吞吐量.cuiyaonan2000163.com如下内容来自于:https://zhuanlan.z…

SQL Server底层架构技术对比

背景 数据库是信息化的基石,支撑着整个业务系统,发挥着非常重要的作用,被喻为“IT的心脏”。因此,让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。数据库在底层架构层面需要满足以下几点建设要求: …

es_MySQL、HBase、ElasticSearch三者对比详解

1、概念介绍 MySQL:关系型数据库,主要面向OLTP(OLTP,也叫联机事务处理(Online Transaction Processing)),支持事务,支持二级索引,支持sql,支持主从、Group Replication&a…

SpringBoot技术快速入门

目录 Spring Boot是什么 Spring Boot 的特点 配置开发环境 创建 Spring Boot 项目 Maven 创建Spring Boot 项目 Spring Initializr 创建SpringBoot项目 启动 Spring Boot Spring Boot starter入门 SpringBoot基本设置 6.1SpringBoot设置端口号 6.2SpringBoot设置项目…

代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列

​ LeetCode 392 判断子序列 题目链接:https://leetcode.cn/problems/is-subsequence/ 思路: dp数组的含义 dp[i][j]代表以i-1结尾的s子串和以j-1结尾的t子串,相同子序列的长度 递推公式 本题有两种情况: 1、s[i - 1] t[j - …

Vector - CAPL - 等待并获取LIN数据(续)

继续上篇!!! ***摸鱼聊天、答疑解惑首选之地 --- 车载网络哪些事儿*** 目录 TestWaitForLinReceiveError TestGetWaitLinReceiveErrData 代码示例 TestWaitForLinWakeupFrame TestGetWaitLinWakeupData 代码示例 TestWaitForLinTransm…

重载运算与类型转换Ⅰ

第十四章:重载运算与类型转换Ⅰ 1、基本概念: 重载的运算符是就有特殊名字的函数:名字由关键字operator和要定义的运算符号共同组成。也包含返回类型,参数列表以及函数体。 参数数量与运算符作用的运算对象数量一样多。 重载的…

工程师职称的专业分类

工程师是职业水平评定(职称评定)的一种。其下,有技术员,助理工程师等职称;其上有高级工程师,研究员或教授级高级工程师等职称。当然,这也只是对从事工程建设或管理人员技术水平的一种标定而已。 按职称( 高低,分为&…