DensePose COCO 2019 数据格式全解:JSON 标注结构与 IUV 稠密人体表面映射

发布时间:2026/10/9 17:52:02
DensePose COCO 2019 数据格式全解:JSON 标注结构与 IUV 稠密人体表面映射
计算机视觉深度学习【免费下载链接】DensePoseA real-time approach for mapping all human pixels of 2D RGB images to a 3D surface-based model of the body项目地址https://gitcode.com/gh_mirrors/de/DensePose点击查看免费下载导读本文以 DensePose 官方 COCO 2019 挑战赛标注文档 data_format.md 为核心骨架逐字段剖析 DensePose 数据集的 JSON 标注格式并结合仓库内真实的数据加载、评估与结果打包源码进行印证。读完本文你将能够读懂任意一条 DensePose 标注包括 14 个语义部件掩码、24 个表面 patch 索引、UV 参数坐标理解它与 COCO 通用标注的关系并掌握从数据下载、结果编码到 GPS 评估的完整数据链路。一、标注文件总体结构DensePose 的标注以 JSON 格式存储所有图像、实例标注与类别定义都挂在同一个顶层对象下。官方推荐直接使用 COCO API即 cocodataset/cocoapi 提供的 Python/Matlab 工具包来读写与操作这些标注。其顶层结构如下{ images : [image], annotations : [annotation], categories : [category] }三个顶层数组各司其职images数据集内每张图像的元信息列表annotations图像上每个人体实例的稠密姿态标注列表也是 DensePose 数据格式的核心所在categories类别定义表同时携带关键点名称与骨架连接信息。这一结构与标准 COCO 数据集完全兼容区别仅在于annotation中额外出现了一组dp_*字段用于承载稠密人体表面标注。二、image 字段详解image对象描述单张图像的基本属性image { coco_url : str, date_captured : datetime, file_name : str, flickr_url : str, id : int, width : int, height : int, license : int }其中id是全局唯一的图像标识annotation通过image_id与之关联width/height为图像原始像素尺寸是后续 bbox 坐标归一化与评估阶段将掩码还原到整图的前提file_name指向实际图像文件。三、annotation 字段详解annotation是标注的核心对象一条标注对应一个人体实例annotation { area: float, bbox: [x, y, width, height], category_id: int, dp_I: [float], dp_U: [float], dp_V: [float], dp_masks: [dp_mask], dp_x: [float], dp_y: [float], id: int, image_id: int, iscrowd: 0 or 1, keypoints: [float], segmentation: RLE or [polygon] }3.1 通用字段bbox包围盒坐标为[x, y, width, height]。文档明确约定坐标从图像左上角起算且以 0 为起始索引。这一约定在结果格式中同样适用见后文。segmentation分割标注其格式由iscrowd决定iscrowd0表示单个目标使用多边形polygon列表。注意单个目标可能需要多个多边形例如人体被遮挡时分割成多个不连通区域iscrowd1表示目标集合如人群使用 RLE 游程编码keypointsCOCO 标准的 17 点人体关键点标注以[x, y, v, ...]三元组平铺排列v为可见性标志0 不可见 / 1 可见但被遮挡 / 2 可见。DensePose 同时提供稀疏关键点与稠密表面标注二者互为补充。area实例面积评估阶段按面积区间small / medium / large划分统计 AP。iscrowd人群/背景聚合标注标志评估时会将其从有效真值中剔除或特殊处理。3.2 dp_mask 子对象dp_masks数组中的每个元素都是一个标准的 RLE 掩码对象dp_mask { counts: str, size: [int, int] }即 COCO 标准的{counts: ..., size: [h, w]}压缩形式可用 COCO API 的maskUtils直接解码。四、category 字段详解categories中记录了类别 ID 与类别名/父类名的映射并额外携带两个用于关键点任务的字段category { id : int, name : str, supercategory : str, keypoints: [str], skeleton: [edge] }keypoints长度为k的关键点名称数组与annotation.keypoints的三元组顺序一一对应skeleton关键点连线edge对列表用于可视化时绘制骨架。在 DensePose 数据集中category_id通常指向person类。五、DensePose 专属 dp_* 字段详解这是 data_format.md 的灵魂所在。一条稠密姿态标注由“标注掩码”与“标注点”两部分组成。5.1 标注掩码dp_masks 与 14 个语义部件dp_masks包含14 张 256×256 的 RLE 编码稠密掩码分别对应人体 14 个语义部件掩码序号语义部件英文语义部件中文1Torso躯干2Right Hand右手3Left Hand左手4Left Foot左脚5Right Foot右脚6Upper Leg Right右大腿7Upper Leg Left左大腿8Lower Leg Right右小腿9Lower Leg Left左小腿10Upper Arm Left左上臂11Upper Arm Right右上臂12Lower Arm Left左前臂13Lower Arm Right右前臂14Head头部这 14 个部件的编号顺序在仓库中有直接的源码印证在 densepose_methods.py 中定义的SemanticMaskSymmetries [0, 1, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 14]其下标 1–14 恰好对应上表对称变换将右手(2)与左手(3)、左脚(4)与右脚(5)、右大腿(6)与左大腿(7)等镜像配对与文档中的部件编号完全一致。评估阶段会将这些 256×256 的部件掩码解码后按 bbox 尺寸缩放回原图位置用于计算前景掩码交并比详见 densepose_cocoeval.py 中的GetDensePoseMask与computeDPIoU。5.2 标注点dp_x / dp_y 空间坐标dp_x、dp_y采集点在图像上的空间坐标坐标经过缩放使得包围盒尺寸归一化为 256×256。也就是说标注点不是原始像素坐标而是 bbox 内归一化后的相对位置这与 COCO 关键点的原始像素坐标约定不同。评估器在computeOgps中会做逆向换算dp_x * bbox_w / 255、dp_y * bbox_h / 255将点映射回原图见 densepose_cocoeval.py因此训练/推理时需注意这一缩放约定。5.3 标注点dp_I 与 24 个表面 patchdp_I表面 patch 索引指明该点位于24 个表面 patch 中的哪一个。24 个 patch 与上述 14 个语义部件的对应关系如下部分部件被拆分为 2 个 patchdp_I对应部件1, 2Torso躯干3Right Hand右手4Left Hand左手5Left Foot左脚6Right Foot右脚7, 9Upper Leg Right右大腿8, 10Upper Leg Left左大腿11, 13Lower Leg Right右小腿12, 14Lower Leg Left左小腿15, 17Upper Arm Left左上臂16, 18Upper Arm Right右上臂19, 21Lower Arm Left左前臂20, 22Lower Arm Right右前臂23, 24Head头部此 24 分区的编号同样在源码中有印证densepose_methods.py 中的Index_Symmetry_List [1,2,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19,22,21,24,23]将 patch1↔2、3↔4、5↔6…… 两两镜像对应与上表的分区结构完全一致。5.4 标注点dp_U / dp_V 与 UV 参数化dp_U、dp_V点在 UV 空间中的坐标。每个表面 patch 拥有独立的 2D 参数化因此同一个 UV 坐标在不同 patch 上代表不同的表面位置必须与dp_I组合起来才能唯一定位人体表面上的一个点。这也是 DensePose 预测输出“IUV 三通道图”的由来I 通道编码 patch 索引U、V 通道编码参数坐标。UV 坐标的语义在 densepose_methods.py 中得到进一步阐明IUV2FBC通过重心坐标barycentric coordinates将 UV 点映射到 SMPL 网格的三角形面片与重心权重FBC2PointOnSurface再据此在任意顶点位置上插值出 3D 表面点。这说明 UV 参数化本质上建立在 SMPL 网格之上是 2D 图像像素与 3D 人体表面之间对应关系的桥梁。六、数据加载侧的源码印证DensePose 模型训练时如何消费这些dp_*字段在 body_uv_rcnn.py 的数据装载代码中可以看到直接引用Ilabel segm_utils.GetDensePoseMask(roidb[dp_masks][fg_polys_ind]) GT_I np.array(roidb[dp_I][fg_polys_ind]) GT_U np.array(roidb[dp_U][fg_polys_ind]) GT_V np.array(roidb[dp_V][fg_polys_ind]) GT_x np.array(roidb[dp_x][fg_polys_ind]) GT_y np.array(roidb[dp_y][fg_polys_ind])即从dp_masks解码出部件级掩码作为稠密分割监督从dp_I / dp_U / dp_V构造 IUV 稠密回归监督从dp_x / dp_y构造采样点监督。可见文档中定义的每一个字段都直接参与模型训练目标。七、数据下载与配套资源仓库的 DensePoseData 目录提供了官方数据获取脚本get_DensePose_COCO.sh下载 COCO DensePose 标注 JSON包括densepose_coco_2014_train.json、densepose_coco_2014_valminusminival.json、densepose_coco_2014_minival.json与densepose_coco_2014_test.jsonget_densepose_uv.sh下载densepose_uv_data.tar.gz内含UV_Processed.mat等网格/UV 参数化数据供 densepose_methods.py 的IUV2FBC等变换使用get_eval_data.sh下载评估数据densepose_eval_data.tar.gz内含SMPL_subdiv.mat、Pdist_matrix.mat、SMPL_SUBDIV_TRANSFORM.mat供评估器计算测地距离。八、结果格式uv_shape / uv_data 与标注格式的呼应提交结果格式与标注格式一一对应详见 results_format.md。其中稠密预测部分不使用dp_*逐点字段而是用两个字段承载整张 IUV 图uv_shapeuv_data数组的形状应为(3, height, width)height与width必须与 bbox 尺寸一致uv_dataPNG 压缩后的三通道数据分别编码 patch 索引I与 U、V 坐标且U、V 坐标被缩放到 0–255 的 uint8 范围。仓库提供了从模型输出的 pkl 结果转换为该提交格式的官方脚本 encode_results_for_competition.py它对每个结果的uv数组执行np.moveaxis变成 HWC 布局后用 PIL 以optimizeTrue最高压缩率保存为 PNG再经 Base64 编码写入uv_data并记录uv_shape最终json.dump输出可提交的 JSON 文件。文档还建议将 bbox 坐标四舍五入到像素的十分之一以减小 JSON 体积——这在 encode_results_for_competition.py 的整个压缩链路中都是降低提交文件大小的实用技巧。九、评估侧如何消费这些字段评估代码 densepose_cocoeval.py 完整展示了 dp_* 字段的消费方式解码_decodeUvData将提交结果中的 Base64 PNGuv_data解码回(3, H, W)数组匹配computeOgps利用真值的dp_x / dp_y将标注点映射到预测 bbox 内读取dt[uv][0, px, py]I、dt[uv][1, px, py]/255与dt[uv][2, px, py]/255U、V映射到网格findAllClosestVerts在每个 patch 的 UV 参数空间内为 GT 与预测点寻找最邻近网格顶点基于SMPL_subdiv.mat的 27,554 顶点子采样网格计算相似度getDistances查表Pdist_matrix.mat获取顶点间测地距离再按 8 个粗粒度部件Mean_Distances [0, 0.351, 0.107, 0.126, 0.237, 0.173, 0.142, 0.128, 0.150]逐点归一化得到Geodesic Point SimilarityGPS进一步与前景掩码 IoU 几何平均得到GPSm详见 evaluation.md。评估器对iouTypeuv的设定iouThrs从 0.5 到 0.95 步长 0.05、maxDets[20]、medium/large 面积区间等可在 densepose_cocoeval.py 的Params.setUvParams中直接查看。需要特别留意的是2019 挑战赛引入按部件归一化后其 AP 数值与论文中使用固定 K0.255 的报告值不再可比。十、结语从 JSON 顶层结构到dp_masks的 14 部件掩码再到dp_I的 24 patch 分区与dp_U/dp_V的部件内 UV 参数化DensePose 的数据格式在完整继承 COCO 通用标注体系的同时用一组自洽的dp_*字段完成了“2D 像素 ↔ 3D 人体表面”的稠密对应关系编码。理解这套格式是训练、推理、结果打包与提交评估四个环节之间数据打通的前提也是读懂仓库中 body_uv_rcnn.py、densepose_methods.py 与 densepose_cocoeval.py 三处关键代码的共同基础。赞分享计算机视觉深度学习【免费下载链接】DensePoseA real-time approach for mapping all human pixels of 2D RGB images to a 3D surface-based model of the body项目地址https://gitcode.com/gh_mirrors/de/DensePose点击查看免费下载相关推荐DensePose 数据格式全解COCO DensePose 标注 JSON 结构、14 部件掩码与 24 表面补丁 IUV 编码DensePose 数据格式全解COCO DensePose 标注 JSON 结构、14 部件掩码与 24 表面补丁 IUV 编码 本篇技术指南以 Dense计算机视觉深度学习DensePose COCO 2019 结果格式详解从 JSON 字段规范到 PNG 压缩编码实战DensePose COCO 2019 结果格式详解从 JSON 字段规范到 PNG 压缩编码实战 本文围绕 DensePose 仓库 challenge/2计算机视觉深度学习DensePose COCO数据集深度解析标注格式与可视化技术详解DensePose COCO数据集深度解析标注格式与可视化技术详解 你是否在处理人体姿态估计数据时遇到过2D图像与3D模型对应关系不明确的问题是否对如何高计算机视觉深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考