Datasets & Benchmarks
MPII Human Pose
A benchmark for 2D human pose estimation from the Max Planck Institute for Informatics, released in 2014, with about 25,000 YouTube frames and 40,000 people annotated with 16 body joints, collected through a taxonomy of everyday activities; its single-person track is scored with PCKh, a joint-distance measure normalized by head size, and its multi-person track with average precision over body joints.
intermediate
MPII Human Pose is a benchmark for 2D human pose estimation built by Mykhaylo Andriluka, Leonid Pishchulin, Peter Gehler and Bernt Schiele at the Max Planck Institute for Informatics and presented at CVPR 2014. It contains frames taken from YouTube videos and selected through a taxonomy of everyday human activities: the paper reports 24,920 frames with 40,522 annotated people, and the official page about 25,000 images with over 40,000 people. Each person has 16 body joints with visibility flags, a head rectangle, a rough position and a scale, and each image has an activity label and the unannotated video frames around it. Test annotations are withheld. The single-person benchmark is scored with PCKh, a joint-distance measure normalized by head size, and was widely used to compare single-person 2D pose networks until Xiao, Wu and Wei (2018) described it as saturated; the multi-person benchmark, scored with average precision over body joints, brought multi-person pose estimation to varied everyday scenes after earlier benchmarks of upright people in group photos (Andriluka et al., 2018).
Purpose
Andriluka et al. (2014) argued that the pose datasets of the time each covered one corner of the problem: sports datasets such as Leeds Sports Pose (LSP) had strong articulation but tight sports clothing, while FashionPose and Armlets had varied clothing, occlusion and truncation but mostly upright people. Their Figure 2 shows that the upper-body annotations of Armlets cluster around a person with the arms down along the torso, while MPII’s are spread out. The paper judged the small training sets of older benchmarks such as Parse and Buffy unsuitable for models with complex appearance representations and several components.
The authors’ aim was to cover both common and rare poses by sampling deliberately rather than collecting more images of the same kind. They used a published taxonomy of activities to drive the collection, which also gave every image an activity label, so that a method’s accuracy can be broken down by activity. The benchmark was meant as an analysis tool as much as a ranking: the paper’s rich annotations (occlusion, truncation, 3D torso and head orientation) were used to measure how pose complexity, viewpoint, occlusion, foreshortening and truncation each affect the methods of the day.
Dataset Size
The counts differ between the paper and the official page:
- Paper (Andriluka et al., 2014, §2 and Table 1). 3,913 videos spanning 491 activities; 24,920 frames; 40,522 annotated people, 28,821 for training and 11,701 for testing. The table counts unique annotated people, without mirroring.
- Official page (as of October 2026). Around 25,000 images containing over 40,000 people, covering 410 human activities. The page does not explain the difference from the paper’s 491 activities.
- Subsets. The PoseTrack paper, by an overlapping group of authors, lists 26,429 annotated poses for MPII Single Person, of which 7,000 are held out for evaluation, and 14,993 for MPII Multi-Person (Andriluka et al., 2018, Table 1 and §2). These add up to 41,422, more than the 40,522 people of the 2014 paper; no source reconciles the two. The DeepCut paper gives 3,844 training and 1,758 test groups of people for the multi-person benchmark (Pishchulin et al., 2016, §5.2).
The release on the download page is “Version 1.0”: 12.9 GB of images and 12.5 MB of annotations. The video context is distributed separately as short clips around each frame, in 25 batches of about 17 GB, with a file mapping images to videos (download page, as of October 2026).
Classes
The classes of MPII Human Pose are activities, not object categories. The collection followed the two-level hierarchy of the 2011 Compendium of Physical Activities (Ainsworth et al., 2011), developed to assign standardized energy costs in physical activity surveys. Andriluka et al. (2014) describe it as 823 activities in 21 categories; the first level groups activities such as home activities, lawn and garden or sports, and the second level holds individual activities such as washing windows, picking fruit or rock climbing. The authors merged activities that looked alike, such as cycling at different speeds, which left 491. The paper’s Figures 1 and 7 show 20 activity categories in the dataset. The annotation file stores, for each image, an activity name, a category name and an activity id (download page).
The body model has 16 joints, numbered 0 to 15: right ankle, right knee, right hip, left hip, left knee, left ankle, pelvis, thorax, upper neck, head top, right wrist, right elbow, right shoulder, left shoulder, left elbow and left wrist (download page). Joints are labeled person-centrically: “left” means the person’s own left limb, whichever side of the image it appears on, so a method must also tell front from back (Andriluka et al., 2014).
Annotation Types
The public annotation file is a MATLAB structure, RELEASE, with these fields per image and per person (download page, as of October 2026):
- Body joints. Image coordinates and a joint id for each annotated joint, with an
is_visibleflag. Joints that are hidden but whose position is apparent from the image are generally annotated and flagged as not visible; joints with no information, such as legs outside the image, are not annotated at all (Newell et al., 2016, arXiv v2, §5.2). - Head rectangle. The corners
x1, y1, x2, y2of a box around the head. It is the normalizer of the evaluation (below). - Rough position and scale.
objpos, a rough position of the person in the image, andscale, the person’s scale with respect to a height of 200 pixels. - Single-person flags. For each image, the indices of the people who are “sufficiently separated” from others; these form the single-person benchmark.
- Activity and video. The activity label, the YouTube video id and the frame’s position in the video in seconds.
- Split. A flag assigning each image to training or test.
The paper describes more than this. Its Figure 3 shows the eyes and the nose, occlusion labels for body parts and the 3D viewpoint of the head and torso, and its analysis represents the torso rotation by three Euler angles and each part’s occlusion and truncation by binary labels (Andriluka et al., 2014, §2–3). The official home page says that these richer annotations, body-part occlusions and 3D torso and head orientations, were obtained for the test set; the public annotation description does not list them.
Annotation was done by in-house workers and by workers on Amazon Mechanical Turk, selected with a qualification task, with the data checked by manual inspection; the tools extended those of Maji’s large-scale annotation work. All people in the selected frames were annotated except members of dense crowds in which many people are almost fully occluded (Andriluka et al., 2014, §2).
Splits
Roughly three quarters of the images went to training and the rest to testing, with all frames of a video on the same side (Andriluka et al., 2014, §2). The images were picked by hand, several per video, to show different people or the same person in clearly different poses, at least 5 seconds apart; frames with severely truncated people, unrecognizable poses, poor quality or small scale were left out.
There is no official validation set. Papers hold out part of the training set instead; Newell et al. (2016, arXiv v2) used a held-out set of around 3,000 samples, and the choice varies between papers, so validation numbers from different papers are not directly comparable. The home page gives the reason for withholding the test annotations as preventing overfitting and tuning on the test set, the policy discussed in benchmarking and benchmark overfitting. The evaluation instructions imply that the public release contains the test images with each person’s rough position and scale: participants write their predictions into the test entries of RELEASE and may read objpos and scale from them.
Tasks
- Single-person pose estimation. Locate the 16 joints (14 are scored) of each sufficiently separated test person, given the person’s rough position and scale.
- Multi-person pose estimation. Locate the joints of every person in a group of interacting people, without being told how many people there are or where each one is.
- Activity recognition. The activity labels and the video context also allow activity recognition; the official references page lists, next to the CVPR paper, a GCPR 2014 paper by Pishchulin, Andriluka and Schiele on fine-grained activity recognition with holistic and pose-based features.
Evaluation
MPII has two protocols, both computed by the MATLAB evaluation toolkit linked from the evaluation and results pages. The toolkit has no version number; the copy described here is the archived evalMPII.zip of May 2024, whose files are dated October 2015 to July 2016. The live link redirected to the dataset’s home page when checked in October 2026. The description below follows a line-by-line reading of the code; MATLAB was not run.
Single person: protocol
Only the sufficiently separated people of the test set are scored. A method may use each person’s approximate position (objpos) and scale (scale), the same simplification as earlier benchmarks: Andriluka et al. (2014) judged it necessary for quick adoption, since most methods then neither handled several people nor searched over positions and scales. Predictions are joint coordinates in the original image, stored in a copy of the test annotation structure.
Single person: PCKh as the code computes it
The paper defines PCKh as the PCK measure of Yang and Ramanan (2013), whose threshold is a fraction of the person’s bounding box, with the threshold set instead to 50% of the head segment length, chosen so that the metric does not depend on articulation (Andriluka et al., 2014, §2). The code does not use a head segment; it derives the head size from the annotated head rectangle (util_get_head_size.m). For person with head rectangle corners and , predicted joint and ground truth ,
where is the set of annotated joints being scored. The constant 0.6 is named SC_BIAS in the code, with the comment 0.8*0.75 and no further explanation. The details, from evaluatePCKh.m, annolist2matrix.m, getDistPCKh.m and computePCK.m:
- Fourteen joints. The ground truth and predictions are read into a matrix per person: the six leg joints, the six arm joints, the upper neck and the head top. Pelvis and thorax are dropped and never scored.
- Missing ground truth is ignored, missing predictions are wrong. A joint with no annotation gives a distance of NaN and is left out of every average. A joint the method did not predict is set to infinity, so it counts as incorrect.
- Visibility is not used. The
is_visibleflags play no part: an annotated joint counts whether or not it is visible. - Inclusive threshold. A joint is correct if .
- Per-joint and pooled scores. PCKh is computed for each of the 14 joints over all people with that joint annotated. The published table (
genTablePCK.m) averages left and right into seven columns, Head (upper neck and head top), Shoulder, Elbow, Wrist, Hip, Knee and Ankle, as plain means of the two per-joint percentages. The “Total” is not the mean of these columns: it pools all annotated joints of all people into one fraction, so joint types annotated more often weigh more. The code also computes an upper-body score pooled over wrists, elbows and shoulders. - Curves and AUC. PCKh is computed for from 0 to 0.5 in steps of 0.01, and the reported table is the last point, . The area under the total curve, with rescaled to and the curve interpolated linearly, gives an AUC in percent. DeepCut reported this AUC, over the whole range of thresholds, next to PCKh (Pishchulin et al., 2016, §4.3 and Table 4).
The paper itself did not rank methods by PCKh. Its working metric was PCPm, a variant of the percentage of correct parts in which a body part is correct if both endpoints lie within 50% of the mean ground-truth length of that part over the test set, rather than of the part’s own length, so that foreshortened parts are not held to a stricter threshold; PCP and PCKh results were given in the supplementary material, with the observation that all conclusions held under each metric (Andriluka et al., 2014, §2–3).
Multi person: protocol
The multi-person benchmark is scored on groups of people, and one image may contain several groups (evaluation page). The groups are fixed by a file in the toolkit, groups_v12.mat; getMultiPersonGroups.m keeps a group only if none of its members belongs to the single-person subset, so the two benchmarks share no people. A method may use each group’s location, the box spanned by the objpos points of its members, and the group’s scale, the mean of their scales. It may not use the number of people, the approximate location of each person or each person’s scale (evaluation page and toolkit README).
Predictions are sets of poses per group, each predicted joint with a coordinate and a confidence score. evaluateAP.m cites “Pishchulin et al., arXiv’15”, the preprint of DeepCut, which describes the measure: poses are assigned to the ground truth by highest PCKh, at most one pose per ground-truth person, unassigned poses are false positives, and average precision is computed per body part (Pishchulin et al., 2016, §5.2). In the code (assignGTmulti.m), for each group:
- For every predicted pose and ground-truth person, each of the 14 joints is a match if its distance, divided by that ground-truth person’s head size, is at most 0.5. The pair’s score is the number of matched joints divided by the number of joints annotated for that person.
- Each predicted pose keeps only its best ground-truth person. Each ground-truth person then takes, among the poses for which it is the best, the one with the highest pair score; a person with no such pose, or with a best pair score of zero, stays unmatched, and so does every pose not taken. Poses are matched by how well they fit, not in order of confidence, unlike COCO’s greedy matching by score.
- Every predicted joint of a matched pose becomes a detection labeled true if it matched; a predicted joint whose ground-truth person has no annotation for that joint is labeled false. Every joint of an unmatched pose is a false positive.
For each joint type, detections from all groups are pooled and sorted by score, recall is divided by the number of annotated ground-truth joints of that type, and AP is the area under the precision–recall curve with precision made monotone (VOCap.m, the all-points form of Pascal VOC 2010–2012). The code counts a group’s annotated joints inside its loop over predicted poses, so a group for which a method predicts no pose adds nothing to that number and its people are not counted as missed. The mAP is the mean of the 14 per-joint APs, and the published table again averages left and right joints into seven columns (average precision and precision and recall cover the metric itself). The results page reports the full multi-person test set and a subset of 288 test images, the subset used in the DeepCut paper.
Submission
As of October 2026, predictions are prepared in MATLAB as pred_keypoints_mpii.mat (single person) or pred_keypoints_mpii_multi.mat (multi person) and sent by email to the organizers. At most four submissions are allowed for the same approach, at least 72 hours apart (evaluation page). The home page says that the organizers are working on an automatic evaluation server and performance analysis tools; no automatic server is linked, and the results tables are updated by the organizers. The latest entries on the results page date from 2020.
Example: what head-size normalization does
The example scores the same synthetic predictions with three normalizers. It builds 3D stick figures with MPII’s 16 joints and a spherical head, in six poses (standing, arms raised, squatting, bending toward the camera, seen from the side, and lying, a 90° rotation in the image plane), and projects them orthographically at statures of 150 to 450 pixels. A sphere projects to a disk of fixed size, so its bounding square gives a head rectangle that does not change with pose; real head rectangles vary with head orientation and with the annotator. Predictions add Gaussian noise of 3.5% of stature per coordinate to every joint, the same error law in every pose. The PCK variants normalize by the torso (left shoulder to right hip, a choice made here) and by the longer side of the box around the joints, as in Yang and Ramanan’s PCK, with thresholds chosen so that all three measures tolerate the same number of pixels on standing people. Each pose is scored on five scenes (seeds 100–104) of 400 people; every pose uses the same random numbers, so differences between rows come only from the poses. The second part prints the official table on a mixed test set with truncated legs and missing predictions; the scoring function was checked against a literal port of getDistPCKh.m, computePCK.m and area_under_curve.m on a separate set, with identical per-joint, upper-body, total and AUC values.
import numpy as np
# MPII joint ids 0-15 (download page). The PCKh code scores 14 of them, in this
# order: right leg, left leg, right arm, left arm (ankle to hip, wrist to shoulder,
# then hip to ankle, shoulder to wrist), upper neck, head top.
NAMES = ["r_ank", "r_knee", "r_hip", "l_hip", "l_knee", "l_ank", "pelvis", "thorax",
"neck", "head_top", "r_wri", "r_elb", "r_sho", "l_sho", "l_elb", "l_wri"]
EVAL = [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 8, 9] # annolist2matrix.m
def rot(axis, deg):
c, s = np.cos(np.radians(deg)), np.sin(np.radians(deg))
i, j = [(1, 2), (0, 2), (0, 1)][axis]
R = np.eye(3); R[i, i] = R[j, j] = c; R[i, j], R[j, i] = -s, s
return R
def limb(start, length, pitch, roll=0.0):
"""Segment hanging down from `start`, swung forward (toward the camera, +z) by
`pitch` degrees and sideways by `roll` degrees."""
return start + rot(0, pitch) @ rot(2, roll) @ np.array([0.0, -length, 0.0])
def person(pose, rng):
"""3D stick figure of stature 1 (x right, y up, z toward camera) and head radius."""
j = lambda d: d + rng.normal(0, 4) # jitter angles
P = np.zeros((16, 3))
up_pitch = {"bent forward": j(70)}.get(pose, j(0)) # torso toward camera
U = rot(0, up_pitch)
P[7] = U @ [0, 0.30, 0]; P[8] = U @ [0, 0.35, 0]
head_r = 0.065 * rng.uniform(0.92, 1.08)
head_c = P[8] + U @ [0, head_r, 0]
P[9] = head_c + U @ [0, head_r, 0]
for side, sg in ((12, -1), (13, 1)): # shoulders
P[side] = P[7] + U @ [sg * 0.11, 0, 0]
for hip, sg in ((2, -1), (3, 1)):
P[hip] = [sg * 0.08, 0, 0]
# (upper-arm pitch, roll), (forearm pitch, roll); roll swings the arm outward
arms = {"standing": ((0, 10), (15, 10)), "arms raised": ((0, 160), (0, 175)),
"squatting": ((40, 10), (70, 10)), "bent forward": ((-70, 5), (-70, 5)),
"side view": ((30, 0), (60, 0)), "lying": ((0, 10), (15, 10))}[pose]
for sho, elb, wri, sg in ((12, 11, 10, -1), (13, 14, 15, 1)):
f = sg if pose == "side view" else 1 # arms swing in turn
(p1, r1), (p2, r2) = arms
P[elb] = limb(P[sho], 0.17, f * j(p1), -sg * j(r1))
P[wri] = limb(P[elb], 0.15, f * j(p2), -sg * j(r2))
legs = {"squatting": (j(80), j(-75)), "side view": (j(25), j(-10))}.get(pose, (j(0), j(0)))
for hip, knee, ank, sg in ((2, 1, 0, -1), (3, 4, 5, 1)):
a = legs[0] * (sg if pose == "side view" else 1)
P[knee] = limb(P[hip], 0.25, a, -sg * 3)
P[ank] = limb(P[knee], 0.24, a + legs[1], -sg * 3)
R = {"side view": rot(1, 90), "lying": rot(2, 90)}.get(pose, np.eye(3))
return (P @ R.T), head_c @ R.T, head_r
def project(P, head_c, head_r, scale, center):
"""Orthographic image: x right, y down. Returns 16x2 joints and the head box."""
xy = np.c_[P[:, 0], -P[:, 1]] * scale + center
hc = np.array([head_c[0], -head_c[1]]) * scale + center
r = head_r * scale # a sphere projects to a disk
return xy, (hc[0] - r, hc[1] - r, hc[0] + r, hc[1] + r)
def head_size(box): # util_get_head_size.m
x1, y1, x2, y2 = box
return 0.6 * np.hypot(x2 - x1, y2 - y1)
def torso_size(xy): # left shoulder to right hip
return np.linalg.norm(xy[13] - xy[2])
def box_size(xy): # max side of the joints' box
return (xy.max(0) - xy.min(0)).max()
def pck_table(pred, gt, ref, thr=0.5):
"""getDistPCKh.m + computePCK.m: gt NaN = not annotated (ignored),
pred NaN = missing prediction (set to inf, counts as wrong)."""
pred = np.where(np.isnan(pred), np.inf, pred)
d = np.linalg.norm(pred - gt, axis=2) / ref[:, None] # people x 14
ok = ~np.isnan(d)
per_joint = np.array([100 * np.mean(d[ok[:, k], k] <= thr) for k in range(14)])
total = 100 * np.mean(d[ok] <= thr) # pooled, not averaged
ubody = 100 * np.mean(d[:, 6:12][ok[:, 6:12]] <= thr)
rng_ = np.arange(0, 0.51, 0.01)
curve = np.array([100 * np.mean(d[ok] <= t) for t in rng_])
auc = np.sum((curve[1:] + curve[:-1]) / 2) / (len(rng_) - 1) # x scaled to [0, 1]
return per_joint, ubody, total, auc
POSES = ["standing", "arms raised", "squatting", "bent forward", "side view", "lying"]
def sample(pose, n, rng, sigma=0.035):
"""n people in one pose, and predictions with the same error law for every pose:
isotropic Gaussian, sigma (per joint or one value) as a fraction of stature."""
sd = np.reshape(sigma, (-1, 1))
G, Pr, H, T, B, S = [], [], [], [], [], []
for _ in range(n):
s = rng.uniform(150, 450) # stature in pixels
xy, box = project(*person(pose, rng), s, rng.uniform(300, 700, 2))
G.append(xy[EVAL]); Pr.append(xy[EVAL] + rng.normal(0, 1, (14, 2)) * sd * s)
H.append(head_size(box)); T.append(torso_size(xy)); B.append(box_size(xy))
S.append(s)
return [np.array(a) for a in (G, Pr, H, T, B, S)]
# 1. The same prediction errors scored with three normalizers. The PCK thresholds
# for torso and box are set so that, on standing people, all three tolerate the
# same number of pixels as PCKh@0.5.
rng = np.random.default_rng(0)
G, Pr, H, T, B, S = sample("standing", 2000, rng)
a_torso = np.median(0.5 * H / T)
a_box = np.median(0.5 * H / B)
print(f"PCKh@0.5 tolerance = {np.median(0.5 * H / S):.3f} x stature; matched thresholds:"
f" torso {a_torso:.3f}, box {a_box:.3f}")
print(f"\n{'pose':13s} {'head':>6s} {'torso':>6s} {'box':>6s} (normalizer / stature)"
f" PCKh@.5 PCK-torso PCK-box (min-max over 5 seeds)")
for pose in POSES:
rows = []
for seed in range(5):
G, Pr, H, T, B, S = sample(pose, 400, np.random.default_rng(100 + seed))
rows.append([pck_table(Pr, G, H)[2], pck_table(Pr, G, T, a_torso)[2],
pck_table(Pr, G, B, a_box)[2]])
if seed == 0:
ratio = [np.median(H / S), np.median(T / S), np.median(B / S)]
r = np.array(rows)
cells = " ".join(f"{m:5.1f} ({lo:4.1f}-{hi:4.1f})"
for m, lo, hi in zip(r.mean(0), r.min(0), r.max(0)))
print(f"{pose:13s} {ratio[0]:6.3f} {ratio[1]:6.3f} {ratio[2]:6.3f} {cells}")
# 2. The official table on a mixed test set. Errors now grow from head to wrists and
# ankles; 15% of people lack annotations for knees and ankles (truncated), and the
# predictor outputs no wrists for 5% of people.
SIG = np.array([.045, .035, .03, .03, .035, .045, .045, .035, .025, .025, .035, .045,
.02, .02]) # ank knee hip hip knee ank wri elb sho ...
rng = np.random.default_rng(1)
G, Pr, H = [], [], []
for pose in POSES:
g, p, h, *_ = sample(pose, 300, rng, SIG)
G.append(g); Pr.append(p); H.append(h)
G, Pr, H = np.concatenate(G), np.concatenate(Pr), np.concatenate(H)
trunc = rng.random(len(G)) < 0.15
G[np.ix_(trunc, [0, 1, 4, 5])] = np.nan # knees and ankles not annotated
Pr[np.ix_(rng.random(len(G)) < 0.05, [6, 11])] = np.nan # wrists not predicted
pj, ub, tot, auc = pck_table(Pr, G, H)
pair = lambda a, b: (pj[a] + pj[b]) / 2 # genTablePCK.m columns
cols = [pair(12, 13), pair(8, 9), pair(7, 10), pair(6, 11), pair(2, 3), pair(1, 4),
pair(0, 5)]
print("\nHead Shou Elbo Wris Hip Knee Ankl UBody Total AUC")
print(" ".join(f"{c:4.1f}" for c in cols) + f" {ub:4.1f} {tot:4.1f} {auc:4.1f}")
print(f"mean of the 7 columns: {np.mean(cols):.1f}; "
f"annotated joints scored: {np.sum(~np.isnan(G[..., 0]))} of {G.shape[0] * 14}")
PCKh@0.5 tolerance = 0.055 x stature; matched thresholds: torso 0.155, box 0.057
pose head torso box (normalizer / stature) PCKh@.5 PCK-torso PCK-box (min-max over 5 seeds)
standing 0.110 0.355 0.967 71.1 (70.4-71.7) 71.2 (70.3-72.2) 71.3 (70.3-72.2)
arms raised 0.110 0.355 1.097 71.1 (70.4-71.7) 71.2 (70.3-72.2) 79.8 (79.0-80.9)
squatting 0.110 0.355 0.760 71.1 (70.4-71.7) 71.2 (70.3-72.2) 53.5 (52.4-54.5)
bent forward 0.110 0.215 0.650 71.1 (70.4-71.7) 37.3 (36.4-38.3) 43.4 (42.7-44.4)
side view 0.110 0.300 0.937 71.1 (70.4-71.7) 59.0 (58.2-59.6) 68.7 (67.8-69.3)
lying 0.110 0.355 0.967 71.1 (70.4-71.7) 71.2 (70.3-72.2) 71.3 (70.3-72.2)
Head Shou Elbo Wris Hip Knee Ankl UBody Total AUC
97.9 90.6 73.1 50.6 81.1 72.5 53.7 71.5 74.7 34.1
mean of the 7 columns: 74.2; annotated joints scored: 24160 of 25200
The script runs in under two seconds. On these figures, PCKh@0.5 tolerates an error of 5.5% of the person’s height. Since the predictor makes the same errors relative to body size in every pose, and the head rectangle does not change with pose, PCKh gives the same score in every row; that is the articulation independence the paper asked of it, here built into the synthetic head. The other normalizers turn the pose into a change of difficulty. Raising the arms makes the joints’ box taller, so the box-normalized PCK becomes more lenient and rises by about 8.5 points; squatting and bending forward shrink the box, and the same errors lose 18 and 28 points. The torso normalizer ignores the limbs but shrinks when the torso is foreshortened, as when the person bends toward the camera (the score falls by 34 points), or when the shoulders are seen edge-on from the side (12 points). Only the in-plane rotation leaves all three unchanged, because none of the normalizers depends on orientation. Over the five seeds, every score varies within about two points, far less than these differences. A method evaluated with a pose-dependent normalizer is thus rewarded or penalized for the poses in the test set as well as for its errors; in our reading, this is why a benchmark built to contain unusual poses and viewpoints needed a normalizer that does not move with them.
The second table shows the bookkeeping. Wrists score lowest, because they have the largest errors and because a missing wrist prediction counts as wrong. Knees and ankles of truncated people are not annotated, so they are skipped rather than counted wrong. Because the Total pools joints, the 15% of people without annotated knees and ankles contribute only their easier upper-body and hip joints, and the Total (74.7) ends up above the mean of the seven columns (74.2). The AUC is far below the total: it averages PCKh over thresholds from 0 to 0.5, so it rewards precise localization that the 0.5 threshold does not see.
License
The download page (as of October 2026) states: “MPII Human Pose Dataset, Version 1.0, Copyright 2015 Max Planck Institute for Informatics, Licensed under the Simplified BSD License”, with a link to a file bsd.txt. It adds that the annotations and the corresponding code are freely available for research purposes, and that commercial use is not permitted because the authors do not hold the copyright of the images.
- Annotations and code. In October 2026 the
bsd.txtlink redirected to the dataset’s home page. The archived copy of June 2024 is the two-clause BSD license text, copyright 2015 Max Planck Institute for Informatics. The two-clause BSD license itself permits commercial use, so the page’s ban and the license it names do not agree; the ban is justified by the images’ copyright but is not limited to the images. The terms are therefore unclear for commercial use of the annotations alone. The evaluation toolkit’s files carry no license header. - Images. The images are frames of YouTube videos. The page states only that the authors do not hold their copyright; it names no license for them.
Limitations and Bias
- Sources and selection. All images come from YouTube, chosen by queries on activity names, up to 10 videos per activity, and frames chosen by hand. Low-quality videos, videos without people, small or severely truncated people and dense crowds were excluded (Andriluka et al., 2014, §2). The taxonomy spreads the data over activities, but the proportion of each activity follows what YouTube offered and the annotators picked; the paper’s Figure 7, which orders activity categories by their number of test images, puts sports first. The general consequences of such choices are discussed in dataset bias.
- Single-person evaluation is not detection. The single-person protocol gives each person’s position and scale and leaves out people close to others, so its scores say little about finding people in an image. Methods crop around the given position, and Tompson et al. (2015) noted that this scale normalization makes detection easier than in practical use.
- Truncation is not penalized. Joints outside the image are not annotated and are excluded from scoring, so a wrong guess for a truncated limb costs nothing. The paper counted about 30% of test data with truncated people and suggested that methods should also report which parts are truncated (Andriluka et al., 2014, §3.1); 15% of the dataset shows people with only the upper body visible (§3).
- Visibility is unused. Hidden joints are scored like visible ones. Newell et al. (2016, arXiv v2, §5.2) found about 75% of annotated elbows and wrists in their validation set visible, and wrist PCKh of 93.6% on visible joints against 85.5% on all.
- Loose threshold and saturation. Half of 0.6 times the head diagonal is, in our reading, a generous tolerance for a full-body pose, and single-person totals passed 90% within two years of the first network on the results page. Differences between recent entries are fractions of a point on a test set whose ground truth only the organizers can check.
- People in the images. Neither the paper nor the official pages, as of October 2026, describe consent from the people shown, demographic composition, or a procedure for removing images. The annotation file links every image to its YouTube video id and time stamp.
Common Uses
- Single-person pose benchmark. Single-person architectures, such as convolutional pose machines and stacked hourglass networks, reported PCKh@0.5 on the MPII test set, often alongside LSP; the results page lists entries from 2014 to 2020.
- Training data. MPII’s training set is large next to LSP’s, and the results tables mark entries trained on combinations: LSP and LSP Extended added to MPII for the MPII benchmark, MPII added to LSP for the LSP benchmark, COCO training followed by fine-tuning on MPII, or the AI Challenger keypoint data (“HSSK” on the results page) added to MPII (results and related-benchmarks pages).
- Multi-person pose. The multi-person benchmark was used to evaluate methods that detect and group joints, such as DeepCut, DeeperCut, part affinity fields and associative embedding (results page).
- Analysis. The activity labels and the paper’s complexity measures allow results to be broken down by activity, pose cluster and viewpoint; the results page plots accuracy by pose and by viewpoint cluster.
- Video. The frames around each image let methods use motion; PoseTrack built its video benchmark on them (below).
Historical Milestones
- 2014: the baseline. On the new test set, the best pictorial structures model scored 42.3% PCPm and Yang and Ramanan’s flexible mixture of parts 38.3%; the upper-body models MODEC and Armlets scored 27.8% and 26.4% on the upper body, below the full-body models (Andriluka et al., 2014, Table 2). In plain PCP the best model scored 42.2% on MPII against 69.2% on LSP. Retrained on 4,000 MPII training images, the two full-body models rose to 46.1% and 44.7% PCPm (Table 3). The paper found pose complexity the most influential factor, then torso viewpoint and occlusion, with truncation the least (§3.1). On the results page’s PCKh@0.5 table, the 2013 pictorial structures model of Pishchulin et al. is listed at 44.1%.
- 2014: deep networks. Tompson et al. (2014), a convolutional network producing heatmaps with a jointly trained graphical model, are listed at 79.6% PCKh@0.5 (results page).
- 2016: deeper and multi-stage networks. Convolutional pose machines (Wei et al., 2016), trained with LSP and LSP Extended added, and DeeperCut (Insafutdinov et al., ECCV 2016) are listed at 88.5%; stacked hourglass networks (Newell et al., 2016) at 90.9%, the earliest-published entry above 90% (results page).
- 2016–2018: multi-person. DeepCut scored 53.5% mAP on the 288-image subset (results page; DeepCut’s own Table 6 gives 54.1% for its Dense-CNN model on the same benchmark). On the full multi-person test set, the results page lists 59.5% for DeeperCut, 75.6% for part affinity fields (Cao et al., 2017), 77.5% for associative embedding (Newell et al., NIPS 2017) and 78.0% for Fieraru et al. (CVPR workshops 2018).
- 2018: saturation. Xiao, Wu and Wei (2018) described MPII as saturated, PCKh@0.5 having risen in three years from about 80% to over 90%, and turned to COCO as the more challenging benchmark.
- 2020: last listed result. The last entry on the results page, Bulat et al. (FG 2020), trained with additional data, is listed at 94.1% PCKh@0.5.
Related Datasets
- Leeds Sports Pose (LSP) and LSP Extended. Sports images, 1,000 training and 1,000 test people, and an extension of 10,000 training images of gymnastics, athletics and parkour (Johnson and Everingham, 2010, 2011; Andriluka et al., 2014, §1 and Table 1). The 14 joints that MPII scores are LSP’s: a comment in the multi-person code describes the 14-joint index as a map from LSP to MPII format. The MPII site hosts LSP results with person-centric and observer-centric annotations, PCP and PCK@0.2 (related-benchmarks page).
- FLIC. 5,003 images from 30 Hollywood films, found with a person detector and labeled with 10 upper-body joints by five Mechanical Turk workers each, of which 1,016 were set aside for testing; its accuracy measure scales distances so that the ground-truth torso is 100 pixels tall (Sapp and Taskar, 2013, §6). Andriluka et al. (2014, Table 1) list 6,543 training people for FLIC, while Tompson et al. (2015) and Newell et al. (2016) give 3,987 training examples, which matches 5,003 minus 1,016.
- PoseTrack. A video benchmark built on MPII Multi-Person: key frames from it, each with about five seconds of video around it, annotated densely with body poses and person identities, and evaluated without known people locations or scales (Andriluka et al., 2018).
- COCO keypoints. The larger multi-person benchmark that succeeded MPII, with 17 keypoints and evaluation by object keypoint similarity; see COCO.
Resources
- Official page: download, annotation description, evaluation instructions and results tables; the old address
human-pose.mpi-inf.mpg.deredirects there. - Evaluation instructions and the evaluation toolkit, available as an archived copy since the live link redirects.
- Results: the single-person PCKh and multi-person mAP tables, updated by the organizers from emailed submissions.
Related
- COCO
Microsoft's Common Objects in Context, a dataset of everyday scenes with per-instance segmentation masks for 80 object categories, plus keypoints, captions, stuff and panoptic labels, whose evaluation protocol became the standard benchmark for object detection.
- Average Precision
The area under a detector's precision–recall curve for one class, computed from score-ranked detections matched to ground truth by IoU, and its averages over classes and IoU thresholds (mAP and COCO AP).
- Benchmarks and Leaderboards
What a computer vision benchmark consists of (a task, data, a protocol and a metric), how held-out and sequestered test sets, evaluation servers, submission limits, challenges and leaderboards keep its scores honest, and the ways those scores mislead.
- Skeleton-Based Action Recognition
Recognizing human actions from sequences of body-joint coordinates instead of pixels; where skeletons come from, the NTU RGB+D and Kinetics-Skeleton benchmarks, recurrent and CNN models, spatial-temporal graph convolution from ST-GCN to adaptive graphs, heatmap-based 3D CNNs, and what skeletons cannot see.
- Dataset Bias
How the way a dataset's images are chosen, photographed and labelled makes it an unrepresentative sample of the visual world, how cross-dataset tests measure the damage, and what bias means when the images show people, from demographic representation to withdrawn datasets.
- Benchmark Overfitting
How reusing one test set for years of model selection can inflate benchmark scores, what the theory of adaptive data analysis says about it, and what replication studies of CIFAR-10, ImageNet, MNIST and Kaggle found when they measured it.
References
- Andriluka, M., Pishchulin, L., Gehler, P. & Schiele, B. (2014). 2D Human Pose Estimation: New Benchmark and State of the Art Analysis. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 3686–3693.
- Max Planck Institute for Informatics. MPII Human Pose Dataset (home page), as of October 2026.
- Max Planck Institute for Informatics. MPII Human Pose Dataset: Download (license statement and annotation description), as of October 2026.
- Max Planck Institute for Informatics. MPII Human Pose Dataset: Evaluation (submission instructions and protocols), as of October 2026.
- Max Planck Institute for Informatics. MPII Human Pose Dataset: Results (single-person PCKh and multi-person mAP tables), as of October 2026.
- Max Planck Institute for Informatics. MPII Human Pose Dataset: Related Benchmarks (Leeds Sports Pose results), as of October 2026.
- Andriluka, M., Pishchulin, L., Gehler, P. & Schiele, B. MPII Human Pose evaluation toolkit (evalMPII.zip: evaluatePCKh.m, util_get_head_size.m, computePCK.m, evaluateAP.m, assignGTmulti.m, getMultiPersonGroups.m, README.md; files dated October 2015 to July 2016), archived copy of 29 May 2024.
- Max Planck Institute for Informatics. bsd.txt (Simplified BSD License of the MPII Human Pose Dataset), archived copy of 23 June 2024.
- Ainsworth, B. E., Haskell, W. L., Herrmann, S. D., Meckes, N., Bassett, D. R., Tudor-Locke, C., Greer, J. L., Vezina, J., Whitt-Glover, M. C. & Leon, A. S. (2011). 2011 Compendium of Physical Activities: A Second Update of Codes and MET Values. Medicine & Science in Sports & Exercise, 43(8), 1575–1581.
- Pishchulin, L., Insafutdinov, E., Tang, S., Andres, B., Andriluka, M., Gehler, P. & Schiele, B. (2016). DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 4929–4937.
- Yang, Y. & Ramanan, D. (2013). Articulated Human Detection with Flexible Mixtures of Parts. IEEE Transactions on Pattern Analysis and Machine Intelligence, 35(12), 2878–2890.
- Johnson, S. & Everingham, M. (2010). Clustered Pose and Nonlinear Appearance Models for Human Pose Estimation. British Machine Vision Conference (BMVC), 12.1–12.11.
- Johnson, S. & Everingham, M. (2011). Learning Effective Human Pose Estimation from Inaccurate Annotation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 1465–1472.
- Sapp, B. & Taskar, B. (2013). MODEC: Multimodal Decomposable Models for Human Pose Estimation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 3674–3681.
- Tompson, J., Jain, A., LeCun, Y. & Bregler, C. (2014). Joint Training of a Convolutional Network and a Graphical Model for Human Pose Estimation. Advances in Neural Information Processing Systems 27 (NIPS).
- Tompson, J., Goroshin, R., Jain, A., LeCun, Y. & Bregler, C. (2015). Efficient Object Localization Using Convolutional Networks. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 648–656.
- Wei, S.-E., Ramakrishna, V., Kanade, T. & Sheikh, Y. (2016). Convolutional Pose Machines. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 4724–4732.
- Newell, A., Yang, K. & Deng, J. (2016). Stacked Hourglass Networks for Human Pose Estimation. European Conference on Computer Vision (ECCV), Lecture Notes in Computer Science, 483–499 (read in arXiv:1603.06937v2).
- Cao, Z., Simon, T., Wei, S.-E. & Sheikh, Y. (2017). Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 1302–1310.
- Xiao, B., Wu, H. & Wei, Y. (2018). Simple Baselines for Human Pose Estimation and Tracking. European Conference on Computer Vision (ECCV), Lecture Notes in Computer Science, 472–487.
- Andriluka, M., Iqbal, U., Insafutdinov, E., Pishchulin, L., Milan, A., Gall, J. & Schiele, B. (2018). PoseTrack: A Benchmark for Human Pose Estimation and Tracking. IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 5167–5176.