【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】

news2024/11/15 23:42:26

目录

  • 1.简介
  • 2.环境安装
    • 2.1安装torch相关库
    • 2.2 获取yolov8最新版本,并安装依赖
  • 3. 如何使用模型用于各种CV任务
    • 3.1 目标检测任务实现
      • 检测图片代码
      • 检测视频代码
    • 3.2 分割任务实现
      • 分割图片代码
      • 分割视频代码
    • 3.3 追踪任务
    • 3.4 姿态检测任务
      • 姿态检测(图片)代码
      • 姿态检测(视频)代码
  • 4. 模型中相关参数及结果说明
    • 4.1模型预测可以设置的参数
    • 4.2 results[0].plot()图形展示可以设置的参数说明
    • 4.3 模型支持的图片与视频格式
    • 4.4 各任务检测结果results信息说明
  • 总结

1.简介

YOLOv8是Ultralytics的最新版本YOLO。作为最先进的 SOTA 模型,YOLOv8 建立在以前版本成功的基础上,引入了新功能和改进,以增强性能、灵活性和效率。YOLOv8 支持全方位的视觉 AI 任务,包括检测分割姿势估计跟踪分类。这种多功能性使用户能够在不同的应用程序和域中利用YOLOv8的功能。模型中只需要设定不同的训练模型,就可以得到不同的检测结果。

本文主要介绍如何使用该模型框架进行CV中各种任务的推理使用,包含检测分割姿势估计跟踪,关于模型的训练等相关内容,后续有空再进行更新,感兴趣的小伙伴,可以点赞关注我~谢谢

为了方便小伙伴们学习,我已将本文的所有源码、相关预训练模型及视频等打包好,需要的小伙伴可以通过以下方式获取:

关注GZH【阿旭算法与机器学习】,回复【YOLOV8】可获取本文所有源码、预训练模型及示例图片视频数据

在这里插入图片描述

2.环境安装

2.1安装torch相关库

官网地址:https://pytorch.org/get-started/locally

安装命令:

pip install torch torchvision torchaudio

在这里插入图片描述

2.2 获取yolov8最新版本,并安装依赖

github地址: https://github.com/ultralytics/ultralytics

通过克隆仓库到本地来获得yolov8最新版本。
在这里插入图片描述
安装依赖环境:

pip install ultralytics

3. 如何使用模型用于各种CV任务

安装好yolov8需要的运行环境之后,就可以直接使用模型了,目前,该模型可以直接用于检测分割姿势估计跟踪分类这5类检测任务。
支持两种运行方式:
方式一:命令行形式示例

yolo TASK MODE ARGS

举例: yolo detect predict model=yolov8n.pt source='1.jpg'
表示对图片1.jpg进行目标检测

参数说明:

TASK (optional) 表示模型任务类型,可以从列表 [detect, segment, classify, pose]选一个. 分别代表检测、分割、分类、姿态检测任务
MODE (required) 表示模型需要执行的操作,可以从列表 [train, val, predict, export, track, benchmark]选一个,分别代表训练、验证、预测、模型转换、追踪、基准模型评估
ARGS (optional) 表示其他的一些参数设置,后面详细说明

方式二:python代码形式示例

from ultralytics import YOLO

# 加载预训练模型,
model = YOLO('yolov8n.pt',task='detect')
# yolov8n.pt表示预训练模型
# task代表需要执行的任务:detect, segment, classify, pose
# 使用模型进行指定任务
results = model(ARGS)

3.1 目标检测任务实现

检测图片代码

from ultralytics import YOLO
import cv2
# 加载预训练模型
model = YOLO("yolov8n.pt", task='detect') 
# model = YOLO("yolov8n.pt") task参数也可以不填写,它会根据模型去识别相应任务类别
# 检测图片
results = model("./ultralytics/assets/bus.jpg")
res = results[0].plot()
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)

在这里插入图片描述

检测视频代码

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')
print('111')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

请添加图片描述

3.2 分割任务实现

分割图片代码

from ultralytics import YOLO
import cv2
# Load a model
model = YOLO('yolov8n-seg.pt')  
# Predict with the model
results = model('./ultralytics/assets/bus.jpg')  # predict on an image
res = results[0].plot(boxes=False) #boxes=False表示不展示预测框,True表示同时展示预测框
# Display the annotated frame
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)

在这里插入图片描述

分割视频代码

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n-seg.pt', task='segment')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()
        # annotated_frame = results[0].plot(boxes=False)不显示预测框

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

显示预测框结果
请添加图片描述
不显示预测框结果
将代码中的boxes设为False即可:
annotated_frame = results[0].plot(boxes=False)
请添加图片描述

3.3 追踪任务

代码如下:【与目标检测不同的是,每个物体有一个ID。

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt',task='detect')  
# model = YOLO('yolov8n-seg.pt')  

# Track with the model
results = model.track(source="1.mp4", show=True)

请添加图片描述

3.4 姿态检测任务

姿态检测(图片)代码

from ultralytics import YOLO
import cv2
# Load a model
model = YOLO('yolov8n-pose.pt')  # load a pretrained model (recommended for training)
results = model('./ultralytics/assets/bus.jpg')
res = results[0].plot()
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)

在这里插入图片描述

姿态检测(视频)代码

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n-pose.pt', task='pose')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

请添加图片描述

4. 模型中相关参数及结果说明

4.1模型预测可以设置的参数

results = model(source= ‘./ultralytics/assets/bus.jpg’)

此处可以设置许多不同的参数,参数说明如下:
在这里插入图片描述

4.2 results[0].plot()图形展示可以设置的参数说明

results= model(img)
res_plotted = results[0].plot()
cv2.imshow("result", res_plotted)

在这里插入图片描述

4.3 模型支持的图片与视频格式

图片格式:
在这里插入图片描述
视频格式:
在这里插入图片描述

4.4 各任务检测结果results信息说明

上述各任务中的检测结果results均为一个列表,每一个元素为result对象,包含以下属性,不同任务中使用的属性不相同。详细说明如下:

Results.boxes:表示Boxs对象,具有属性和操作边界框的方法
Results.masks:用于获取分割相关信息
Results.probs:表示预测各类别的概率
Results.orig_img:表示内存中加载的原始图像
Results.path:表示输入图像路径的路径

results = model("./ultralytics/assets/bus.jpg")
for result in results:
    **# Detection 目标检测**
    result.boxes.xyxy   # box with xyxy format, (N, 4)
    result.boxes.xywh   # box with xywh format, (N, 4)
    result.boxes.xyxyn  # box with xyxy format but normalized, (N, 4)
    result.boxes.xywhn  # box with xywh format but normalized, (N, 4)
    result.boxes.conf   # confidence score, (N, 1)
    result.boxes.cls    # cls, (N, 1)
    **# Segmentation  分割**
    result.masks.data      # masks, (N, H, W)
    result.masks.xy        # x,y segments (pixels), List[segment] * N
    result.masks.xyn       # x,y segments (normalized), List[segment] * N
    **# Classification  分类**
    result.probs     # cls prob, (num_class, )

总结

由于篇幅原因,本文只是介绍了如何使用预训练模型进行相关的任务检测,关于模型的训练及其他相关内容,后续有时间再进行更新,感兴趣的小伙伴,可以点赞关注我~谢谢

个人觉得这套YOLOv8框架还是十分强大的,一套框架几乎可以解决大部分CV领域的检测任务,只需更换不同的训练模型就行,文章如果对你有帮助,感谢小伙伴们的一键3连哦~我们下次再见

为了方便小伙伴们学习,我已将本文的所有源码、相关预训练模型及视频等打包好,需要的小伙伴可以通过以下方式获取:

关注下方名片【阿旭算法与机器学习】,回复【YOLOV8】可获取本文所有源码、预训练模型及示例图片视频数据

在这里插入图片描述

参考:https://docs.ultralytics.co

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

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

相关文章

27.Linux网络编程 掌握三次握手建立连接过程掌握四次握手关闭连接的过程掌握滑动窗口的概念掌握错误处理函数封装实现多进程并发服务器实现多线程并发服务器

基本概念叫协议 什么叫协议? 协议是一个大家共同遵守的一个规则, 那么在这个网络通信当中,其实就是双方通信和解释数据的一个规则,这个概念 你也不用记,你只要心里明白就可以了, 分层模型, 物数网传会表应…

Tensorflow GPU 版本安装教程

非常详细的 Tensorflow GPU 版本安装教程 一、安装Anaconda二、TensorFlow GPU 一、安装Anaconda 这一步比较简单,也没有太多的需要注意的,去官网下载即可: 官网地址如下: https://www.anaconda.com/blog/individual-edition-2…

百家云在人工智能领域再有新动作,发布应用于多个行业的AIGC解决方案

4月17日消息,音视频SaaS上市公司百家云(股票代码:RTC)今日宣布,公司将正式推出应用于多个垂直行业及场景的人工智能生成内容及视频解决方案。 百家云总裁马义表示,此次发布的解决方案,将在极短…

谷歌SEO优化技巧方法

谷歌SEO排名对于许多公司和个人来说都非常重要。随着谷歌成为人们搜索信息的首选,拥有良好的谷歌排名可以帮助我们的网站在搜索引擎中展现出更高的可见度,吸引更多的访问量和潜在客户。优化谷歌SEO排名需要一定的时间和专业知识,无法一蹴而就…

Vulnhub项目:Lin.Security(Linux提权大合集)

靶机地址:linsecurity 靶机描述了用户名和密码 用户名:bob、密码:secret 登录后看到了IP地址,或者在kali上像之前那样进行ip收集,端口收集 开放的端口有很多,从22端口开始,知道用户名和密码&…

供水管网爆管预测模型研究现状

配水管网是供水系统中最昂贵的组成部分。管网运行管理和调度技术难度高,爆管事故 容易发生,对人民生活、工业生产、城市交通及社会安定造成不利影响,造成严重的经济损 失。合理的管道的修复更新计划是满足供水目标、实现对管网的科学管理的重…

回炉重造五--软件管理

1.软件管理 1.1软件包中的文件分类 二进制文件库文件配置文件帮助文件 1.2包查询–rpm -a:所有包 -p:针对尚未安装的程序包文件做查询工作 -l:查看指定的程序包安装后生成的所有文件 -i:查看包的信息 #常用的查询方法 -qa/q/qi2、yum和dnf 2.1 yum/dnf工作原理…

数据库基础篇 《5. 排序与分页》

目录 1. 排序数据 1.1 排序规则 1.2 单列排序 1.3 多列排序 2. 分页 2.1 背景 2.2 实现规则 2.3 拓展 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC ( ascend ) : 升序 DESC ( descend ) : 降序 ORDER …

【Java 数据结构】栈的实现及相关OJ题

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Flutter 通过 VS code 连接 Android 模拟器(Windows)

环境配置 Flutterhttps://flutter.cn/docs/get-started/install/windowsAndroid Studiohttps://developer.android.google.cn/studioVS code安装Flutter插件https://flutter.cn/docs/get-started/editor?tabvscode夜神模拟器https://www.yeshen.com 注意事项 Flutter安装之…

第五章_Redis事务

是什么 官网 能做什么 一个队列中,一次性、顺序性、排他性的执行一系列命令 Redis事务 VS 数据库事务 1 单独的隔离操作 Redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可…

【浅学 Linux】

浅学 Linux 一、 Linux1. 目录2. 虚拟机的设置2.1 克隆与快照 3.系统与设置命令3.1 用户相关命令3.2 用户组3.3 管理用户组内成员3.4 日期管理3.5 显示用户3.6 id命令&sudo命令3.7 进程相关的命令top 查看进程ps 查看进展kill 杀死进程 4. Linux目录管理4.1 关机与重启命令…

RIP协议(路由信息协议)简介

一.动态路由简介 1.动态相对静态路由来说,找路更灵活,相互传递 2.分类: 二.RIP协议简介 1.三个版本RIPV1和RIPV2 (在IPV4中使用), RIPNG (在IPV6中使用) 2.原理简介 三.配置 1.启用Rip 并指定进程ID (进程ID 只具有本地意义…

即插即用! | 国防科大联合慕尼黑工业大学提出新型解耦头 TSCODE: 引入yolov5/yolov7助力目标检测器轻松涨点!

1.Task-Specific COntext DEcoupling, TSCODE 介绍 论文:https://arxiv.org/pdf/2303.01047.pdf 本文提出了一种新颖的即插即用的特定于任务的上下文解耦头(Task-Specific COntext DEcoupling, TSCODE),通过进一步解开两个任务的特征编码来提升网络整体的性能 TSCODE整体的…

SYSU程设c++(第九周)函数对象、友元函数、友元类

函数对象: 如果一个类定义了operator()运算符函数,则可以使用该类的对象名为函数名调用这个函数. 函数对象是一个对象,但调用形式和普通函数调用一样,因此取名叫函数对象 (注意operator()先有个括号,接着才是括号(参数…

XHR 和 AJAX 的结合 - API 测试

大家好,之前一期介绍了怎样通过工具类进行对API 接口测试,这一期将演示如何手写一个 Ajax的请求。 什么是 XHR ? 全称为 XMLHttpRequest ,它是浏览器内置的对象,使得 JavaScript 可以发送 HTTP 请求。 什么是Ajax ? Ajax是一种用…

Ubuntu用户权限、查看文件路径、防火墙

一、Ubuntu用户权限 1、设置root用户密码 sudo passwd root 新的 密码: 重新输入新的 密码: passwd:已成功更新密码2、普通用户赋予root权限 修改 /etc/sudoers 文件 su root vim /etc/sudoers把用户加入到root组 # root用户下操作 # -…

Elasticsearch 整合机器学习强化排序

作者:彭晟,2023 年 Elastic 开发者大会讲师 概述 Elasticsearch 整合机器学习强化排序, 介绍如何将机器学习预测能力迁移至 ES 内部,增强排序能力, 构建一个高性能,分布式搜排一体系统,并通过落地更多复杂模型特征和更…

[操作系统安全]缓冲区溢出

一、C栈帧结构 函数调用内存中的三个区域,代码区、静态数据区、动态数据区(压栈和清栈就是在这个区域完成的)。CPU中有三个寄存器,分别是eip、ebp和esp。eip永远指向代码区中将要执行的下一条指令,执行方式包括顺序执行…

NumberPicker分析(一)

NumberPicker分析(一) NumberPicker可实现连续滚动的字符串选择&#xff0c;其实现方式很有借鉴的意义 以最基本的使用方式为例&#xff0c;在layout中布局&#xff1a; <NumberPickerandroid:id"id/number_picker"android:layout_width"wrap_content"…