yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)

news2024/11/16 1:44:52

​​​​​​yolov8实战第二天——yolov8训练结果分析(保姆式解读)-CSDN博客 

YOLOv8是一种基于深度神经网络的目标检测算法,它是YOLO(You Only Look Once)系列目标检测算法的最新版本。YOLOv8的主要改进包括:

  1. 更高的检测精度:通过引入更深的卷积神经网络和更多的特征层,YOLOv8可以在保持实时性的同时提高检测精度。

  2. 更快的检测速度:通过对模型进行优化,YOLOv8可以在不降低检测精度的情况下提高检测速度。

  3. 支持更多的检测任务:除了传统的物体检测任务之外,YOLOv8还支持人脸检测、车辆检测等更多的检测任务。

  4. 更易于训练和部署:YOLOv8采用了更加简单的网络结构和训练策略,使得它更易于训练和部署。

YOLOv8是一个非常强大的目标检测算法,它在准确性、速度和易用性方面都具有很大的优势,因此在工业界和学术界都受到了广泛的关注和应用。

一、yolov8部署

说明:请严格安装部署步骤。

第一步、显卡驱动查看 nvidia-smi 


第二步、yolo8代码下载

https://github.com/ultralytics/ultralytics 


第三步、cuda及cudnn安装

https://developer.nvidia.com/cuda-toolkit-archive 

https://developer.nvidia.com/rdp/cudnn-archive 


第四步、安装anaconda

https://www.anaconda.com/download

环境变量设置(安装在哪里就找那个路径):


第五步、创建python环境

conda create -n yolo python==3.11 

conda环境操作指南:

查看现有环境 conda env list  

激活失败 conda init cmd.exe

删除环境 conda env remove -n yolo 


第六步、激活环境

一定要选择命令提示符。

activate yolo

以后每次使用都要激活该环境。


第七步、安装pytorch

https://pytorch.org/

我是cuda12.0,所以安装cuda11.8版本。 

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia


第八步、安装库

pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple


第九步、推理检测

yolo predict model=yolov8n.pt source=bus.jpg

图片名自己设置,自动下载模型yolov8n.pt,结果在runs文件夹中。

第十步、训练

yolo train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01

自动训练下载数据集datasets,报错,设置安装anaconda所在盘的虚拟内存。

二、yolov8训练自己的数据集

第一步、数据准备

在yolov8中建立datasets文件夹,然后建立数据集文件夹mydata。

mydata中是imges图片文件和label标注后的Annotations xml文件夹和imageSets。 

其中使用makeTxt.py,给数据分类trian val test。

import os
import random
 
trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = './Annotations'
txtsavepath = './ImageSets'
total_xml = os.listdir(xmlfilepath)
 
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
 
ftrainval = open('./ImageSets/trainval.txt', 'w')
ftest = open('./ImageSets/test.txt', 'w')
ftrain = open('./ImageSets/train.txt', 'w')
fval = open('./ImageSets/val.txt', 'w')
 
for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftest.write(name)
        else:
            fval.write(name)
    else:
        ftrain.write(name)
 
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

运行后ImageSets文件夹生成四个txt。 

再使用voc_label.py,将数据转换成label格式。修改自己的类,逗号隔开,我训练的就一个“老鼠”类。

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[('train'), ('test'),('val')]

classes = ["mouse"]


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('Annotations/%s.xml'%(image_id))
    out_file = open('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
        cls = obj.find('name').text
        # if cls not in classes or int(difficult)==1:

        if cls not in classes:
            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))
        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('labels/'):
        os.makedirs('labels/')
    image_ids = open('ImageSets/%s.txt'%(image_set)).read().strip().split()
    list_file = open('%s.txt'%(image_set), 'w')
    for image_id in image_ids:
        list_file.write('%s/images/%s.jpg\n'%(wd,image_id))
        convert_annotation(image_id)
    list_file.close()

#os.system("cat 2008_train.txt > train.txt")
#os.system("cat 2008_train.txt 2008_val.txt > train.txt")
#os.system("cat 2008_train.txt 2008_val.txt 2008_test.txt> train.txt")

#os.system("cat 2014_train.txt 2014_val.txt 2012_train.txt 2012_val.txt > train.txt")
#os.system("cat 2007_train.txt 2007_val.txt 2007_test.txt 2012_train.txt 2012_val.txt > train.all.txt")

运行后生成labels文件夹和三个txt。

至此数据准备工作完成,开始训练。 

第二步、训练

建立一个yaml文件

shu.yaml

train: datasets/mydata/train.txt
val: datasets/mydata/val.txt


# Classes
names:
  0: mouse

训练指令:

yolo train data=shu.yaml model=yolov8n.pt epochs=100 lr0=0.01 

至此训练完成。 在runs中生成训练结果和训练模型。

训练结果分析:yolov8实战第二天——yolov8训练结果分析(保姆式解读)-CSDN博客

第三步、测试 

使用训练后的模型进行测试。

测试指令:

yolo predict model=runs/detect/train12/weights/best.pt source=datasets/mydata/images/mouse-4-6-0004.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G工业网关视频传输应用

随着科技的不断进步,5G网络技术已经成为了当前最热门的话题之一。而其中一个引人注目的领域就是5G视频传输和5G工业网关应用。在传统网络通信中,由于带宽和延迟的限制,视频传输常常受到限制,而工业网关应用也存在着链路不稳定、数…

Android12-RK3588_s-开机动画

目录 一、实现自定义开机动画 步骤一:准备 bootanimation.zip 步骤二:将 bootanimation.zip 放到 /system/media/bootanimation.zip下 步骤三:重启即可 二、注意事项 2.1 bootanimation.zip 压缩 2.2 bootanimation.zip 存放 2.3 boo…

STM32_启动流程详解

目录标题 前言 启动流程概述复位中断函数详解SystemInit函数详解 __main函数详解 附录 stm32单片机的存储器映像中断向量表的映射 前言 最近在学习IAP远程OTA升级单片机固件程序,发现自己对单片机的启动流程还不是那么了解,就总结整理一下吧。 启动流程…

如何进行Feign的自定义配置

Feign可以支持很多的自定义配置&#xff0c;下列是部分配置信息 类型作用说明Logger.Level修改日志级别配置键&#xff1a;loggerLevel&#xff0c;包含四种不同的级别&#xff1a;NONE、BASIC、HEADERS、FULLClass<Retryer>失败重试机制配置键&#xff1a;retryer&#…

C语言程序_速通_基础_笔记1_备战大一期末考_12.16

1.固定格式 #include<stdio.h>int main(){return 0;} 2.printf 正常输出&#xff1a;printf("XXXXX"); 如果没有任何换行符什么的&#xff0c;输进去多少个printf&#xff0c;就直接连在一起。 \n&#xff0c;换行 \t 空格 3.int float double char flo…

牛客第一期

1.创建动态数组 #include <iostream> using namespace std;int main() {int n; cin>>n; int *pnew int [n]; int i0; for(i0;i<n;i) {*(pi)ni; } int j0; for(j0;j<n;j) {printf("%d ",*(pj)); } } #include<bits/stdc.h> using namespace s…

文件上传自动化测试方案(超详细)

一、概述 【测试地址】&#xff1a;https://pan.baidu.com 【测试工具】&#xff1a;selenium、requests 【脚本语言】&#xff1a;Python 【运行环境】&#xff1a;Windows 百度网盘作为文件存储及分享的平台&#xff0c;核心功能大部分是对文件的操作&#xff0c;如果要…

2024GoCN线下活动全面启动,赠送深圳MeetUp门票

2024年GoCN社区将全面启动一系列令人期待的线下活动---不仅将在北京、上海、深圳、武汉、成都、杭州、广州、西安等地举办 meetup&#xff0c;还将在北京和上海举办 GopherChina 大会。 2024议题征集通道已开启&#xff0c;欢迎各位有实战经验、独特观点的Gopher前来分享~ 2024…

vue中iframe标签跨域通信——父子页面之间传值(解决子页面收不到父页面的值或子页面收到的数据为undefined的问题)

背景 因为本系统需要支持第三方系统页面的嵌入&#xff0c;于是尝试使用iframe标签&#xff0c;进行跨域通信&#xff0c;父子页面相互传值。初始化时&#xff0c;父页面发送数据给子页面&#xff0c;需要在子页面加载完成后发送&#xff0c;不然接收不到数据。父页面直接给子页…

湖北点赋网络:明星为何钟爱美式咖啡?品味与生活的完美融合

美式咖啡作为一种传统的咖啡饮品&#xff0c;备受明星们的青睐。无论是在电影拍摄现场&#xff0c;还是舞台后台&#xff0c;明星们经常手持着一杯美式咖啡&#xff0c;这不仅仅是为了满足他们的口味偏好&#xff0c;更是一种享受和生活方式的体现。那么&#xff0c;为何明星们…

磁力计LIS2MDL开发(2)----电子罗盘

磁力计LIS2MDL开发.2--电子罗盘 概述视频教学样品申请源码下载环境磁场建模消除硬铁误差软铁干扰主程序 概述 本文将介绍如何使用 LIS2MDL 传感器来读取数据来转化为指南针。 地磁场强度范围约为 23,000 至 66,000 nT &#xff0c;并且可以建模为磁偶极子&#xff0c;其场线起…

Spring AOP 和 Spring Boot 统一功能处理

文章目录 Spring AOP 是什么什么是 AOPAOP 组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 实现 Spring AOP添加 Spring AOP 框架支持execution表达式定义切面、切点…

Pycharm第三方库导入失败避坑!

最近遇到了明明安装了 python 第三方库&#xff0c;但是在 pycharm 当中却导入不成功的问题。 使用Pycharm手动安装三方库和自动安装三方库都失败&#xff0c;以及Pycharm终端使用pip命令安装也未解决。网上找各种方法尝试都没成功&#xff0c;原来是一不小心就跳进了虚拟环境…

【经验分享】openGauss 5.0.0全密态数据库应用小试

引子&#xff1a; 去年了解openGauss数据库安全特性的时候了解到全密态等只查询特性&#xff0c;实际上openGauss在早期的1.0.0版本就引入了全密态等值查询特性&#xff0c;下面尝试对openGauss 5.0.0版本全密态的使用进行记录&#xff0c;供参考。 全密态数据库&#xff1a;…

造型精致的冰精灵充电头,充电效率高安全可靠,居家出行皆可用

随着大家对手机的依赖度越来越高&#xff0c;快速充电已经成为必不可少的需求。快充当然少不了支持快充的充电器&#xff0c;现在市面上的快充头很多&#xff0c;安全性和便携性是我们选择时的重点关注方向&#xff0c;我目前用的是战飞ZEFi冰精灵&#xff0c;这款产品有着独特…

Python学习路线 - Python语言基础入门 - 函数进阶

Python学习路线 - Python语言基础入门 - 函数进阶 函数的多返回值多个返回值 函数的多种参数使用形式函数参数种类位置参数关键字参数缺省参数不定长参数位置传递 - 不定长关键字传递 - 不定长 函数作为参数传递lambda匿名函数 函数的多返回值 问: 如果一个函数如些两个return…

[Spring ~松耦合的设计神器]`SPI`

Java SPI&#xff08;Service Provider Interface&#xff09;是一种Java的服务提供者接口机制。它允许在运行时动态加载实现服务接口的类。 文章目录 基本概念最简单的实例使用 jar 包通过 spi动态实现接口功能 基本概念 SPI 机制的基本思想是&#xff0c;定义一个服务接口&a…

Git 使用教程(超级详细)

目录 一&#xff1a;Git二&#xff1a;SVN与Git的的区别三、安装Git四&#xff1a;常规操作五&#xff1a;远程仓库六&#xff1a;创建与合并分支七&#xff1a;bug分支八&#xff1a;多人协作九&#xff1a;git可视化工具 Git Git 是一种分布式版本控制系统&#xff0c;用于…

Echarts 热力图与折线图的结合

热力图与折线图结合使用(文末含源码) 这种需求并不多见&#xff0c;遇到后第一时间翻看了Echars官方文档&#xff0c;并没有发现类似的例子。于是自己动手合并了双轴&#xff0c;后发现折线图会被遮盖。经过排查发现了一个关键参数&#xff1a;visualMap的配置。这个配置在热力…

Vue脚手架 Vue CLI安装

目录 0.为什么要安装Vue CLI脚手架 1.配置方法 1.全局安装 (一次) 2.查看Vue版本&#xff08;一次&#xff09; 报错&#xff1a;出现禁止运行脚本 3.创建项目架子&#xff08;可多次&#xff09; 报错npm err! 问题&#xff1a;已知npm换过国内源&#xff0c;且进度条…