{
  "id": 240025,
  "title": "[2nd] place solution (for the C in MYRCJ)",
  "url": "/competitions/indoor-location-navigation/discussion/240025",
  "author_name": "",
  "post_date": "2021-05-18T10:35:58.599909100Z",
  "votes": 17,
  "comment_count": 4,
  "views": 0,
  "content": "<p>Thank you everyone for a great competition, and I am very happy to reach the 2nd place in my first Kaggle competition together with a great team!</p>\n<p>I will provide an overview of my original solution and some code which was then incorporated into the MYRCJ team submission. The main parts of my work used in the final team submission were the prediction of relative position and the postprocessing strategy.</p>\n<p><strong>1. Absolute position and floor estimation</strong><br>\nIn this part I trained a single custom NN (one for each building with identical settings) for floor estimation and positioning where each one is split in two MLPs, one for positioning and one for floor classification. The input is a single measurement of RSSI, and the models are trained by using augmentations and other common NN techniques. It was trained on improved positions for RSSI measurements by interpolating between waypoints. The team had at least three independent identical floor classification results, of which mine was one. My floor prediction MLP is based on ordinal regression similar to what is proposed here: <a href=\"https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/\" target=\"_blank\">https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/</a>. A single positioning MLP with this approach resulted in public LB 6.71 and CV 7.84.</p>\n<p><strong>2. Delta position estimation</strong><br>\nFor this task I implemented a many-to-one LSTM which by using a sliding window on IMU sequences of arbitrary length predicts the displacement between two waypoints. The input used was the orientation (3d array based on TYPE_ROTATION_VECTOR) and accelerometer. I have uploaded a general model definition and training function in <a href=\"https://github.com/ckjellson/MTO_SW_LSTM\" target=\"_blank\">https://github.com/ckjellson/MTO_SW_LSTM</a>. A single version of this model resulted in a mean delta positioning error of 1.83 m on tracks in our validation dataset for which the PDR code results in a mean error of 2.55 m.</p>\n<p><strong>3. Postprocessing</strong><br>\nMy postprocessing was based on iterating between moving points into the corridor geometry and cost minimization. This was originally done for 50 iterations, and after this using the snap-to-grid once to get the final result.</p>\n<p>These three steps resulted in my original public LB 3.256, but some steps were improved later for use in the team ensemble. <a href=\"https://www.kaggle.com/mamasinkgs\" target=\"_blank\">@mamasinkgs</a> will publish the complete approach.</p>\n<p>Thanks for great kernels:<br>\n<a href=\"https://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing\" target=\"_blank\">https://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing</a> by <a href=\"https://www.kaggle.com/robikscube\" target=\"_blank\">@robikscube</a><br>\n<a href=\"https://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization\" target=\"_blank\">https://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization</a> by <a href=\"https://www.kaggle.com/saitodevel01\" target=\"_blank\">@saitodevel01</a><br>\n<a href=\"https://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset\" target=\"_blank\">https://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset</a> by <a href=\"https://www.kaggle.com/rafaelcartenet\" target=\"_blank\">@rafaelcartenet</a></p>",
  "messages": [
    {
      "id": "1312945",
      "postDate": "05/18/2021 10:35:58",
      "content": "<p>Thank you everyone for a great competition, and I am very happy to reach the 2nd place in my first Kaggle competition together with a great team!</p>\n<p>I will provide an overview of my original solution and some code which was then incorporated into the MYRCJ team submission. The main parts of my work used in the final team submission were the prediction of relative position and the postprocessing strategy.</p>\n<p><strong>1. Absolute position and floor estimation</strong><br>\nIn this part I trained a single custom NN (one for each building with identical settings) for floor estimation and positioning where each one is split in two MLPs, one for positioning and one for floor classification. The input is a single measurement of RSSI, and the models are trained by using augmentations and other common NN techniques. It was trained on improved positions for RSSI measurements by interpolating between waypoints. The team had at least three independent identical floor classification results, of which mine was one. My floor prediction MLP is based on ordinal regression similar to what is proposed here: <a href=\"https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/\" target=\"_blank\">https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/</a>. A single positioning MLP with this approach resulted in public LB 6.71 and CV 7.84.</p>\n<p><strong>2. Delta position estimation</strong><br>\nFor this task I implemented a many-to-one LSTM which by using a sliding window on IMU sequences of arbitrary length predicts the displacement between two waypoints. The input used was the orientation (3d array based on TYPE_ROTATION_VECTOR) and accelerometer. I have uploaded a general model definition and training function in <a href=\"https://github.com/ckjellson/MTO_SW_LSTM\" target=\"_blank\">https://github.com/ckjellson/MTO_SW_LSTM</a>. A single version of this model resulted in a mean delta positioning error of 1.83 m on tracks in our validation dataset for which the PDR code results in a mean error of 2.55 m.</p>\n<p><strong>3. Postprocessing</strong><br>\nMy postprocessing was based on iterating between moving points into the corridor geometry and cost minimization. This was originally done for 50 iterations, and after this using the snap-to-grid once to get the final result.</p>\n<p>These three steps resulted in my original public LB 3.256, but some steps were improved later for use in the team ensemble. <a href=\"https://www.kaggle.com/mamasinkgs\" target=\"_blank\">@mamasinkgs</a> will publish the complete approach.</p>\n<p>Thanks for great kernels:<br>\n<a href=\"https://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing\" target=\"_blank\">https://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing</a> by <a href=\"https://www.kaggle.com/robikscube\" target=\"_blank\">@robikscube</a><br>\n<a href=\"https://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization\" target=\"_blank\">https://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization</a> by <a href=\"https://www.kaggle.com/saitodevel01\" target=\"_blank\">@saitodevel01</a><br>\n<a href=\"https://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset\" target=\"_blank\">https://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset</a> by <a href=\"https://www.kaggle.com/rafaelcartenet\" target=\"_blank\">@rafaelcartenet</a></p>",
      "rawMarkdown": "Thank you everyone for a great competition, and I am very happy to reach the 2nd place in my first Kaggle competition together with a great team!\n\nI will provide an overview of my original solution and some code which was then incorporated into the MYRCJ team submission. The main parts of my work used in the final team submission were the prediction of relative position and the postprocessing strategy.\n\n**1. Absolute position and floor estimation**\nIn this part I trained a single custom NN (one for each building with identical settings) for floor estimation and positioning where each one is split in two MLPs, one for positioning and one for floor classification. The input is a single measurement of RSSI, and the models are trained by using augmentations and other common NN techniques. It was trained on improved positions for RSSI measurements by interpolating between waypoints. The team had at least three independent identical floor classification results, of which mine was one. My floor prediction MLP is based on ordinal regression similar to what is proposed here: https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/. A single positioning MLP with this approach resulted in public LB 6.71 and CV 7.84.\n\n**2. Delta position estimation**\nFor this task I implemented a many-to-one LSTM which by using a sliding window on IMU sequences of arbitrary length predicts the displacement between two waypoints. The input used was the orientation (3d array based on TYPE_ROTATION_VECTOR) and accelerometer. I have uploaded a general model definition and training function in https://github.com/ckjellson/MTO_SW_LSTM. A single version of this model resulted in a mean delta positioning error of 1.83 m on tracks in our validation dataset for which the PDR code results in a mean error of 2.55 m.\n\n**3. Postprocessing**\nMy postprocessing was based on iterating between moving points into the corridor geometry and cost minimization. This was originally done for 50 iterations, and after this using the snap-to-grid once to get the final result.\n\nThese three steps resulted in my original public LB 3.256, but some steps were improved later for use in the team ensemble. @mamasinkgs will publish the complete approach.\n\nThanks for great kernels:\nhttps://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing by @robikscube\nhttps://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization by @saitodevel01\nhttps://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset by @rafaelcartenet",
      "votes": null
    },
    {
      "id": "1314144",
      "postDate": "05/19/2021 01:35:31",
      "content": "<p>Great solution and awesome results! I'm reading up the link you shared about ordinal regression and learning a lot. I'm sure it could be applicable in many situations.</p>",
      "rawMarkdown": "Great solution and awesome results! I'm reading up the link you shared about ordinal regression and learning a lot. I'm sure it could be applicable in many situations.",
      "votes": null
    },
    {
      "id": "1314375",
      "postDate": "05/19/2021 06:18:09",
      "content": "<p>Thank you! Yes, it was new to me as well, I think it was very useful here and also quite elegant.</p>",
      "rawMarkdown": "Thank you! Yes, it was new to me as well, I think it was very useful here and also quite elegant.",
      "votes": null
    },
    {
      "id": "1314903",
      "postDate": "05/19/2021 12:45:17",
      "content": "<p>Thanks Christoffer, your contribution to the team was really big and I couldn't believe it is your first competition! </p>",
      "rawMarkdown": "Thanks Christoffer, your contribution to the team was really big and I couldn't believe it is your first competition!",
      "votes": null
    },
    {
      "id": "1314995",
      "postDate": "05/19/2021 13:40:30",
      "content": "<p>Well I had a lot of time to dedicate to the problem, so it is not that unbelievable 😉 And I will tell you again that we would not be nearly as good without mamas amazing work!</p>",
      "rawMarkdown": "Well I had a lot of time to dedicate to the problem, so it is not that unbelievable 😉 And I will tell you again that we would not be nearly as good without mamas amazing work!",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1314144,
      "author_name": "robikscube",
      "author_url": "",
      "post_date": "05/19/2021 01:35:31",
      "content": "<p>Great solution and awesome results! I'm reading up the link you shared about ordinal regression and learning a lot. I'm sure it could be applicable in many situations.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1314375,
          "author_name": "demonen",
          "author_url": "",
          "post_date": "05/19/2021 06:18:09",
          "content": "<p>Thank you! Yes, it was new to me as well, I think it was very useful here and also quite elegant.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1314903,
      "author_name": "mamasinkgs",
      "author_url": "",
      "post_date": "05/19/2021 12:45:17",
      "content": "<p>Thanks Christoffer, your contribution to the team was really big and I couldn't believe it is your first competition! </p>",
      "votes": null,
      "replies": [
        {
          "id": 1314995,
          "author_name": "demonen",
          "author_url": "",
          "post_date": "05/19/2021 13:40:30",
          "content": "<p>Well I had a lot of time to dedicate to the problem, so it is not that unbelievable 😉 And I will tell you again that we would not be nearly as good without mamas amazing work!</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "1312945": "Thank you everyone for a great competition, and I am very happy to reach the 2nd place in my first Kaggle competition together with a great team!\n\nI will provide an overview of my original solution and some code which was then incorporated into the MYRCJ team submission. The main parts of my work used in the final team submission were the prediction of relative position and the postprocessing strategy.\n\n**1. Absolute position and floor estimation**\nIn this part I trained a single custom NN (one for each building with identical settings) for floor estimation and positioning where each one is split in two MLPs, one for positioning and one for floor classification. The input is a single measurement of RSSI, and the models are trained by using augmentations and other common NN techniques. It was trained on improved positions for RSSI measurements by interpolating between waypoints. The team had at least three independent identical floor classification results, of which mine was one. My floor prediction MLP is based on ordinal regression similar to what is proposed here: https://www.ethanrosenthal.com/2018/12/06/spacecutter-ordinal-regression/. A single positioning MLP with this approach resulted in public LB 6.71 and CV 7.84.\n\n**2. Delta position estimation**\nFor this task I implemented a many-to-one LSTM which by using a sliding window on IMU sequences of arbitrary length predicts the displacement between two waypoints. The input used was the orientation (3d array based on TYPE_ROTATION_VECTOR) and accelerometer. I have uploaded a general model definition and training function in https://github.com/ckjellson/MTO_SW_LSTM. A single version of this model resulted in a mean delta positioning error of 1.83 m on tracks in our validation dataset for which the PDR code results in a mean error of 2.55 m.\n\n**3. Postprocessing**\nMy postprocessing was based on iterating between moving points into the corridor geometry and cost minimization. This was originally done for 50 iterations, and after this using the snap-to-grid once to get the final result.\n\nThese three steps resulted in my original public LB 3.256, but some steps were improved later for use in the team ensemble. @mamasinkgs will publish the complete approach.\n\nThanks for great kernels:\nhttps://www.kaggle.com/robikscube/indoor-navigation-snap-to-grid-post-processing by @robikscube\nhttps://www.kaggle.com/saitodevel01/indoor-post-processing-by-cost-minimization by @saitodevel01\nhttps://www.kaggle.com/rafaelcartenet/scaled-floors-geojsons-new-dataset by @rafaelcartenet",
    "1314144": "Great solution and awesome results! I'm reading up the link you shared about ordinal regression and learning a lot. I'm sure it could be applicable in many situations.",
    "1314375": "Thank you! Yes, it was new to me as well, I think it was very useful here and also quite elegant.",
    "1314903": "Thanks Christoffer, your contribution to the team was really big and I couldn't believe it is your first competition!",
    "1314995": "Well I had a lot of time to dedicate to the problem, so it is not that unbelievable 😉 And I will tell you again that we would not be nearly as good without mamas amazing work!"
  },
  "source": "meta"
}