跳转到内容
新建笔记

CenDerNet:多视角中心、曲率热图与渲染位姿搜索

CenDerNet 面向反光、少纹理、相互遮挡的工业零件。它先把多个已标定视角的 RGB 图像转换为中心和几何边缘热图,再通过三角化与“渲染—比较”估计已知 CAD 物体的位姿。

它的启发在于:让神经网络输出容易检查的中间表示,然后用几何方法搜索位姿。中心预测给出搜索起点,曲率表示用于区分朝向与细化位置。

1. 输入条件与坐标关系

跳转到“1. 输入条件与坐标关系”

输入包含多个视角的 RGB 图像、各相机的内参与外参,以及待定位物体的 CAD 模型。它不依赖深度传感器,但也不是仅凭一张未标定照片恢复任意物体。

设物体到世界坐标系的位姿为 TwoT_{wo},世界到第 vv 个相机的外参为 TcvwT_{c_vw}。采用列向量,有

[Xcv1]=TcvwTwo[Xo1],T=[Rt0T1].\begin{bmatrix}\mathbf X_{c_v}\\1\end{bmatrix} = T_{c_vw}T_{wo} \begin{bmatrix}\mathbf X_o\\1\end{bmatrix}, \qquad T= \begin{bmatrix}R&\mathbf t\\\mathbf0^\mathsf T&1\end{bmatrix}.

各视角联合优化的是同一组世界坐标系中的物体位姿。如果每张图使用互相独立、未对齐的相机坐标,就无法共享一个候选场景。

阶段得到什么主要约束
RGB 转热图中心概率分布、视空间曲率表示尽量弱化材质、光照与背景变化
中心转三维点每个物体的三维中心候选多视角射线应接近相交
渲染并比较物体旋转与平移候选 CAD 场景的几何边缘应符合各视角预测

2. 网络预测的是中心和视空间曲率

跳转到“2. 网络预测的是中心和视空间曲率”

多视角 RGB 转换为中心与曲率热图

第一阶段:各视角使用同一套网络权重,输出中心热图和曲率热图。图中的黑白显示是可视化方式。

中心热图为什么使用高斯斑点

跳转到“中心热图为什么使用高斯斑点”

中心热图以投影后的三维物体中心为目标,用高斯斑点表示邻域。它允许一定的位置误差,便于跨实例学习。斑点大小随物体尺寸和到相机的距离调整。

这一步刻意保留粗定位能力,而不要求网络直接输出高精度三维平移。较宽的斑点更容忍位置变化,但也更容易把相邻物体合并;“更平滑”并不总是更准确。

视空间法线及由法线变化生成的几何边缘

先渲染法线,再计算图像空间中的法线变化。平行平面相接时,法线相同的区域可能没有显著响应。

论文先渲染视空间法线图,再用 Prewitt 算子近似梯度,最后取梯度的二范数。若法线图为 n(u,v)∈R3\mathbf n(u,v)\in\mathbb R^3,便于理解的表达式为

C(u,v)=∥∂un(u,v)∥22+∥∂vn(u,v)∥22.C(u,v)= \sqrt{ \|\partial_u\mathbf n(u,v)\|_2^2+ \|\partial_v\mathbf n(u,v)\|_2^2 }.

它是图像网格上的法线变化表示,响应几何边缘和物体轮廓。它不等于微分几何中严格定义、与视点和成像分辨率无关的平均曲率或高斯曲率。背景法线的约定、遮挡关系和像素尺度都会影响边界响应。

这也解释了它为何能减弱颜色纹理的影响,同时仍有局限:同样的局部几何可能对应不同物体;大面积平坦区域提供的方向线索较少。

共享 U-Net 主干与两个热图预测头

共享编码—解码主干后分别预测中心与曲率。末端的 sigmoid 输出适配热图监督。

论文对两个输出采用二元交叉熵。中心分支使用一个通道还是多个通道,取决于实验任务:DIMO 的设置共享中心通道;T-LESS 为区分 CAD 类别使用 30 个中心通道,曲率仍共享一个通道。因此不能把所有实验都描述为完全无类别的物体检测。

3. 从二维峰值到三维中心

跳转到“3. 从二维峰值到三维中心”

中心峰值经过多视角三角化形成三维中心

设第 vv 个相机到世界的旋转和平移为 Rwcv,twcvR_{wc_v},\mathbf t_{wc_v}。一个热图峰值像素 p=[u,v,1]T\mathbf p=[u,v,1]^\mathsf T 对应世界中的射线

X(λ)=ov+λdv,ov=twcv,\mathbf X(\lambda) = \mathbf o_v+\lambda\mathbf d_v, \qquad \mathbf o_v=\mathbf t_{wc_v}, dv=RwcvKv−1p∥RwcvKv−1p∥2,λ>0.\mathbf d_v= \frac{R_{wc_v}K_v^{-1}\mathbf p} {\|R_{wc_v}K_v^{-1}\mathbf p\|_2}, \qquad \lambda>0.

由于标定与预测都有误差,两条射线通常不精确相交。对两个视角,可求

min⁡λ1,λ2∥o1+λ1d1−o2−λ2d2∥22,\min_{\lambda_1,\lambda_2} \|\mathbf o_1+\lambda_1\mathbf d_1 -\mathbf o_2-\lambda_2\mathbf d_2\|_2^2,

再以两条射线上最近点的中点作为候选中心。若最近距离过大,候选应被拒绝;射线近乎平行时,深度也会十分不稳定。

论文随后合并距离接近的候选,并通过在多视角中心热图上的重投影得分优化三维位置。已知物体数量时还可以进一步筛选。

这不是无条件的点匹配:不同物体的峰值也可能形成一对“看似相交”的射线。多视角评分、空间范围约束及相邻候选抑制帮助排除伪中心,但不能保证恢复所有被遮挡物体。多个物体中心投影重合是论文展示的失败情形之一。

4. 渲染—比较的代价如何计算

跳转到“4. 渲染—比较的代价如何计算”

三维中心约束下的多视角位姿优化

中心用于初始化和约束位姿搜索,曲率热图用于比较候选场景。

对网络预测的曲率热图使用阈值 τb\tau_b,得到二值边缘集合 EvE_v。为每个像素预先计算到最近目标边缘的距离:

Dv(p)=min⁡q∈Ev∥p−q∥2.D_v(\mathbf p)= \min_{\mathbf q\in E_v}\|\mathbf p-\mathbf q\|_2.

曲率热图、阈值边缘与距离图

距离图只需由目标热图计算一次,可供大量候选位姿重复使用。显示中的明暗方向取决于可视化映射,不改变距离的定义。

设在候选场景位姿集合 T\mathcal T 下渲染出的非负曲率为 Cvrender(p;T)C_v^{\mathrm{render}}(\mathbf p;\mathcal T),则单视角代价为

Lv(T)=∑pCvrender(p;T) Dv(p)∑pCvrender(p;T).L_v(\mathcal T)= \frac{ \sum_{\mathbf p} C_v^{\mathrm{render}}(\mathbf p;\mathcal T)\,D_v(\mathbf p)} {\sum_{\mathbf p}C_v^{\mathrm{render}}(\mathbf p;\mathcal T)}.

总成本为

L(T)=∑vwvLv(T).L(\mathcal T)=\sum_v w_vL_v(\mathcal T).

渲染边缘越接近目标边缘,代价越低。按渲染曲率总量归一化,可以减少单纯增加响应数量带来的尺度差异。视角权重来自中心热图提供的可见性线索;它仍是估计,不是已知的真实遮挡比例。

批量候选位姿经过渲染器与距离图计算代价

它是从渲染边缘到目标边缘的单向距离。目标中多出一些错误边缘,不一定增加当前候选的代价;错误边缘甚至可能成为更近的匹配。反过来,真实边缘缺失会让正确渲染受到惩罚。

如果目标边缘集合为空,“最近边缘”没有定义;如果渲染曲率总量为零,分母也无效。工程中应拒绝此类候选或采用明确的失败代价,不能只在分母加小数就让空渲染获得零损失。

对称物体的多个姿态可能渲染出相同图像,因此得到相同代价。这是观测中的不可辨识性;输出其中一个等价姿态不代表算法恢复了唯一真实角度。

5. 一个可运行的几何检查

跳转到“5. 一个可运行的几何检查”

下面的示例独立实现两件事:两条射线的最近点中点,以及小尺寸二值边缘的距离图和单向渲染代价。暴力计算距离图只用于教学,实际大图应使用高效距离变换。

import numpy as np
def ray_midpoint(origin_a, direction_a, origin_b, direction_b):
values = [np.asarray(x, dtype=float) for x in
(origin_a, direction_a, origin_b, direction_b)]
if any(x.shape != (3,) or not np.isfinite(x).all() for x in values):
raise ValueError("each ray component must be a finite 3-vector")
oa, da, ob, db = values
norms = np.array([np.linalg.norm(da), np.linalg.norm(db)])
if np.any(norms <= 0):
raise ValueError("directions must be nonzero")
da, db = da / norms[0], db / norms[1]
a = np.column_stack([da, -db])
if np.linalg.svd(a, compute_uv=False)[-1] < 1e-6:
raise ValueError("nearly parallel rays")
distance, _, _, _ = np.linalg.lstsq(a, ob - oa, rcond=None)
if np.any(distance <= 0):
raise ValueError("closest points must be in front of both cameras")
pa, pb = oa + distance[0] * da, ob + distance[1] * db
return (pa + pb) / 2, np.linalg.norm(pa - pb)
def curvature_cost(render, target_edges):
c = np.asarray(render, dtype=float)
e = np.asarray(target_edges)
if c.ndim != 2 or c.shape != e.shape or c.size == 0:
raise ValueError("render and edges must have the same nonempty 2D shape")
if not np.isfinite(c).all() or np.any(c < 0) or c.sum() <= 0:
raise ValueError("render must have finite nonnegative positive total mass")
if e.dtype != np.bool_:
raise ValueError("target_edges must be a boolean mask")
target = np.argwhere(e)
if len(target) == 0:
raise ValueError("target contains no edges")
pixels = np.indices(c.shape).reshape(2, -1).T
distance = np.linalg.norm(pixels[:, None, :] - target[None, :, :], axis=2)
nearest = distance.min(axis=1).reshape(c.shape)
return float(np.sum(c * nearest) / c.sum())
center, gap = ray_midpoint([-1, 0, 0], [1, 0, 2],
[1, 0, 0], [-1, 0, 2])
np.testing.assert_allclose(center, [0, 0, 2], atol=1e-12)
assert gap < 1e-12
edges = np.zeros((5, 5), dtype=bool)
edges[:, 2] = True
render = np.zeros((5, 5))
render[:, 3] = 1
assert np.isclose(curvature_cost(render, edges), 1.0)
assert np.isclose(curvature_cost(7 * render, edges), 1.0)

最后两个断言说明:当渲染边缘整体偏移一个像素时,代价为 1;只把所有渲染曲率乘以相同正数,不改变归一化代价。它们没有检验神经网络预测质量,也没有实现完整的多物体遮挡渲染。

6. 为什么按可见性顺序优化

跳转到“6. 为什么按可见性顺序优化”

论文先优化更可见的物体,再把它们加入场景渲染,处理后方受到遮挡的物体。这使后续比较考虑已经定位物体造成的可见性变化。

每个物体先围绕三维中心生成候选平移,并随机采样旋转,再对较好的候选使用有界 Nelder–Mead 优化。论文设置首先评估 2000 个候选。

需要区分两层含义:

  • 代价函数利用多个视角和场景中的多个物体。
  • 搜索过程按物体顺序推进,并非每一步都同时对所有物体的全部参数做一个大规模联合优化。

早期中心错误、误选 CAD 类别或前方物体定位错误,可能继续影响后续搜索。增加候选数量只能缓解搜索覆盖不足,无法自动补救错误的成像标定或完全缺失的中间表示。

原论文比较的是其特定数据、视角数和评价设置,不能把结果概括为“多视角方法总比单目方法好”或“超过所有 CosyPose 版本”。

原论文设置可读出的结论比较边界
DIMO 反光物体子集中心与曲率表示对该工业场景有帮助论文使用多视角,对比的 PVNet 是单视角方法
T-LESS 严格位姿阈值对比所选 ECCV 2020 CosyPose 结果具有优势本文 5 个视角与对方提供的 8 视角结果,设置并不相同
T-LESS 默认 BOP 指标CenDerNet 的 AR 为 0.713;所选 CosyPose 为 0.617论文同时列出的排行榜 CosyPose 版本 AR 为 0.839

MSSD 是考虑物体对称性的最大三维表面距离,MSPD 是相应的最大二维投影距离。严格设置使用物体直径的 5% 与 5 像素作为正确性阈值;它们与多阈值平均的默认 BOP AR 应分别解读。

论文给出的约 2000 次/秒,是 RTX 3090 Ti 上包含渲染的代价函数调用速度,每次处理六张 256×320256\times320 图像。它不等于完整系统每秒定位 2000 帧:热图预测、中心搜索、大量候选和局部优化均需另外计入。

网络训练与几何搜索也有不同成本。论文附录中,DIMO 使用 200 个 epoch、batch 8;T-LESS 使用 40 个 epoch、batch 4。两者分辨率、输出头与训练硬件均不同,不能只凭训练时长比较网络效率。

8. 实际值得借鉴的部分

跳转到“8. 实际值得借鉴的部分”

这个框架适合用来研究“网络预测什么中间量更利于几何求解”。调试时可以直接检查中心峰值、三维射线交会、目标边缘、候选渲染和最终残差,逐步定位错误来源。

若目标是部署,还需要补齐相机外参稳定性、CAD 单位、遮挡渲染、空热图处理、候选采样和总延迟测试。这些都是完整系统的组成部分,不会由单次代价计算速度自动保证。

  • 原论文及附录:De Roovere 等,CenDerNet: Center and Curvature Representations for Render-and-Compare 6D Pose Estimation,2022。
  • NOCS 类别规范坐标:对比类别级表示与此处已知 CAD 的多视角定位。
  • RGB 位姿与投影几何:补充内参、像素对应和位姿复合。
  • CSDN 原笔记:首次发布于 2022-10-25。本篇保留七幅原图,补充坐标关系、代价边界和独立数值示例。