# 26th Place Solution Summary [0.078 Private LB]

Congrats + Thanks
Congrats to all the winners!
Thanks to the competition hosts for a very interesting and challenging competition.
Big thanks to
[@rishabhiitbhu](/rishabhiitbhu)
for all his sharing in the forums and kernels throughout the competition and everyone else who contributed their insights.
Model
The model was based on the PointPillars [1] implementation from second.pytorch [2]. This repo contains SECOND [3], VoxelNet [4], and PointPillars implementations and supports Kitti [5] and NuScenes [6] data formats. Most of my time was spent updating the code to work with the Lyft dataset and removing the Spconv [7] dependency used by SECOND architecture which kept causing errors while trying to compile it. Many of the changes to remove the Spconv dependency were taken from Nutomoy’s fork [8] of second.pytorch but this fork does not support the NuScenes format.
Configuration
|  Point Cloud Range | Voxel Size  | Max Num Points Per Voxel |
|--|--|--|
|  [-100, -100, -10, 100, 100, 10] |  [0.25, 0.25, 20] | 60
Validation
First 80% of data was used for training, last 20% was used for validation. Data was split by scene.
Training, Evaluation & Test Set Predictions
On Saturday 9th before the competition end I was able to make my first submission using Point Pillars model. This first attempt got the following results:
| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |
|--|--|--|--|--|--|
| GTX1080 | 20 | ~18 | 0.049 | 0.066 | 0.065 |
On analyzing predictions from both eval set and test set I noticed there were no predictions outside of +-50 meters along X and Y. The reason for this was the point cloud range was set to [-50, -50, -10, 50, 50, 10], many of the object anchor ranges were set to the same range or less, there was also some post processing that filter out any detections outside of 50 meters from the center of the point cloud. These were defaults used for working with NuScenes and not well suited for the Lyft dataset.
After extending the point cloud range to [-100, -100, -10, 100, 100, 10] , extending the object anchor ranges, increasing the post processing detection filtering radius to 100 meters, and  retraining I got the following results:
| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |
|--|--|--|--|--|--|
| GTX1080 | 19 | ~36 | 0.072 | 0.079 | 0.078 |
References
PointPillars: Fast Encoders for Object Detection from Point Clouds
[[paper]](assets/8a55d01d95f7266c218881b8.pdf)
second.pytorch
[[code]](https://github.com/traveller59/second.pytorch)
SECOND: Sparsely Embedded Convolutional Detection
[[paper]](assets/0773eafc095cae6b2b77b2d3.pdf)
VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
[[paper]](assets/32f224031207c6d7d5a04342.pdf)
Kitti dataset
[[data]](http://www.cvlibs.net/datasets/kitti/)
NuScenes dataset
[[data]](https://www.nuscenes.org/)
Spconv
[[code]](https://github.com/traveller59/spconv)
Nutonomy’s fork of second.pytorch
[[code]](https://github.com/nutonomy/second.pytorch)