Jun-CEN / Open-world-3D-semantic-segmentation

[ECCV 2022] Open-world Semantic Segmentation for LIDAR Point Clouds
67 stars 10 forks source link

some questions about the article #25

Open Antonwxb opened 10 months ago

Antonwxb commented 10 months ago

您好。很棒的工作,我有一些问题想请教: 1.在开集分割的消融实验部分做了一个只用了Predictive Distribution Calibration但不用Unknown Object Synthesis的实验,并且结果还优于MC-dropout等。我其实不是很理解在这种实验设定下模型检测未知类的能力是从何而来?因为是分割任务,如果不用Unknown Object Synthesis的话训练数据中就完全没有所谓的未知类(因为我的理解是分割需要逐点标注,未知类无法做标注),这样的话仅靠Predictive Distribution Calibration让已知类(旧类)在对应类别的预测分数最高、未知类的预测得分第二高是怎么让模型获得检测未知类的能力的呢?另外还有一个参数我认为很关键是公式(10)中的λth,这个参数是怎么设置的?我看好像也没有什么实验? 2.在增量实验部分,我十分不理解为什么文中的方法经过增量学习的阶段后结果竟然能比upper bound好,特别是旧类的结果竟然优于upper bound?我还没有在增量学习中看到过这样的结果(可能是因为我阅读的文章还太少)。能不能解释一下?另外我理解的您文中增量部分的做法其实和LwF很类似,都是利用旧模型先对新数据打伪标签,不知道为什么二者的实验结果差距这么大? 3.我读完文章后的理解是:假如某一帧的数据同时包含old class和novel class,您在训练最初的闭集分类器的时候其实用到这一帧数据了,只是相当于把这一帧数据中的novel class的点云给删除了(否则无法训练,因为没有标注)。在增量更新过程中,这一帧的数据同样也用到了,只是只包含了novel class的点云标注,old class的点云标注给去掉了。如果我没有理解错的话,这样的实验设定个人感觉会不会有些奇怪?在现实应用中什么情况下会导致旧数据标注不可见,但是旧数据依然可见?如果能设置为假设一帧数据包含了novel class的点云,那么他就不会在训练初始分类器的时候用到,只在增量过程中用到那是不是会更合理(至少增量过程用到的数据在训练初始分类器的时候没有被用到)? 因为我是初学者,如果有什么理解不到位的地方还请您指出,谢谢! If you can't understand Chinese,pls reply and I'll convert this into English.

Jun-CEN commented 10 months ago

你好,谢谢你对论文的关注和仔细研究。

  1. Predictive Distribution Calibration可以看成两股拉力,来自ground truth类别和unknown类别。测试时对已知类来说还是第一股拉力占大头,所以能被正确的预测对,但未知类第一股拉力就会小很多,因为本身并不属于任何一个已知类,此时第二股拉力会将其拉到未知类,使得他们属于未知类的概率提高,具体可以看Fig. 3结果。公式(10)中的λth在我们evaluate的时候不需要手动设置,因为AUROC本身会考虑所有阈值,可以去查一下AUROC的计算过程。
  2. 首先我们这里设计的分割任务相比于传统的分类任务一个很大的不同之处在于我们只提供新的类的ground truth,但是要注意其他老的类别的点还是存在于点云中的。表格里面的LwF是不用那些没标注的老的类的点,而我们用了那些点。至于upper bound,我们并没有显著超过,有时候高有时候低,而且mIoU本身不是一个很稳定的数值,训练前后epoch可能就能差一两个点。
  3. 你说的对。注意我们更新的过程中只用那些包含新的类的点云,所以大部分老的点云是用不到的。确实在初始阶段会包含所有点云。这里就是假设新的类在初始标注阶段被标注成了0,后面才标的。当然你那种假设也肯定成立,也值得探究。
Antonwxb commented 10 months ago

非常感谢您的回复,我还有两个问题:

1.针对文中的unknown object synthesis,如果伪目标是放大,那么可能导致目标点云和背景或者其他目标的点云出现了部分重合,就有点不符合真实情况了。请问这一点是怎么处理的? 2.这个问题是针对您的另一个文章Open-set 3D Object Detection。我看好像没有这个的github所以直接在这里问您吧。针对这篇文章特别是在文中叙述Naive open-set 3D object detector的缺点的时候,我感觉存在一个假设就是:点云网络本身就具有发现未知类的能力。但是因为训练过程中未知类目标是没有标注框的,那么我感觉网络是将未知类目标视为背景点进行学习的,这样的话网络能在训练阶段将未知类视为背景点的情况下在测试阶段在未知类目标处打出来框吗?如果测试时网络根本没有在未知类附近检测出目标框,那是不是文中的方法就失效了呢?

Jun-CEN commented 10 months ago
  1. 我们不作处理。这里的数据增强本身不是完全合理的,比如会破坏LIDAR点云本身的结构,或者重叠,或者新的物体到底合不合理等等。但是这里的关键是需要有这个未知物体就可以帮助我们更好的学习已知类和未知类的分界面。
  2. 是的。这里框本身筛选的时候会有一个score来决定总体的recall,如果阈值比较低那剩下的框就会比较多recall会比较高,当然precision就会降低,但是出未知类的框的概率就会增大。另外从某些文章中我记得如果把位置类别加到训练集里面,其实并不会很明显的提升recall,但是他们是在一个本身类别比较多的数据集上,可能与自动驾驶数据集不太一致。另外我们发现ood和ind但是分错的具有相似的不确定度,The Devil is in the Wrongly-classified Samples: Towards Unified Open-set Recognition,这也是为什么我们把错误的框认为有ood物体的原因之一。
Antonwxb commented 10 months ago

非常感谢你的耐心回复,祝你学习工作生活愉快!!

Antonwxb commented 6 months ago

您好,我之前在这个issue里问了关于您另一篇文章Open-set 3D Object Detection的一个问题,针对这个文章我目前有一点疑问:请问你们在做开集3d目标检测实验的时候训练数据中的未知类目标点云是怎么处理的?是直接将包含未知类目标点云的一帧数据去掉;还是说如果某一帧中包含未知类目标点云则仅将这一部分点云去掉,这一帧数据仍用于训练;还是说只是把未知类标注给去掉了,未知类目标的点云仍然包含在了训练数据中?