Ubuntu配置Yolov8环境并训练自己的数据集

文章目录

  • 一、环境配置与功能测试
    • 1.1 安装
    • 1.2 目标检测
    • 1.3 实例分割
    • 1.4 分类
    • 1.5 姿态检测
  • 二、训练数据标注
  • 三、数据集训练方法
    • 3.1 命令训练
    • 3.2 代码训练


前言:需要先安装CUDA和Anaconda,它们的安装参考我这篇文章:Ubuntu配置深度学习环境(TensorFlow和PyTorch)

一、环境配置与功能测试

1.1 安装

新建一个虚拟环境下安装:

# 新建虚拟环境
conda create -n yolov8 python=3.8
# 激活虚拟环境
conda activate yolov8pip install ultralytics  
# 使用清华大学的镜像源安装
pip install ultralytics -i  https://pypi.tuna.tsinghua.edu.cn/simple/

源码安装:

# 激活虚拟环境
conda activate yolov8
# 需要单独安装torch
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.7 -c pytorch -c nvidiagit clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
# 安装依赖
pip install -r requirements.txt
# 使用清华大学的镜像源安装
pip install -r requirements.txt -i  https://pypi.tuna.tsinghua.edu.cn/simple/

1.2 目标检测

#激活虚拟环境
conda activate yolov8#官方的测试案例进行程序的推理测试:
yolo task=detect mode=predict model=yolov8n.pt source=/home/zard/Pictures/2.jpeg  device=cpu save=True show=True
# 任务模型task=detect,YOLOv8可用于检测,分割,姿态和分类
# 会自动下载权重文件https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt到当前目录
# 推理的数据为source
# 这是CPU进行测试的,将device改为0用GPU

结果如下,结果保存在当前路径下的runs/detect/predict文件夹中:

Ultralytics YOLOv8.0.145 🚀 Python-3.7.16 torch-1.13.1+cu117 CPU (12th Gen Intel Core(TM) i5-12500H)
YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradientsimage 1/1 /home/zard/Pictures/2.jpeg: 480x640 4 persons, 5 cars, 1 motorcycle, 1 suitcase, 32.9ms
Speed: 1.8ms preprocess, 32.9ms inference, 0.7ms postprocess per image at shape (1, 3, 480, 640)
Results saved to runs/detect/predict

在这里插入图片描述
GPU运行

yolo task=detect mode=predict model=yolov8n.pt source=/home/zard/Pictures/1.jpeg  device=0 save=True show=TrueUltralytics YOLOv8.0.145 🚀 Python-3.7.16 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce RTX 3060 Laptop GPU, 5930MiB)
YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradientsimage 1/1 /home/zard/Pictures/1.jpeg: 448x640 7 persons, 6 cars, 2 buss, 6.8ms
Speed: 1.5ms preprocess, 6.8ms inference, 0.8ms postprocess per image at shape (1, 3, 448, 640)
Results saved to runs/detect/predict2

也可以输入文件夹,处理多张图片:

yolo task=detect mode=predict model=yolov8n.pt source=/home/zard/Pictures/  device=0 save=True show=True
Ultralytics YOLOv8.0.145 🚀 Python-3.7.16 torch-1.13.1+cu117 CUDA:0 (NVIDIA GeForce RTX 3060 Laptop GPU, 5930MiB)
YOLOv8n summary (fused): 168 layers, 3151904 parameters, 0 gradientsimage 1/3 /home/zard/Pictures/1.jpeg: 448x640 7 persons, 6 cars, 2 buss, 7.0ms
image 2/3 /home/zard/Pictures/2.jpeg: 480x640 4 persons, 5 cars, 1 motorcycle, 1 suitcase, 6.9ms
image 3/3 /home/zard/Pictures/3.jpeg: 448x640 7 persons, 1 car, 2 trucks, 3.7ms
Speed: 1.8ms preprocess, 5.9ms inference, 0.6ms postprocess per image at shape (1, 3, 448, 640)
Results saved to runs/detect/predict3

1.3 实例分割

#激活虚拟环境
conda activate yolov8yolo task=segment mode=predict model=/home/zard/yolov8s-seg.pt source=/home/zard/Pictures/2.jpeg device=0 save=True show=True# 自动下载权重文件https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt

在这里插入图片描述

1.4 分类

yolo task=classify mode=predict model=yolov8x-cls.pt source=/home/zard/Pictures/2.jpeg device=0 save=True show=True

1.5 姿态检测

yolo task=pose mode=predict model=/home/zard/yolov8s-pose.pt source=/home/zard/Pictures/2.jpeg device=0 save=True show=True

请添加图片描述
请添加图片描述

二、训练数据标注

安装数据标注环境:

#激活虚拟环境
conda activate yolov8
pip install labelImg
# 使用清华大学的镜像源安装
pip install labelImg -i  https://pypi.tuna.tsinghua.edu.cn/simple/labelImg

labelImg允许用户在图像中绘制边界框、多边形、线条和点等来标注不同类型的对象或特征。也可以标注标注类别,用户可以定义不同的标注类别,使其适应不同的项目需求。每个类别都可以有自己的名称和颜色。我这里从网上随便找了一些狗子的照片示例:
选择要标注的数据和输出目录,右下角会出现目录下所有图片:
在这里插入图片描述

更改数据的标注结果格式,点击save下面按钮选择输出为YOLO
在这里插入图片描述
点击Creat RectBox框选目标,填入标签:
在这里插入图片描述
每一帧标注完成后均要点击save,会在输出路径下生成结果,其中.txt文件包含图片中的物体信息及对应的位置之类的,class.txt列出所有的标签:
在这里插入图片描述

三、数据集训练方法

标注完成后,创建data文件夹,并在images中放置所有标注原图,labels保存每个图片对应的标签文件(.txt),dataSet用来保存数据集划分,例如训练集、验证集和测试集,通常以文本文件的形式列出每个数据集中的图像名称或ID,使用下面脚本生成数据集划分:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import os
import random
import argparseparser = argparse.ArgumentParser()
# 标注文件的地址,根据自己的数据进行修改
parser.add_argument('--label_path', default='./labels', type=str, help='input label path')
# 数据集的划分,地址选择自己数据dataSet下
parser.add_argument('--txt_path', default='./dataSet', type=str, help='output dataset path')
opt = parser.parse_args()# 训练与测试数据集比例
trainval_percent = 1.0
train_percent = 0.9
labelfilepath = opt.label_path
txtsavepath = opt.txt_path
# 读取所有已经标注文件的名称
total_label = os.listdir(labelfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_label)
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_label[i][:-4] + '\n'# 排除掉生成的classes.txt文件if name=='classes' + '\n':continueif 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()

再用下面脚本将数据组织成Yolov8需要的形式(训练与验证数据集下均包含图像与对应的标签文件夹):

#!/usr/bin/env python
# -*- coding: utf-8 -*-import os,shutil
rootpath="/home/zard/Pictures/data/"#待修改路径
# 输出路径
imgtrain=rootpath+"train/images/"
imgval=rootpath+"val/images/"
labeltrain=rootpath+"train/labels/"
labelval=rootpath+"val/labels/"
if not os.path.exists(imgtrain):os.makedirs(imgtrain)
if not os.path.exists(imgval):os.makedirs(imgval)
if not os.path.exists(labeltrain):os.makedirs(labeltrain)
if not os.path.exists(labelval):os.makedirs(labelval)f = open(rootpath+"dataSet/train.txt","r")
lines = f.readlines()
for i in lines:shutil.copy(rootpath+"images/"+str(i).replace('\n','')+".jpg",imgtrain+str(i).replace('\n','')+".jpg")shutil.copy(rootpath + "labels/" + str(i).replace('\n', '') + ".txt", labeltrain + str(i).replace('\n', '') + ".txt")f = open(rootpath+"dataSet/val.txt","r")
lines = f.readlines()
for i in lines:shutil.copy(rootpath+"images/"+str(i).replace('\n','')+".jpg",imgval+str(i).replace('\n','')+".jpg")shutil.copy(rootpath + "labels/" + str(i).replace('\n', '') + ".txt", labelval + str(i).replace('\n', '') + ".txt")
shutil.copy(rootpath+"dataSet/train.txt",rootpath+"train.txt")
shutil.copy(rootpath+"dataSet/trainval.txt",rootpath+"trainval.txt")
shutil.copy(rootpath+"dataSet/test.txt",rootpath+"test.txt")
shutil.copy(rootpath+"dataSet/val.txt",rootpath+"val.txt")

然后编写ymal文件,${Youpath}替换为你的路径:

train: ${Youpath}/data/train/images
val: ${Youpath}/data/val/images
test: ${Youpath}/data/test/images# number of classes
nc: 1# class names
names: ['dog']

然后去Yolo源码里找到yolov8.yaml参数文件,复制一份并修改:

nc: 1  # number of classes

最后的文件结构如下,蓝色文件夹下均为图像和对应的标注文件:
在这里插入图片描述

3.1 命令训练

#激活虚拟环境
conda activate yolov8cd ${Youpath}/data
yolo task=detect mode=train model=yolov8.yaml data=dog.yaml batch=32 epochs=100 imgsz=640 workers=16 device=0

model部分可以进行模型的选择与更改,其余的参数都可以根据自己电脑的性能进行修改。训练完成后就可以进入runs文件夹下面看自己的训练成果:
在这里插入图片描述
结果如下,包括一些图表和验证结果:其中weights下包含两个训练的权重文件(最好的 和 上一次的)
在这里插入图片描述
利用训练得到的权重推理:

#激活虚拟环境
conda activate yolov8
yolo task=detect mode=predict model=best.pt source=15.jpg  device=cpu save=True show=True

由于就只有十几张图片,没有训练出来效果就不展示了
best.pt还可以作为下一次训练的初值:

#激活虚拟环境
conda activate yolov8
yolo task=detect mode=predict model= ./runs/detect/train/weights/best.pt source=15.jpg  device=cpu save=True show=True

3.2 代码训练

训练:

from ultralytics import YOLO# Load a model
# model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
# model = YOLO('./runs/detect/train/weights/best.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8.yaml')  # load a pretrained model (recommended for training)# Train the model
model.train(data='dog.yaml', epochs=100, imgsz=640,workers=16 device=0)

运行,与上面效果是一样的:

#激活虚拟环境
conda activate yolov8
python3 train.py

推理:

from ultralytics import YOLO
from PIL import Image
import cv2model = YOLO("runs/detect/train/weights/best.pt")
# accepts all fonmats - image/dir/Path/URL/video/PIL/ndarray. 0 for webcamresults = model.predict(source="0")
# results = model.predict(source="0") # 用摄像头
# results = model.predict(source="folder",show=True)# Display preds. Accepts all YoLO predict argument#from PIL
im1 = Image.open("15.jpg")
results = model.predict(source=im1, save=True) # save plotted images#from ndarray
# im2 = cv2.imread("test.jpg")
# results = model.predict(source=im2,save=True,save_txt=True) # save predictions as labels
# #from list of PIL/ndancay
# results = model. predict(source=[im1, im2])

运行:

#激活虚拟环境
conda activate yolov8
python3 train.py

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光伏仪器-87110A/B太阳辐照度计

87110A/B 太阳辐照度计 光伏仪器 一款小巧、全数字化的太阳辐照度测试仪表,通过标准太阳电池测试太阳辐照度,并自带温度修正功能。太阳辐照度计集成了环境温度、电池板温度、倾斜角等测试功能,可以通过附带的蓝牙或串行接口连至电脑或智能…

老师的保命大法

数字化高度发达的今天,成绩查询系统已经成为学校教育中不可或缺的一部分。不同于传统的成绩公布方式,成绩查询系统更加高效、便捷,同时也充分保障了每位学生的隐私,今天就来揭秘这个教师保命大法! 1、代码查询法 对于…

【missing-semester】The shell

文章目录 shell 是什么shell 怎么用执行基本程序 Shell中的路径重定向输入输出管道piperoot用户的使用课后练习参考资料 我的操作环境:Windows11下的WSL2(Ubuntu20.04),之后的所有操作都是基于这个前提的 shell 是什么 命令行操作语言,文本界…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异,如我的手机OS版本是2.0,按照上面表应该是4&…

循环链表1

循环链表的结构设计 循环链表就是——链表的头和尾连在一起 即最后一个数据(尾巴结点)的next由单链表的NULL,变为现在循环链表的存储头结点plist的地址200,尾巴结点指向头结点 现在来建立循环链表clist 先写结构设计 现在看对于…

动态获取填充表格数据时的特定值的赋值

1、如图 <el-tablev-loading"loading":data"columnList"bordertooltip-effect"dark":size"tableSize":height"tableHeight"style"width: 100%; margin: 15px 0"><el-table-column type"selection…

上机实验三 图的最小生成树算法设计 西安石油大学数据结构

二叉树设计 实验名称&#xff1a;二叉树设计 &#xff08;1&#xff09;实验目的&#xff1a; 1&#xff09; 掌握二叉树的逻辑结构。 2&#xff09; 掌握二叉树的二叉链表存储结构&#xff1b; 3&#xff09; 掌握基于二叉链表存储的二叉树的遍历等操作的实现。 &#x…

windows版:TensorRT安装教程

查看版本对应cuda与TensorRT&#xff1a;https://blog.csdn.net/weixin_41540237/article/details/131589929 TensorRT 下载地址&#xff1a;https://developer.nvidia.com/nvidia-tensorrt-7x-download cudnn下载地址&#xff1a;https://developer.nvidia.com/rdp/cudnn-ar…

CV计算机视觉每日开源代码Paper with code速览-2023.11.13

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构&#xff1a;Transformer】PolyMaX: Gener…

【蓝桥杯软件赛 零基础备赛20周】第3周——填空题

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 文章目录 00. 2023年第14届参赛数据0. 上一周答疑1. 填空…

ICC2/innovus merge gds

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 calibre merge gds的方法示例参考往期文章: Calibre Merge GDS ICC2: write_gds -merge_files "std.gds sram.gds io.gds ip.gds ... ..." innovus: streamout -…

Ubuntu 搜狗输入法无法输入中文解决方案(不需要重装,不需要重启服务器)

Ubuntu 搜狗输入法突然无法输入中文&#xff0c;上午还好用&#xff0c;下午就不好用了&#xff0c;直接上解决方案 1.终端输入pidof fcitx找到搜狗的进程&#xff0c;如下图红框中的就是进程 2.直接杀掉这个进程 3.其实到第二步&#xff0c;如果搜狗输入法自动重启了&#xf…