Initial snapshot: hand motion pipeline (Dyn-HaMR + dex-retargeting + SPIDER)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+36
@@ -0,0 +1,36 @@
|
||||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
import numpy as np
|
||||
|
||||
from mmpose.core.post_processing.one_euro_filter import OneEuroFilter
|
||||
|
||||
|
||||
def test_one_euro_filter():
|
||||
np.random.seed(1)
|
||||
|
||||
kpts = []
|
||||
frames = 100
|
||||
for i in range(frames):
|
||||
kpts.append({
|
||||
'keypoints': np.tile(np.array([10, 10, 0.9]), [17, 1]),
|
||||
'area': 100,
|
||||
'score': 0.9
|
||||
})
|
||||
kpts.append({
|
||||
'keypoints': np.tile(np.array([11, 11, 0.9]), [17, 1]),
|
||||
'area': 100,
|
||||
'score': 0.8
|
||||
})
|
||||
|
||||
one_euro_filter = OneEuroFilter(
|
||||
kpts[0]['keypoints'][:, :2], min_cutoff=1.7, beta=0.3, fps=30)
|
||||
|
||||
for i in range(1, len(kpts)):
|
||||
kpts[i]['keypoints'][:, :2] = one_euro_filter(
|
||||
kpts[i]['keypoints'][:, :2])
|
||||
|
||||
one_euro_filter = OneEuroFilter(
|
||||
kpts[0]['keypoints'][:, :2], min_cutoff=1.7, beta=0.3)
|
||||
|
||||
for i in range(1, len(kpts)):
|
||||
kpts[i]['keypoints'][:, :2] = one_euro_filter(
|
||||
kpts[i]['keypoints'][:, :2])
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
import torch
|
||||
|
||||
from mmpose.core.post_processing.group import HeatmapParser
|
||||
|
||||
|
||||
def test_group():
|
||||
cfg = {}
|
||||
cfg['num_joints'] = 17
|
||||
cfg['detection_threshold'] = 0.1
|
||||
cfg['tag_threshold'] = 1
|
||||
cfg['use_detection_val'] = True
|
||||
cfg['ignore_too_much'] = False
|
||||
cfg['nms_kernel'] = 5
|
||||
cfg['nms_padding'] = 2
|
||||
cfg['tag_per_joint'] = True
|
||||
cfg['max_num_people'] = 1
|
||||
parser = HeatmapParser(cfg)
|
||||
fake_heatmap = torch.zeros(1, 1, 5, 5)
|
||||
fake_heatmap[0, 0, 3, 3] = 1
|
||||
fake_heatmap[0, 0, 3, 2] = 0.8
|
||||
assert parser.nms(fake_heatmap)[0, 0, 3, 2] == 0
|
||||
fake_heatmap = torch.zeros(1, 17, 32, 32)
|
||||
fake_tag = torch.zeros(1, 17, 32, 32, 1)
|
||||
fake_heatmap[0, 0, 10, 10] = 0.8
|
||||
fake_heatmap[0, 1, 12, 12] = 0.9
|
||||
fake_heatmap[0, 4, 8, 8] = 0.8
|
||||
fake_heatmap[0, 8, 6, 6] = 0.9
|
||||
fake_tag[0, 0, 10, 10] = 0.8
|
||||
fake_tag[0, 1, 12, 12] = 0.9
|
||||
fake_tag[0, 4, 8, 8] = 0.8
|
||||
fake_tag[0, 8, 6, 6] = 0.9
|
||||
grouped, scores = parser.parse(fake_heatmap, fake_tag, True, True)
|
||||
assert grouped[0][0, 0, 0] == 10.25
|
||||
assert abs(scores[0] - 0.2) < 0.001
|
||||
cfg['tag_per_joint'] = False
|
||||
parser = HeatmapParser(cfg)
|
||||
grouped, scores = parser.parse(fake_heatmap, fake_tag, False, False)
|
||||
assert grouped[0][0, 0, 0] == 10.
|
||||
grouped, scores = parser.parse(fake_heatmap, fake_tag, False, True)
|
||||
assert grouped[0][0, 0, 0] == 10.
|
||||
|
||||
|
||||
def test_group_score_per_joint():
|
||||
cfg = {}
|
||||
cfg['num_joints'] = 17
|
||||
cfg['detection_threshold'] = 0.1
|
||||
cfg['tag_threshold'] = 1
|
||||
cfg['use_detection_val'] = True
|
||||
cfg['ignore_too_much'] = False
|
||||
cfg['nms_kernel'] = 5
|
||||
cfg['nms_padding'] = 2
|
||||
cfg['tag_per_joint'] = True
|
||||
cfg['max_num_people'] = 1
|
||||
cfg['score_per_joint'] = True
|
||||
parser = HeatmapParser(cfg)
|
||||
fake_heatmap = torch.zeros(1, 1, 5, 5)
|
||||
fake_heatmap[0, 0, 3, 3] = 1
|
||||
fake_heatmap[0, 0, 3, 2] = 0.8
|
||||
assert parser.nms(fake_heatmap)[0, 0, 3, 2] == 0
|
||||
fake_heatmap = torch.zeros(1, 17, 32, 32)
|
||||
fake_tag = torch.zeros(1, 17, 32, 32, 1)
|
||||
fake_heatmap[0, 0, 10, 10] = 0.8
|
||||
fake_heatmap[0, 1, 12, 12] = 0.9
|
||||
fake_heatmap[0, 4, 8, 8] = 0.8
|
||||
fake_heatmap[0, 8, 6, 6] = 0.9
|
||||
fake_tag[0, 0, 10, 10] = 0.8
|
||||
fake_tag[0, 1, 12, 12] = 0.9
|
||||
fake_tag[0, 4, 8, 8] = 0.8
|
||||
fake_tag[0, 8, 6, 6] = 0.9
|
||||
grouped, scores = parser.parse(fake_heatmap, fake_tag, True, True)
|
||||
assert len(scores[0]) == 17
|
||||
@@ -0,0 +1,81 @@
|
||||
# Copyright (c) OpenMMLab. All rights reserved.
|
||||
import numpy as np
|
||||
|
||||
from mmpose.core.post_processing.nms import nms, oks_iou, oks_nms, soft_oks_nms
|
||||
|
||||
|
||||
def test_soft_oks_nms():
|
||||
oks_thr = 0.9
|
||||
kpts = []
|
||||
kpts.append({
|
||||
'keypoints': np.tile(np.array([10, 10, 0.9]), [17, 1]),
|
||||
'area': 100,
|
||||
'score': 0.9
|
||||
})
|
||||
kpts.append({
|
||||
'keypoints': np.tile(np.array([10, 10, 0.9]), [17, 1]),
|
||||
'area': 100,
|
||||
'score': 0.4
|
||||
})
|
||||
kpts.append({
|
||||
'keypoints': np.tile(np.array([100, 100, 0.9]), [17, 1]),
|
||||
'area': 100,
|
||||
'score': 0.7
|
||||
})
|
||||
|
||||
keep = soft_oks_nms([kpts[i] for i in range(len(kpts))], oks_thr)
|
||||
assert (keep == np.array([0, 2, 1])).all()
|
||||
|
||||
keep = oks_nms([kpts[i] for i in range(len(kpts))], oks_thr)
|
||||
assert (keep == np.array([0, 2])).all()
|
||||
|
||||
kpts_with_score_joints = []
|
||||
kpts_with_score_joints.append({
|
||||
'keypoints':
|
||||
np.tile(np.array([10, 10, 0.9]), [17, 1]),
|
||||
'area':
|
||||
100,
|
||||
'score':
|
||||
np.tile(np.array([0.9]), 17)
|
||||
})
|
||||
kpts_with_score_joints.append({
|
||||
'keypoints':
|
||||
np.tile(np.array([10, 10, 0.9]), [17, 1]),
|
||||
'area':
|
||||
100,
|
||||
'score':
|
||||
np.tile(np.array([0.4]), 17)
|
||||
})
|
||||
kpts_with_score_joints.append({
|
||||
'keypoints':
|
||||
np.tile(np.array([100, 100, 0.9]), [17, 1]),
|
||||
'area':
|
||||
100,
|
||||
'score':
|
||||
np.tile(np.array([0.7]), 17)
|
||||
})
|
||||
keep = soft_oks_nms([
|
||||
kpts_with_score_joints[i] for i in range(len(kpts_with_score_joints))
|
||||
],
|
||||
oks_thr,
|
||||
score_per_joint=True)
|
||||
assert (keep == np.array([0, 2, 1])).all()
|
||||
|
||||
keep = oks_nms([
|
||||
kpts_with_score_joints[i] for i in range(len(kpts_with_score_joints))
|
||||
],
|
||||
oks_thr,
|
||||
score_per_joint=True)
|
||||
assert (keep == np.array([0, 2])).all()
|
||||
|
||||
|
||||
def test_func_nms():
|
||||
result = nms(np.array([[0, 0, 10, 10, 0.9], [0, 0, 10, 8, 0.8]]), 0.5)
|
||||
assert result == [0]
|
||||
|
||||
|
||||
def test_oks_iou():
|
||||
result = oks_iou(np.ones([17 * 3]), np.ones([1, 17 * 3]), 1, [1])
|
||||
assert result[0] == 1.
|
||||
result = oks_iou(np.zeros([17 * 3]), np.ones([1, 17 * 3]), 1, [1])
|
||||
assert result[0] < 0.01
|
||||
Reference in New Issue
Block a user