一、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()