PCK - Percentage of Correct Keypoints
1. PCK - Percentage of Correct Keypoints
关键点正确估计的比例
计算检测的关键点与其对应的groundtruth间的归一化距离小于设定阈值的比例(the percentage of detections that fall within a normalized distance of the ground truth).
FLIC 中是以躯干直径(torso size) 作为归一化参考.
MPII 中是以头部长度(head length) 作为归一化参考,即 PCKh.
function eval_pck(pred, joints, symmetry_joint_id, joint_name, name)
% PCK 的实现
% torso height: || left_shoulder - right hip ||
% symmetry_joint_id: 具有对称关系的关键点 ID
% joint_name: 具有对称关系的关键点名字range = 0:0.01:0.1;
show_joint_ids = (symmetry_joint_id >= 1:numel(symmetry_joint_id));% compute distance to ground truth joints
dist = get_dist_pck(pred, joints(1:2,:,:));% 计算 PCK
pck_all = compute_pck(dist,range);
pck = pck_all(end, :);
pck(1:end-1) = (pck(1:end-1) + pck(symmetry_joint_id))/2;% 可视化结果
pck = [pck(show_joint_ids) pck(end)];
fprintf('------------ PCK Evaluation: %s -------------\n', name);
fprintf('Parts '); fprintf('& %s ', joint_name{:}); fprintf('& Mean\n');
fprintf('PCK '); fprintf('& %.1f ', pck); fprintf('\n');% -------------------------------------------------------------------------
function dist = get_dist_pck(pred, gt)
assert(size(pred,1) == size(gt,1) && size(pred,2) == size(gt,2) && size(pred,3) == size(gt,3));dist = nan(1,size(pred, 2), size(pred,3));for imgidx = 1:size(pred,3)% torso diameter 躯干直径if size(gt, 2) == 14refDist = norm(gt(:,10,imgidx) - gt(:,3,imgidx));elseif size(gt, 2) == 10 % 10 joints FLICrefDist = norm(gt(:,7,imgidx) - gt(:,6,imgidx));elseif size(gt, 2) == 11 % 11 joints FLICrefDist = norm(gt(:,4,imgidx) - gt(:,11,imgidx));elseerror('Number of joints should be 14 or 10 or 11');end% 预测的关键点与 gt 关键点的距离dist(1,:,imgidx) = sqrt(sum((pred(:,:,imgidx) - gt(:,:,imgidx)).^2,1))./refDist;end% -------------------------------------------------------------------------
function pck = compute_pck(dist,range)
pck = zeros(numel(range),size(dist,2)+1);for jidx = 1:size(dist,2)% 计算每个设定阈值的 PCKfor k = 1:numel(range)pck(k,jidx) = 100*mean(squeeze(dist(1,jidx,:)) <= range(k));end
end% 计算平均 PCK
for k = 1:numel(range)pck(k,end) = 100*mean(reshape(squeeze(dist(1,:,:)),size(dist,2)*size(dist,3),1) <= range(k));
end
输出结果如下:
------------ PCK Evaluation: Single_People -------------
Parts & Ankle & Knee & Hip & Wris & Elbo & Shou & Head & Mean
PCK & 93.2 & 88.3 & 70.4 & 92.1 & 92.6 & 94.6 & 95.9 & 89.6
1.1 PCKh
% 计算 head 的长度
headSize = getHeadSizeAll(annolist_test_flat(single_person_test_flat == 1));% 计算预测的关键点与 gt 关键点间的归一化距离
dist = getDistPCKh(pred,gt,headSize);% 计算 PCKh
pck = computePCK(dist,range);function headSizeAll = getHeadSizeAll(annolist)
headSizeAll = nan(length(annolist),1);
for imgidx = 1:length(annolist)rect = annolist(imgidx).annorect;headSizeAll(imgidx) = util_get_head_size(rect);
end
endfunction headSize = util_get_head_size(rect)
SC_BIAS = 0.6; % 0.8*0.75
headSize = SC_BIAS*norm([rect.x2 rect.y2] - [rect.x1 rect.y1]); # head 的两个点间的距离
endfunction dist = getDistPCKh(pred,gt,refDist)
assert(size(pred,1) == size(gt,1) && size(pred,2) == size(gt,2) && size(pred,3) == size(gt,3));
assert(size(refDist,1) == size(gt,3));dist = nan(1,size(pred,2),size(pred,3));
for imgidx = 1:size(pred,3)% pred joints 与 gt joints 的归一化距离dist(1,:,imgidx) = sqrt(sum((pred(:,:,imgidx) - gt(:,:,imgidx)).^2,1))./refDist(imgidx);
endfunction pck = computePCK(dist,range)
pck = zeros(numel(range),size(dist,2)+2);
for jidx = 1:size(dist,2)% 计算各阈值的 PCKfor k = 1:numel(range)d = squeeze(dist(1,jidx,:));% dist is NaN if gt is missing; ignore dist in this casepck(k,jidx) = 100*mean(d(~isnan(d))<=range(k));end
end% 计算上半身关键点的平均 PCK
for k = 1:numel(range)d = reshape(squeeze(dist(1,7:12,:)),6*size(dist,3),1);pck(k,end-1) = 100*mean(d(~isnan(d))<=range(k));
end% 计算全身关键点的 PCK
for k = 1:numel(range)d = reshape(squeeze(dist(1,:,:)),size(dist,2)*size(dist,3),1);pck(k,end) = 100*mean(d(~isnan(d))<=range(k));
end
end
2. PDJ - Percentage of Detected Joints
检测到的关键点比例.
function [accs, range] = eval_pdj(pred, joints, reference_joints_pair, symmetry_joint_id, joint_name, eval_name)
% 设定选定的参考点:reference_joints_pair = [3, 10]; % 右肩点到左臀点
% symmetry_joint_id: 具有对称关系的关键点 ID
assert(numel(reference_joints_pair) == 2);
show_joint_ids = find(symmetry_joint_id >= 1:numel(symmetry_joint_id));
range = 0:0.01:0.5;num = size(pred, 3);
assert(num >= 1);
% the number of joints
joint_n = size(joints, 2);scale = zeros(1, num);
for ii = 1:numscale(ii) = norm( joints(:,reference_joints_pair(1), ii) - joints(:,reference_joints_pair(2), ii) );%scale(ii) = 100;
enddists = zeros(num, joint_n);
for ii = 1:numdists(ii,:) = sqrt(sum( (pred(:, :, ii) - joints(:,:,ii)).^2, 1 ));dists(ii,:) = dists(ii,:) / scale(ii);
endaccs = zeros(numel(range), joint_n);
for ii = 1:numel(range)accs(ii,:) = mean(dists <= range(ii),1);
endaccs = (accs + accs(:,symmetry_joint_id)) / 2;
accs = accs(:, show_joint_ids);
% print
fprintf('-------------- PDJ Evaluation ---------------\n')
fprintf('Joints '); fprintf('& %s ', joint_name{:}); fprintf('\n');
sample_pdj_thresholds = [0.1, 0.2, 0.3, 0.4];
for ii = 1:length(sample_pdj_thresholds)t = sample_pdj_thresholds(ii);idx = (range == t);fprintf('PDJ@%.2f ', t); fprintf('& %.1f ', accs(idx,:)*100); fprintf('\n');
end% plot
line_width = 2;
p_color = {'g','y','b','r','c','k','m'};% visualize
figure; hold on; grid on;
for ii = 1:numel(show_joint_ids)plot(range, accs(:, ii), p_color{mod(ii, numel(p_color))+1}, 'linewidth', line_width);
end
leg_str = cell(numel(show_joint_ids), 1);
for ii = 1:numel(show_joint_ids)leg_str{ii} = sprintf('%s', joint_name{ii});
end
h_leg = legend(leg_str, 'FontSize', 12);
set(h_leg, 'location', 'southeast', 'linewidth', 1);axis([range(1),range(end), 0, 1]);
set(gca,'ytick', 0:0.1:1);
set(gca, 'linewidth', 1);% --- titles
xlabel('Normalized Threshold') % x-axis label
ylabel('Detection Rate') % y-axis labeltitle([eval_name ' PDJ']);
hold off;
输出结果为:
-------------- PDJ Evaluation ---------------
Joints & Ankle & Knee & Hip & Wris & Elbo & Shou & Head
PDJ@0.10 & 93.3 & 87.6 & 66.4 & 91.8 & 92.6 & 95.5 & 96.1
PDJ@0.20 & 97.5 & 94.7 & 93.4 & 96.8 & 97.9 & 98.8 & 99.1
PDJ@0.30 & 97.9 & 95.7 & 97.6 & 97.8 & 98.4 & 99.1 & 99.2
PDJ@0.40 & 98.1 & 96.1 & 98.4 & 98.1 & 98.6 & 99.2 & 99.2
PCK - Percentage of Correct Keypoints相关推荐
- 【姿态估计】PCK(Percentage of Correct Keypoints)指标及代码实现
PCK(Percentage of Correct Keypoints)指标及python代码实现 姿态估计任务中,常用的评价指标有AP值.PCK等. PCK指标定义 PCK指标指正确检测的关键点所占 ...
- mmpose关键点(一):评价指标(PCK,OKS,mAP)
由于,近期项目需要引入关键点做一些方向逻辑的判断,在此记录一些实验与经典论文方法.首先,我们先了解一下关键点估计的评价指标. 1.PCK - Percentage of Correct Keypoin ...
- 关键点估计之 PCK, PCKh, PDJ 评价度量
原文 - https://www.aiuai.cn/aifarm449.html - AIUAI 关键点估计 - 人体关键点(姿态估计) 和服饰关键点(FashionAI/DeepFashion). ...
- 人体关键点检测的评价度量PCK, PCKh, PDJ
1.PCK - Percentage of Correct Keypoints -----关键点正确估计的比例 计算检测的关键点与其对应的groundtruth间的归一化距离小于设定阈值的比例(the ...
- Human Pose Estimation人体姿态估计综述调研
给定一幅图像或一段视频,人体姿态估计就是去恢复其中人体关节点位置的过程. 数据集 LSP 地址:http://sam.johnson.io/research/lsp.htm 样本数:2K 关节点个数: ...
- 经典论文复现 | PyraNet:基于特征金字塔网络的人体姿态估计
过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...
- Human Pose Estimation姿态估计调研
介绍 姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测.姿态估计.分割等等.有些需要在非水平表面进行定位的应用可能也会用到姿态估计,例如图形.增强现实或者人 ...
- 姿态估计目标检测论文整理(1)
一.姿态估计 1. 现阶段人体姿态识别主流的通常有2个思路: Top-Down(自上而下)方法:将人体检测和关键点检测分离,在图像上首先进行人体检测,找到所有的人体框,对每个人体框图再使用关键点检测, ...
- 人体姿态估计-评价指标(一)
人体姿态估计-评价指标(一) 摘要 评价指标 oks(object keypoint similarity) AP(Average Precision)平均准确率 mAP(mean Average P ...
最新文章
- 教程 | 以太坊智能合约编程之菜鸟教程
- MTM:matlab实现1
- 2015 10月21日 工作计划与执行
- csdn 用户 蚂蚁翘大象_用户界面设计师房间里的大象
- vert.x_使用vert.x 2.0,RxJava和mongoDB创建simpe RESTful服务
- [TypeScript] Export public types from your library
- Oracle 安装 检查操作系统版本 必须是 5.0 5.1 的解决办法
- mysql select 效能_MYSQL的联合查询最好是少用,效能差异巨大
- html基本结构(头部需加上样式表),HTML基本结构、头部、注释(示例代码)
- Just a Hook(线段树区间更新)
- C# 代码调整屏幕分辨率
- 卡饭里的云计算机,微云可以在电脑用吗
- 精选的 Go 框架,库和软件的精选清单
- ahocorasick使用
- 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本!
- 组合计数——车的放置(逆元)+数三角形+序列统计(lucas定理)
- 实现嵌入式linux自动同步网络时间---NTP
- react-redux——使用redux——使用react-redux这个扩展简化操作
- Zabbix监控之监控项
- Vbs中sendKeys
热门文章
- 中国移动10086客服中心工作人员的血和泪
- Python股票盯盘助手
- Android动画学习笔记(二)——动画插值器Interpolator
- SaaS、PaaS、IaaS、aPaaS、iPaaS、RaaS、RPAaaS,傻傻分不清楚?
- 关于 iOS 开发者账号
- 软件架构图的艺术与从单体架构到异地多活,开心的学java架构
- Mysql的增删改查语句
- 远程代码托管平台--GitHub、Gitee的使用
- 2.2.2 处理器(CPU)资源
- The located assembly's manifest definition does not match the assembly reference