基于YOLOv8的自定义数据姿势估计

在不断发展的计算机视觉领域中,姿势估计凭借其重要的创新而脱颖而出,彻底改变了我们理解和与视觉数据交互的方式。Ultralytics YOLOv8 处于这一转变的前沿,提供了一种强大的工具,捕捉图像中物体方向和运动的微妙之处。

传统上,在图像中跟踪物体的关键点一直是复杂的,但使用 YOLOv8,这变得简便而直观。这种进步不仅令人振奋 —— 它在包括体育分析、医疗保健和零售等各个领域打开了无数可能性。

bad90ea1a7d36be800dc729926535e12.jpeg

使用YOLOv8进行虎类关键点估计

在本文中,我们将探讨使用YOLOv8进行姿势估计的过程。以下是我们将涵盖的内容:

  • 使用CVAT进行姿势估计的数据注释:我们将从将数据集上传到CVAT平台开始,配置工具,注释关键点并导出数据。

  • 将注释转换为Ultralytics YOLOv8兼容的格式:在注释之后,我们将将数据转换为与YOLOv8兼容的格式,确保我们的模型能够正确解释它。

  • 数据分割:对数据进行结构化是至关重要的,因此我们将其分成训练、验证和测试集,以便进行有效的模型训练。

  • 训练用于姿势估计的YOLOv8模型:有了组织好的数据,我们将训练YOLOv8模型以识别和估计姿势。

  • 使用YOLOv8执行推断:最后,我们将使用训练好的模型对新数据进行姿势估计,看到我们努力的成果。您还可以在YouTube上查看我们关于使用Ultralytics YOLOv8进行姿势估计的视频。

使用CVAT进行姿势估计的数据注释

数据注释的过程在计算机视觉领域至关重要。在本教程中,我们将使用虎类数据集演示如何准确注释关键点,这是为了训练我们的姿势估计模型而不可或缺的步骤。

528a1e7f6e959e1e85ca37f6e6ee1189.jpeg

Ultralytics虎类姿势数据集

注意:可以从Ultralytics虎类姿势数据集获取的虎类数据集应当被下载并解压,为即将进行的任务做好准备。这些图像将成为我们训练过程的基础,因此确保它们被方便地存储。

如果您是CVAT的新手,花时间熟悉其功能是值得的,可以通过查阅CVAT文档来了解。这将为更加流畅的注释过程奠定基础。

上传数据集

在下载虎类图像后,请确保解压文件。接下来,将所有图像作为一个新任务上传到CVAT平台,并点击“提交并打开”。

完成后,您将被引导至下方显示的页面。

c7cd00aa06ec87de6707a0d2cd380f21.jpegUltralytics虎类姿势数据集上传

设置注释工具CVAT

在CVAT中打开任务后,您将被提示选择一个特定的作业,这将成为您进行注释的工作区。作业编号,例如这里提到的“作业 #391317”,对每个用户都会有所不同。这将引导您进入注释界面,设置将完成,您可以开始为数据打标签。

f9c976365df897feb07bc70a3ebdf00f.jpeg使用CVAT对YOLOv8虎类姿势数据集进行注释工作流程

数据注释

在CVAT中,您可以选择使用不同的格式进行注释。对于虎类数据集,我们将利用点注释来标记关键点。该过程在教程中提供的详细GIF中进行了可视化,引导您完成注释的每一步。

546a1422a1be082567102533e8e5a2b5.png使用CVAT进行虎类姿势数据集的数据注释过程

数据导出

完成注释后,可以使用“CVAT for images 1:1”格式导出数据集,这将适用于后续工作流程中转换为YOLOv8格式。

将注释转换为Ultralytics YOLOv8格式

一旦从CVAT导出了注释,您将收到一个zip文件。解压缩该文件,显示出一个“annotations.xml”文件,其中包含了您分配的关键点和标签。这个文件非常关键,因为它包含了YOLOv8将学习的结构化数据。

要与YOLOv8集成,将“annotations.xml”文件放入与图像数据集相同的目录中。如果需要重新下载数据集,可以在Ultralytics虎类姿势数据集中找到。确保在下载后解压缩文件,为下一步做好准备。

现在,创建一个名为“cvat_to_ultralytics_yolov8.py”的Python脚本。将提供的代码复制到这个新文件中。运行此脚本将把您的注释转换为YOLOv8格式,为训练模型铺平道路。

import ast
import os.path
from xml.dom import minidom


out_dir = './out'
if not os.path.exists(out_dir):
    os.makedirs(out_dir)


file = minidom.parse('annotations.xml')


images = file.getElementsByTagName('image')


for image in images:
    width = int(image.getAttribute('width'))
    height = int(image.getAttribute('height'))
    name = image.getAttribute('name')
    elem = image.getElementsByTagName('points')
    bbox = image.getElementsByTagName('box')[0]
    xtl = int(float(bbox.getAttribute('xtl')))
    ytl = int(float(bbox.getAttribute('ytl')))
    xbr = int(float(bbox.getAttribute('xbr')))
    ybr = int(float(bbox.getAttribute('ybr')))
    w = xbr - xtl
    h = ybr - ytl
    label_file = open(os.path.join(out_dir, name + '.txt'), 'w')


    for e in elem:


        label_file.write('0 {} {} {} {} '.format(
            str((xtl + (w / 2)) / width),
             str((ytl + (h / 2)) / height),
             str(w / width),
             str(h / height)))


        points = e.attributes['points']
        points = points.value.split(';')
        points_ = []
        for p in points:
            p = p.split(',')
            p1, p2 = p
            points_.append([int(float(p1)), int(float(p2))])
        for p_, p in enumerate(points_):
            label_file.write('{} {}'.format(p[0] / width, p[1] / height))
            if p_ < len(points_) - 1:
                label_file.write(' ')
            else:
                label_file.write('\n')

运行脚本后,删除“annotations.xml”以避免在后续步骤中可能的混淆。

数据分割(训练、验证、测试)

在对数据集进行注释和转换后,下一步是将图像和注释组织成用于训练和评估的不同集合。

  • 在项目中创建两个目录:一个命名为“images”,另一个命名为“labels”。

  • 分别将图像及其相应的注释文件分发到这些文件夹中。

  • 为了便于这个数据分割过程,创建一个名为“splitdata.py”的Python文件。

  • 将提供的代码复制并粘贴到“splitdata.py”文件中。

  • 通过运行该文件执行Python脚本。

  • 此过程确保您的数据被适当地分成训练和测试子集,为Ultralytics YOLOv8的训练做好准备。

import splitfolders


input_fol_path = "path to folder, that includes images and labels folder"
splitfolders.ratio(input_fold_path, output="output",
    seed=1337, ratio=(.8, .2, .0), group_prefix=None, move=False)

结果将是一个包含两个不同目录的输出文件夹:“train”和“test”。这些文件夹已准备好在您的YOLOv8训练过程中使用。

训练YOLOv8模型进行姿势估计

接下来的步骤涉及创建一个“data.yaml”文件,它充当YOLOv8的路线图,指导其对数据集进行训练并定义训练的类别。将必要的代码插入到 'data.yaml' 中,自定义路径以指向您的数据集目录。

有关配置虎类姿势数据集的详细指导,请参阅Ultralytics文档:https://docs.ultralytics.com/datasets/pose/tiger-pose/#dataset-yaml

请记住根据需要调整数据集目录路径。配置好 'data.yaml' 后,您就可以开始训练模型了。

path: "path to the dataset directory"
train: train
val: val 


kpt_shape: [12, 2]
flip_idx: [0,1,2,3,4,5,6,7,8,9,10,11]
names:
  0: tiger

完成后,您已经准备好开始了!您可以使用提供的命令开始训练YOLOv8模型进行虎类姿势估计。

yolo task=pose mode=train data="path/data.yaml" model=yolov8n.pt imgsz=640

训练持续时间会有所不同,取决于您的GPU设备。

使用YOLOv8进行推断

在训练完成后,通过在新数据上执行推断来测试您的模型。运行提供的命令,将您的姿势估计模型应用于检测和分析姿势。

# Run inference using a tiger-pose trained model
yolo task=pose mode=predict \
source="https://www.youtube.com/watch?v=MIBAT6BGE6U" \
show=True model="path/to/best.pt"

推断结果将显示出模型将其学到的应用于现实场景的能力。请参阅下文:

db50260bd1e11139483842b8aab97fd1.gif

使用YOLOv8进行虎类姿势估计的姿势推断

随着我们结束本教程,我们邀请您深入探索使用Ultralytics YOLOv8进行姿势估计的潜力。我们很期待看到您如何将这些工具应用到您的项目中。

·  END  ·

HAPPY LIFE

1000e405d3c72bf74bd4a39a15ad7b88.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDK8安装教程分享

&#x1f9cb;&#x1f9cb;今天&#xff0c;在博客社区看到一篇非常好的&#xff0c;关于JDK8的安装教程&#xff0c;亲试有用&#xff0c;现分享给大家。。。 JDK8安装

Redis-对象

参考资料 极客时间Redis&#xff08;亚风&#xff09; Redis对象 String • 基本编码⽅式是RAW&#xff0c;基于简单动态字符串&#xff08;SDS&#xff09;实现&#xff0c;存储上限为512mb。 • 如果存储的SDS⻓度⼩于44字节&#xff0c;则会采⽤EMBSTR编码&#xff0c;此…

线性代数(一)

1.标量&#xff1a;标量由只有⼀个元素的张量表⽰。 x np.array(3.0) y np.array(2.0) x y, x * y, x / y, x ** y (array(5.), array(6.), array(1.5), array(9.))2.向量&#xff1a;向量可以被视为标量值组成的列表&#xff0c;列向量是向量的默认⽅向。 x np.arange(4…

MyBatis原理解读

我们项目中多用MyBatis进行数据库的读写,开源的MyBatis-Plus框架对其进行了增强,使用上更加简单,我们之前的很多项目也是直接用的MyBatis-Plus。 数据库操作的时候,简单的单表读写,我们可以直接在方法里链式组装SQL,复杂的SQL或涉及多表联合join的,需要在xml手写SQL语句…

RabbitMQ不公平分发问题分析及问题解决

1.不公平分发 1.1 不公平分发策略是什么&#xff1f; 在 RabbitMQ 中&#xff0c;不公平分发&#xff08;Unfair Dispatch&#xff09;是指当多个消费者&#xff08;Consumers&#xff09;同时订阅同一个队列&#xff08;Queue&#xff09;时&#xff0c;消息的分发机制是不公…

网上下载的python如何运行,python可以下载到d盘吗

本篇文章给大家谈谈如何在python官网上下载python&#xff0c;以及python可以在手机上下载吗&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 从Python官网下载Python的步骤 如果你是想要学习Python编程的初学者&#xff0c;那么第一步就是要从官方网站下载Py…

uniGUI之MASK遮罩

在页面进行后台数据库操作的时候&#xff0c;不想 用户再进行 页面上的 其他操作&#xff0c;这时候就要 将页面 遮罩。例如UniDBGrid有LoadMask属性。 1]使用ScreenMask函数 2]JS调用 3]一个控件控制遮罩另一个控件(如Button遮罩UniDBGrid) //很简单&#xff0c;本例子就是告…

Android14创建Pixel6 Pro模拟器(一百七十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Vue3项目中集成mars3D简单三部曲

Vue3项目中集成mars3D简单三部曲 这里是参考网址&#xff0c;大佬可以点击一件跳转 1.安装依赖 npm install vite-plugin-mars3d --save-dev2.修改 vite.config.ts 配置文件 import { defineConfig } from vite; import { mars3dPlugin } from vite-plugin-mars3d;export d…

C++ Qt开发:自定义Dialog对话框组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍自定义Dialog组件的常用方法及灵活运用。 在…

Stable-Diffusion|从图片反推prompt的工具:Tagger(五)

stable-diffusion-webui-wd14-tagger 前面几篇&#xff1a; Stable-Diffusion|window10安装GPU版本的 Stable-Diffusion-WebUI遇到的一些问题&#xff08;一&#xff09; 【Stable-Diffusion|入门怎么下载与使用civitai网站的模型&#xff08;二&#xff09;】 Stable-Diffusi…

QQ邮箱发送工具类的实现

我们在日常开发中&#xff0c;需要实现一个对邮箱的发送&#xff0c;今天就实现邮箱的发送工具类&#xff0c;只需要一些注册邮箱之后的配置即可&#xff0c;我这边使用的是qq邮箱 0.加上依赖 <!--邮箱--><dependency><groupId>org.springframework.boot&l…

DevOps常用工具全家桶,实现高效运维和交付

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

Linux:进程地址空间

目录 1.程序地址空间 2.进程地址空间 1.程序地址空间 我们在讲C/C语言的时候&#xff0c;32位平台下&#xff0c;我们见过这样的空间布局图 我们来验证一下这张图的正确性&#xff1a; int un_gval;int init_gval100;int main(int argc, char* argv[],char* env[]){//代码…

C语言之变量的存储方式和生存周期

一、变量的存储方式 C语言变量的存储有两种方式&#xff1a;静态存储方式和动态存储方式&#xff0c;相应的生产期也有两种&#xff1a;静态生存期和自动生存期。 ①静态存储方式&#xff1a;在程序运行前为变量内存分配内存&#xff0c;在程序结束后回收变量的内存。&#x…

java-sec-code中重定向

重定向 状态码3xx 存在问题的代码段 GetMapping("/redirect") public String redirect(RequestParam("url") String url) {return "redirect:" url; }用户访问/redirect路径时&#xff0c;redirect方法会获取web请求中的url参数内容&#xff0…

文化传媒企业网站建设的效果如何

文化传媒业可以细分为多个类目&#xff0c;如企业营销宣传、明星包装、主播打造、马戏团、动漫等&#xff0c;这些都有很高的市场需求度&#xff0c;尤其近些年互联网深入各个行业&#xff0c;线上发展尤为重要&#xff0c;也促进了文化传媒业的发展。 同时该行业需求者&#…

React脚手架搭建

React脚手架 脚手架&#xff1a;可以快速构建项目的基本架构。 脚手架安装命令 可全局安装脚手架 创建项目 来到当前目录下 create-react-app 项目名&#xff08;不要大写字母&#xff09; 运行项目 进到项目里&#xff0c;在项目目录下&#xff0c;执行 npm start &#xff…

FC-13A(用于汽车应用的kHz范围晶体单元,低轮廓贴片)

FC-13A晶体非常适合用在汽车导航系统设计中的应用&#xff0c;是一种具有优异的频率性能和AEC-Q200标准认证的汽车工业级高精度晶体,FC-13A是一款尺寸为3.2 1.5 0.9mm&#xff0c;频率范围32.768KHz耐高温晶振&#xff0c;频率温度系数仅为-0.04ppm/℃&#xff0c;并且其老化…

总结一些vue3小知识2

1.el-tree-select和el-tree组件报错&#xff08;有的下拉选项选择不了&#xff0c;一点击就报错&#xff0c;但是有的却能选择&#xff0c;不会报错&#xff09; 原因:就如同v-for一样&#xff0c;需要添加key才不会出现渲染错误&#xff0c;而el-tree-select和el-tree组件需要…