yolov8训练自定义目标检测模型

news2024/12/28 22:09:50

本文使用Ultralytics的python API进行模型训练,适用于yolov8小白入门,大佬请忽略本文

笔者也是昨天开始学习的小白,如有错误希望多多指正

目录

准备数据集 

python安装yolov8 

配置yaml 

从0开始训练

从预训练模型开始训练


准备数据集 

首先得准备好数据集,你的数据集至少包含images和labels,严格来说你的images应该包含训练集train、验证集val和测试集test,不过为了简单说明使用步骤,其中test可以不要,val和train可以用同一个,因此我这里只用了一个images

其中images装的是图片数据,labels装的是与图片一一对应同名的yolo格式txt,即类别号,经过归一化的中心x和y坐标以及宽和高

python安装yolov8 

然后我们开始准备yolov8,使用python的API的话就比较简单,首先安装一下yolov8

用pip的话安装的话

pip install ultralytics

使用pycharm安装的话

配置yaml 

安装完了之后,差不多就可以开始了,我们首先看看官方给的代码

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from scratch
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Use the model
model.train(data="coco128.yaml", epochs=3)  # train the model
metrics = model.val()  # evaluate model performance on the validation set
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image
path = model.export(format="onnx")  # export the model to ONNX format

其中迷惑的是yolov8n.yaml、yolov8n.pt和coco128.yaml这几个文件,yolov8n.yaml是yolov8的配置,yolov8n.pt是预训练的模型,coco128.yaml是coco数据集的配置参数

因此如果我们想要训练自己的模型的话,需要修改一下配置文件,首先到GitHub上下载yolov8n.yaml和coco128.yaml下来,这两个文件的位置有可能会变,所以最好在仓库上直接搜索

大概长这样,你也可以自己创建,然后把内容复制进去

yolov8n.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

coco128.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)


# 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: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush


# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

然后修改yolov8n.yaml,把nc的数值改成你的数据集的类别数,我这里的数据集只有乌骨鸡和狮头鹅两个

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 2  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

然后修改coco128.yaml,我把文件名也改成了data.yaml,path改成images和labels的上一级目录地址,train改成训练集相对于path的地址,val也是改成验证集的相对于path的地址,我这里训练集和验证集用的是同一个嘿嘿嘿,然后把test注释掉,因为我没用测试集,还有就是names那里改成你的训练集的类别名,并把多余的类别删掉

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)


# 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: C:/Users/Yezi/Desktop/人工智能实训/HW2/data # dataset root dir
train: images # train images (relative to 'path') 128 images
val: images # val images (relative to 'path') 128 images
#test:  # test images (optional)

# Classes
names:
  0: goose
  1: chicken

这样子就配置好了

然后开始训练

从0开始训练

下面是从0开始训练的过程

其实训练的代码就两行

model = YOLO("yolov8n.yaml")  # build a new model from scratch
model.train(data="data.yaml", epochs=5)  # train the model

不过从0开始训练的效果并不好,下面是我自己的测试代码,由于我电脑比较烂,GPU摆不上用场,所以只能用cpu训练

from ultralytics import YOLO
import matplotlib.pyplot as plt

model = YOLO("yolov8n.yaml")  # build a new model from scratch
model.train(data="data.yaml", epochs=30, device='cpu')  # train the model
model.val(data="data.yaml")
results = model(r"C:\Users\Yezi\Desktop\人工智能实训\HW2\data\images\00909.jpg")  # predict on an image
plt.imshow(results[0].plot())
plt.show()
results = model(r"C:\Users\Yezi\Desktop\人工智能实训\HW2\data\images\100318.jpg")  # predict on an image
plt.imshow(results[0].plot())
plt.show()

从预训练模型开始训练

官方推荐用预训练好的模型开始训练

首先下载一个官方预训练好的模型

我这里下载的是yolov8n

然后使用预训练模型训练我的数据集

from ultralytics import YOLO
import matplotlib.pyplot as plt

model=YOLO("yolov8n.pt")
model.train(data="data.yaml", epochs=30, device='cpu')  # train the model
model.val(data="data.yaml")
results = model(r"C:\Users\Yezi\Desktop\人工智能实训\HW2\data\images\00909.jpg")  # predict on an image
plt.imshow(results[0].plot())
plt.show()
results = model(r"C:\Users\Yezi\Desktop\人工智能实训\HW2\data\images\100318.jpg")  # predict on an image
plt.imshow(results[0].plot())
plt.show()

 乌骨鸡的效果是这样的

狮头鹅的效果是这样的

 

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

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

相关文章

Matlab论文插图绘制模板第120期—分组气泡云图

​在之前的文章中,分享了Matlab气泡云图的绘制模板: 进一步,再来分享一下分组气泡云图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注…

【Vue】vue在Windows平台IIS的部署

系列文章 【C#】IIS平台下,WebAPI发布及异常处理 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836 【Vue】vue2与WebApi跨域CORS问题 本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959 文章目…

新闻发稿多少钱一篇?轻松发布新闻一站式发稿服务平台

随着互联网的发展,新闻发布成为企业和个人宣传推广的重要手段之一。而在选择新闻发稿平台时,费用是一个关键因素。对于很多人而言,关心的问题是:新闻发稿多少钱一篇?是否有平价的选择?在这个方面&#xff0…

前端开发中的try...catch

首先try...catch 结构可以用来处理 Promise 中的异常。在 JavaScript 中,Promise 提供了一种处理异步操作的机制,并且可以通过 .catch() 方法捕获并处理异步操作中抛出的异常。 async function someAsyncFunction() {try {const result await someProm…

LPWAN产业何时才能真正爆发?

导读: 虽然LPWAN目前还有重重困难,但是我们有充分的理由相信LPWAN即将爆发的趋势不变,当然,因为LPWAN是一个技术流派繁多的市场,除了LoRa、NB-IOT、eMTC还有RPMA、ZETA等等众多的技术流派,对于应用企业而言…

01【Git的基本使用与底层命令】

下一篇:02【Git的分支与数据恢复】 目录:【Git系列教程-目录大纲】 文章目录 一、Git概述1.1 Git简介1.2 集中式与分布式1.2.1 集中式版本控制1.2.2 分布式版本控制 1.3 Git的使用流程1.3.1 本地仓库1.3.2 协同开发 1.4 Git的配置1.4.1 Git的配置等级1…

Java——List接口

1.Java单列集合类(Collection)概述 Java中的集合类就像一个容器,专门用来存储Java类的对象。 数组可以用来保存对个对象,但有时无法事先确定需要保存对象的个数,此时数组便不再使用,因为数组的长度不可变…

小黑怀柔证书下来,腿部酸痛也得到了缓解,跟跑团里的毛毛一起遛龙潭中湖公园,过两天要走闭幕式的leetode之旅的leetcode之旅:18. 四数之和

小黑代码(小黑独立做出来) class Solution:def fourSum(self, nums: List[int], target: int) -> List[List[int]]:# 数组长度n len(nums)if n < 4:return []# 排序nums.sort()def three_sum(target_, start, end):if end - start < 2:return []# 结果数组res []fo…

如何申请免费的DV SSL证书

SSL&#xff08;Secure Sockets Layer&#xff09;证书是保护网站和用户数据安全的重要组成部分。DV&#xff08;Domain Validation&#xff09; SSL证书是最简单的一种&#xff0c;通常用于验证域名的拥有权。虽然市面上有许多商业SSL证书&#xff0c;但您也可以轻松获得免费的…

IP地址为什么需要SSL证书

随着互联网的发展&#xff0c;越来越多的企业和个人开始使用IP地址进行网站访问。然而&#xff0c;明文传输的IP地址很容易被黑客截取&#xff0c;从而导致数据泄露和网络安全问题。因此&#xff0c;为了保护IP地址的数据传输安全&#xff0c;企业需要使用IP地址证书。 点击申请…

OCPP1.6协议

目录 导言 功能简介 本地授权列表 类型 IdToken IdTagInfo 授权状态 ChargePointErrorCode CiString50Type 充电桩状态-ChargePointStatus 协议指令 1、授权-Authorize 1.1 说明 1.2 Authorize.req 1.3 Authorize.conf 1.4 JSON格式 1.5 代码 2、启动通知-B…

华为OD机试 - 热点网站统计 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》…

【C++】缺省参数与函数重载

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 本篇文章博主将带你学习缺省参数与函数重载&…

京东API接口带你了解京东工业|电商及供应链服务

京东工业赴港上市&#xff0c;带着非常优秀的成绩。 招股书显示&#xff0c;2022年实现交易额223亿元&#xff0c;营收141亿元&#xff0c;调整后净利润7亿元。短短六年时间&#xff0c;已成为中国工业供应链技术与服务市场领导者。京东API接口接入调取京东商品详情&#xff0c…

零基础怎么样才能学好 Python?Python 入门必看

Python 目前可以用一个字来描述那就是 “火”&#xff0c;问题来了&#xff0c;这么火的语言零基础小白到底该怎样学习 Python&#xff1f; 首先&#xff0c;从基础开始学习&#xff0c;切勿毛躁。 刚开始学习 Python 的时候&#xff0c;我们可能会有些毛躁总觉得这些知识太简…

南美委内瑞拉市场最全分析开发攻略,收藏一篇就够了

委内瑞拉是一个常被国内跨境商家忽略但具有巨大潜力的市场。尽管委内瑞拉的网络基础建设水平较低&#xff0c;网络速度受限&#xff0c;但委内瑞拉网络渗透率较佳。因为长期受美国制裁&#xff0c;所以经济发展水平较低&#xff0c;很多产品依赖进口&#xff0c;市场潜力还是非…

睿趣科技:抖音短视频带货素材哪里找

随着抖音短视频的火爆&#xff0c;越来越多的商家开始利用抖音进行产品推广和销售。而制作一部成功的抖音短视频&#xff0c;除了需要有吸引人的内容和创意外&#xff0c;还需要有高质量的素材。那么&#xff0c;抖音短视频带货素材应该去哪里找呢? 首先&#xff0c;我们可以从…

将excel表中的英文自动翻译成中文

某乎上垃圾内容太多&#xff0c;要么是复制粘贴的youdao翻译&#xff0c;要么是某网络函数库的软广。这里提供office的原生方法&#xff0c;需要用到word&#xff08;不适合数据量太大的情况&#xff09; 方法 复制需要翻译的列到word选择审阅 -> 翻译 -> 翻译文档 -&g…

掌控安全Update.jsp SQL注入

0x01 漏洞介绍 亿赛通电子文档安全管理系统是国内最早基于文件过滤驱动技术的文档加解密产品之一&#xff0c;保护范围涵盖终端电脑&#xff08;Windows、Mac、Linux系统平台&#xff09;、智能终端&#xff08;Android、IOS&#xff09;及各类应用系统&#xff08;OA、知识管理…

【精华系列】跟着Token学习数据挖掘-1

Hello&#xff0c;大家好&#xff01;这里是Token的博客&#xff0c;欢迎您的到来 今天整理的笔记时数据挖掘方向的基础入门&#xff0c;了解数据分析使用的一些基础的Python库&#xff0c;为后面的数据处理做好准备 01-数据分析工具介绍 准备&#xff1a;Python的安装、平台搭…