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/zh-tw/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

發表回復

登錄後才能評論