QingyongHu / RandLA-Net

🔥RandLA-Net in Tensorflow (CVPR 2020, Oral & IEEE TPAMI 2021)
Other
1.3k stars 321 forks source link

Differences tester scripts S3DIS, Semantic3D and SemanticKITTI #199

Open lukasmattheuwsen opened 2 years ago

lukasmattheuwsen commented 2 years ago

Thanks @QingyongHu for the great code on RandLA-Net. I'm using you code in order to run the pre-trained model on my own dataset. Although the code is running fine, I have some trouble understanding certain parts of the tester scripts. When testing on the semantic3D datasets, I was wondering why there is this loop in tester_Semantic3D.py (This loop is also present in S3DIS and semanticKITTI tester) while last_min < num_votes: More specifically, what happens in the try block inside this loop? Why does the script perform multiple validation steps? What does this np.min(dataset.min_possibility['test']) actually corresponds to?

Additionally, the following statement if last_min + 4 < new_min: must be true in order to output the results. However, this statement is different for S3DIS and semanticKITTI where it is more like if last_min + 1 < new_min: Can this value in tester_Semantic3D.py be lowered to 1 for instance, as this would improve the testing speed significantly?

I know this issue has been discussed in issue #98, however this does not completely clears up my question about this part of the code.

youssef962 commented 2 years ago

@lukasmattheuwsen I can see that you are stuck with same problem ! But isn't that loop is an infinite loop ? I mean the value will be always less than num_votes as its not updating unless it goes through the (except) condition which is (error) ?!

lukasmattheuwsen commented 2 years ago

it is not an infinite loop as something does happen/change during the loops. the min possibility, although slowly, increases. When the predefined number of steps is reached, the code goes trough the except condition and updates the new_min before checking if the difference with last_min is big enough if last_min + 4 < new_min: If this is true, the results are exported and the loops is ended after. If not, step_id is reset to 0 and the try condition is executed again until the predefined step_size is reached again and last_min and new_min are checked again, ...

The code works eventually, however I would like to understand this part of the code better to know what is actually happening in the try condition in this while loop and what the min_possibile value actually means as this defines if the results are exported or need further processing.