jbehley / point_labeler

My awesome point cloud labeling tool
MIT License
656 stars 161 forks source link

How can I annotate the frames one by one without poses? #81

Open Vonct opened 6 months ago

Vonct commented 6 months ago

Hi, thanks for your amazing tool.

I'm currently annotating some KITTI dataset that don't have poses, while my own dataset also don't have poses. So how can i annotating them one frame by one frame?

Besides, I'm a bit little confused about the parameters in settings.cfg . My current understanding about it is that, the tool would read all the point cloud files in folder velodyne anyhow. But in one tile (the size is determined by tile size), it would just load max scans in the determined size, even there are 2000 frames in one tile's range. And since we have poses, which are the key, we can concatenate the frames in one tile. So that we can annotate the points that detected in several frames (overlapped) in just one time.

Don't know if my understanding about your tools is correct. And for those did not loaded, how can I know which frames are they? Since I noticed that, the tool would automatically generate all the .label files in the folder labels

In addition, when I try to test the tool on SemanticKITTI(sequence 3). In the beginning it was great. But when I click for a while something happened. It really confuses me. 0325_3 (this was when I open the corresponding folder)

0325_4 (this was when I click the next frame button >, there are no more points...)

jbehley commented 6 months ago

There are multiple questions:

  1. Scans with poses: The KITTI dataset has poses, but we are even using poses from our own SLAM pipeline (SuMa). The individual scans, like each .bin file is loaded, and aggregated on the fly (no need to aggregate them before). Don't press "show single scan" if you have scan poses. If you need poses for your scans, then try kiss icp, see https://github.com/PRBonn/kiss-icp, which should provide you with poses. The whole labeling of point clouds makes from my perspective sense when you are not just labeling single point clouds; the aggregated point clouds will provide you with a way to consistently label multiple point clouds.
  2. Regarding the Tiles: Based on the trajectory, we split it into tiles, which cover 100 by 100 meters. These tiles are shown with some boundary overlap. The size of the tiles can be modified in the configuration file. The number of scans determines how much space is allocated for storing the points of the point clouds, i.e., with "number of scans" of 2000, you will have space on the GPU for 2000*150k points in a shown tile. If this isn't sufficient, you can increase it but might run into issues with the GPU memory.
  3. Effect of Tiles: The effect you describe is as expected as you reach the boundary of the tile. then you can switch to the next tile (selectable in the "A,..., Z" part in the upper left. As I said before; we always show the tiles with some overlap, such that you can continue to label the point clouds in the next tile.
  4. Labels: For each .bin is a corresponding .label with the same name generated. The order of the labels is the same as the points in the point clouds. If you really want to aggregate multiple scans, then simply remember how many points are in each scan, then you can easily get the labels for each individual scan, e.g., if you have scans with 1500, 2403, and 2400 points, then labels [0-1499], [1500-3902], and [3903-6302] are the ranges from the aggregated labels that correspond to the scan-wise labels.
  5. If you really need to label single scans, you don't need poses (use simply the identity, i.e., 1 0 0 0 0 1 0 0 0 0 1 0 in the poses txt.

In summary: If you don't really need to annotate individual scans, then don't do it. Use some LiDAR SLAM method (e.g., kiss-icp, SuMa, etc.) to estimate poses for your scans.

Vonct commented 6 months ago

Thanks for your reply. I've got the poses using kiss-icp. But I still have some questions.

  1. About max_scan, when I set a small number, and the tile size is so big that it cloud not load all the points. In such case how can I know which points would be loaded? Or just part of the scans in the tile would be loaded?
  2. About the label, I find that it's hard to do the work, while the point cloud is extremely dense. Specially when I zoom in. Like: screenshot3 When I zoom in, it looks more chaotic. screenshot4
  3. About SemanticKITTI, when I try on sequence 3. The point cloud is a chaos. How could this happen? screenshot
  4. Since the reason I mentioned on question2. I want to label the points one scan by one. But is putting part of scans to another folder the only way? For example, I have 1700 .bin files. But if I want to label singly. I need to write the poses.txt which each line filled with 1 0 0 0 0 1 0 0 0 0 1 0 (1700 lines). But my GPU could not afford that. So now that I could not determine which scans can be loaded in one tile, I need to put part of scans to another folder. Is it the best way?
  5. What's the unit of the brush size? inch or cm?