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{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)。
消融实验要点¶
- 深度图来源消融:训练和推理都用估计深度图(\(\mathcal{T}^-, \mathcal{D}^-\))反而效果最好,甚至优于使用 ground-truth 深度图。原因是估计深度图的轻微平滑防止了模型过拟合到特定形状特征。这也解释了为何纯合成数据训练能泛化到真实场景。
- RGB vs Depth 输入:用 RGB 图像代替深度图(Ours Color),NAE 从 0.36 升到 0.57,验证了深度图是缩小合成-真实域差距的关键。
- 形状复杂度影响:随着形状复杂度(曲率+凸包体积比)增加,\(\gamma\) 误差仅略微上升,说明方法对形状泛化性好。
亮点 / 我学到了什么¶
- 问题分解的艺术:直接端到端预测物体数量在这个任务上几乎不可行(CNN/ViT都表现很差),但分解为 \(\gamma\) 估计和体积估计后,每个子问题都变得可解。这是一个经典的"化难为简"思路。
- 用深度图做域适应桥梁:合成训练→真实推理的 domain gap 通过选择"域不变表征"(估计深度图)来消除,比复杂的域适应技术更优雅。
- 反常识的发现:用估计深度图训练比用 ground-truth 深度图更好——噪声反而提供了正则化效果。
- 人类基线的价值:33人参与的计数竞赛,不仅验证了任务难度,还证明了"数轴相乘"这种朴素策略的失败,间接支持了论文的分解方法论。
- 合成数据管线的完整性:从物理模拟→渲染→深度图→训练,全链条自动化,且只用 CPU 生成数据,环境友好。
局限性 / 可改进方向¶
- 真实数据表现弱于合成数据:真实场景 NAE=0.36 vs 合成 NAE=0.22,主要因为真实场景更复杂(数千物体、更复杂容器形态)
- 无法定位具体物体:方法只输出总数,无法给出每个物体的位置。作者提到整合可见实例定位+不可见实例配置估计是未来方向
- 均匀堆叠假设:假设 \(\gamma\) 在容器内部大致均匀分布,对非均匀堆叠场景(如物体在一侧堆得更紧)可能偏差增大
- 需要已知单位体积:\(v\) 必须已知或可估计,限制了对完全未知物体的应用
- 多视角采集要求:需要围绕容器拍摄30-60张图像做3D重建,对效率有要求
- 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个
- 写作质量: ⭐⭐⭐⭐⭐ 逻辑清晰流畅,从直觉到公式再到实现讲述得像故事一样
- 对我的价值: ⭐⭐⭐ 问题分解思路和合成数据管线设计有启发,但具体任务与当前研究方向交叉有限