点云初学者,有理解错误的欢迎提出。
问题:对点云上的每个点进行标签标注的成本高昂
目的: achieve a performeance comaprable with a fully supervised baseline given the extremely-sparse annotations。【弱监督下的点云语义分割】。
实验所采用的数据集:
基本流程:
- 对数据集进行super-voxel partition。然后“One Thing One Click” :对每个实例选一个点进行标注;对一个点标注实质上就是对点所属的segment进行标注。【标注策略:每个实例被划分为多个segment,随机选一个segment标注】。
- 利用得到的有标签的数据分别训练3D U-Net(负责语义分割)和Relation Net(辅助计算voxel之间相似度)。
- 保持前面两个网络的参数不变,将点云送入这两个网络,通过优化一个能量函数选出具有高置信度的unlabelled voxel更新其标签。
- 重复2和3步骤直到收敛。
创新点:设计了一个融合 self-traing 的 label-propagation 机制,实现了弱监督下点云的语义分割
与前面SegGroup的异同:
- 这篇论文生成伪标签的方法不具有通用性。
- 这篇论文不要求对最具有代表性的segment进行标注;随机即可。
- 两篇论文生成的伪标签在后续的过程中不会发生变化。
备注:下标分别表示点和voxel的index
3D U-Net网络作为骨架。损失函数:
其中ground truth
作用:聚合体素内的点的特征
方法:对体素内点的特征向量求和再平均得到体素的特征向量。
基本结构就是3D U-Net移除最后一个分类层。目的:为每个super-voxel生成一个与类别紧密相关。借鉴了原型网络的思想采用对比学习进行训练。
如果完全采用原型网络的思想可能会导致最后生成的每个类的原型背离了实际的categorical center导致网络不稳定且难以收敛。因此设计了 memory bank。它的作用是生成每个类别的原型 ( prototype ) ;memory bank的shape是,其中每一行代表一个类别的原型。以作为" query ", Relation Network的损失函数:【个人感觉好像公式写错了,少了一个exp。见补充材料里面对对比学习介绍】
其中;这个损失函数的作用是:groups the embeddings of voxels which have same category together, while pushing those of different categories apart.
memory bank里面原型的更新方法:
其中是一个 momentum coefficient,刚开始memory bank里面的值是随机的。
通过最小化一个energy function来给每个unlabelled voxel 分配一个标签。然后基于这个分配到的标签对voxel计算一个置信度,如果这个置信度超过一个阈值那么就可以将最小化energy function分配到的标签确定为该voxel的标签。
energy function:
其中:
是 the normalized mean color, mean coordinates and mean 3D U-Net feature, respectively, of super-voxels
可以看出如果的相似度高但是预测的标签不一样那么energy function就会很高。置信度的定义【联系论文作者,论文里面的负号是误添的,应该是没有】:
- 对Relation Network的分析
- 每一次iteration伪标签更新的情况:
Iteration1就是图三的Initial pseudo labels。文中指出大约5次Iteration网络性能就收敛了;再增加迭代次数并不能带来显著的性能提升。【注意:性能收敛时仍然可能出现有些super-voxel没有标签】
- 定量分析的可视化结果:
来自:对比学习综述
来自:( 小样本学习(few-shot learning)之原形网络(Prototypical Networks)
简述: