yolov8+动物+姿态识别(训练教程+代码)

本文关键词:
关键点检测 关键点估计 姿态估计 YOLO
在这里插入图片描述

  • 动物姿态估计是计算机视觉的一个研究领域,是人工智能的一个子领域,专注于自动检测和分析图像或视频片段中动物的姿势和位置。
  • 目标是确定一种或多种动物的身体部位(例如头部、四肢和尾巴)的空间排列。
  • 这项技术具有广泛的应用,从研究动物行为和生物力学到野生动物保护和监测。

在这篇博文中,我们将专门处理狗的关键点估计,并向您展示如何微调 Ultralytics 非常流行的 YOLOv8 姿势模型。

动物姿势估计数据集

对于我们的动物姿势估计实验,我们将使用斯坦福数据集,该数据集包含 120 个品种的狗,分布在 20,580 张图像中。此外,数据集还包含这些图像的边界框注释。

关键点注释需要通过填写谷歌表单从 StandfordExtra 数据集下载。在 12,538 张图像中提供了 20 个狗姿势关键点的关键点注释(每条腿 3 个,每只耳朵 2 个,尾巴、鼻子和下巴 2 个)。

下载的注释将包含以下结构:

dog
├── StanfordExtra_v12.json
├── test_stanford_StanfordExtra_v12.npy
├── train_stanford_StanfordExtra_v12.npy
└── val_stanford_StanfordExtra_v12.npy

训练、验证和测试拆分作为原始 StanfordExtra_v12.json 数据的索引提供,这些数据分别包含 6773、4062 和 1703 图像的注释。
还以CSV文件的形式提供了关键点元数据,其中包含动物姿势名称、每个关键点的颜色编码等。但是,它包含 24 个关键点的信息(每个眼睛、喉咙和肩膀各 1 个)。可以使用下图来说明关键点。

在这里插入图片描述

为训练和验证数据创建与 YOLOv8 一致的注解

以下几点突出显示了用于微调 Ultralytics 的 YOLOv8 Pose 模型的数据集格式:

用于训练YOLO姿态模型的数据集格式如下:

每个图像一个文本文件:数据集中的每个图像都有一个对应的文本文件,其名称与图像文件相同,扩展名为 .txt。
每个对象一行:文本文件中的每一行对应于图像中的一个对象实例。
每行对象信息:每行包含有关对象实例的以下信息:
对象类索引:表示对象类的整数(例如,0 表示人,1 表示汽车等)。
对象中心坐标:对象中心的 x 和 y 坐标归一化为 0 和 1.
对象宽度和高度:对象的宽度和高度被规范化为介于 0 和 1 之间.
对象宽度和高度:对象的宽度和高度被规范化为介于 0 和 1 之间.
此外,可见性标志与关键点坐标相关联。它可以包含以下三个值之一:

0:未标记
1:已标记但不可见
2:标记和可见。
JSON 注释包含一个额外的布尔可见性标志和前面讨论的关键点坐标。我们将所有可见关键点的标志设置为 2.

在这里插入图片描述

下载图像数据和关键点元数据

在开始数据准备之前,我们需要先下载图像数据。让我们定义一个实用程序函数,用于下载和提取包含图像的图像images.tar文件。此外,我们还将下载包含关键点元数据keypoint_definitions.csv,例如动物姿势名

def download_and_unzip(url, save_path):print("Downloading and extracting assets...", end="")file = requests.get(url)open(save_path, "wb").write(file.content)try:# Extract tarfile.if save_path.endswith(".tar"):with tarfile.open(save_path, "r") as tar:tar.extractall(os.path.split(save_path)[0])print("Done")except:print("Invalid file")

所有下载的图像都将提取到 Images 目录中。它具有以下目录结构:

Images/
├── n02085620-Chihuahua
│   ├── n02085620_10074.jpg
│   ├── n02085620_10131.jpg
│   └── ...
├── n02085782-Japanese_spaniel
│   ├── n02085782_1039.jpg
│   ├── n02085782_1058.jpg
│   └── n02085782_962.jpg
└── ...

可视化来自 YOLO 注释的数据

一旦我们创建了与YOLO兼容的数据,我们就可以可视化一些地面实况样本,以确保我们的转换是正确的。
在这里插入图片描述

在可视化样本之前,我们可以将 keypoint_definitions.csv 值的十六进制颜色编码映射到 RGB 值。

ann_meta_data = pd.read_csv("keypoint_definitions.csv")
COLORS = ann_meta_data["Hex colour"].values.tolist()COLORS_RGB_MAP = []
for COLORS incolor COLORS:R, G, B = int(颜色[:2]16), int(颜色[22:4]16 ), ), intintint], (color[(color[4:4(color[:], 16:], 1616)COLORS_RGB_MAP.append({color: (R,G,B)})

动物姿势估计的微调和训练

最后,我们将使用上面定义的配置进行训练。

pose_model = = model = YOLO(train_config.MODEL)pose_model.train(data = train_config.DATASET_YAML,epochs = train_config.EPOCHS,imgsz = data_config.IMAGE_SIZE,batch = data_config.BATCH_SIZE,project = train_config.PROJECT,name = train_config.NAME,close_mosaic = data_config.CLOSE_MOSAIC,mosaic = data_config.MOSAIC,fliplr = data_config.FLIP_LR)

动物姿态估计:超参数设置和微调

Ultralytics 提供以下在 MS-COCO 数据集上预训练的姿势模型,该数据集由 17 个关键点组成.
在这里插入图片描述
使用上面的配置,我们获得了 YOLOv8m 的以下指标:

Box 指标:
mAP@50: 0.991
map@50-95:0.922
姿势指标:
mAP@50: 0.937
map@50-95:0.497
下图显示了 YOLOv8m 的指标。
在这里插入图片描述

训练结果展示

在这里插入图片描述

结论

在本文中,我们了解了如何微调 YOLOv8 以进行动物姿态估计。可以根据此训练自己的数据,也可以在学习中使用模型对动物进行姿态估计!

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

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

相关文章

linux上重启mysql

1、先关闭 [rootHIS bin]# ./mysqladmin -h 127.0.0.1 -u root -p shutdown 2、 再重启 [rootHIS support-files]# ./mysql.server start

Mac 下安装golang环境

一、下载安装包 安装包下载地址 下载完成,直接继续----->下一步到结束即可安装成功; 安装成功之后,验证一下; go version二、配置环境变量 终端输入vim ~/.zshrc进入配置文件,输入i进行编辑 打开的不管是空文本…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译,您可以看也可以不看哈! map 是关联容器,它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中,键值 key 通常用于排序…

R语言 PPT 预习+复习

什么狗吧发明的结业考&#xff0c;站出来和我对线 第一章 绪论 吊码没有&#xff0c;就算考R语言特点我也不背&#xff0c;问就是叫么这没用。 第二章 R语言入门 x<-1:20 赋值语句 x 1到20在x上添加均值为0、标准差为2的正态分布噪声 y <- x rnorm (20, 0, 2) 这…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持&#xff0c;所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点&#xff1a;线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作&#xff0c;分别是创建、…

python基础速通

1. 梳理&#xff1a;目前学习了哪几种数据类型&#xff0c; 每一个数据类型定义一个变量&#xff0c;并输出内容以及类型 # 数据类型 # 整型 int_data 1 print(int_data, type(int_data)) # 浮点型 float_data 1.2 print((float_data, type(float_data))) # 复数 complex_da…

java高级之单元测试、反射

1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法&#xff0c;执行在所有方法之后 3.被Before标记的方法&#xff0c;执行在每一个Test方法之前 4.被After标记的方法&#xff0c;执行在每一个Test方法之后 public …

什么情况造成互斥锁死锁

由于互斥锁的使用不当&#xff0c;导致多个线程无法进行下一步的代码运行&#xff0c;也就是说竞争锁的两个线程互相锁住&#xff0c;导致整个进程无法往下运行。 举个例子&#xff1a; 两个锁&#xff0c;两个线程&#xff0c;两个线程运行的条件都是需要同时获得这两把锁&a…

高防CDN:游戏应用抵御DDoS攻击的坚固堡垒

在当今的数字时代&#xff0c;游戏应用已经成为人们生活的一部分&#xff0c;而面临的网络威胁也日益复杂。其中&#xff0c;DDoS&#xff08;分布式拒绝服务&#xff09;攻击是游戏应用的一项严重威胁&#xff0c;可能导致游戏服务不可用&#xff0c;用户流失&#xff0c;以及…

AI:54-基于深度学习的树木种类识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Spring AOP 简介

一、Spring AOP AOP 是一种思想&#xff0c;而 Spring AOP 是一个框架&#xff0c;提供了一种对 AOP 思想的实现。 1、什么是 AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;是一种编程思想&#xff0c;表示面向切面编程。指的是对某…

如何快速导出、备份微信通讯录好友联系人微信号

6-9 如果因工作需要&#xff0c;你有多个微信&#xff0c;并且你的业务开发的客户都在这些微信里&#xff0c;将会面临一个问题&#xff0c;那就是备份问题&#xff0c;因为通过微信做业务&#xff0c;如果遇到微信不小心被封号&#xff0c;或者离职的交接等情况&#xff0c;客…