Name: Manikandtan Chiral Kunjunni Kartha
Andrew ID: mchiralk
Late days used: 0
Run python train.py --task cls --load_checkpoint best_model to train the model, and python eval_cls.py --load_checkpoint best_model for evaluation.
All results in this section are from using the best model with 10000 points.
ID | Input point Cloud | GT class | Detected Class |
---|---|---|---|
600 | 0 (chair) | 0 | |
700 | 1 (vase) | 1 | |
800 | 2 (lamp) | 2 |
For the given model with 10000 points, there were no errors for class 0 (chair). Samples of error in other 2 classes are visualized here.
ID | Input point Cloud | GT class | Detected Class |
---|---|---|---|
618 | 1 (vase) | 2 | |
667 | 1 (vase) | 0 | |
827 | 2 (lamp) | 1 |
The classifier seems to work well in most cases with a 98% accuracy. The failures (when the confidence of the incorrect class in higher), seems to happen only for objects for ambiguous shapes. In the first sample, the vase looks similar to some hanging lamps in the training set. Simliarly, the second sample is visually similar to stool-like chairs and the third row lamp is very similar to vase shapes. The classifier seems to do a good job except when in cases where the point cloud shape isn't good enough to humanly distinguish the classes.
Run python train.py --task seg --load_checkpoint best_model to train the model, and python eval_seg.py --load_checkpoint best_model for evaluation
All results in this section are from using the best model with 10000 points.
ID | GT segmentation | Predicted Segmentation | Match Ratio |
---|---|---|---|
48 | 0.9912 | ||
99 | 0.9611 | ||
215 | 0.9913 | ||
282 | 0.9591 |
ID | GT segmentation | Predicted Segmentation | Match Ratio |
---|---|---|---|
26 | 0.5454 | ||
255 | 0.5368 | ||
595 | 0.5262 | ||
605 | 0.5402 |
The segmentation algorithm seems to work well in most cases with a 90% accuracy. The failures (the points with the lowest per point classification match), seems to happen only for objects with ambiguous boundaries. In row 1, the head and seating sections are quite contiguous and the classes overextend without clear demarcations. Similarly, in row 2, the bottom section has no visual demarcation and the algorithm has a hard time distinguishing it from the seating area. For rows 3 and 4, similar effects are seen where the connecting area between the sides, seating and bottom sections are fluid and provides no visual cues for a clear demarcation, and hence have low matching scores.
I rotated the point cloud in steps of 30 degrees on the XY plane and ran classification and segmentation evaluation. The following are the accuracies:
python eval_cls.py --load_checkpoint best_model --num_points
Rotation Angle | sample GT visualization -idx 1 | Accuracy |
---|---|---|
0 | 0.972 | |
30 | 0.813 | |
60 | 0.278 | |
90 | 0.334 |
We see lower accuracy with increasing rotation angles. This shows the variation in the training data isn't good enough to handle such test time distribution shifts.
python eval_seg.py --load_checkpoint best_model --num_points
Rotation Angle | Accuracy |
---|---|
0 | 0.892 |
30 | 0.782 |
60 | 0.559 |
90 | 0.227 |
sample idx | Rotation Angle | sample GT visualization | Predicted Segmentation | Match Ratio |
---|---|---|---|---|
1 | 0 | 0.972 | ||
1 | 30 | 0.813 | ||
1 | 60 | 0.278 | ||
1 | 90 | 0.334 |
We see lower accuracy with increasing rotation angles. Areas with a large number of points are classified better than thin structures without much defining features. The whole segmentation accuracy breaks down for rotations more than 60 degrees. This maybe improved by adding augmentations in the training set.
I used the number of input points as the hyperparameter and ran classification and segmentation evaluation. The following are the accuracies:
python eval_cls.py --load_checkpoint best_model --rot_angle
Number of points | sample GT visualization - idx 1 | Accuracy |
---|---|---|
50 | 0.775 | |
200 | 0.949 | |
1000 | 0.972 | |
5000 | 0.976 | |
10000 | 0.982 |
We see lower accuracy for low number of points, which is expected. with 50 points, visual distinction of object class is difficult. As there are only 3 classes in the training set, the classifer still works considerably well for 200 points and above.
python eval_seg.py --load_checkpoint best_model --rot_angle
Number of Points | Accuracy |
---|---|
50 | 0.662 |
200 | 0.824 |
1000 | 0.892 |
5000 | 0.900 |
10000 | 0.901 |
sample idx | Number of Points | sample GT visualization | Predicted Segmentation | Match Ratio |
---|---|---|---|---|
1 | 50 | 0.84 | ||
1 | 200 | 0.975 | ||
1 | 1000 | 0.983 | ||
1 | 5000 | 0.983 | ||
1 | 10000 | 0.986 |
We see lower accuracy for very low number of points, which is expected. Overall the confidence is higher, with more available input points.
N/A