-
Notifications
You must be signed in to change notification settings - Fork 72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What's the possible parameters that have a potential effect on superpoint preprocessing? #134
Comments
According to my experiments, if the input scene is the same, the regularization term 'pcp_regularization' has the greatest impact, followed by the pcp_spatial_weight, and the cutoff has the least impact. But the geometric partitioning of SPT is actually a hierarchical input, that is, the output of the previous level is the input of the partitioning of the next level. It is unknown whether this rule still exists at this case. I recommend reading the author's article on cut-pursuit. |
Thank you very much! 另外,你知道如何评价生成超点的质量高低吗? 我现在将这个方法用在别的框架内,但是本方法的超点生成与别的框架对应的方法相比,在最后的性能上是较差的;但是理论上应该更好,出现了矛盾。我想移植这个方法,并使得最后的性能有所提升, 你觉得在生成超点质量上,可以关注哪些方面?或者可以关注哪些参数?(例如之前问题提到的那几个参数) |
超点质量的评价在作者的ssp-spg这篇文章中有提及。你可以参考。其实你可视化了不同层级的过分割结果可以大致看出,SPT的贡献不在于它的过分割有多么精确,而是其层次化的基于超点图的注意力特征提取,通过UNet结构实现特征融合。因为哪怕是spt-3,使用了三层过分割,其最主要的分类特征其实还是来自于第一层过分割。而第一层过分割实际上和体素化的效果类似,因为每个segment其实相当小,只不过相比于体素规则的切割方式,cut-pursuit可以在不规则的物体边界处根据几何特征分的更好(存疑)?但可以知道的是,在数据规模(node数量)相近时,spt的过分割结果的语义上限更高(文中的图6)。 |
好的谢谢哥! |
如果你的后端网络(语义分割)是相同的,那么你试着先评估以下spg的过分割结果和spt的过分割结果两者的语义上界是否接近。另外,我没太理解“到最后都是将:点云中的每个点所对应的超点的序号输入进网络”这句话,是否说明,你只是用到了过分割的超点序号,特征和图结构(如果需要)是你自己单独定义的? |
谢谢哥
|
过分割结果返回了每个点所属的超点索引,通过点的标签可以知道每个超点的标签(取众数就好了),超点内的所有点都视为同一类别(因为一般基于超点的网络最终预测的是超点的标签,如果超点中包含不同类别的点,那么语义上届就会受影响),再根据这两组数据(点标签gt,由超点标签得到的每个点标签),算混淆矩阵,计算一下mIoU就行了。 |
如果你的方法只是需要超点作为特征聚合的指导索引,最终预测的对象是每个点,而不是超点。那么你就需要考虑超点的纯净度问题。而不是语义上届。虽然两者紧密关联(超点越纯净,语义上届就越高)。 |
好的感谢您!
请问您:
再次感谢您抽取宝贵时间回答我的问题! |
我觉得:针对第一个疑问,我的实验结果受到超点纯度的影响,那么SPT的level 1细粒度超点,对于最后是有帮助的(会比链接方法好一些)? 相比于大的超点(纯度受到影响),这种小超点比较纯净? |
第一点,你说的这两个方法我都尝试过。但我没有具体比较他们的差异。如果没记错的话,两者都是图割相关,但是cut-pursuit可以根据更丰富的特征,根据能量最小化量化节点的差异,度量更精细,而后者只是坐标偏移和法向量计算边权重,最后根据阈值划分。理论上cut-pursuit效果会更好。关于第二点我也没有更好的建议。 |
好的感谢哥,如您所说,理论上 SPT 更优; |
您好。我想问一下您是在训练好了模型后应用在自己的点云上了吗?我在DALES数据集上训练了模型,但我找不到方法把模型应用在我想分割的、还没有标注的点云上。请问您有什么好的方法吗?感谢! |
如果你是希望使用dales数据集训练的模型,那么你得为模型提供相同的输入,即点云中应该包含强度信息。并通过相同的预处理过程。最简单的方法,就是保证你的点云格式内容和dales一致。然后将dales_config.py中 TILES字典中的'test'项的内容,改成你自己的点云数据文件名。 |
感谢您的回复!我尝试过修改dales_config.py中 TILES字典中的'test'项的内容,但在运行notebook的时候会在预处理时报keyerror: File ~/superpoint_transformer/src/datamodules/base.py:149, in BaseDataModule.prepare_data(self) KeyError: 'testing'` 我对点云的了解不是很多,不知道这是不是因为点云不包含强度信息导致的错误呢?我可以通过修改我的点云文件来解决这个错误吗? |
DALES的数据集中,ply文件应该含六个数据类别:x、y、z、强度、语义类别和实例类别,而我的ply文件应该只有x,y,z三个类别,可以通过直接修改ply来让我在DLAES上训练的模型可用吗?非常感谢! |
@TaugenichtsZZY 相对应的,你也需要在项目根目录下的data/dales/raw/test/文件夹中提供你的点云文件(最好把原来raw/中的“test/”文件夹和processed/中的“test/”文件夹改个名字,用你自己的数据作为测试集新建test)。dales的点云虽然包含六个属性,但是你只做测试应该只需要xyz和强度,语义类别应该作为GT,预处理过程不可能将它作为已知条件吧,只在计算loss和metrics时用到,而测试过程应该没有这一步。另一个问题,你的ply文件没有强度信息,那么你就无法使用dales训练的模型,除非你修改配置文件,在训练时不使用强度特征重新训练。否则输入都不匹配,不会有好结果的。因此我的建议是重新训练。 总而言之,你训练好的模型和代码就是一个黑盒子,找到数据入口,给它所需要的数据就行了。 |
明白了,我已经换过数据了,但数据里确实没有强度信息... |
@TaugenichtsZZY 另外,你这个错误应该是dales数据集的读取函数需要对应修改,因为你的ply数据的格式中没有属性testing. dales的ply格式中xyz等信息是在属性“testing”中的。因此,如果你按照我的建议,修改配置文件,并使用dales数据(仅xyz)来重新训练并用自己的数据测试。那么你依然要面临这个问题(修改代码中从ply读取内容的函数)。 |
所有的配置文件都在config/文件夹,关于数据的在datamodule/dales.yaml 里面有 point_hf:(这个关键字下面是告诉我们点云的手工特征有哪些),去掉其中的intensity即可。另外,你需要注意的是,你的点云和dales是否相近,比如密度(均匀密集或稀疏)和内容形式(室内外/郊区/田野?)上。这可能会对训练和测试的分割结果有很大影响。 |
好的,我会去尝试一下!我的数据来自果园,和DALES还是比较接近的。这个dales.yaml除了影响训练,是不是也会影响推理时的预处理过程(因为我是在预处理时报的错)? |
@TaugenichtsZZY 是的,datamodule/dales.yaml是一个总配置文件,关于整个数据的处理参数设置都在其中,包括训练集/测试集,预处理/二次处理(训练时和验证、测试时的处理有略微差异)。 |
了解了,感谢大佬!Vielen Danke! |
I would like to give big thanks to @MenglinQiu for dedicating time and sharing great, on-the-point insights 🙏 ❤️ |
SPG and SPT both use cut-pursuit, but different versions of the algorithm (cf our SPT paper). SPT uses a faster parallel implementation. It is likely the API has changed between the two versions and you might want to adjust your parameters.
As already suggested above, read the papers and code to understand what the parameters do, adjust them, and assess the partition oracle purity on your data (see next).
@Wind010321 from discussions in issues you previously opened, I already suggested you give a closer look at our recent tutorial. Your present questions clearly shows you have not. @MenglinQiu has been kind enough to take the time to help you here, but please be considerate of people's time and make sure you thoroughly go through the already-available resources. That is: our papers, notebooks, commented code, past issues. That being said, I consider this issue closed. |
Hi,
![SPG](https://private-user-images.githubusercontent.com/74442617/347315095-313a2794-8463-4594-ba8e-71e60149e3e9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ4NjI2NjksIm5iZiI6MTcyNDg2MjM2OSwicGF0aCI6Ii83NDQ0MjYxNy8zNDczMTUwOTUtMzEzYTI3OTQtODQ2My00NTk0LWJhOGUtNzFlNjAxNDllM2U5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODI4VDE2MjYwOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTM1MTYzZTg4YmRlNTFkZDBjMTI0MzhkMzFmOWZlNzNlNjZlYjFjNjYxM2NjMzJlZThhOWI5ODU5NDExYzQxNWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.V8KUDSJVfxECjwxMJM6sK9S35O2e_NuDVZXldPj3FEo)
![SPT-002](https://private-user-images.githubusercontent.com/74442617/347315734-04337171-058c-4d4e-98d1-71c1c7037b2b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ4NjI2NjksIm5iZiI6MTcyNDg2MjM2OSwicGF0aCI6Ii83NDQ0MjYxNy8zNDczMTU3MzQtMDQzMzcxNzEtMDU4Yy00ZDRlLTk4ZDEtNzFjMWM3MDM3YjJiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODI4VDE2MjYwOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJmZDk2NjgxNmFlOTc3Mzk4NTU2ZTVkZGQ1NDQ1MzI1ZWFmZjU3NGJlNjQ5NzAwZmQyNmFkMmExMTVhYjVkYjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.m-zWClu17Vq-H9OGxPf6CMjUhZ6CqTOknLRRX-z8U9c)
I have some questions about the pre-processing of superpoints:
The first figure is my expect figure of the superpoints(i.e. the superpoints are more bigger)
After using SPT's data preprocess, I can get P1-P3's superpoints, for P2 superpoint as below:
What possible parameters settings can be changed to make the superpoints larger? Are the following parameters related to superpoint enlargement:pcp_cutoff, pcp_regularization, pcp_spatial_weight? Or are there any other relevant parameters?
This will help me better understanding of SPT's superpoint generation. Thank you!
The text was updated successfully, but these errors were encountered: