{
  "id": 430386,
  "title": "Public 12th / Private 26th Place Solution for the HuBMAP - Hacking the Human Vasculature Competition",
  "url": "/competitions/hubmap-hacking-the-human-vasculature/discussion/430386",
  "author_name": "YuYagi",
  "post_date": "2023-08-09T15:02:54.123000",
  "votes": 9,
  "comment_count": 0,
  "views": 0,
  "content": "<p>First of all, thank you very much for hosting this competition. We weren't able to win a gold medal, but participating in our first instance segmentation competition was a very educational experience.</p>\n<h2><strong>Context section</strong></h2>\n<ul>\n<li><strong>Business context</strong>: <a href=\"https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature\" target=\"_blank\">https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature</a></li>\n<li><strong>Data context</strong>: <a href=\"https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data\" target=\"_blank\">https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data</a></li>\n</ul>\n<h2><strong>Overview of the Approach</strong></h2>\n<p>Our model is an ensemble of Mask R-CNNs using Swin Transformer-S and Swin Transformer-T as backbones. </p>\n<h4>Our solution:</h4>\n<ul>\n<li><strong>Models:</strong><ul>\n<li>4 MMdet-based models, each trained on different folds (2 variations for each model):</li>\n<li>2x Mask R-CNN using Swin Transformer-S Backbone</li>\n<li>2x Mask R-CNN using Swin Transformer-T Backbone</li></ul></li>\n<li><strong>Training Method: 2-stage approach:</strong><ul>\n<li><strong>Stage 1 :</strong> Using dataset2 for initial training</li>\n<li><strong>Stage 2 :</strong> Using dataset1 to further train and fine-tune the models</li></ul></li>\n<li><strong>Ensemble Method:</strong><ul>\n<li><strong><a href=\"https://arxiv.org/pdf/1910.13302.pdf\" target=\"_blank\">Weighted Box Fusion(WBF)</a>:</strong> Applied to the Regions of Interest (ROI) for the final bounding boxes</li>\n<li><strong><a href=\"https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998\" target=\"_blank\">Weighted Masks Fusion(WMF)</a>:</strong> Applied to the final output for both bounding boxes and masks</li></ul></li>\n<li><strong>Test Time Augmentation</strong><br>\nBelow is an overview of our solution, as illustrated in the following diagram.<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F7135891%2F05b266ee749cc16baf27278421f93d1a%2Foverview_figure.svg?generation=1691593014306642&amp;alt=media\" alt=\"\"></li>\n</ul>\n<h2><strong>Details of the Submission</strong></h2>\n<h3><strong>Two-Stage Training</strong></h3>\n<p>The public leaderboard was composed of wsi3 and wsi4 (wsis included in the training data of dataset2), and the private leaderboard was composed of wsi5, not included in the training data. This setup meant that the public leaderboard might not necessarily be reliable.<br>\nBecause of this, it was necessary to build a validation method that could mimic the evaluation on the private leaderboard, and also to effectively utilize the wsi from dataset2 for training. Therefore, we adopted a CV strategy that divided the data by wsi and implemented a two-stage training process.</p>\n<h4>1st stage: Pretraining on dataset2</h4>\n<ul>\n<li>fold1:<ul>\n<li>train: wsi1, wsi3, wsi4(dataset2)</li>\n<li>validation: wsi2(dataset2)</li></ul></li>\n<li>fold2:<ul>\n<li>train: wsi2, wsi3, wsi4(dataset2)</li>\n<li>validation: wsi1(dataset2)</li></ul></li>\n</ul>\n<h4>2nd stage: Fine-tuning on dataset1</h4>\n<ul>\n<li>fold1:<ul>\n<li>train: wsi1(dataset1)</li>\n<li>validation: wsi2(dataset1)</li></ul></li>\n<li>fold2:<ul>\n<li>train: wsi2(dataset1)</li>\n<li>validation: wsi1(dataset1)</li></ul></li>\n</ul>\n<p>By evaluating with such CV splits, we were aided in judging whether the Public Leaderboard's score was reasonable or not.<br>\nHowever, the existence of unexpected cases was also confirmed.Within these CV splits, we optimized parameters such as mask probability thresholds and types of TTA with the intention of improving validation mAP, expecting an improvement on the private leaderboard. Contrary to our expectations, there were cases where these adjustments had an unexpected negative impact on both the Public Leaderboard and Private Leaderboard scores.</p>\n<h3><strong>Training Settings</strong></h3>\n<h4><strong>Model Training Configuration</strong></h4>\n<ul>\n<li>Our models were initialized using weights pretrained on the COCO dataset.</li>\n<li>Training was conducted with the AdamW optimizer.</li>\n<li>The learning rate was set at 0.0003 for Stage 1 (pretraining) and 0.00001 for Stage 2 (fine-tuning).</li>\n</ul>\n<h4><strong>Annotations in Training</strong></h4>\n<ul>\n<li>During the training step, annotations labeled as \"blood_vessel\" and \"unsure\" were both treated as \"blood_vessel.\"</li>\n<li>The \"glomerulus\" annotation was not used in our training step.</li>\n</ul>\n<h4><strong>Data Augmentation</strong></h4>\n<p>We adopted the following data augmentations:</p>\n<ul>\n<li>RGB Shift</li>\n<li>RandomBrightnessContrast(with brightness and contrast limits of 0.1 and 0.4, respectively)</li>\n<li>RandomRotate90</li>\n<li>RandomFlip</li>\n<li>RandomChoiceResize(with sizes ranging from 480 to 1200)</li>\n<li>RandomCrop</li>\n</ul>\n<h3><strong>Ensemble Methodology</strong></h3>\n<p>We adopted an ensemble method that integrates the Regions of Interest (ROI) output by the model through Weighted Box Fusion (WBF). The ensemble of ROIs was conducted only for the outputs within the same fold, and that employed the same Test Time Augmentation (TTA) methods (2 models each). Subsequently, we integrated all the output masks and boxes within the same fold using Weighted Mask Fusion (WMF). Finally, we ensembled the outputs for each fold through WMF.</p>\n<h3><strong>Test Time Augmentation</strong></h3>\n<p>We adopted Horizontal Flip and Vertical Flip as our Test Time Augmentation (TTA) techniques.</p>\n<h3><strong>Postprocessing</strong></h3>\n<p>Masks that overlapped with glomerulus by more than 90% were removed.</p>\n<h3><strong>What Didn't Work</strong></h3>\n<ul>\n<li><strong>Sliding Window</strong>: We initially tried a sliding window technique but found it ineffective.</li>\n<li><strong>Using Context from Neighbor Tile</strong>: This approach did not bring the desired results.</li>\n<li><strong>Rotate TTA</strong>: Using rotation in multiples of 90 degrees increased validation mAP but did not improve the leaderboard score.</li>\n</ul>\n<h2><strong>Sources</strong></h2>\n<ul>\n<li><a href=\"https://arxiv.org/pdf/1910.13302.pdf\" target=\"_blank\">https://arxiv.org/pdf/1910.13302.pdf</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998\" target=\"_blank\">https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998</a></li>\n</ul>",
  "messages": [
    {
      "id": 2382072,
      "postDate": "2023-08-09T15:02:54.123Z",
      "content": "<p>First of all, thank you very much for hosting this competition. We weren't able to win a gold medal, but participating in our first instance segmentation competition was a very educational experience.</p>\n<h2><strong>Context section</strong></h2>\n<ul>\n<li><strong>Business context</strong>: <a href=\"https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature\" target=\"_blank\">https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature</a></li>\n<li><strong>Data context</strong>: <a href=\"https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data\" target=\"_blank\">https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data</a></li>\n</ul>\n<h2><strong>Overview of the Approach</strong></h2>\n<p>Our model is an ensemble of Mask R-CNNs using Swin Transformer-S and Swin Transformer-T as backbones. </p>\n<h4>Our solution:</h4>\n<ul>\n<li><strong>Models:</strong><ul>\n<li>4 MMdet-based models, each trained on different folds (2 variations for each model):</li>\n<li>2x Mask R-CNN using Swin Transformer-S Backbone</li>\n<li>2x Mask R-CNN using Swin Transformer-T Backbone</li></ul></li>\n<li><strong>Training Method: 2-stage approach:</strong><ul>\n<li><strong>Stage 1 :</strong> Using dataset2 for initial training</li>\n<li><strong>Stage 2 :</strong> Using dataset1 to further train and fine-tune the models</li></ul></li>\n<li><strong>Ensemble Method:</strong><ul>\n<li><strong><a href=\"https://arxiv.org/pdf/1910.13302.pdf\" target=\"_blank\">Weighted Box Fusion(WBF)</a>:</strong> Applied to the Regions of Interest (ROI) for the final bounding boxes</li>\n<li><strong><a href=\"https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998\" target=\"_blank\">Weighted Masks Fusion(WMF)</a>:</strong> Applied to the final output for both bounding boxes and masks</li></ul></li>\n<li><strong>Test Time Augmentation</strong><br>\nBelow is an overview of our solution, as illustrated in the following diagram.<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F7135891%2F05b266ee749cc16baf27278421f93d1a%2Foverview_figure.svg?generation=1691593014306642&amp;alt=media\" alt=\"\"></li>\n</ul>\n<h2><strong>Details of the Submission</strong></h2>\n<h3><strong>Two-Stage Training</strong></h3>\n<p>The public leaderboard was composed of wsi3 and wsi4 (wsis included in the training data of dataset2), and the private leaderboard was composed of wsi5, not included in the training data. This setup meant that the public leaderboard might not necessarily be reliable.<br>\nBecause of this, it was necessary to build a validation method that could mimic the evaluation on the private leaderboard, and also to effectively utilize the wsi from dataset2 for training. Therefore, we adopted a CV strategy that divided the data by wsi and implemented a two-stage training process.</p>\n<h4>1st stage: Pretraining on dataset2</h4>\n<ul>\n<li>fold1:<ul>\n<li>train: wsi1, wsi3, wsi4(dataset2)</li>\n<li>validation: wsi2(dataset2)</li></ul></li>\n<li>fold2:<ul>\n<li>train: wsi2, wsi3, wsi4(dataset2)</li>\n<li>validation: wsi1(dataset2)</li></ul></li>\n</ul>\n<h4>2nd stage: Fine-tuning on dataset1</h4>\n<ul>\n<li>fold1:<ul>\n<li>train: wsi1(dataset1)</li>\n<li>validation: wsi2(dataset1)</li></ul></li>\n<li>fold2:<ul>\n<li>train: wsi2(dataset1)</li>\n<li>validation: wsi1(dataset1)</li></ul></li>\n</ul>\n<p>By evaluating with such CV splits, we were aided in judging whether the Public Leaderboard's score was reasonable or not.<br>\nHowever, the existence of unexpected cases was also confirmed.Within these CV splits, we optimized parameters such as mask probability thresholds and types of TTA with the intention of improving validation mAP, expecting an improvement on the private leaderboard. Contrary to our expectations, there were cases where these adjustments had an unexpected negative impact on both the Public Leaderboard and Private Leaderboard scores.</p>\n<h3><strong>Training Settings</strong></h3>\n<h4><strong>Model Training Configuration</strong></h4>\n<ul>\n<li>Our models were initialized using weights pretrained on the COCO dataset.</li>\n<li>Training was conducted with the AdamW optimizer.</li>\n<li>The learning rate was set at 0.0003 for Stage 1 (pretraining) and 0.00001 for Stage 2 (fine-tuning).</li>\n</ul>\n<h4><strong>Annotations in Training</strong></h4>\n<ul>\n<li>During the training step, annotations labeled as \"blood_vessel\" and \"unsure\" were both treated as \"blood_vessel.\"</li>\n<li>The \"glomerulus\" annotation was not used in our training step.</li>\n</ul>\n<h4><strong>Data Augmentation</strong></h4>\n<p>We adopted the following data augmentations:</p>\n<ul>\n<li>RGB Shift</li>\n<li>RandomBrightnessContrast(with brightness and contrast limits of 0.1 and 0.4, respectively)</li>\n<li>RandomRotate90</li>\n<li>RandomFlip</li>\n<li>RandomChoiceResize(with sizes ranging from 480 to 1200)</li>\n<li>RandomCrop</li>\n</ul>\n<h3><strong>Ensemble Methodology</strong></h3>\n<p>We adopted an ensemble method that integrates the Regions of Interest (ROI) output by the model through Weighted Box Fusion (WBF). The ensemble of ROIs was conducted only for the outputs within the same fold, and that employed the same Test Time Augmentation (TTA) methods (2 models each). Subsequently, we integrated all the output masks and boxes within the same fold using Weighted Mask Fusion (WMF). Finally, we ensembled the outputs for each fold through WMF.</p>\n<h3><strong>Test Time Augmentation</strong></h3>\n<p>We adopted Horizontal Flip and Vertical Flip as our Test Time Augmentation (TTA) techniques.</p>\n<h3><strong>Postprocessing</strong></h3>\n<p>Masks that overlapped with glomerulus by more than 90% were removed.</p>\n<h3><strong>What Didn't Work</strong></h3>\n<ul>\n<li><strong>Sliding Window</strong>: We initially tried a sliding window technique but found it ineffective.</li>\n<li><strong>Using Context from Neighbor Tile</strong>: This approach did not bring the desired results.</li>\n<li><strong>Rotate TTA</strong>: Using rotation in multiples of 90 degrees increased validation mAP but did not improve the leaderboard score.</li>\n</ul>\n<h2><strong>Sources</strong></h2>\n<ul>\n<li><a href=\"https://arxiv.org/pdf/1910.13302.pdf\" target=\"_blank\">https://arxiv.org/pdf/1910.13302.pdf</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998\" target=\"_blank\">https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998</a></li>\n</ul>",
      "rawMarkdown": "\nFirst of all, thank you very much for hosting this competition. We weren't able to win a gold medal, but participating in our first instance segmentation competition was a very educational experience.\n\n## **Context section**\n\n- **Business context**: https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature\n- **Data context**: https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data\n\n## **Overview of the Approach**\n\nOur model is an ensemble of Mask R-CNNs using Swin Transformer-S and Swin Transformer-T as backbones. \n\n#### Our solution:\n- **Models:**\n  - 4 MMdet-based models, each trained on different folds (2 variations for each model):\n    - 2x Mask R-CNN using Swin Transformer-S Backbone\n    - 2x Mask R-CNN using Swin Transformer-T Backbone\n- **Training Method: 2-stage approach:**\n  - **Stage 1 :** Using dataset2 for initial training\n  - **Stage 2 :** Using dataset1 to further train and fine-tune the models\n- **Ensemble Method:**\n  - **[Weighted Box Fusion(WBF)](https://arxiv.org/pdf/1910.13302.pdf):** Applied to the Regions of Interest (ROI) for the final bounding boxes\n  - **[Weighted Masks Fusion(WMF)](https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998):** Applied to the final output for both bounding boxes and masks\n- **Test Time Augmentation**\n\n\nBelow is an overview of our solution, as illustrated in the following diagram.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F7135891%2F05b266ee749cc16baf27278421f93d1a%2Foverview_figure.svg?generation=1691593014306642&alt=media)\n## **Details of the Submission**\n### **Two-Stage Training**\nThe public leaderboard was composed of wsi3 and wsi4 (wsis included in the training data of dataset2), and the private leaderboard was composed of wsi5, not included in the training data. This setup meant that the public leaderboard might not necessarily be reliable.\nBecause of this, it was necessary to build a validation method that could mimic the evaluation on the private leaderboard, and also to effectively utilize the wsi from dataset2 for training. Therefore, we adopted a CV strategy that divided the data by wsi and implemented a two-stage training process.\n#### 1st stage: Pretraining on dataset2\n- fold1:\n    - train: wsi1, wsi3, wsi4(dataset2)\n    - validation: wsi2(dataset2)\n- fold2:\n    - train: wsi2, wsi3, wsi4(dataset2)\n    - validation: wsi1(dataset2)\n\n#### 2nd stage: Fine-tuning on dataset1\n- fold1:\n    - train: wsi1(dataset1)\n    - validation: wsi2(dataset1)\n- fold2:\n    - train: wsi2(dataset1)\n    - validation: wsi1(dataset1)\n  \nBy evaluating with such CV splits, we were aided in judging whether the Public Leaderboard's score was reasonable or not.\nHowever, the existence of unexpected cases was also confirmed.Within these CV splits, we optimized parameters such as mask probability thresholds and types of TTA with the intention of improving validation mAP, expecting an improvement on the private leaderboard. Contrary to our expectations, there were cases where these adjustments had an unexpected negative impact on both the Public Leaderboard and Private Leaderboard scores.\n\n### **Training Settings**\n#### **Model Training Configuration**\n- Our models were initialized using weights pretrained on the COCO dataset.\n- Training was conducted with the AdamW optimizer.\n- The learning rate was set at 0.0003 for Stage 1 (pretraining) and 0.00001 for Stage 2 (fine-tuning).\n#### **Annotations in Training**\n- During the training step, annotations labeled as \"blood_vessel\" and \"unsure\" were both treated as \"blood_vessel.\"\n- The \"glomerulus\" annotation was not used in our training step.\n#### **Data Augmentation**\nWe adopted the following data augmentations:\n- RGB Shift\n- RandomBrightnessContrast(with brightness and contrast limits of 0.1 and 0.4, respectively)\n- RandomRotate90\n- RandomFlip\n- RandomChoiceResize(with sizes ranging from 480 to 1200)\n- RandomCrop\n### **Ensemble Methodology**\n We adopted an ensemble method that integrates the Regions of Interest (ROI) output by the model through Weighted Box Fusion (WBF). The ensemble of ROIs was conducted only for the outputs within the same fold, and that employed the same Test Time Augmentation (TTA) methods (2 models each). Subsequently, we integrated all the output masks and boxes within the same fold using Weighted Mask Fusion (WMF). Finally, we ensembled the outputs for each fold through WMF.\n\n### **Test Time Augmentation**\nWe adopted Horizontal Flip and Vertical Flip as our Test Time Augmentation (TTA) techniques.\n\n### **Postprocessing**\nMasks that overlapped with glomerulus by more than 90% were removed.\n\n### **What Didn't Work**\n- **Sliding Window**: We initially tried a sliding window technique but found it ineffective.\n- **Using Context from Neighbor Tile**: This approach did not bring the desired results.\n- **Rotate TTA**: Using rotation in multiples of 90 degrees increased validation mAP but did not improve the leaderboard score.\n\n## **Sources**\n- https://arxiv.org/pdf/1910.13302.pdf\n- https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998",
      "votes": 8
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "2382072": "\nFirst of all, thank you very much for hosting this competition. We weren't able to win a gold medal, but participating in our first instance segmentation competition was a very educational experience.\n\n## **Context section**\n\n- **Business context**: https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature\n- **Data context**: https://www.kaggle.com/competitions/hubmap-hacking-the-human-vasculature/data\n\n## **Overview of the Approach**\n\nOur model is an ensemble of Mask R-CNNs using Swin Transformer-S and Swin Transformer-T as backbones. \n\n#### Our solution:\n- **Models:**\n  - 4 MMdet-based models, each trained on different folds (2 variations for each model):\n    - 2x Mask R-CNN using Swin Transformer-S Backbone\n    - 2x Mask R-CNN using Swin Transformer-T Backbone\n- **Training Method: 2-stage approach:**\n  - **Stage 1 :** Using dataset2 for initial training\n  - **Stage 2 :** Using dataset1 to further train and fine-tune the models\n- **Ensemble Method:**\n  - **[Weighted Box Fusion(WBF)](https://arxiv.org/pdf/1910.13302.pdf):** Applied to the Regions of Interest (ROI) for the final bounding boxes\n  - **[Weighted Masks Fusion(WMF)](https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998):** Applied to the final output for both bounding boxes and masks\n- **Test Time Augmentation**\n\n\nBelow is an overview of our solution, as illustrated in the following diagram.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F7135891%2F05b266ee749cc16baf27278421f93d1a%2Foverview_figure.svg?generation=1691593014306642&alt=media)\n## **Details of the Submission**\n### **Two-Stage Training**\nThe public leaderboard was composed of wsi3 and wsi4 (wsis included in the training data of dataset2), and the private leaderboard was composed of wsi5, not included in the training data. This setup meant that the public leaderboard might not necessarily be reliable.\nBecause of this, it was necessary to build a validation method that could mimic the evaluation on the private leaderboard, and also to effectively utilize the wsi from dataset2 for training. Therefore, we adopted a CV strategy that divided the data by wsi and implemented a two-stage training process.\n#### 1st stage: Pretraining on dataset2\n- fold1:\n    - train: wsi1, wsi3, wsi4(dataset2)\n    - validation: wsi2(dataset2)\n- fold2:\n    - train: wsi2, wsi3, wsi4(dataset2)\n    - validation: wsi1(dataset2)\n\n#### 2nd stage: Fine-tuning on dataset1\n- fold1:\n    - train: wsi1(dataset1)\n    - validation: wsi2(dataset1)\n- fold2:\n    - train: wsi2(dataset1)\n    - validation: wsi1(dataset1)\n  \nBy evaluating with such CV splits, we were aided in judging whether the Public Leaderboard's score was reasonable or not.\nHowever, the existence of unexpected cases was also confirmed.Within these CV splits, we optimized parameters such as mask probability thresholds and types of TTA with the intention of improving validation mAP, expecting an improvement on the private leaderboard. Contrary to our expectations, there were cases where these adjustments had an unexpected negative impact on both the Public Leaderboard and Private Leaderboard scores.\n\n### **Training Settings**\n#### **Model Training Configuration**\n- Our models were initialized using weights pretrained on the COCO dataset.\n- Training was conducted with the AdamW optimizer.\n- The learning rate was set at 0.0003 for Stage 1 (pretraining) and 0.00001 for Stage 2 (fine-tuning).\n#### **Annotations in Training**\n- During the training step, annotations labeled as \"blood_vessel\" and \"unsure\" were both treated as \"blood_vessel.\"\n- The \"glomerulus\" annotation was not used in our training step.\n#### **Data Augmentation**\nWe adopted the following data augmentations:\n- RGB Shift\n- RandomBrightnessContrast(with brightness and contrast limits of 0.1 and 0.4, respectively)\n- RandomRotate90\n- RandomFlip\n- RandomChoiceResize(with sizes ranging from 480 to 1200)\n- RandomCrop\n### **Ensemble Methodology**\n We adopted an ensemble method that integrates the Regions of Interest (ROI) output by the model through Weighted Box Fusion (WBF). The ensemble of ROIs was conducted only for the outputs within the same fold, and that employed the same Test Time Augmentation (TTA) methods (2 models each). Subsequently, we integrated all the output masks and boxes within the same fold using Weighted Mask Fusion (WMF). Finally, we ensembled the outputs for each fold through WMF.\n\n### **Test Time Augmentation**\nWe adopted Horizontal Flip and Vertical Flip as our Test Time Augmentation (TTA) techniques.\n\n### **Postprocessing**\nMasks that overlapped with glomerulus by more than 90% were removed.\n\n### **What Didn't Work**\n- **Sliding Window**: We initially tried a sliding window technique but found it ineffective.\n- **Using Context from Neighbor Tile**: This approach did not bring the desired results.\n- **Rotate TTA**: Using rotation in multiples of 90 degrees increased validation mAP but did not improve the leaderboard score.\n\n## **Sources**\n- https://arxiv.org/pdf/1910.13302.pdf\n- https://www.kaggle.com/competitions/sartorius-cell-instance-segmentation/discussion/297998"
  }
}