Keypoints详解

一、Keypoints AP

Keypoints AP是一种评估人类姿态估计准确性的指标,是对人体关键点的检测和姿态估计的评估标准。在深度学习领域中,一般使用COCO数据集进行Keypoints AP的计算。

Keypoints AP可以通过以下方式计算:

import pycocotools.coco as coco
from pycocotools.cocoeval import COCOeval

# 加载预测结果和真实结果
cocoGt = coco.COCO('path/annotations/person_keypoints_val2017.json')
cocoDt = cocoGt.loadRes('path/annotations/person_keypoints_val2017_fakekeypoints100_results.json')

# 初始化评估类
cocoEval = COCOeval(cocoGt, cocoDt, 'keypoints')

# 运行评估
cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize()
Keypoints AP: (AP, AP50, AP75, APm, APl, AR, AR50, AR75, ARm, ARl)

二、Keypoints荧光笔

Keypoints荧光笔是一种可视化方法,可以将预测的人体关键点标记在图片上。在python中,可以使用OpenCV库进行Keypoints荧光笔的绘制。

以下是Keypoints荧光笔的示例代码:

import cv2
import numpy as np

# 加载图片和预测结果
img = cv2.imread('path/image.jpg')
points = np.array([[10, 20], [30, 40], [50, 60]])

# 用红色圆圈标记关键点
for point in points:
    cv2.circle(img, tuple(point), 5, (0, 0, 255), -1)

# 展示结果
cv2.imshow('Keypoints', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、文献中列出的keypoints

在人体姿态估计领域的文献中,常见的Keypoints包括17个关键点、18个关键点、25个关键点和68个关键点等多种方式。以下是常见的两种Keypoints:

1、17个关键点: nose, left_eye, right_eye, left_ear, right_ear, left_shoulder, right_shoulder, left_elbow, right_elbow, left_wrist, right_wrist, left_hip, right_hip, left_knee, right_knee, left_ankle, right_ankle。

2、25个关键点: nose, left_eye, right_eye, left_ear, right_ear, left_shoulder, right_shoulder, left_elbow, right_elbow, left_wrist, right_wrist, left_hip, right_hip, left_knee, right_knee, left_ankle, right_ankle, neck, background, left_palm, right_palm, spine, left_instep, right_instep。

四、difficultpoints

人体姿态估计中,有一些关键点是难以准确预测的,称为difficultpoints。如手和足底等部位,通常会对这些部位进行特殊处理,如使用更多的注意力机制、额外的数据增强等方法来提高精度。

以下是使用PyTorch处理difficultpoints的示例代码:

import torch

# 定义网络和损失函数
model = Model()
criterion = LossFunction()

# 初始化优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# 加载训练数据和测试数据
train_dataset = Dataset(train=True)
test_dataset = Dataset(train=False)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

# 训练模型
for epoch in range(10):
    for i, batch in enumerate(train_loader):
        # 加载数据
        inputs, targets, is_difficult = batch

        # 前向传播
        outputs = model(inputs)

        # 计算损失
        loss = criterion(outputs, targets, is_difficult)

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

    # 在测试集上验证模型
    with torch.no_grad():
        test_loss = 0
        for i, batch in enumerate(test_loader):
            inputs, targets, is_difficult = batch
            outputs = model(inputs)
            test_loss += criterion(outputs, targets, is_difficult)
        test_loss /= len(test_loader)
    print('Epoch: {}, Test Loss: {}'.format(epoch+1, test_loss))

五、如何把Keypoints转化成CPU

在使用GPU进行人体姿态估计时,有时需要将Keypoints转化成CPU,方便进行后续的处理和可视化等操作。以下是PyTorch中将Keypoints转化成CPU的示例代码:

import torch

# 定义Keypoints
keypoints = torch.randn(2, 17, 3).cuda()

# 转化成CPU
keypoints_cpu = keypoints.cpu()

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/192750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-01 10:29
下一篇 2024-12-01 10:29

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • C语言贪吃蛇详解

    一、数据结构和算法 C语言贪吃蛇主要运用了以下数据结构和算法: 1. 链表 typedef struct body { int x; int y; struct body *nex…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论