跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > 使用PyTorch神经网络和YoloV8识别身体姿势

使用PyTorch神经网络和YoloV8识别身体姿势

时间:2024-05-03 17:05:47 来源:网络cs 作者:亙句 栏目:卖家故事 阅读:

标签: 识别  身体  姿势  神经  网络  使用 
阅读本书更多章节>>>> 简介

姿态估计是一项涉及识别图像中特定点(通常称为关键点)位置的任务。关键点可以代表物体的各个部分,如关节、地标或其他显著特征。关键点的位置通常表示为一组二维[x,y]或三维[x,y,visible]坐标。

姿态估计模型的输出是一组代表图像中物体关键点的点,通常还包括每个点的置信度分数。当需要识别场景中物体的特定部分及其相互位置关系时,姿态估计是一个不错的选择。

YOLOV8 Pose

如何使用YOLOv8预训练的Pose模型?

图片

来源:finally-played-with-ultralytics-yolov8–2d-pose-estimation-v0-b0TwBuJwtqdLNok24Fenp4-e0gFeOybt9mlvWbWYD5E.png

from ultralytics import YOLO# 加载模型model = YOLO('yolov8n-pose.pt')# 使用模型进行预测results = model('https://ultralytics.com/images/bus.jpg') # 提取关键点result_keypoint = results.keypoints.xyn.cpu().numpy()[0]

探索输出关键点

图片

来源 : https://learnopencv.com/wp-content/uploads/2021/05/fix-overlay-issue.jpg

在YOLOv8姿态估计的输出中,没有关键点名称。以下是输出示例:

图片

为了通过调用关键点名称来获取xy坐标,你可以创建一个带有“keypoint”属性的Pydantic类,其中键代表关键点名称,值表示该关键点在YOLOv8输出中的索引。

from pydantic import BaseModelclass GetKeypoint(BaseModel):    NOSE:           int = 0    LEFT_EYE:       int = 1    RIGHT_EYE:      int = 2    LEFT_EAR:       int = 3    RIGHT_EAR:      int = 4    LEFT_SHOULDER:  int = 5    RIGHT_SHOULDER: int = 6    LEFT_ELBOW:     int = 7    RIGHT_ELBOW:    int = 8    LEFT_WRIST:     int = 9    RIGHT_WRIST:    int = 10    LEFT_HIP:       int = 11    RIGHT_HIP:      int = 12    LEFT_KNEE:      int = 13    RIGHT_KNEE:     int = 14    LEFT_ANKLE:     int = 15    RIGHT_ANKLE:    int = 16# 示例get_keypoint = GetKeypoint()nose_x, nose_y = result_yolov8[get_keypoint.NOSE]left_eye_x, left_eye_y = keypoint[get_keypoint.LEFT_EYE]

生成关键点数据集

要对关键点进行分类,你需要创建一个关键点数据集。如果你使用的是来自Kaggle的yoga-pose-classification公开数据集中的图片。该数据集有5个类别:Downdog、Goddess、Plank、Tree、Warrior2。本文将在每张图片上运行姿势估计YoloV8并提取输出。提取了每个身体部位的关键点,以获得xy坐标,然后将其保存为CSV格式。

图片

数据集列

图片

样本数据集

图片

可视化结果计数类别

从上图来看,可以认为每个类别都足以对关键点进行分类。

图片

训练分类

现在,让我们使用PyTorch神经网络库来训练关键点的多类分类模型。

class NeuralNet(nn.Module):    def __init__(self, input_size, hidden_size, num_classes):        super(NeuralNet, self).__init__()        self.l1 = nn.Linear(input_size, hidden_size)        self.relu = nn.ReLU()        self.l2 = nn.Linear(hidden_size, num_classes)            def forward(self, x):        out = self.l1(x)        out = self.relu(out)        out = self.l2(out)        return out

该神经网络结构包括两个线性层和一个ReLU激活函数:

self.l1 = nn.Linear(input_size, hidden_size):第一个线性层,接收输入特征并将其映射到隐藏层。

self.relu = nn.ReLU():激活函数,对每个元素应用逐元素修正线性单元(ReLU)激活函数以引入非线性。

self.l2 = nn.Linear(hidden_size, num_classes):第二个线性层,将隐藏层映射到输出类别。

forward(self, x)该方法定义神经网络的前向传递。它接收输入张量x并返回输出张量。前向传递包括将输入依次传递到定义的层,并返回最终输出。

hidden_size = 256model = NeuralNet(X_train.shape[1], hidden_size, len(class_weights))

在这段代码中,X_train.shape[1]代表输入大小,也就是训练数据中的特征数量。hidden_size按指定设置为256len(class_weights)代表输出类别的数量。这样就创建了一个NeuralNet模型实例,准备在数据集上进行训练。

learning_rate = 0.01criterion = nn.CrossEntropyLoss(weight=torch.from_numpy(class_weights.astype(np.float32)))optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

在这段代码中,learning_rate被设置为0.01,用于控制优化过程中的步长。CrossEntropyLoss准则用于多类分类,并将weight参数设置为转换为PyTorch张量的类权重。如果数据集中存在类不平衡现象,则可以通过这种方法进行处理。

优化器定义为Adam优化器,这是一种流行的神经网络优化算法。它将model.parameters()作为输入,其中指定了待优化模型的参数。lr参数设置优化器的学习率。

训练关键点结果

对于简单的神经网络和给定的数据集大小而言,结果相当不错,准确率超过90%。

图片

图片

结果混淆矩阵

在“Goddess”和“Plank”这些类中有许多错误。在检查了数据集的图像后,似乎确实有一些图像是错误的,或者与其指定的类别不符。

图片

测试

关键时刻。本文加载了YOLOv8姿态估计和分类姿态模型,然后运行YOLOv8姿态估计,以提取输出输入分类姿态模型。使用Streamlit进行界面设计。

Streamlit:https://streamlit.io/

图片

结果_1.jpg

图片

结果_2.jpg

源代码

生成关键点数据集:https://github.com/Alimustoofaa/YoloV8-Pose-Keypoint-Classification/blob/master/notebooks/generate_dataset.ipynb

训练关键点分类:https://github.com/Alimustoofaa/YoloV8-Pose-Keypoint-Classification/blob/master/notebooks/train_keypoint_classification.ipynb

完整代码:https://github.com/Alimustoofaa/YoloV8-Pose-Keypoint-Classification/

演示:https://huggingface.co/spaces/Alimustoofaa/YoloV8-Pose-Keypoint-Classification

参考资料

https://www.kaggle.com/datasets/ujjwalchowdhury/yoga-pose-classification

https://learnopencv.com/human-pose-estimation-using-keypoint-rcnn-in-pytorch/

https://docs.ultralytics.com/tasks/pose/

推荐书单

IT BOOK 多得(点击查看5折活动书单)icon-default.png?t=N7T8https://u.jd.com/psx2y1M

《PyTorch深度学习简明实战》

本书针对深度学习及开源框架——PyTorch,采用简明的语言进行知识的讲解,注重实战。全书分为4篇,共19章。深度学习基础篇(第1章~第6章)包括PyTorch简介与安装、机器学习基础与线性回归、张量与数据类型、分类问题与多层感知器、多层感知器模型与模型训练、梯度下降法、反向传播算法与内置优化器。计算机视觉篇(第7章~第14章)包括计算机视觉与卷积神经网络、卷积入门实例、图像读取与模型保存、多分类问题与卷积模型的优化、迁移学习与数据增强、经典网络模型与特征提取、图像定位基础、图像语义分割。自然语言处理和序列篇(第15章~第17章)包括文本分类与词嵌入、循环神经网络与一维卷积神经网络、序列预测实例。生成对抗网络和目标检测篇(第18章~第19章)包括生成对抗网络、目标检测。

本书适合人工智能行业的软件工程师、对人工智能感兴趣的学生学习,同时也可作为深度学习的培训教程。

《PyTorch深度学习简明实战》icon-default.png?t=N7T8https://item.jd.com/13512395.html

图片

精彩回顾

《活用PyTorch,图像分类实战指南》

《使用PyTorch训练一个LSTM预测模型》

《逐步拆解学习,从简单线性回归到TensorFlow深度学习》

《手把手教你升级PyTorch 2.0和CUDA》

《使用TensorFlow训练深度学习模型实战指南(下)》

《使用TensorFlow训练深度学习模型实战指南(上)》

微信搜索关注《Python学研大本营》,加入读者群

访问【IT今日热榜】,发现每日技术热点

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-05-03/164535.html,文章来源:网络cs,作者:亙句,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论