MeshRCNN

基本信息

项目 内容
论文标题 Mesh R-CNN
作者 Georgia Gkioxari、Jitendra Malik、Justin Johnson
作者单位 Facebook AI Research (FAIR)
时间 2020
发表会议/期刊

方法概览

特点 文章性质
输入 标定之后的多视角图像
输出 Mesh
所属领域 MeshMVS

Mesh R-CNN 论文总结

基本信息

  • 方法名称:Mesh R-CNN
  • 作者:Georgia Gkioxari, Jitendra Malik, Justin Johnson
  • 第一单位:Facebook AI Research (FAIR)
  • 发表年份:2019年(推测,文中未明确,引文最新至2019)
  • 发表会议/期刊:应为CVPR或ICCV(文中未明确,但引用格式符合顶会风格)

摘要精简

image-20251202185449237

本文提出 Mesh R-CNN 系统,将 2D 目标感知与 3D 形状预测相结合。该系统基于 Mask R-CNN 扩展,新增 mesh 预测分支,通过 “体素预测→mesh 转换→图卷积细化” 的混合流程,输出具有灵活拓扑结构的 3D 三角形网格。具体而言,先预测粗粒度体素表示,经 cubify 操作转换为初始 mesh,再通过图卷积网络(GCN)对 mesh 顶点和边进行细化。在 ShapeNet 数据集上,该方法在单图像形状预测任务中超越现有方法;在 Pix3D 数据集上,实现了真实场景中物体的联合检测与 3D 形状估计,能处理遮挡、 clutter 等复杂场景。

引言与出发点

  • 问题背景:当前2D物体识别系统(如检测、分割)虽成熟,但忽略了世界的3D结构;而3D形状预测研究多集中于合成数据集(如ShapeNet),缺乏对真实世界复杂场景的处理能力。
  • 研究目标:结合2D感知与3D形状预测,构建一个能在真实世界图像中检测物体并输出其3D网格的系统。
  • 核心挑战:如何从单张图像预测具有多样拓扑和几何结构的3D网格。

创新点

  1. 扩展 Mask R-CNN 架构:新增 mesh 预测分支,与原有 box、mask 分支共享 backbone 和区域特征,实现端到端联合训练,同时输出 2D 检测结果与 3D mesh,无需额外独立模块。
  2. 体素 - mesh 混合表示:通过体素分支预测粗形状,突破固定拓扑限制,再经 cubify 操作转换为 watertight mesh,兼顾拓扑灵活性与初始形状合理性,解决传统 mesh 预测拓扑单一的问题。
  3. VertAlign 特征对齐机制:将 mesh 顶点通过相机内参投影到图像平面,双线性插值采样多层图像特征,实现 3D 顶点与 2D 图像特征的精准对齐,为 mesh 细化提供细粒度图像指导。
  4. 多阶段图卷积细化:设计多阶段图卷积网络,通过 “特征聚合→顶点更新” 的迭代流程,逐步优化 mesh 顶点位置,同时保持拓扑不变,有效捕捉椅子腿、桌面等精细结构。
  5. 面向 mesh 的损失设计:采用 “采样点损失” 策略,从 mesh 表面均匀采样点计算 Chamfer 距离和法向一致性,结合边缘长度正则化,避免 mesh 退化(如自相交、面大小不均)。
  6. 支持复杂场景泛化:首次在 Pix3D 数据集上实现 “联合检测 + 3D 形状估计”,能处理真实场景中的遮挡、多物体、光照变化,且对带孔洞的物体(如书架)具有拓扑适配能力。

网络架构

image-20251202185434991

网络整体基于 Mask R-CNN 构建,核心分为 “2D 感知模块” 和 “3D mesh 预测模块”,端到端训练:

2D 感知模块:与 Mask R-CNN 完全一致,包括 backbone(ResNet-50-FPN)、区域提议网络(RPN)、box 分类回归分支、mask 分割分支,负责输出目标的 bounding box、类别标签和实例分割掩码。

3D mesh 预测模块:新增分支,包含两部分:

  • 体素分支:接收 RoIAlign 提取的区域特征,通过卷积 + 转置卷积网络预测G×G×G的体素占用概率(ShapeNet 上G=48,Pix3D 上G=24),本质是 3D 版本的 mask 预测。
  • mesh 细化分支:接收 cubify 转换后的初始 mesh,包含 3 个连续的细化阶段,每个阶段由 “VertAlign 特征提取→图卷积特征聚合→顶点位置更新” 组成,逐步优化 mesh 精度。

特征提取

  • 特征提取围绕 “2D 图像特征→3D 区域特征→mesh 顶点特征” 的传递流程,核心是特征对齐与聚合:

    图像全局特征提取:通过 ResNet-50-FPN backbone 提取图像多尺度特征(conv2_3、conv3_4、conv4_6、conv5_3),覆盖不同层级的语义和几何信息。

    区域特征提取:RPN 生成目标提议后,RoIAlign 对每个提议区域提取固定尺寸的特征图(如 Pix3D 上为 12×12×256),作为体素分支和 mesh 分支的输入,保持图像与特征的位置对齐。

    体素特征提取:体素分支通过 3 层卷积(3×3)和 1 层转置卷积(2×2,步长 2),将区域特征映射为 3D 体素占用概率特征,输出G×G×G的体素网格。

    mesh 顶点特征提取:通过 VertAlign 操作实现:

    • 将 mesh 顶点的 3D 坐标通过相机内参投影到图像平面,得到对应像素位置;
    • 对 backbone 的多层特征图(conv2_3 至 conv5_3),在投影位置进行双线性插值采样;
    • 拼接多层采样特征,经线性层压缩为 128 维,作为顶点的图像对齐特征;
    • 后续细化阶段中,该特征与前一阶段的顶点特征、顶点 3D 坐标拼接,输入图卷积层。
  • 特征对齐

    • 使用 RoIAlign 提取提议区域的特征。
    • 使用 VertAlign 将图像特征投影到网格顶点位置(通过相机内参矩阵 KK)。
  • 多尺度特征融合:从conv2_3、conv3_4、conv4_6、conv5_3层提取特征并拼接。

网格生成流程

  1. 体素预测:输入图像 → 骨干网络 → RoIAlign → 体素分支 → 输出体素占据概率网格。
  2. Cubify转换:对体素网格二值化(阈值0.2),将每个占据体素替换为立方体网格,合并共享顶点/边,移除内部面,得到初始水密网格。
  3. 网格细化:初始网格 → 多个细化阶段(通常3个)→ 每阶段:
    • Vertex Alignment:投影顶点到图像平面,提取对齐特征。
    • Graph Convolution:在网格边上传播特征。
    • Vertex Refinement:更新顶点位置 vi=vi+tanh(Wvert[fi;vi])v_i' = v_i + \tanh(W_{vert}[f_i; v_i])
  4. 输出:最终三角形网格 T=(V,F)T = (V, F)

损失函数

总损失为各分支损失的加权和:

L=λboxLbox+λmaskLmask+λvoxelLvoxel+λmeshLmesh\mathcal{L} = \lambda_{\text{box}} \mathcal{L}_{\text{box}} + \lambda_{\text{mask}} \mathcal{L}_{\text{mask}} + \lambda_{\text{voxel}} \mathcal{L}_{\text{voxel}} + \lambda_{\text{mesh}} \mathcal{L}_{\text{mesh}}

其中:

  • Lvoxel\mathcal{L}_{\text{voxel}}:体素二元交叉熵损失。
  • Lmesh\mathcal{L}_{\text{mesh}}:网格损失,包含:
    • 倒角距离

Lcham(P,Q)=1P(p,q)ΛP,Qpq2+1Q(q,p)ΛQ,Pqp2\mathcal{L}_{\text{cham}}(P,Q) = \frac{1}{|P|} \sum_{(p,q) \in \Lambda_{P,Q}} \|p - q\|^2 + \frac{1}{|Q|} \sum_{(q,p) \in \Lambda_{Q,P}} \|q - p\|^2

  • 法线距离

Lnorm(P,Q)=1P(p,q)ΛP,Qupuq1Q(q,p)ΛQ,Puqup\mathcal{L}_{\text{norm}}(P,Q) = -\frac{1}{|P|} \sum_{(p,q) \in \Lambda_{P,Q}} |u_p \cdot u_q| - \frac{1}{|Q|} \sum_{(q,p) \in \Lambda_{Q,P}} |u_q \cdot u_p|

  • 边损失

Ledge(V,E)=1E(v,v)Evv2\mathcal{L}_{\text{edge}}(V,E) = \frac{1}{|E|} \sum_{(v,v') \in E} \|v - v'\|^2

  • P,QP, Q 为从预测和真实网格表面均匀采样的点云,upu_p 为点 pp 的单位法向量。

训练与测试数据集

  • 训练数据集
    • ShapeNet(合成渲染图像,单物体)
    • Pix3D(真实图像,多物体、遮挡、复杂背景)
  • 测试数据集
    • ShapeNet(单图像3D重建)
    • Pix3D(联合检测与形状预测)
  • 数据划分
    • ShapeNet:按模型划分训练/测试集
    • Pix3D:提出两种划分 S1\mathcal{S}_1(随机划分)和 S2\mathcal{S}_2(模型不相交,更具挑战性)

推理与部署输入输出

  • 输入:单张RGB图像(可含多个物体)
  • 输出:每个检测物体的:
    • 2D边界框
    • 类别标签
    • 实例分割掩码
    • 3D三角形网格(在相机坐标系中)

消融实验测试组件

  1. Voxel-Only:仅使用体素分支,无网格细化。
  2. Pixel2Mesh⁺:重新实现的Pixel2Mesh,从球体开始变形,无体素分支。
  3. Sphere-Init:从高分辨率球体开始变形,无体素分支。
  4. Ours (light):轻量级非残差网格细化分支(每阶段3个图卷积层)。
  5. 不同损失权重:比较 λedge=0\lambda_{\text{edge}} = 0(Best,追求指标)和 λedge=0.2\lambda_{\text{edge}} = 0.2(Pretty,平衡质量与指标)。
  6. 不同拓扑能力测试:在带孔物体子集(Holes Test Set)上评估。
  7. 不同初始化:ImageNet vs COCO预训练。
  8. 细化阶段数:1、2、3个阶段对比。

其他创新点

  • 相机感知的体素预测:使用相机内参矩阵 KK 预测视锥体形状的体素,保持图像-体素对齐。
  • 可微分网格采样:训练时在线从网格表面均匀采样点云,支持端到端反向传播。
  • 深度范围预测:通过2层MLP头预测物体在Z轴的范围,结合2D框高度、焦距估计深度。

:以上总结基于论文内容整理,保留了关键方法、实验与创新点,公式已转换为Markdown格式,可直接复制到Typora等编辑器中。