“We’ll just use a COCO pose model” is one of those sentences that sounds like a plan and is actually a hidden scope decision. The COCO keypoint schema is a 2D image-space convention built for general photographs, not for a moving vehicle cabin. A model trained on it tells you where a body part is in a frame. It does not tell you whether that part will stay locked to the frame across time, whether the camera geometry is calibrated, or whether the confidence value behind a keypoint is trustworthy enough to drive an overlay a driver is looking at. Those are exactly the properties a driver-facing augmented-reality (AR) or driver-monitoring system depends on — and none of them are part of what “COCO pose” gives you. The purpose of this article is narrow and deliberate: explain the COCO keypoint format precisely enough that you can judge where it fits in an automotive perception pipeline, and where it quietly does not. Get that judgment right up front and pose work gets scoped correctly. Get it wrong and you discover, mid-integration, that a 2D keypoint model cannot meet an in-cabin latency and stability budget — after the model-selection cycles are already spent. What is COCO pose, and what does it actually mean? COCO — Common Objects in Context — is a large public dataset, and its keypoint annotations define one of the most widely used human-pose conventions in computer vision. When someone says “COCO pose,” they almost always mean two things at once: the 17-keypoint skeleton schema and the family of models trained to predict it (HRNet, the pose variants of YOLO, and many others). The critical word is convention. COCO pose is not a physical measurement of a body in space. It is a labelling agreement: given an image, a trained annotator (or model) marks 17 anatomical landmarks in 2D pixel coordinates, each with a visibility flag. That is the entire contract. A COCO-trained model, at inference time, reproduces that contract — it emits, per detected person, a set of (x, y, confidence) triples in the image plane. This matters because the contract is silent on everything an automotive overlay cares about. There is no depth. There is no notion of the same joint across consecutive frames — each frame is estimated independently. There is no camera calibration baked in. The format describes where in this one image a landmark sits, and nothing more. Reading that limitation correctly is the whole game. What are the 17 COCO keypoints, and how is the format structured? The 17 keypoints are a fixed, ordered list. Their order is part of the format — downstream code indexes into it directly, so the indices are as much a contract as the coordinates: Index Keypoint Index Keypoint 0 nose 9 left wrist 1 left eye 10 right wrist 2 right eye 11 left hip 3 left ear 12 right hip 4 right ear 13 left knee 5 left shoulder 14 right knee 6 right shoulder 15 left ankle 7 left elbow 16 right ankle 8 right elbow — — Each keypoint carries a visibility flag in the annotation schema: 0 (not labelled / not in image), 1 (labelled but occluded), 2 (labelled and visible). At inference, models substitute a continuous confidence score for that flag — a per-keypoint value, typically 0 to 1, that expresses how sure the model is about the location. Handling that confidence field correctly is one of the largest gaps between “runs” and “ships,” and we return to it below. Two structural facts stand out for automotive use. First, the skeleton is body-centric, not face-centric — five of the seventeen points cover the head (nose, eyes, ears), which is coarse for a system that needs gaze or head-pose fidelity. Second, the lower body (hips, knees, ankles) is almost always occluded by the steering column and seat in a cabin, meaning eight of the seventeen keypoints contribute little usable signal. You are effectively paying for a full-body model to use its upper third. How does COCO pose differ from MPII and OpenPose? Practitioners reach for “pose estimation” as if it were one thing. It is a family of incompatible conventions, and the differences are not cosmetic — they change what the model can express. Convention Keypoints Head detail Depth Typical origin COCO 17 Low (nose, eyes, ears) None (2D) COCO dataset MPII 16 Low (head top, upper neck) None (2D) MPII Human Pose OpenPose (BODY_25) 25 Moderate (adds neck, ears variant) None (2D) OpenPose runtime MPII uses a different 16-point skeleton with a “head top” and “upper neck” landmark instead of COCO’s eyes-and-ears cluster — so a model trained on one cannot be evaluated against the other without remapping, and some points have no equivalent at all. OpenPose’s 25-point model (BODY_25) adds a neck point and foot detail COCO lacks, which is why teams doing full-body motion sometimes prefer it. None of the three provide depth; all three are 2D image-space schemas. The practical consequence is that keypoint count is not a quality axis — it is a semantic axis. Choosing COCO commits you to its specific 17 landmarks and their meanings, and remapping later is real integration work, not a config change. This is the same class of “the metric defines what you can even ask” problem that shows up in detection scoring; if that framing is useful, the companion piece on the [email protected]:0.95 metric behind automotive AR perception walks through it for bounding boxes. Where does a 2D COCO model break in a moving cabin? Here is the divergence point. A COCO-trained model gives you where a body part is in a frame. A driver-facing overlay needs keypoints locked to a moving frame under latency and safety constraints — the same sub-frame budget the parent GPU-accelerated perception stack lives under. Between those two statements sit four gaps that are structural, not tuning problems. No temporal stability. Because each frame is estimated independently, a keypoint can jump several pixels between consecutive frames even when the driver hasn’t moved. On a static photo this is invisible; on a 30 or 60 fps overlay it reads as jitter, and jitter on a driver-facing surface is not a cosmetic defect — it is a distraction hazard. This is an observed pattern across the real-time vision work we do: raw per-frame keypoints are almost never presentation-ready without a temporal filter layered on top. No calibration. The (x, y) output is in pixel space relative to whatever camera captured it. To place an overlay in the correct 3D location, or to reason about where the driver’s hand actually is relative to the wheel, you need the camera intrinsics and the cabin extrinsics. COCO gives you neither. That calibration work is a separate engineering task, and it is not optional for anything that claims spatial correctness. Occlusion and lighting. Cabin geometry occludes the lower body permanently and the upper body intermittently (an arm crossing the wheel, a hand raised to the visor). Lighting swings from direct sun through a windscreen to near-darkness in a tunnel within seconds. Models trained on the daylight-heavy COCO photo distribution degrade under these conditions, and the confidence field is where that degradation shows up — if you read it. Confidence handled as a boolean. The most common failure we see is treating every returned keypoint as equally valid and drawing it. The confidence score is the model telling you when not to trust a point. A pipeline that draws a low-confidence ankle it hallucinated behind the seat has shipped a lie to the driver. Thresholding and confidence-aware smoothing are the difference between a demo and a deployable overlay. A worked scoping example Assume an in-cabin driver-monitoring overlay with a 16 ms end-to-end frame budget (roughly 60 fps) — this figure is illustrative, chosen to make the arithmetic concrete, not a measured device spec. A naive plan allocates the whole budget to “run the pose model.” The realistic decomposition looks different: Detection + COCO pose inference: the visible cost, the one benchmarks report. Confidence thresholding + per-keypoint gating: cheap but mandatory. Temporal smoothing (a Kalman filter or one-euro filter per tracked keypoint): needs the previous frame’s state, so it serialises against latency. Camera-to-cabin coordinate transform: needs calibration data loaded and applied. Overlay composition + render: competes for the same GPU, often via a fused pass. The lesson is that inference is one line item in a budget with at least five. A team that benchmarks only the first line and reports “the model runs in 8 ms” has measured a third of the problem. Fusing the render passes to reclaim budget is its own discipline — the approach in fusing GPU passes for frame-locked AR overlays covers where that headroom comes from. And because pose is per-frame while the driver persists across frames, the identity-over-time layer described in multi-object tracking for automotive AR overlays is what actually stabilises the skeleton the overlay draws. Where COCO pose fits — and where it does not COCO pose is a good fit when you need a fast, well-supported 2D upper-body skeleton and you are willing to build the calibration, smoothing, and confidence layers around it. It is the wrong starting point when the requirement is fundamentally 3D — hand-position-relative-to-wheel, head pose for gaze, or anything where depth ambiguity changes the answer. In those cases a 3D pose model or a depth-sensor-fused approach is the correct primitive, and forcing a 2D COCO model to fake depth is a known way to ship an unvalidated overlay. Choosing between them is not a preference; it is dictated by whether your requirement lives in the image plane or in physical space. Everything downstream — the computer-vision pipeline design, the GPU budget, the safety review — follows from that one distinction. FAQ How does coco pose actually work? COCO pose is a labelling convention: a model trained on the COCO dataset predicts 17 anatomical landmarks per person as 2D pixel coordinates with a confidence value each. In practice it tells you where a body part sits in one image — not its depth, not its position across frames, and not its location in real-world cabin space. What are the 17 COCO keypoints, and how is the keypoint format structured? The 17 keypoints are a fixed, ordered list: nose, left/right eye, left/right ear, then shoulders, elbows, wrists, hips, knees, and ankles. Downstream code indexes into that order directly, and each point carries a visibility flag (in annotations) or a continuous confidence score (at inference) — so the indices and the confidence field are as much part of the contract as the coordinates. How does COCO pose estimation differ from other keypoint conventions like MPII or OpenPose’s 25-point model? They are incompatible skeletons, not different-quality versions of one thing. MPII uses a 16-point schema with a “head top” and “upper neck” instead of COCO’s eyes-and-ears cluster, and OpenPose’s BODY_25 adds a neck point and foot detail COCO lacks. Keypoint count is a semantic axis, not a quality axis — a model trained on one convention cannot be evaluated against another without remapping. What are the practical limits of a COCO-trained 2D pose model in a moving vehicle cabin with occlusion and varying light? Four structural limits: no temporal stability (each frame is independent, so keypoints jitter), no calibration (output is raw pixel space), permanent lower-body and intermittent upper-body occlusion from cabin geometry, and severe lighting swings that degrade a model trained mostly on daylight photos. That degradation surfaces in the confidence field, which must be read rather than ignored. What extra work — calibration, temporal smoothing, confidence handling — is needed before COCO keypoints can drive a driver-facing AR or monitoring overlay? You need camera calibration to map pixels to cabin space, per-keypoint confidence thresholding so low-trust points are never drawn, and a temporal filter (such as a Kalman or one-euro filter) to remove jitter across frames. These are separate engineering layers around the model, and each consumes part of the frame budget — inference alone is only one line item. Where does COCO pose fit in an automotive perception pipeline, and where should a different approach (3D pose, depth) be used instead? COCO pose fits when you need a fast 2D upper-body skeleton and can build the calibration, smoothing, and confidence layers around it. When the requirement is inherently 3D — hand-relative-to-wheel, gaze, or anything where depth ambiguity changes the answer — a 3D pose model or a depth-sensor-fused approach is the correct primitive rather than a 2D model forced to fake depth. The question worth resolving first Before selecting any pose model, the useful question is not “which COCO model is most accurate?” but “does my requirement live in the image plane or in physical space?” The 2D-versus-3D distinction determines whether COCO is a foundation or a dead end, and it is the cheapest decision to get right early. Whether a chosen COCO-based model can meet the latency and stability thresholds for driver-facing use is exactly the kind of question a GPU audit paired with a safety and regulatory review is built to answer — before the overlay reaches a windscreen.