跳转至

Counting Stacked Objects

会议: ICCV 2025
arXiv: 2411.19149
代码: https://corentindumery.github.io/projects/stacks.html
领域: 3D视觉
关键词: 3D object counting, occupancy estimation, multi-view reconstruction, 3D Gaussian Splatting, depth estimation

一句话总结

将堆叠物体计数问题分解为"体积估计"和"占空比估计"两个子问题,前者用多视角3D重建解决,后者用深度图驱动的神经网络从可见表面推断,首次实现了对不可见堆叠物体的准确计数,性能远超人类。

背景与动机

视觉计数(visual object counting)是计算机视觉的基础任务,广泛应用于人群计数、细胞计数、交通监控等场景。但现有方法有一个根本假设:被数的物体必须是可见的。在现实中,很多场景是物体堆叠在容器里(比如箱子里的水果、托盘上的零件),大部分物体被上层遮挡,只有顶部少量可见。这种"只看得到冰山一角"的场景,传统2D计数方法完全无能为力。

更有趣的是,作者通过人类实验发现,这个任务对人来说也非常困难——33名参与者的1485次猜测结果远不如算法准确,人们常用的"数每个轴上有多少个再相乘"的策略被证明是低效的。

核心问题

如何从多视角图像中准确计数容器内堆叠的、大部分不可见的同类物体?

核心挑战在于:(1) 绝大部分物体被遮挡不可见;(2) 堆叠模式不规则,物体间有大小不一的空隙;(3) 无法逐一检测或定位每个物体。

方法详解

整体框架

整个方法叫做 3DC (3D Counting),核心思路极其优雅:不去逐个检测物体,而是把问题分解为一个简单的乘除公式:

\[\mathcal{N} = \frac{\gamma \cdot \mathcal{V}}{v}\]

其中 \(\mathcal{V}\) 是堆叠物体占据的总体积,\(v\) 是单个物体的体积,\(\gamma\)占空比(occupancy ratio),即体积中真正被物体填充的比例(剩下是空隙)。

管线分三步走: 1. 分割与视角选择:用 SAM2 在多视角图像上传播分割 mask,自动选出物体最清晰可见的"关键视角" 2. 占空比 \(\gamma\) 估计:对关键视角用 Depth Anything V2 计算深度图,然后用训练好的 \(\Phi\) 网络从深度图回归出 \(\gamma\) 3. 体积估计:用 COLMAP 标定相机位姿 → 3D Gaussian Splatting 重建场景 → 体素雕刻(voxel carving)计算总体积 \(\mathcal{V}\),同时估计容器壁厚度并去除

关键设计

占空比网络 \(\Phi\) 的设计洞察:这是整篇论文最精妙的部分。作者的核心直觉是——如果从深度图上能看到堆叠较深的物体(即物体间空隙大),那么占空比就低;反之如果表面很平坦,物体填充得很密实,占空比就高。这种深度图的"纹理"特征与 \(\gamma\) 有强相关性,而且这种关系不依赖于物体的具体形状

网络架构:冻结的 DinoV2 (ViT-B/14) 作为编码器,输入 448×448 深度图,产生 32×32×768 特征;解码器用连续卷积层逐步降分辨率(768→512→256→128→64 通道,32×32→2×2),再经自适应平均池化到 1×1×64,最后一个线性层+sigmoid 输出标量 \(\gamma \in [0,1]\)

用深度图而非 RGB 图作为输入的巧思:合成数据训练的模型要迁移到真实数据,domain gap 是大问题。但作者发现,用 Depth Anything V2 估计的深度图在合成和真实数据上看起来几乎一样(Fig. 4),这极大缩小了域差距。而且训练时也用估计深度图而非 ground-truth 深度图,让模型适应估计深度的噪声特性。

容器壁厚度预测:用另一个解码器 \(\Psi\) 预测容器壁厚(归一化为容器尺寸的比例),采用空洞卷积增大感受野。推理时对所有视角的预测取平均。从体素重建结果中"腐蚀"掉容器壁对应的体素,只保留内容物体积。

体积估计管线:用分割 mask 裁剪图像(加 alpha 通道)→ 3DGS 重建 → 初始化体素网格 → 对每个视角做投影检测:如果体素投影到 mask 外或深度小于重建深度,就雕刻掉该体素 → 得到封闭体积。

损失函数 / 训练策略

  • \(\Phi\) 网络训练:MSE 损失,最小化预测 \(\gamma\) 与 ground-truth \(\gamma\) 的平方误差
  • 训练数据:40 万张合成图像,来自 14000 个物理模拟场景。使用 ABC 数据集的 CAD 模型,Blender 物理引擎模拟物体掉落堆叠,Cycles 引擎光线追踪渲染。场景包含多种容器形状、材质(金属/木/塑料)、部分填充等变化
  • DinoV2 编码器权重冻结,只训练解码器部分
  • 4080 Mobile GPU,训练和推理都很轻量

实验关键数据

合成数据集(100个未见场景)

方法 NAE↓ SRE↓ MAE↓ sMAPE↓
BMNet+ 0.91 0.87 320.50 158.87
SAM+CLIP 0.73 0.61 259.22 102.77
CNN (直接预测) 0.66 0.48 235.74 98.44
ViT+H (直接预测) 0.42 0.24 149.90 47.36
3DC (Ours) 0.22 0.09 79.48 27.65

真实数据集(45个场景,2381张图像)

方法 NAE↓ SRE↓ MAE↓ sMAPE↓
BMNet+ 0.93 0.98 966.76 131.44
SAM+CLIP 0.94 0.99 980.33 124.31
Human(33人平均) 0.79 0.84 823.23 76.85
Human-Vote(众人平均猜测) 0.60 0.30 621.46 57.91
LlamaVision 3.2 11B 1.00 1.00 1037.50 190.48
3DC (Color, RGB输入) 0.57 0.27 607.98 74.33
3DC (Ours, Depth输入) 0.36 0.06 382.59 53.31

3DC 在真实数据上 NAE 比人类投票低 40%(0.36 vs 0.60),SRE 低 80%(0.06 vs 0.30)。

消融实验要点

  1. 深度图来源消融:训练和推理都用估计深度图(\(\mathcal{T}^-, \mathcal{D}^-\))反而效果最好,甚至优于使用 ground-truth 深度图。原因是估计深度图的轻微平滑防止了模型过拟合到特定形状特征。这也解释了为何纯合成数据训练能泛化到真实场景。
  2. RGB vs Depth 输入:用 RGB 图像代替深度图(Ours Color),NAE 从 0.36 升到 0.57,验证了深度图是缩小合成-真实域差距的关键。
  3. 形状复杂度影响:随着形状复杂度(曲率+凸包体积比)增加,\(\gamma\) 误差仅略微上升,说明方法对形状泛化性好。

亮点 / 我学到了什么

  1. 问题分解的艺术:直接端到端预测物体数量在这个任务上几乎不可行(CNN/ViT都表现很差),但分解为 \(\gamma\) 估计和体积估计后,每个子问题都变得可解。这是一个经典的"化难为简"思路。
  2. 用深度图做域适应桥梁:合成训练→真实推理的 domain gap 通过选择"域不变表征"(估计深度图)来消除,比复杂的域适应技术更优雅。
  3. 反常识的发现:用估计深度图训练比用 ground-truth 深度图更好——噪声反而提供了正则化效果。
  4. 人类基线的价值:33人参与的计数竞赛,不仅验证了任务难度,还证明了"数轴相乘"这种朴素策略的失败,间接支持了论文的分解方法论。
  5. 合成数据管线的完整性:从物理模拟→渲染→深度图→训练,全链条自动化,且只用 CPU 生成数据,环境友好。

局限性 / 可改进方向

  1. 真实数据表现弱于合成数据:真实场景 NAE=0.36 vs 合成 NAE=0.22,主要因为真实场景更复杂(数千物体、更复杂容器形态)
  2. 无法定位具体物体:方法只输出总数,无法给出每个物体的位置。作者提到整合可见实例定位+不可见实例配置估计是未来方向
  3. 均匀堆叠假设:假设 \(\gamma\) 在容器内部大致均匀分布,对非均匀堆叠场景(如物体在一侧堆得更紧)可能偏差增大
  4. 需要已知单位体积\(v\) 必须已知或可估计,限制了对完全未知物体的应用
  5. 多视角采集要求:需要围绕容器拍摄30-60张图像做3D重建,对效率有要求
  6. LLM/VLM 的失败:LlamaVision 3.2 在此任务上完全失败,说明当前 VLM 对3D空间推理和数量估计的能力仍然很弱

与相关工作的对比

  • vs 2D计数方法 (BMNet+, SAM+CLIP):传统方法只能数可见物体,对堆叠场景 NAE>0.9,几乎完全失效
  • vs 直接端到端预测 (CNN, ViT+H):跳过问题分解直接回归数量,在真实数据上 NAE>0.9,说明分解策略至关重要
  • vs CountNet3D [Jenkins 2023]:唯一已知的3D计数相关工作,但需要 LiDAR 且限于特定品类(已知体积的饮料),本文方法更通用
  • vs 多视角计数 (Zhang 2020a/b):多视角方法假设所有物体至少在一个视角可见,不适用于堆叠场景

与我的研究方向的关联

  • 占空比估计的核心思路(从可见表面特征推断整体属性)可迁移到其他"部分可观测"场景,如遮挡物体的属性估计
  • 用深度图作为域不变桥梁的思路值得在其他 sim-to-real 迁移任务中借鉴
  • 3DGS + 体素雕刻的体积估计管线是一个实用的多视角3D理解范式
  • 合成数据生成管线(物理模拟+渲染)的设计思路对构建稀缺场景的训练数据有参考价值

评分

  • 新颖性: ⭐⭐⭐⭐⭐ 首次定义并解决堆叠物体计数问题,分解方法论巧妙
  • 实验充分度: ⭐⭐⭐⭐ 合成+真实数据集完整,人类基线有说服力,消融实验充分;但真实场景只有45个
  • 写作质量: ⭐⭐⭐⭐⭐ 逻辑清晰流畅,从直觉到公式再到实现讲述得像故事一样
  • 对我的价值: ⭐⭐⭐ 问题分解思路和合成数据管线设计有启发,但具体任务与当前研究方向交叉有限