{
  "id": 117809,
  "title": "26th Place Solution Summary [0.078 Private LB]",
  "url": "/competitions/3d-object-detection-for-autonomous-vehicles/writeups/lost-in-translation-26th-place-solution-summary-0-",
  "author_name": "",
  "post_date": "2019-11-21T20:49:21.413Z",
  "votes": 12,
  "comment_count": 7,
  "views": 0,
  "content": "<h2>Congrats + Thanks</h2>\n\n<p>Congrats to all the winners!\nThanks to the competition hosts for a very interesting and challenging competition.\nBig thanks to <a href=\"/rishabhiitbhu\">@rishabhiitbhu</a> for all his sharing in the forums and kernels throughout the competition and everyone else who contributed their insights. </p>\n\n<h2>Model</h2>\n\n<p>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. </p>\n\n<h2>Configuration</h2>\n\n<p>|  Point Cloud Range | Voxel Size  | Max Num Points Per Voxel |\n|--|--|--|\n|  [-100, -100, -10, 100, 100, 10] |  [0.25, 0.25, 20] | 60</p>\n\n<h2>Validation</h2>\n\n<p>First 80% of data was used for training, last 20% was used for validation. Data was split by scene. </p>\n\n<h2>Training, Evaluation &amp; Test Set Predictions</h2>\n\n<p>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:</p>\n\n<p>| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 20 | ~18 | 0.049 | 0.066 | 0.065 |</p>\n\n<p>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. </p>\n\n<p>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:</p>\n\n<p>| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 19 | ~36 | 0.072 | 0.079 | 0.078 |</p>\n\n<h2>References</h2>\n\n<ol>\n<li>PointPillars: Fast Encoders for Object Detection from Point Clouds <a href=\"https://arxiv.org/pdf/1812.05784.pdf\">[paper]</a></li>\n<li>second.pytorch <a href=\"https://github.com/traveller59/second.pytorch\">[code]</a></li>\n<li>SECOND: Sparsely Embedded Convolutional Detection <a href=\"https://pdfs.semanticscholar.org/5125/a16039cabc6320c908a4764f32596e018ad3.pdf\">[paper]</a></li>\n<li>VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection <a href=\"https://arxiv.org/pdf/1711.06396.pdf\">[paper]</a></li>\n<li>Kitti dataset <a href=\"http://www.cvlibs.net/datasets/kitti/\">[data]</a></li>\n<li>NuScenes dataset <a href=\"https://www.nuscenes.org/\">[data]</a></li>\n<li>Spconv <a href=\"https://github.com/traveller59/spconv\">[code]</a></li>\n<li>Nutonomy’s fork of second.pytorch <a href=\"https://github.com/nutonomy/second.pytorch\">[code]</a></li>\n</ol>",
  "messages": [
    {
      "id": "675382",
      "postDate": "11/18/2019 02:35:41",
      "content": "<h2>Congrats + Thanks</h2>\n\n<p>Congrats to all the winners!\nThanks to the competition hosts for a very interesting and challenging competition.\nBig thanks to <a href=\"/rishabhiitbhu\">@rishabhiitbhu</a> for all his sharing in the forums and kernels throughout the competition and everyone else who contributed their insights. </p>\n\n<h2>Model</h2>\n\n<p>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. </p>\n\n<h2>Configuration</h2>\n\n<p>|  Point Cloud Range | Voxel Size  | Max Num Points Per Voxel |\n|--|--|--|\n|  [-100, -100, -10, 100, 100, 10] |  [0.25, 0.25, 20] | 60</p>\n\n<h2>Validation</h2>\n\n<p>First 80% of data was used for training, last 20% was used for validation. Data was split by scene. </p>\n\n<h2>Training, Evaluation &amp; Test Set Predictions</h2>\n\n<p>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:</p>\n\n<p>| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 20 | ~18 | 0.049 | 0.066 | 0.065 |</p>\n\n<p>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. </p>\n\n<p>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:</p>\n\n<p>| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 19 | ~36 | 0.072 | 0.079 | 0.078 |</p>\n\n<h2>References</h2>\n\n<ol>\n<li>PointPillars: Fast Encoders for Object Detection from Point Clouds <a href=\"https://arxiv.org/pdf/1812.05784.pdf\">[paper]</a></li>\n<li>second.pytorch <a href=\"https://github.com/traveller59/second.pytorch\">[code]</a></li>\n<li>SECOND: Sparsely Embedded Convolutional Detection <a href=\"https://pdfs.semanticscholar.org/5125/a16039cabc6320c908a4764f32596e018ad3.pdf\">[paper]</a></li>\n<li>VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection <a href=\"https://arxiv.org/pdf/1711.06396.pdf\">[paper]</a></li>\n<li>Kitti dataset <a href=\"http://www.cvlibs.net/datasets/kitti/\">[data]</a></li>\n<li>NuScenes dataset <a href=\"https://www.nuscenes.org/\">[data]</a></li>\n<li>Spconv <a href=\"https://github.com/traveller59/spconv\">[code]</a></li>\n<li>Nutonomy’s fork of second.pytorch <a href=\"https://github.com/nutonomy/second.pytorch\">[code]</a></li>\n</ol>",
      "rawMarkdown": "## Congrats + Thanks\n\nCongrats to all the winners!\nThanks to the competition hosts for a very interesting and challenging competition.\nBig thanks to @rishabhiitbhu for all his sharing in the forums and kernels throughout the competition and everyone else who contributed their insights. \n\n## Model\n\nThe 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. \n\n## Configuration\n|  Point Cloud Range | Voxel Size  | Max Num Points Per Voxel |\n|--|--|--|\n|  [-100, -100, -10, 100, 100, 10] |  [0.25, 0.25, 20] | 60\n\n## Validation\n\nFirst 80% of data was used for training, last 20% was used for validation. Data was split by scene. \n\n## Training, Evaluation &amp; Test Set Predictions\n\nOn 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:\n\n| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 20 | ~18 | 0.049 | 0.066 | 0.065 |\n\nOn 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. \n\nAfter 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:\n\n| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 19 | ~36 | 0.072 | 0.079 | 0.078 |\n\n## References\n1. PointPillars: Fast Encoders for Object Detection from Point Clouds [[paper]](https://arxiv.org/pdf/1812.05784.pdf)\n2. second.pytorch [[code]](https://github.com/traveller59/second.pytorch)\n3. SECOND: Sparsely Embedded Convolutional Detection [[paper]](https://pdfs.semanticscholar.org/5125/a16039cabc6320c908a4764f32596e018ad3.pdf)\n4. VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection [[paper]](https://arxiv.org/pdf/1711.06396.pdf)\n5. Kitti dataset [[data]](http://www.cvlibs.net/datasets/kitti/)\n6. NuScenes dataset [[data]](https://www.nuscenes.org/)\n7. Spconv [[code]](https://github.com/traveller59/spconv)\n8. Nutonomy’s fork of second.pytorch [[code]](https://github.com/nutonomy/second.pytorch)",
      "votes": null
    },
    {
      "id": "675440",
      "postDate": "11/18/2019 04:57:13",
      "content": "<p>Congratulations \nGreat Work\nThanks for Sharing your Insights <a href=\"/jackvial\">@jackvial</a> </p>",
      "rawMarkdown": "Congratulations \nGreat Work\nThanks for Sharing your Insights @jackvial",
      "votes": null
    },
    {
      "id": "675521",
      "postDate": "11/18/2019 07:11:10",
      "content": "<p>wow thanks for the writeup <a href=\"/jackvial\">@jackvial</a> !  So that's about 36 hours on a 1080?  Just curious, what was your batch size?  And is it a 1080 or 1080TI?</p>",
      "rawMarkdown": "wow thanks for the writeup @jackvial !  So that's about 36 hours on a 1080?  Just curious, what was your batch size?  And is it a 1080 or 1080TI?",
      "votes": null
    },
    {
      "id": "675753",
      "postDate": "11/18/2019 14:13:19",
      "content": "<p>Welcome and thank you. Batch size of 1 on a 1080 not 1080ti.</p>",
      "rawMarkdown": "Welcome and thank you. Batch size of 1 on a 1080 not 1080ti.",
      "votes": null
    },
    {
      "id": "675978",
      "postDate": "11/18/2019 20:57:16",
      "content": "<p>Thanks <a href=\"/veeralakrishna\">@veeralakrishna</a>!</p>",
      "rawMarkdown": "Thanks @veeralakrishna!",
      "votes": null
    },
    {
      "id": "678118",
      "postDate": "11/21/2019 02:09:42",
      "content": "<p>Congrats, I also tried SECOND near the end of the competition but failed.</p>",
      "rawMarkdown": "Congrats, I also tried SECOND near the end of the competition but failed.",
      "votes": null
    },
    {
      "id": "678146",
      "postDate": "11/21/2019 03:03:28",
      "content": "<p>Thanks! Still you finished with a silver medal, well done! </p>",
      "rawMarkdown": "Thanks! Still you finished with a silver medal, well done!",
      "votes": null
    },
    {
      "id": "678267",
      "postDate": "11/21/2019 07:04:47",
      "content": "<p>Thanks for the acknowledgement 🙂 and congratulations. 🎉</p>",
      "rawMarkdown": "Thanks for the acknowledgement 🙂 and congratulations. 🎉",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 675440,
      "author_name": "veeralakrishna",
      "author_url": "",
      "post_date": "11/18/2019 04:57:13",
      "content": "<p>Congratulations \nGreat Work\nThanks for Sharing your Insights <a href=\"/jackvial\">@jackvial</a> </p>",
      "votes": null,
      "replies": [
        {
          "id": 675978,
          "author_name": "jackvial",
          "author_url": "",
          "post_date": "11/18/2019 20:57:16",
          "content": "<p>Thanks <a href=\"/veeralakrishna\">@veeralakrishna</a>!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 675521,
      "author_name": "oarphme",
      "author_url": "",
      "post_date": "11/18/2019 07:11:10",
      "content": "<p>wow thanks for the writeup <a href=\"/jackvial\">@jackvial</a> !  So that's about 36 hours on a 1080?  Just curious, what was your batch size?  And is it a 1080 or 1080TI?</p>",
      "votes": null,
      "replies": [
        {
          "id": 675753,
          "author_name": "jackvial",
          "author_url": "",
          "post_date": "11/18/2019 14:13:19",
          "content": "<p>Welcome and thank you. Batch size of 1 on a 1080 not 1080ti.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 678118,
      "author_name": "usherbob",
      "author_url": "",
      "post_date": "11/21/2019 02:09:42",
      "content": "<p>Congrats, I also tried SECOND near the end of the competition but failed.</p>",
      "votes": null,
      "replies": [
        {
          "id": 678146,
          "author_name": "jackvial",
          "author_url": "",
          "post_date": "11/21/2019 03:03:28",
          "content": "<p>Thanks! Still you finished with a silver medal, well done! </p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 678267,
      "author_name": "rishabhiitbhu",
      "author_url": "",
      "post_date": "11/21/2019 07:04:47",
      "content": "<p>Thanks for the acknowledgement 🙂 and congratulations. 🎉</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "675382": "## Congrats + Thanks\n\nCongrats to all the winners!\nThanks to the competition hosts for a very interesting and challenging competition.\nBig thanks to @rishabhiitbhu for all his sharing in the forums and kernels throughout the competition and everyone else who contributed their insights. \n\n## Model\n\nThe 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. \n\n## Configuration\n|  Point Cloud Range | Voxel Size  | Max Num Points Per Voxel |\n|--|--|--|\n|  [-100, -100, -10, 100, 100, 10] |  [0.25, 0.25, 20] | 60\n\n## Validation\n\nFirst 80% of data was used for training, last 20% was used for validation. Data was split by scene. \n\n## Training, Evaluation &amp; Test Set Predictions\n\nOn 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:\n\n| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 20 | ~18 | 0.049 | 0.066 | 0.065 |\n\nOn 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. \n\nAfter 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:\n\n| GPU | Epochs | Train Time | Val mAP | Public LB mAP | Private LB mAP |\n|--|--|--|--|--|--|\n| GTX1080 | 19 | ~36 | 0.072 | 0.079 | 0.078 |\n\n## References\n1. PointPillars: Fast Encoders for Object Detection from Point Clouds [[paper]](https://arxiv.org/pdf/1812.05784.pdf)\n2. second.pytorch [[code]](https://github.com/traveller59/second.pytorch)\n3. SECOND: Sparsely Embedded Convolutional Detection [[paper]](https://pdfs.semanticscholar.org/5125/a16039cabc6320c908a4764f32596e018ad3.pdf)\n4. VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection [[paper]](https://arxiv.org/pdf/1711.06396.pdf)\n5. Kitti dataset [[data]](http://www.cvlibs.net/datasets/kitti/)\n6. NuScenes dataset [[data]](https://www.nuscenes.org/)\n7. Spconv [[code]](https://github.com/traveller59/spconv)\n8. Nutonomy’s fork of second.pytorch [[code]](https://github.com/nutonomy/second.pytorch)",
    "675440": "Congratulations \nGreat Work\nThanks for Sharing your Insights @jackvial",
    "675521": "wow thanks for the writeup @jackvial !  So that's about 36 hours on a 1080?  Just curious, what was your batch size?  And is it a 1080 or 1080TI?",
    "675753": "Welcome and thank you. Batch size of 1 on a 1080 not 1080ti.",
    "675978": "Thanks @veeralakrishna!",
    "678118": "Congrats, I also tried SECOND near the end of the competition but failed.",
    "678146": "Thanks! Still you finished with a silver medal, well done!",
    "678267": "Thanks for the acknowledgement 🙂 and congratulations. 🎉"
  },
  "source": "meta"
}