{
  "id": 475100,
  "title": "8th place solution. Won the first gold medal after five years.",
  "url": "/competitions/blood-vessel-segmentation/discussion/475100",
  "author_name": "",
  "post_date": "2024-02-07T04:25:19.520785200Z",
  "votes": 12,
  "comment_count": 1,
  "views": 0,
  "content": "<p>First of all, we would like to thank the Kaggle organizer team. Special thanks to <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> for providing powerful experience sharing throughout the competition.</p>\n<h1>1. overview</h1>\n<p>Data processing: we used normalizing images of a batch based on percentiles. The final submitted training model is an ensemble of five models. Their backbones are convnext-small, convnextv2-tiny, coat-small, efficientvit-l2 and pvtv2-b2 respectively. The decoder of Unet uses a six-layer decoder. The input image size is the original size with 32 or 64 padding. The loss function uses BCELoss, a mixture of BCELoss and DiceLoss.<br>\nModel training is in Kiney_1 dense and validation is in Kiney_3 dense.</p>\n<h1>2. Model</h1>\n<p>2D Unet decoder<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2584996%2F73436203755850d3caf132337f25d503%2Finbox_113660_7f8c7dca190065f9d3b98f880ef7cd21_Selection_999(4310).png?generation=1707278608669035&amp;alt=media\"></p>\n<h1>3. Data augmentation</h1>\n<p>Our image augmentation strategy has 0.5 probability Hflip, Vflip and rotate90. Next is the albumentation augmentation: <br>\n<code>def do_albu_aug(H,W):\ntrain_aug_list = [\nA.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.25, rotate_limit=45,\n                interpolation=cv2.INTER_CUBIC,p=0.3),\nA.RandomResizedCrop(height=H,width=W,scale=(0.75,1.),ratio=(0.88888,1.122222),\n                 interpolation=cv2.INTER_CUBIC,p=0.3),\nA.Downscale(scale_min=0.2, scale_max=0.2,interpolation=cv2.INTER_CUBIC,p=0.05),\nA.RandomBrightnessContrast(p=0.05,),\nA.MaskDropout(max_objects=(1,10),p=0.05),\n]\nreturn A.Compose(train_aug_list)</code><br>\nAll our training models use 2d models with input image channel 1. The training strategy is multi-view training in 3 axes. </p>\n<h1>4. Results</h1>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Backbone</th>\n<th>Resolution</th>\n<th>public</th>\n<th>Private</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>UNet</td>\n<td>Convnext-small</td>\n<td>Original size</td>\n<td>0.880</td>\n<td>0.559</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Convnext-tiny</td>\n<td>Original size</td>\n<td>0.857</td>\n<td>0.627</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Coat-small</td>\n<td>Original size</td>\n<td>0.869</td>\n<td>0.709</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Efficientvit-l2</td>\n<td>Original size</td>\n<td>0.840</td>\n<td>0.552</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Pvtv2-b2</td>\n<td>Original size</td>\n<td>0.85</td>\n<td>0.348</td>\n</tr>\n</tbody>\n</table>\n<ol>\n<li>It can be seen from the results that there is a big gap between the Public LB score and the Private LB score. </li>\n</ol>",
  "messages": [
    {
      "id": "2640757",
      "postDate": "02/07/2024 04:25:19",
      "content": "<p>First of all, we would like to thank the Kaggle organizer team. Special thanks to <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> for providing powerful experience sharing throughout the competition.</p>\n<h1>1. overview</h1>\n<p>Data processing: we used normalizing images of a batch based on percentiles. The final submitted training model is an ensemble of five models. Their backbones are convnext-small, convnextv2-tiny, coat-small, efficientvit-l2 and pvtv2-b2 respectively. The decoder of Unet uses a six-layer decoder. The input image size is the original size with 32 or 64 padding. The loss function uses BCELoss, a mixture of BCELoss and DiceLoss.<br>\nModel training is in Kiney_1 dense and validation is in Kiney_3 dense.</p>\n<h1>2. Model</h1>\n<p>2D Unet decoder<br>\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2584996%2F73436203755850d3caf132337f25d503%2Finbox_113660_7f8c7dca190065f9d3b98f880ef7cd21_Selection_999(4310).png?generation=1707278608669035&amp;alt=media\"></p>\n<h1>3. Data augmentation</h1>\n<p>Our image augmentation strategy has 0.5 probability Hflip, Vflip and rotate90. Next is the albumentation augmentation: <br>\n<code>def do_albu_aug(H,W):\ntrain_aug_list = [\nA.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.25, rotate_limit=45,\n                interpolation=cv2.INTER_CUBIC,p=0.3),\nA.RandomResizedCrop(height=H,width=W,scale=(0.75,1.),ratio=(0.88888,1.122222),\n                 interpolation=cv2.INTER_CUBIC,p=0.3),\nA.Downscale(scale_min=0.2, scale_max=0.2,interpolation=cv2.INTER_CUBIC,p=0.05),\nA.RandomBrightnessContrast(p=0.05,),\nA.MaskDropout(max_objects=(1,10),p=0.05),\n]\nreturn A.Compose(train_aug_list)</code><br>\nAll our training models use 2d models with input image channel 1. The training strategy is multi-view training in 3 axes. </p>\n<h1>4. Results</h1>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Backbone</th>\n<th>Resolution</th>\n<th>public</th>\n<th>Private</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>UNet</td>\n<td>Convnext-small</td>\n<td>Original size</td>\n<td>0.880</td>\n<td>0.559</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Convnext-tiny</td>\n<td>Original size</td>\n<td>0.857</td>\n<td>0.627</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Coat-small</td>\n<td>Original size</td>\n<td>0.869</td>\n<td>0.709</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Efficientvit-l2</td>\n<td>Original size</td>\n<td>0.840</td>\n<td>0.552</td>\n</tr>\n<tr>\n<td>UNet</td>\n<td>Pvtv2-b2</td>\n<td>Original size</td>\n<td>0.85</td>\n<td>0.348</td>\n</tr>\n</tbody>\n</table>\n<ol>\n<li>It can be seen from the results that there is a big gap between the Public LB score and the Private LB score. </li>\n</ol>",
      "rawMarkdown": "First of all, we would like to thank the Kaggle organizer team. Special thanks to @hengck23 for providing powerful experience sharing throughout the competition.\n   # 1. overview\nData processing: we used normalizing images of a batch based on percentiles. The final submitted training model is an ensemble of five models. Their backbones are convnext-small, convnextv2-tiny, coat-small, efficientvit-l2 and pvtv2-b2 respectively. The decoder of Unet uses a six-layer decoder. The input image size is the original size with 32 or 64 padding. The loss function uses BCELoss, a mixture of BCELoss and DiceLoss.\nModel training is in Kiney_1 dense and validation is in Kiney_3 dense.\n# 2. Model\n2D Unet decoder\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2584996%2F73436203755850d3caf132337f25d503%2Finbox_113660_7f8c7dca190065f9d3b98f880ef7cd21_Selection_999(4310).png?generation=1707278608669035&alt=media)\n# 3. Data augmentation\nOur image augmentation strategy has 0.5 probability Hflip, Vflip and rotate90. Next is the albumentation augmentation: \n`def do_albu_aug(H,W):\n    train_aug_list = [\n    A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.25, rotate_limit=45,\n                       interpolation=cv2.INTER_CUBIC,p=0.3),\n    A.RandomResizedCrop(height=H,width=W,scale=(0.75,1.),ratio=(0.88888,1.122222),\n                        interpolation=cv2.INTER_CUBIC,p=0.3),\n    A.Downscale(scale_min=0.2, scale_max=0.2,interpolation=cv2.INTER_CUBIC,p=0.05),\n    A.RandomBrightnessContrast(p=0.05,),\n    A.MaskDropout(max_objects=(1,10),p=0.05),\n    ]\n    return A.Compose(train_aug_list)`\nAll our training models use 2d models with input image channel 1. The training strategy is multi-view training in 3 axes. \n# 4. Results\n| Model |  Backbone|Resolution| public| Private|\n| --- | --- |\n| UNet | Convnext-small |Original size| 0.880| 0.559|\n| UNet | Convnext-tiny\t|Original size\t|0.857|0.627\n|UNet\t|Coat-small\t|Original size|\t0.869|\t0.709|\n|UNet|\tEfficientvit-l2\t|Original size|\t0.840|\t0.552|\n|UNet|\tPvtv2-b2|\tOriginal size|\t0.85|\t0.348|\n1. It can be seen from the results that there is a big gap between the Public LB score and the Private LB score.",
      "votes": null
    },
    {
      "id": "2643626",
      "postDate": "02/09/2024 00:56:29",
      "content": "<p>After five years of practice, I finally won my first gold medal. Thanks to the Kaggle organizers and everyone who helped me along the way. Today is the Chinese New Year's Eve, a double happiness. I wish every Kaggle participant to enjoy every minute and every second in the Kaggle family.🏅🎉🎉🎉</p>",
      "rawMarkdown": "After five years of practice, I finally won my first gold medal. Thanks to the Kaggle organizers and everyone who helped me along the way. Today is the Chinese New Year's Eve, a double happiness. I wish every Kaggle participant to enjoy every minute and every second in the Kaggle family.🏅🎉🎉🎉",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2643626,
      "author_name": "ynhuhu",
      "author_url": "",
      "post_date": "02/09/2024 00:56:29",
      "content": "<p>After five years of practice, I finally won my first gold medal. Thanks to the Kaggle organizers and everyone who helped me along the way. Today is the Chinese New Year's Eve, a double happiness. I wish every Kaggle participant to enjoy every minute and every second in the Kaggle family.🏅🎉🎉🎉</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "2640757": "First of all, we would like to thank the Kaggle organizer team. Special thanks to @hengck23 for providing powerful experience sharing throughout the competition.\n   # 1. overview\nData processing: we used normalizing images of a batch based on percentiles. The final submitted training model is an ensemble of five models. Their backbones are convnext-small, convnextv2-tiny, coat-small, efficientvit-l2 and pvtv2-b2 respectively. The decoder of Unet uses a six-layer decoder. The input image size is the original size with 32 or 64 padding. The loss function uses BCELoss, a mixture of BCELoss and DiceLoss.\nModel training is in Kiney_1 dense and validation is in Kiney_3 dense.\n# 2. Model\n2D Unet decoder\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2584996%2F73436203755850d3caf132337f25d503%2Finbox_113660_7f8c7dca190065f9d3b98f880ef7cd21_Selection_999(4310).png?generation=1707278608669035&alt=media)\n# 3. Data augmentation\nOur image augmentation strategy has 0.5 probability Hflip, Vflip and rotate90. Next is the albumentation augmentation: \n`def do_albu_aug(H,W):\n    train_aug_list = [\n    A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.25, rotate_limit=45,\n                       interpolation=cv2.INTER_CUBIC,p=0.3),\n    A.RandomResizedCrop(height=H,width=W,scale=(0.75,1.),ratio=(0.88888,1.122222),\n                        interpolation=cv2.INTER_CUBIC,p=0.3),\n    A.Downscale(scale_min=0.2, scale_max=0.2,interpolation=cv2.INTER_CUBIC,p=0.05),\n    A.RandomBrightnessContrast(p=0.05,),\n    A.MaskDropout(max_objects=(1,10),p=0.05),\n    ]\n    return A.Compose(train_aug_list)`\nAll our training models use 2d models with input image channel 1. The training strategy is multi-view training in 3 axes. \n# 4. Results\n| Model |  Backbone|Resolution| public| Private|\n| --- | --- |\n| UNet | Convnext-small |Original size| 0.880| 0.559|\n| UNet | Convnext-tiny\t|Original size\t|0.857|0.627\n|UNet\t|Coat-small\t|Original size|\t0.869|\t0.709|\n|UNet|\tEfficientvit-l2\t|Original size|\t0.840|\t0.552|\n|UNet|\tPvtv2-b2|\tOriginal size|\t0.85|\t0.348|\n1. It can be seen from the results that there is a big gap between the Public LB score and the Private LB score.",
    "2643626": "After five years of practice, I finally won my first gold medal. Thanks to the Kaggle organizers and everyone who helped me along the way. Today is the Chinese New Year's Eve, a double happiness. I wish every Kaggle participant to enjoy every minute and every second in the Kaggle family.🏅🎉🎉🎉"
  },
  "source": "meta"
}