Detectron2 DensePose 2021.06 版本全解析:CSE 循环一致性损失、网格对齐评估与 ds2 动物数据集

发布时间:2026/9/11 22:48:41
Detectron2 DensePose 2021.06 版本全解析:CSE 循环一致性损失、网格对齐评估与 ds2 动物数据集 Detectron2 DensePose 2021.06 版本全解析CSE 循环一致性损失、网格对齐评估与 ds2 动物数据集【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2本篇文章围绕 Detectron2 项目中 DensePose 模块 2021 年 6 月发布的版本对应 projects/DensePose/doc/RELEASE_2021_06.md展开系统梳理该版本带来的四大核心更新像素到形状pixel-to-shape与形状到形状shape-to-shape两类循环一致性损失、网格对齐mesh alignment评估器、CSE 数据集的 ds1/ds2 重构以及使用 16k 训练计划得到的更优动物 CSE 模型。读完本文你将理解这两类循环损失的数学动机与源码实现、GE/GPS 评估指标的计算方式并掌握如何在真实配置文件中开启这些特性、复现对应模型训练。版本背景与整体定位DensePose 的目标是建立图像像素与可形变物体如人、动物3D 网格之间的稠密对应关系。在 Detectron2 项目中这一目标通过两条技术路线实现基于图块chart的 IUV 估计以及基于连续表面嵌入Continuous Surface EmbeddingsCSE的稠密对应。关于两条路线的整体介绍可参见 projects/DensePose/README.md。2021 年 6 月的这次发布聚焦 CSE 路线的能力扩展紧随论文Neverova et al, 2021对应正式论文标题Discovering Relationships between Object Categories via Universal Canonical Maps收录于 CVPR 2021BibTeX 条目见 projects/DensePose/doc/DENSEPOSE_CSE.md。整体更新可概括为五点新增像素到形状cycle_pix2shape.py与形状到形状cycle_shape2shape.py两类循环一致性损失新增基于学习到的顶点嵌入的网格对齐评估器既有 CSE 数据集重命名为ds1_train与ds1_val新增ds2_train与ds2_val两组 CSE 数据集使用 16k 训练计划得到的更优动物 CSE 模型被加入模型库见 DENSEPOSE_CSE.md 的 Animal CSE Models 章节。循环一致性损失让像素与顶点嵌入互为自洽为什么需要循环一致性CSE 的核心思想是模型同时为图像像素和网格顶点学习连续表面嵌入位置描述子然后将两者放入同一嵌入空间求对应关系从而推出每个像素在 3D 模型上的位置。然而仅靠像素-顶点之间的直接匹配损失嵌入分布可能产生系统性偏移或拓扑错乱尤其是当不同类别的网格如猫、狗、马同时参与训练时跨类别的对应关系更难保持。循环一致性cycle consistency的思路是从 A 空间映射到 B 空间再映射回 A 空间要求往返之后位置仍保持一致。该版本实现了两种互补的循环约束像素到形状PixToShape像素 → 顶点 → 像素约束像素级对应的一致性形状到形状ShapeToShape网格 A → 网格 B → 网格 A约束跨网格顶点对应的一致性。像素到形状循环损失PixToShapeCycleLoss实现位于 projects/DensePose/densepose/modeling/losses/cycle_pix2shape.py类名为PixToShapeCycleLoss。其前向过程forward可拆解为以下步骤从每个实例的前景 GT 掩码中随机采样像素_sample_fg_pixels_randperm采样数由NUM_PIXELS_TO_SAMPLE控制将采样像素的嵌入P与某网格的顶点嵌入V做矩阵乘法得到相似度矩阵sim_matrix分别沿两个方向做温度 softmax得到转移概率矩阵c_pix_vertex像素→顶点与c_vertex_pix顶点→像素两者相乘得到循环转移矩阵c_cycle c_pix_vertex.mm(c_vertex_pix)用像素间距离矩阵pixel_dists由_create_pixel_dist_matrix依据HEATMAP_SIZE预计算加权后求p范数作为损失loss_cycle torch.norm(pixel_dists * c_cycle, pself.norm_p)。其中像素间距离矩阵基于输出热图坐标行、列索引的平方欧氏距离预先构建GT 掩码来自粗分割输出的匹配结果extract_data_for_mask_loss_from_matches。USE_ALL_MESHES_NOT_GT_ONLY控制参与该损失的网格集合为False时仅使用当前 batch 中 GT 标注对应的网格为True时遍历配置中注册的全部网格。相关配置参数及默认值定义在 projects/DensePose/densepose/config.py 的add_densepose_head_cse_config中配置项默认值含义MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.ENABLEDFalse是否启用该损失MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.WEIGHT0.0001损失权重MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NORM_P2损失所用范数阶数MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.USE_ALL_MESHES_NOT_GT_ONLYFalse是否映射到全部网格而非仅 GT 网格MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NUM_PIXELS_TO_SAMPLE100每个实例最多采样的像素数≤0 时使用全部像素MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.PIXEL_SIGMA5.0像素间距离的归一化系数值越大分布越平滑MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_PIXEL_TO_VERTEX0.05像素→顶点方向 softmax 温度MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_VERTEX_TO_PIXEL0.05顶点→像素方向 softmax 温度形状到形状循环损失ShapeToShapeCycleLoss实现位于 projects/DensePose/densepose/modeling/losses/cycle_shape2shape.py类名为ShapeToShapeCycleLoss。其思路受Mapping in a Cycle: Sinkhorn Regularized Unsupervised Learning for Point Cloud Shapes启发每步随机抽取一对不同的网格_sample_random_pair在两者顶点嵌入之间构建循环约束。前向过程_forward_one_pair步骤对两个网格分别取顶点嵌入embeddings_1、embeddings_2及其测地距离矩阵geodists_1、geodists_2_get_embeddings_and_geodists_for_mesh网格通过create_mesh创建顶点数超过MAX_NUM_VERTICES时会随机下采样计算相似度矩阵sim_matrix_12 embeddings_1.mm(embeddings_2.T)双向温度 softmax 得到c_12、c_21构造两个方向的循环转移矩阵c_11 c_12.mm(c_21)、c_22 c_21.mm(c_12)分别用对应网格的测地距离矩阵加权并求p范数两项相加loss_cycle_11 loss_cycle_22。相关配置参数及默认值同样定义在 projects/DensePose/densepose/config.py配置项默认值含义MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.ENABLEDFalse是否启用该损失MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.WEIGHT0.025损失权重MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.NORM_P2损失所用范数阶数MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.TEMPERATURE0.05softmax 温度MODEL.ROI_DENSEPOSE_HEAD.CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.MAX_NUM_VERTICES4936参与损失的最大顶点数≤0 时全部参与为正时随机子采样循环损失如何进入训练两类循环损失由 CSE 总损失类DensePoseCseLossprojects/DensePose/densepose/modeling/losses/cse.py统一整合。该类的__init__依据SHAPE_TO_SHAPE_CYCLE_LOSS.ENABLED与PIX_TO_SHAPE_CYCLE_LOSS.ENABLED判断是否实例化对应损失模块并按配置权重w_shape2shape默认 0.025与w_pix2shape默认 0.0001加权求和总损失同时包含粗分割损失MaskOrSegmentationLoss权重INDEX_WEIGHTS与嵌入损失EmbeddingLoss或SoftEmbeddingLoss权重EMBED_LOSS_WEIGHT默认 0.6。网格对齐评估器MeshAlignmentEvaluator为了直接衡量 CSE 模型产出的顶点嵌入质量该版本新增了基于顶点嵌入的 3D 网格对齐评估器实现位于 projects/DensePose/densepose/evaluation/mesh_alignment_evaluator.py。评估逻辑evaluate方法从远端读取预定义的网格关键顶点keyvertices索引文件mesh_keyvertices_v0.json每个网格对应一组语义关键顶点如眼睛、耳朵等位置对每个网格 A用其关键顶点嵌入与另一网格 B 的全部顶点嵌入计算相似度矩阵argmax得到 B 上与 A 各关键顶点匹配的顶点索引读取这些匹配顶点与 B 关键顶点的测地距离geodists计算两类指标GEGeodesic Error上述匹配顶点与关键顶点之间测地距离的均值越小说明跨网格对齐越好GPSGeodesic Precision Score对测地距离施加高斯核exp(-geodists² / (2·σ²))σ 在源码中取固定值 0.255后求均值越接近 1 越好。最终返回全局平均 GE、全局平均 GPS 以及按网格拆分的per_mesh_metrics分别以GE、GPS为键。评估对象默认使用嵌入器的全部网格也可通过配置指定网格子集。在配置中启用网格对齐评估需要设置示例见 projects/DensePose/configs/cse/densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_m2m_16k.yamlDENSEPOSE_EVALUATION: EVALUATE_MESH_ALIGNMENT: True MESH_ALIGNMENT_MESH_NAMES: - bear_4936 - cow_5002 - cat_7466 - dog_7466 - elephant_5002 - giraffe_5002 - horse_5004 - sheep_5004 - zebra_5002开启后模型库表中的GErr与GPS两列即来自该评估器见下文模型表格。CSE 数据集重构ds1 与 ds2该版本对 CSE 训练数据做了两件事既有数据集重命名原 CSE 数据集更名为ds1_train与ds1_val新增数据集新增ds2_train与ds2_val。两组数据集在 LVIS 类别上做 DensePose 动物标注详细说明见 projects/DensePose/doc/DENSEPOSE_DATASETS.md 的Continuous Surface Embeddings Annotations一节。从该文档可以确认以下几点关键差异避免踩坑ds1与ds2使用的参考网格reference models不同ds1_train/ds1_val的猫、狗参考模型为cat_5001、dog_5002而ds2_train/ds2_val的参考模型为bear_4936、cow_5002、cat_7466、dog_7466、elephant_5002、giraffe_5002、horse_5004、sheep_5004、zebra_5002等更精细的网格ds2_train复用了ds1_train的部分标注4538 条 DensePose 标注但重新映射到了新参考模型ds1_val的全部标注经重映射后包含在ds2_val中重要提示ds1_train的部分标注646 条 DensePose 标注与 1225 条分割标注出现在ds2_val中因此若在ds2_val上评估不应使用ds1_train训练否则会造成数据泄漏。配置文件中通过DATASETS.TRAIN/TEST引用数据集名并通过WHITELISTED_CATEGORIES限定参与训练的 LVIS 类别如943sheep、1202zebra、569horse、496giraffe、422elephant、80cow、76bear、225cat、378dog通过CLASS_TO_MESH_NAME_MAPPING将类别索引映射到网格名。更优的动物 CSE 模型16k 训练计划与循环损失模型库概览该版本在 模型库 中新增了基于ds2_train微调、使用软分配损失SoftEmbeddingLoss并在部分计划中叠加循环损失的动物 CSE 模型训练计划为 16k 迭代lr sched 列标注16k。对应配置如下模型配置lr schedGErrGPS备注densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_16k.yaml16k13.285.4基准无循环损失densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_m2m_16k.yaml16k12.587.6启用形状到形状循环损失densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_i2m_16k.yaml16k11.088.9启用像素到形状循环损失上表 GErr 与 GPS 数值取自 projects/DensePose/doc/DENSEPOSE_CSE.md 的 Animal CSE Models 表格可以看到在启用循环一致性约束后 GErr 降低、GPS 提升印证了两类循环损失对跨类别顶点对齐质量的改善作用。命名中的m2mmesh-to-mesh形状到形状与i2mimage-to-mesh像素到形状即对应两类循环损失。关键配置逐项解读以启用形状到形状循环损失的 densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_m2m_16k.yaml 为例其核心配置包括模型初始化MODEL.WEIGHTS指向此前 mask-only 24k 计划训练得到的权重文件作为微调起点头部与类别ROI_HEADS.NUM_CLASSES: 99 个动物类别ROI_DENSEPOSE_HEAD.NAME: DensePoseV1ConvXHeadCOARSE_SEGM_TRAINED_BY_MASKS: True嵌入损失CSE.EMBED_LOSS_NAME: SoftEmbeddingLoss并设置EMBEDDING_DIST_GAUSS_SIGMA: 0.1与GEODESIC_DIST_GAUSS_SIGMA: 0.1嵌入距离与测地距离的高斯归一化系数循环损失开关CSE.SHAPE_TO_SHAPE_CYCLE_LOSS.ENABLED: True其余超参使用 config.py 中的默认值权重 0.025、NORM_P2、TEMPERATURE0.05、MAX_NUM_VERTICES4936嵌入器集合CSE.EMBEDDERS注册 10 个网格嵌入器9 个动物网格cat_7466、dog_7466、sheep_5004、horse_5004、zebra_5002、giraffe_5002、elephant_5002、cow_5002、bear_4936加上人体网格smpl_27554每个嵌入器使用vertex_feature类型、FEATURE_DIM: 256从 LBOLaplace-Beltrami operator特征文件初始化且FEATURES_TRAINABLE: False、IS_TRAINABLE: True数据与类别映射DATASETS.TRAIN为densepose_lvis_v1_ds2_train_v1DATASETS.TEST为densepose_lvis_v1_ds2_val_v1配合WHITELISTED_CATEGORIES与CLASS_TO_MESH_NAME_MAPPING训练计划SOLVER.MAX_ITER: 16000SOLVER.STEPS: (12000, 14000)学习率在 12k、14k 迭代处分档下降评估DENSEPOSE_EVALUATION.EVALUATE_MESH_ALIGNMENT: True并列出全部 9 个动物网格名。若需启用像素到形状循环损失则在配置中设置MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.ENABLED: True即可对应i2m配置权重默认 0.0001、像素采样数默认 100。训练与评估实操该版本的所有配置均可通过 DensePose 的标准训练入口直接运行。在配置好 Detectron2 环境与对应数据集后训练命令如下以 m2m 16k 模型为例python projects/DensePose/train_net.py \ --config-file projects/DensePose/configs/cse/densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_m2m_16k.yaml \ --num-gpus 8 \ SOLVER.IMS_PER_BATCH 16训练过程中会自动完成一次模型评估Detectron2 的默认评估行为评估包含标准检测/分割指标以及在EVALUATE_MESH_ALIGNMENT: True时输出各网格及全局的 GE、GPS 指标。训练与评估流程的通用说明可参见 projects/DensePose/doc/GETTING_STARTED.md。需要特别留意的是数据集一致性若计划在ds2_val上评估请勿使用ds1_train作为训练集二者存在标注重叠详见 projects/DensePose/doc/DENSEPOSE_DATASETS.md。小结Detectron2 DensePose 2021.06 版本围绕 CSE 连续表面嵌入做了系统性增强两类循环一致性损失从像素级与网格级两个维度约束嵌入空间的几何一致性网格对齐评估器提供了不依赖标注的 GE/GPS 度量ds1/ds2 数据集重构扩大了动物类别的标注规模而 16k 计划的动物模型则在 GErr/GPS 上相对基准进一步改善。对希望将 DensePose 扩展到多类别可形变物体尤其是动物的开发者而言本版本提供的损失模块、评估工具与现成模型配置均可直接复用开启SHAPE_TO_SHAPE_CYCLE_LOSS.ENABLED或PIX_TO_SHAPE_CYCLE_LOSS.ENABLED即可引入循环约束设置DENSEPOSE_EVALUATION.EVALUATE_MESH_ALIGNMENT即可获得网格对齐质量反馈。【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考