技术全解:从人类到动物的稠密姿态估计与模型实战)
DensePose 连续表面嵌入CSE技术全解从人类到动物的稠密姿态估计与模型实战【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2导读本文围绕 DensePose 项目的 Continuous Surface EmbeddingsCSE连续表面嵌入技术展开系统讲解其在 Faster R-CNN FPN 框架下如何同时预测前景分割掩码与逐像素表面嵌入并通过与网格顶点嵌入的匹配实现人类与动物统一的稠密姿态估计。读完本文你将掌握 CSE 的架构原理、顶点嵌入器的实现机制、两类嵌入损失函数与循环损失的配置方法以及如何基于模型动物园中的预训练权重完成推理、微调与评估。什么是连续表面嵌入CSECSE 是 DensePose 项目继传统 IUV 参数化表示之后提出的稠密姿态估计方案。与基于 UV 坐标的显式表面参数化不同CSE 将物体的表面表示为嵌入空间中的连续流形网格上每一个顶点都对应一个嵌入向量图像中每一个属于前景的像素也被映射到同一嵌入空间通过像素嵌入与顶点嵌入的匹配即可确定像素在三维表面上对应的位置。根据 DENSEPOSE_CSE.md 的说明CSE 的完整推理管线建立在 Faster R-CNN 与特征金字塔网络FPN之上对于每一个检测到的目标物体模型输出两部分粗分割掩码S2 个通道前景 / 背景嵌入E16 个通道的逐像素嵌入。与此同时嵌入器embedder为对应的三维网格生成顶点嵌入Ê。训练过程中通用位置嵌入E与顶点嵌入Ê被对齐匹配从而为每个像素推导出其在连续表面上的嵌入表示。这一机制使得 CSE 天然支持跨类别、跨物种的通用稠密对应关系——同一类别的不同个体甚至不同动物种类之间可以在同一嵌入空间中实现语义一致的表面匹配。对应的模型骨架配置CSE 的基础网络结构定义在 Base-DensePose-RCNN-FPN.yaml 中关键配置包括MODEL: META_ARCHITECTURE: GeneralizedRCNN BACKBONE: NAME: build_resnet_fpn_backbone DENSEPOSE_ON: True ROI_HEADS: NAME: DensePoseROIHeads NUM_CLASSES: 1 ROI_BOX_HEAD: NAME: FastRCNNConvFCHead NUM_FC: 2 POOLER_RESOLUTION: 7 POOLER_SAMPLING_RATIO: 2 POOLER_TYPE: ROIAlign ROI_DENSEPOSE_HEAD: NAME: DensePoseV1ConvXHead POOLER_TYPE: ROIAlign NUM_COARSE_SEGM_CHANNELS: 2可以看到CSE 检测头复用 FPN 的p2~p5特征ROI 特征经 ROIAlign 池化后由DensePoseV1ConvXHead处理NUM_COARSE_SEGM_CHANNELS: 2正对应前文所述的 2 通道前景/背景粗分割输出。顶点嵌入器Vertex Embedder的实现原理CSE 的核心创新在于为网格生成顶点嵌入。在 DensePose 源码中这一职责由 vertex_feature_embedder.py 中的VertexFeatureEmbedder类承担。从源码结构可以清晰看到其数学映射关系顶点特征vertex features是一个大小为[N, K]的张量N为顶点数、K为特征空间维度从特征空间到嵌入空间的映射是一个大小为[K, D]的张量顶点嵌入通过矩阵乘法F * E得到大小为[N, D]的向量再经normalize_embeddings归一化输出。在__init__中train_features参数决定顶点特征是可训练参数nn.Parameter还是不可训练的 bufferregister_buffer而映射矩阵self.embeddings始终是可训练参数。load方法则支持从 pickle 文件加载预计算的features与embeddings。CSE 嵌入器配置项嵌入器通过配置中的MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBEDDERS声明人类模型的基础配置见 Base-DensePose-RCNN-FPN-Human.yamlMODEL: ROI_DENSEPOSE_HEAD: CSE: EMBEDDERS: smpl_27554: TYPE: vertex_feature NUM_VERTICES: 27554 FEATURE_DIM: 256 FEATURES_TRAINABLE: False IS_TRAINABLE: True INIT_FILE: https://dl.fbaipublicfiles.com/densepose/data/cse/lbo/phi_smpl_27554_256.pkl DATASETS: TRAIN: - densepose_coco_2014_train_cse - densepose_coco_2014_valminusminival_cse TEST: - densepose_coco_2014_minival_cse CLASS_TO_MESH_NAME_MAPPING: 0: smpl_27554各参数含义如下参数作用TYPE: vertex_feature指定嵌入器类型为顶点特征映射对应VertexFeatureEmbedderNUM_VERTICES网格顶点数量人类 SMPL 网格为 27554FEATURE_DIM: 256特征空间维度KFEATURES_TRAINABLE: False顶点特征不参与训练由初始化文件提供IS_TRAINABLE: True嵌入器整体可训练INIT_FILE预计算的拉普拉斯-贝尔特拉米算子LBO特征文件用作顶点特征初始化CLASS_TO_MESH_NAME_MAPPING将检测类别索引映射到具体的网格名称0 - smpl_27554这是 CSE 将检测框 → 表面网格关联起来的关键配置。损失函数与训练配置CSE 训练的核心是让像素嵌入与顶点嵌入对齐。从 config.py 的源码注释可以确认EMBED_LOSS_NAME支持两种损失EmbeddingLoss对顶点标签做交叉熵hard assignment即每个像素被硬性地分配到最近的顶点SoftEmbeddingLoss顶点标签交叉熵与高斯距离度量相结合soft assignment通过两个高斯核参数控制软分配的范围。相关配置项及默认值来自 config.py_C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBEDDING_DIST_GAUSS_SIGMA 0.01 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.GEODESIC_DIST_GAUSS_SIGMA 0.01 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.EMBED_LOSS_NAME EmbeddingLoss _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS CN({ENABLED: False}) _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.WEIGHT 0.0001 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NORM_P 2 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.USE_ALL_MESHES_NOT_GT_ONLY False _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.NUM_PIXELS_TO_SAMPLE 100 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.PIXEL_SIGMA 5.0 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_PIXEL_TO_VERTEX 0.05 _C.MODEL.ROI_DENSEPOSE_HEAD.CSE.PIX_TO_SHAPE_CYCLE_LOSS.TEMPERATURE_VERTEX_TO_PIXEL 0.05要点说明EMBEDDING_DIST_GAUSS_SIGMA与GEODESIC_DIST_GAUSS_SIGMA软分配损失中嵌入距离与测地距离的高斯核标准差默认均为0.01动物微调配置中常设为0.1PIX_TO_SHAPE_CYCLE_LOSS像素到形状的循环损失cycle loss默认关闭启用时可通过WEIGHT、NORM_P、USE_ALL_MESHES_NOT_GT_ONLY、NUM_PIXELS_TO_SAMPLE、PIXEL_SIGMA及两个温度参数精细调节这是跨类别通用规范映射Universal Canonical Maps训练的关键机制COARSE_SEGM_TRAINED_BY_MASKS动物微调配置中出现粗分割掩码直接由标注 mask 监督训练。模型动物园人类 CSE 模型DensePose 提供了按 Neverova et al, 2020。以下指标均来自模型动物园表格train time 单位为 s/iterinference time 单位为 s/imtrain mem 单位为 GB。使用硬分配损失 L 训练的模型名称配置lr schedtrain timeinference timetrain membox APsegm APdp. AP GPSdp. AP GPSmmodel idR_50_FPN_s1xs1x0.3490.0606.361.167.164.465.7251155172R_101_FPN_s1xs1x0.4610.0717.462.367.264.765.8251155500R_50_FPN_DL_s1xs1x0.3990.0617.060.867.865.566.4251156349R_101_FPN_DL_s1xs1x0.5040.0748.361.568.065.666.6251156606使用软分配损失 Lσ 训练的模型名称配置lr schedtrain timeinference timetrain membox APsegm APdp. AP GPSdp. AP GPSmmodel idR_50_FPN_soft_s1xs1x0.3570.0579.761.366.964.365.4250533982R_101_FPN_soft_s1xs1x0.4640.07110.562.167.364.566.0250712522R_50_FPN_DL_soft_s1xs1x0.4270.06211.360.868.066.166.7250713703R_101_FPN_DL_soft_s1xs1x0.4830.07112.261.568.266.267.1250713061名称中的DL表示 DensePose 检测头使用DensePoseDeepLabHeadDeepLab 风格头对应配置示例densepose_rcnn_R_50_FPN_DL_s1x.yaml中ROI_DENSEPOSE_HEAD.NAME为DensePoseDeepLabHead非 DL 模型则使用DensePoseV1ConvXHead。人类模型的 CSE 配置统一声明EMBED_LOSS_NAME: EmbeddingLoss训练调度为MAX_ITER: 130000、STEPS: (100000, 120000)主干权重采用detectron2://ImageNetPretrained/MSRA/R-50.pkl等 ImageNet 预训练初始化R-101 模型对应R-101.pkl。模型权重与训练指标metrics.json可通过模型动物园表格中的下载链接获取并以表格中的 model id 区分版本。动物 CSE 模型与微调实战动物模型通过在人类 CSE 模型基础上微调获得这一过程验证了 CSE 的跨类别泛化能力。基于ds1_train的 4K 微调模型以下模型使用软分配损失 Lσ 在ds1_train动物数据上微调数据集细节见 DENSEPOSE_DATASETS.md名称配置lr schedtrain timeinference timetrain membox APsegm APdp. AP GPSdp. AP GPSmmodel idR_50_FPN_soft_chimps_finetune_4k4K0.5690.0514.762.059.032.239.6253146869R_50_FPN_soft_animals_finetune_4k4K0.3810.0617.344.955.521.328.8253145793R_50_FPN_soft_animals_CA_finetune_4k4K0.4120.0597.153.459.525.433.4253498611表中缩略语CA表示class agnostic training类别无关训练所有标注实例被映射到单一类别从而让模型专注学习表面嵌入本身而不受类别边界干扰这解释了为什么CA版本在 GPS 指标上明显优于多类别版本。基于ds2_train的 16K 微调模型含循环损失以下模型使用软分配损失 Lσ 在ds2_train上微调部分调度还引入了循环损失详见 DENSEPOSE_DATASETS.md 的 CSE 标注小节以及 Neverova et al, 2021 关于 cycle losses 的工作并额外报告了网格对齐误差GErr与GPS名称配置lr schedtrain timeinference timetrain membox APsegm APdp. AP GPSdp. AP GPSmGErrGPSmodel idR_50_FPN_soft_animals_I0_finetune_16k16k0.3860.0588.454.267.029.038.613.285.4270727112R_50_FPN_soft_animals_I0_finetune_m2m_16k16k0.5080.05612.254.167.328.638.412.587.6270982215R_50_FPN_soft_animals_I0_finetune_i2m_16k16k0.4830.0569.754.066.628.938.311.088.9270727461I0/m2m/i2m分别对应不同的循环损失变体如 mesh-to-mesh、image-to-mesh从表中可见循环损失的引入持续降低了 GErr 并提升 GPS印证了循环一致性约束对跨类别表面对齐的正向作用。多网格动物配置详解以 densepose_rcnn_R_50_FPN_soft_animals_I0_finetune_i2m_16k.yaml 为例动物模型的核心配置包括MODEL: ROI_HEADS: NUM_CLASSES: 9 ROI_DENSEPOSE_HEAD: NAME: DensePoseV1ConvXHead COARSE_SEGM_TRAINED_BY_MASKS: True CSE: EMBED_LOSS_NAME: SoftEmbeddingLoss EMBEDDING_DIST_GAUSS_SIGMA: 0.1 GEODESIC_DIST_GAUSS_SIGMA: 0.1 PIX_TO_SHAPE_CYCLE_LOSS: ENABLED: True EMBEDDERS: cat_7466: TYPE: vertex_feature NUM_VERTICES: 7466 FEATURE_DIM: 256 FEATURES_TRAINABLE: False IS_TRAINABLE: True INIT_FILE: https://dl.fbaipublicfiles.com/densepose/data/cse/lbo/phi_cat_7466_256.pkl # ... 其余 8 个动物网格 DATASETS: TRAIN: - densepose_lvis_v1_ds2_train_v1 TEST: - densepose_lvis_v1_ds2_val_v1 WHITELISTED_CATEGORIES: densepose_lvis_v1_ds2_train_v1: - 943 # sheep - 1202 # zebra - 569 # horse - 496 # giraffe - 422 # elephant - 80 # cow - 76 # bear - 225 # cat - 378 # dog CLASS_TO_MESH_NAME_MAPPING: 0: bear_4936 1: cow_5002 2: cat_7466 3: dog_7466 4: elephant_5002 5: giraffe_5002 6: horse_5004 7: sheep_5004 8: zebra_5002 SOLVER: MAX_ITER: 16000 STEPS: (12000, 14000) DENSEPOSE_EVALUATION: EVALUATE_MESH_ALIGNMENT: True这份配置完整展示了 CSE 的多网格multi-mesh能力9 个动物网格cat_7466、dog_7466、sheep_5004、horse_5004、zebra_5002、giraffe_5002、elephant_5002、cow_5002、bear_4936每个网格拥有独立的 LBO 特征初始化文件phi_mesh_num_vertices_256.pklWHITELISTED_CATEGORIES从 LVIS v1 数据集中挑选 9 个动物类别以 LVIS 类别 id 标注只使用白名单内的标注参与训练与评估CLASS_TO_MESH_NAME_MAPPING将 9 个检测类别依次映射到 9 个网格COARSE_SEGM_TRAINED_BY_MASKS: True粗分割由 mask 标注直接监督适配动物数据集中缺少 DensePose 全标注的现实DENSEPOSE_EVALUATION.EVALUATE_MESH_ALIGNMENT: True开启网格对齐评估从而产出表格中的 GErr / GPS 指标训练调度为 16k 迭代MAX_ITER: 16000STEPS: (12000, 14000)。训练、微调与评估命令DensePose 的训练入口为 projects/DensePose/train_net.py它基于 detectron2 的default_argument_parser解析参数并支持--resume断点续训、--eval-only纯评估以及--opts覆盖配置等标准能力。典型用法如下# 多卡训练以 8 卡为例 python projects/DensePose/train_net.py \ --config-file projects/DensePose/configs/cse/densepose_rcnn_R_50_FPN_s1x.yaml \ --num-gpus 8 # 加载预训练权重进行评估 python projects/DensePose/train_net.py \ --config-file projects/DensePose/configs/cse/densepose_rcnn_R_50_FPN_s1x.yaml \ --eval-only \ --opts MODEL.WEIGHTS /path/to/model_final_c4ea5f.pkl # 通过 --opts 覆盖关键超参数如微调时替换预训练权重 python projects/DensePose/train_net.py \ --config-file projects/DensePose/configs/cse/densepose_rcnn_R_50_FPN_soft_animals_CA_finetune_4k.yaml \ --num-gpus 8 \ --opts MODEL.WEIGHTS /path/to/human_cse_model.pkl需要注意的是训练前必须完成对应数据集的注册与下载具体流程见 DENSEPOSE_DATASETS.md其中*_cse后缀的数据集如densepose_coco_2014_train_cse即为 CSE 训练所需的表面嵌入标注版本微调动物模型时初始权重通常直接引用人类 CSE 模型的下载地址如i2m_16k配置中MODEL.WEIGHTS指向soft_animals_finetune_maskonly_24k的权重以完成人类 → 动物的知识迁移所有 CSE 实验均依赖预计算的 LBO 顶点特征文件首次运行时INIT_FILE指定的文件会被自动下载缓存因此需要可访问这些资源的网络环境。引用与致谢如果你在研究中使用了基于连续表面嵌入的 DensePose 方法请引用以下文献BibTeX 条目来自 DENSEPOSE_CSE.md连续表面嵌入Continuous Surface EmbeddingsInProceedings{Neverova2020ContinuousSurfaceEmbeddings, title {Continuous Surface Embeddings}, author {Neverova, Natalia and Novotny, David and Khalidov, Vasil and Szafraniec, Marc and Labatut, Patrick and Vedaldi, Andrea}, journal {Advances in Neural Information Processing Systems}, year {2020}, }循环损失 / 通用规范映射Cycle Losses / Universal Canonical MapsInProceedings{Neverova2021UniversalCanonicalMaps, title {Discovering Relationships between Object Categories via Universal Canonical Maps}, author {Neverova, Natalia and Sanakoyeu, Artsiom and Novotny, David and Labatut, Patrick and Vedaldi, Andrea}, journal {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, year {2021}, }总结CSE 通过将图像像素与网格顶点统一映射到同一嵌入空间绕开了传统 IUV 参数化的显式 UV 分配限制实现了人类与动物统一的稠密表面对应。本文从 DENSEPOSE_CSE.md 出发结合 cse 配置目录 下的全部模型配置与 densepose 源码 中的VertexFeatureEmbedder实现完整梳理了 CSE 的架构原理、顶点嵌入机制、损失函数配置、人类/动物模型动物园基线指标以及训练评估命令。后续可以进一步阅读 DENSEPOSE_DATASETS.md 了解 CSE 数据集的构造细节或直接运行apply_net.py见 projects/DensePose/apply_net.py在真实图像上体验 CSE 的稠密姿态估计效果。【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考