COCO 17 keypoints: the index order MoveNet, YOLO pose and RTMPose share
17 keypoints · from MMPose coco.py dataset meta info (branch main) · read 2026-10-17
COCO 17 has 17 keypoints, numbered from 0 nose to 16 right_ankle, as keypoint_info in MMPose's configs/_base_/datasets/coco.py defines them. The sources tie it to MoveNet (TF.js pose-detection), PoseNet (TF.js pose-detection), Ultralytics YOLO26 default pose models and RTMPose 17-keypoint body models (MMPose). All 17 names match a point in another scheme once lowercased with separators removed. Read from the sources on 2026-10-17.
Models that output it
- MoveNet (TF.js pose-detection) · MoveNet Lightning, Thunder and MultiPoseEvidence: TF.js pose-detection README says “COCO Keypoints: Used in MoveNet and PoseNet” (source).
- PoseNet (TF.js pose-detection)Evidence: TF.js pose-detection README says “COCO Keypoints: Used in MoveNet and PoseNet” (source).
- Ultralytics YOLO26 default pose models · Ultralytics YOLO pose modelsEvidence: Ultralytics pose task docs (pose.md) says “The default YOLO26 Pose models predict the 17 COCO keypoints” (source).
- RTMPose 17-keypoint body models (MMPose) · RTMPose models (MMPose)Evidence: RTMPose README says “17 Keypoints: Keypoints are defined as COCO. For details please refer to the meta info.” (source).
All 17 keypoints
Names are copied exactly from keypoint_info in MMPose's configs/_base_/datasets/coco.py. The index is the position the source assigns. The last column says whether another scheme on this site spells the same name, by the crosswalk rule.
What the sources say about the output
Copied from the sources, whitespace collapsed.
- Don't change the order. The order needs to be consistent with the model keypoint result list. (TF.js pose-detection constants.ts)
- kpt_shape: [17, 3] — number of keypoints, number of dims (2 for x,y or 3 for x,y,visible) (Ultralytics coco-pose.yaml)
- result.keypoints.data (torch.float32, shape (N,K,2/3)):
x,yplus optional visibility/confidence. (Ultralytics pose task docs (pose.md)) - result.keypoints.xy (torch.float32, shape (N,K,2)): Pixel keypoints. (Ultralytics pose task docs (pose.md))
- result.keypoints.xyn (torch.float32, shape (N,K,2)): Normalized keypoints. (Ultralytics pose task docs (pose.md))
- PoseNet and MoveNet both return 17 keypoints. (TF.js pose-detection README)
How this list was checked
- MMPose keypoint_info ids run 0 to N-1
- TF.js COCO_KEYPOINTS spells the same names in the same order
- Ultralytics coco-pose.yaml kpt_names spells the same names in the same order
- the Ultralytics docs' keypoint index map lists the same points in the same order (title case)
- the TF.js README's COCO keypoint list agrees at every index
- Ultralytics kpt_shape declares the same keypoint count
- 17 of 17 names are shared with another scheme; the rest are listed as unmapped.
MMPose’s meta info cites the dataset as “Microsoft coco: Common objects in context” (2014) with the homepage cocodataset.org/.
Other schemes
Questions
What are the 17 COCO keypoints in index order?
Keypoint_info in MMPose's configs/_base_/datasets/coco.py numbers them 0 nose, 1 left_eye, 2 right_eye, 3 left_ear, 4 right_ear, 5 left_shoulder, 6 right_shoulder, 7 left_elbow, 8 right_elbow, 9 left_wrist, 10 right_wrist, 11 left_hip, 12 right_hip, 13 left_knee, 14 right_knee, 15 left_ankle, 16 right_ankle.
Which pose models output COCO keypoints?
MoveNet (TF.js pose-detection): TF.js pose-detection README says “COCO Keypoints: Used in MoveNet and PoseNet”; PoseNet (TF.js pose-detection): TF.js pose-detection README says “COCO Keypoints: Used in MoveNet and PoseNet”; Ultralytics YOLO26 default pose models: Ultralytics pose task docs (pose.md) says “The default YOLO26 Pose models predict the 17 COCO keypoints”; RTMPose 17-keypoint body models (MMPose): RTMPose README says “17 Keypoints: Keypoints are defined as COCO. For details please refer to the meta info.” Only models a fetched source ties to this scheme are listed.
How do COCO keypoints map to other pose keypoint schemes?
By name only. 17 of the 17 share an identical name, once lowercased with separators removed, with a point in BlazePose 33, ML Kit 33, Halpe26, COCO-WholeBody 133, OpenPose BODY_25, OpenPose COCO 18, Apple Vision 2D and Apple Vision 3D, so every one has a crosswalk row. A shared row means the names match, not that two models place the point in the same spot.
What coordinates come with COCO keypoints?
In the sources' words: “kpt_shape: [17, 3] — number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)” (Ultralytics coco-pose.yaml); “result.keypoints.data (torch.float32, shape (N,K,2/3)): x,y plus optional visibility/confidence.” (Ultralytics pose task docs (pose.md)); “result.keypoints.xy (torch.float32, shape (N,K,2)): Pixel keypoints.” (Ultralytics pose task docs (pose.md)); “result.keypoints.xyn (torch.float32, shape (N,K,2)): Normalized keypoints.” (Ultralytics pose task docs (pose.md)).
Sources
- MMPose coco.py dataset meta info · open-mmlab/mmpose, branch main · read 2026-10-17 · sha256 e4b308286849
- TF.js pose-detection constants.ts · tensorflow/tfjs-models, branch master · read 2026-10-17 · sha256 2463578c8dd9
- Ultralytics coco-pose.yaml · ultralytics/ultralytics, branch main · read 2026-10-17 · sha256 06a3a4ab8960
- Ultralytics pose task docs (pose.md) · ultralytics/ultralytics, branch main · read 2026-10-17 · sha256 5fd4e786153c
- TF.js pose-detection README · tensorflow/tfjs-models, branch master · read 2026-10-17 · sha256 805c17684646
- RTMPose README · open-mmlab/mmpose, branch main · read 2026-10-17 · sha256 21a455d285fb
Generated by scripts/fetch-pose-keypoints.mjs and compiled by AIFitnessAPI. The sources remain the authority.