{
  "id": 475588,
  "title": "[2nd Public/90th Private] Solution for the SenNet + HOA - Hacking the Human Vasculature in 3D",
  "url": "/competitions/blood-vessel-segmentation/writeups/tanxxx-2nd-public-90th-private-solution-for-the-se",
  "author_name": "",
  "post_date": "2024-02-09T04:07:02.987Z",
  "votes": 13,
  "comment_count": 4,
  "views": 0,
  "content": "<p>After being heartbroken for 48 hours, I finally recovered. I decided to share my method, which might help solve some of  friends' doubts.</p>\n<p>First of all, I want to thank my good brother, who spent more than 1,000 rmb calling a sexy beauty to give me a massage and relax, which made me realize that there are still such wonderful things in this world besides competition.</p>\n<p>At the same time, I would like to thank <a href=\"https://www.kaggle.com/yoyobar\" target=\"_blank\">@yoyobar</a> for providing the training and inference notebooks. All my experiments are based on these two notebooks.</p>\n<p>I also want to thank <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> , <a href=\"https://www.kaggle.com/lihaoweicvch\" target=\"_blank\">@lihaoweicvch</a> and others who provided such detailed experimental details early in the competition, which reduced many difficulties I had in the initial stage of the experiments</p>\n<h2>Training Strategy:</h2>\n<ul>\n<li>High probability strong data augmentation - mixup  pre-training for over 300 epochs, using kidney1 and kidney3 both dense and sparse datasets.</li>\n<li>Low probability data augmentation - mixup - EMA fine-tuning on kidney1 and kidney3 in dense datasets, with kidney2 dataset for validation.</li>\n<li>Validation metric uses average dice score from thresholds in (0.1, 0.2 … 0.9) range. </li>\n<li>Loss function is simple dice loss.</li>\n<li>Training resolution is 1024x1024.</li>\n<li>Silde-window inference with 5 TTA + 50um resolution inference for public test, 5 TTA + 50um and 60um resolution inference for private test, using F.interpolate(…, scale=0.8)</li>\n<li>Threshold selection: 1. Based on fixed value, 2. Based on percentile, 3. Based on Otsu adaptive thresholding.</li>\n</ul>\n<h2>Model Choices:</h2>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Public Score</th>\n<th>Private Score</th>\n<th>Thresholding Strategy</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>se-resnext50-unet</td>\n<td>0.891</td>\n<td>0.546</td>\n<td>Percentile</td>\n<td>Local receptive field</td>\n</tr>\n<tr>\n<td>se-resnext50-unet</td>\n<td>0.363</td>\n<td>0.553</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>gcnet50-unet</td>\n<td>0.881</td>\n<td>0.458</td>\n<td>Percentile</td>\n<td>Global receptive field</td>\n</tr>\n<tr>\n<td>gcnet50-unet</td>\n<td>0.857</td>\n<td>0.435</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>2.5d-hrnet-w32-unet</td>\n<td>0.868</td>\n<td>0.546</td>\n<td>Percentile</td>\n<td>Excellent detail recovery ability</td>\n</tr>\n<tr>\n<td>effiecientnet-b3-unet</td>\n<td>0.878</td>\n<td>0.517</td>\n<td>Percentile</td>\n<td>Excellent inference speed</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.857</td>\n<td>0.576</td>\n<td>0.16</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.895</td>\n<td>0.542</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.883</td>\n<td>0.518</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet</td>\n<td>0.886</td>\n<td>0.544</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale</td>\n<td>-</td>\n<td>0.589</td>\n<td>0.1</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale</td>\n<td>-</td>\n<td>0.452</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>All the experiments, the results in private are not very ideal, perhaps due to the thresholds, or it could be due to other reasons<br>\nAdditionally, since I cannot confirm whether private is the result of downsampling an entire kidney or a subset of a kidney, I did not spend too much time on it in the 2.5d method.<br>\nAt the same time, in the 2-scale inference, some weights were fine-tuned at a 60um resolution, but there was actually no significant improvement.</p>\n<h2>Reasons for Failure:</h2>\n<ul>\n<li><p><strong>Threshold selection:</strong> In my models, lower thresholds achieved better private scores, which contradicted my early idea that \"higher thresholds could better reduce false positives and improve the private results\". Additionally, the threshold selection method based on proportion carries too much risk. Choosing a fixed threshold is a more stable approach.</p></li>\n<li><p><strong>Validation metric:</strong> Since kidney2 was sparsely annotated, I chose average dice as the validation metric. And I found that at different thresholds, a higher dice with smaller dice variance usually did not result in a poor public score, but this is not a positive correlation, which may have introduced a potential risk of overfitting.</p></li>\n<li><p><strong>Data augmentation:</strong> I gradually added many data augmentations, assuming that if the validation metric did not decrease after adding augmentations, the model's generalization ability would be improved to some extent. The final result told me that one or more augmentation methods, such as mixup, might have affected the private score.</p></li>\n</ul>\n<p>Nevertheless, this competition has ended. Congratulations to all the winners who have achieved such great results, and also to all the friends who have given their best in this competition but did not achieve good scores whose algorithm skills must have improved significantly.</p>\n<p>Here are some notebooks I used for inference (ugly code, no time to clean it up for now due to the Chinese New Year is coming). The related code and weights have been set to public. If anyone is interested, feel free to refer to them.<br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/inference-se-tugc</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/2d-tu-gcresnext50ts-inference</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/se-resnext-inference-1024</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/tu-hrnet-w30-and-effb3-inference</a></p>",
  "messages": [
    {
      "id": "2643728",
      "postDate": "02/09/2024 04:01:09",
      "content": "<p>After being heartbroken for 48 hours, I finally recovered. I decided to share my method, which might help solve some of  friends' doubts.</p>\n<p>First of all, I want to thank my good brother, who spent more than 1,000 rmb calling a sexy beauty to give me a massage and relax, which made me realize that there are still such wonderful things in this world besides competition.</p>\n<p>At the same time, I would like to thank <a href=\"https://www.kaggle.com/yoyobar\" target=\"_blank\">@yoyobar</a> for providing the training and inference notebooks. All my experiments are based on these two notebooks.</p>\n<p>I also want to thank <a href=\"https://www.kaggle.com/hengck23\" target=\"_blank\">@hengck23</a> , <a href=\"https://www.kaggle.com/lihaoweicvch\" target=\"_blank\">@lihaoweicvch</a> and others who provided such detailed experimental details early in the competition, which reduced many difficulties I had in the initial stage of the experiments</p>\n<h2>Training Strategy:</h2>\n<ul>\n<li>High probability strong data augmentation - mixup  pre-training for over 300 epochs, using kidney1 and kidney3 both dense and sparse datasets.</li>\n<li>Low probability data augmentation - mixup - EMA fine-tuning on kidney1 and kidney3 in dense datasets, with kidney2 dataset for validation.</li>\n<li>Validation metric uses average dice score from thresholds in (0.1, 0.2 … 0.9) range. </li>\n<li>Loss function is simple dice loss.</li>\n<li>Training resolution is 1024x1024.</li>\n<li>Silde-window inference with 5 TTA + 50um resolution inference for public test, 5 TTA + 50um and 60um resolution inference for private test, using F.interpolate(…, scale=0.8)</li>\n<li>Threshold selection: 1. Based on fixed value, 2. Based on percentile, 3. Based on Otsu adaptive thresholding.</li>\n</ul>\n<h2>Model Choices:</h2>\n<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>Public Score</th>\n<th>Private Score</th>\n<th>Thresholding Strategy</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>se-resnext50-unet</td>\n<td>0.891</td>\n<td>0.546</td>\n<td>Percentile</td>\n<td>Local receptive field</td>\n</tr>\n<tr>\n<td>se-resnext50-unet</td>\n<td>0.363</td>\n<td>0.553</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>gcnet50-unet</td>\n<td>0.881</td>\n<td>0.458</td>\n<td>Percentile</td>\n<td>Global receptive field</td>\n</tr>\n<tr>\n<td>gcnet50-unet</td>\n<td>0.857</td>\n<td>0.435</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>2.5d-hrnet-w32-unet</td>\n<td>0.868</td>\n<td>0.546</td>\n<td>Percentile</td>\n<td>Excellent detail recovery ability</td>\n</tr>\n<tr>\n<td>effiecientnet-b3-unet</td>\n<td>0.878</td>\n<td>0.517</td>\n<td>Percentile</td>\n<td>Excellent inference speed</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.857</td>\n<td>0.576</td>\n<td>0.16</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.895</td>\n<td>0.542</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet</td>\n<td>0.883</td>\n<td>0.518</td>\n<td>Otsu</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet</td>\n<td>0.886</td>\n<td>0.544</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale</td>\n<td>-</td>\n<td>0.589</td>\n<td>0.1</td>\n<td>-</td>\n</tr>\n<tr>\n<td>se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale</td>\n<td>-</td>\n<td>0.452</td>\n<td>Percentile</td>\n<td>-</td>\n</tr>\n</tbody>\n</table>\n<p>All the experiments, the results in private are not very ideal, perhaps due to the thresholds, or it could be due to other reasons<br>\nAdditionally, since I cannot confirm whether private is the result of downsampling an entire kidney or a subset of a kidney, I did not spend too much time on it in the 2.5d method.<br>\nAt the same time, in the 2-scale inference, some weights were fine-tuned at a 60um resolution, but there was actually no significant improvement.</p>\n<h2>Reasons for Failure:</h2>\n<ul>\n<li><p><strong>Threshold selection:</strong> In my models, lower thresholds achieved better private scores, which contradicted my early idea that \"higher thresholds could better reduce false positives and improve the private results\". Additionally, the threshold selection method based on proportion carries too much risk. Choosing a fixed threshold is a more stable approach.</p></li>\n<li><p><strong>Validation metric:</strong> Since kidney2 was sparsely annotated, I chose average dice as the validation metric. And I found that at different thresholds, a higher dice with smaller dice variance usually did not result in a poor public score, but this is not a positive correlation, which may have introduced a potential risk of overfitting.</p></li>\n<li><p><strong>Data augmentation:</strong> I gradually added many data augmentations, assuming that if the validation metric did not decrease after adding augmentations, the model's generalization ability would be improved to some extent. The final result told me that one or more augmentation methods, such as mixup, might have affected the private score.</p></li>\n</ul>\n<p>Nevertheless, this competition has ended. Congratulations to all the winners who have achieved such great results, and also to all the friends who have given their best in this competition but did not achieve good scores whose algorithm skills must have improved significantly.</p>\n<p>Here are some notebooks I used for inference (ugly code, no time to clean it up for now due to the Chinese New Year is coming). The related code and weights have been set to public. If anyone is interested, feel free to refer to them.<br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/inference-se-tugc</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/2d-tu-gcresnext50ts-inference</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/se-resnext-inference-1024</a><br>\n<a href=\"url\" target=\"_blank\">https://www.kaggle.com/code/tanxxx/tu-hrnet-w30-and-effb3-inference</a></p>",
      "rawMarkdown": "After being heartbroken for 48 hours, I finally recovered. I decided to share my method, which might help solve some of  friends' doubts.\n\nFirst of all, I want to thank my good brother, who spent more than 1,000 rmb calling a sexy beauty to give me a massage and relax, which made me realize that there are still such wonderful things in this world besides competition.\n\nAt the same time, I would like to thank @yoyobar for providing the training and inference notebooks. All my experiments are based on these two notebooks.\n\nI also want to thank @hengck23 , @lihaoweicvch and others who provided such detailed experimental details early in the competition, which reduced many difficulties I had in the initial stage of the experiments\n\n## Training Strategy:\n\n- High probability strong data augmentation - mixup  pre-training for over 300 epochs, using kidney1 and kidney3 both dense and sparse datasets.\n- Low probability data augmentation - mixup - EMA fine-tuning on kidney1 and kidney3 in dense datasets, with kidney2 dataset for validation.\n- Validation metric uses average dice score from thresholds in (0.1, 0.2 ... 0.9) range. \n- Loss function is simple dice loss.\n- Training resolution is 1024x1024.\n-  Silde-window inference with 5 TTA + 50um resolution inference for public test, 5 TTA + 50um and 60um resolution inference for private test, using F.interpolate(..., scale=0.8)\n- Threshold selection: 1. Based on fixed value, 2. Based on percentile, 3. Based on Otsu adaptive thresholding.\n\n## Model Choices:\n\n| Model | Public Score | Private Score | Thresholding Strategy | Notes |\n| --- | --- | --- | --- | --- |\n| se-resnext50-unet | 0.891 | 0.546 | Percentile | Local receptive field |\n| se-resnext50-unet | 0.363 | 0.553 | Otsu | - |\n| gcnet50-unet | 0.881 | 0.458 | Percentile | Global receptive field |\n| gcnet50-unet | 0.857 | 0.435 | Otsu | - |\n| 2.5d-hrnet-w32-unet | 0.868 | 0.546 | Percentile | Excellent detail recovery ability |\n| effiecientnet-b3-unet | 0.878 | 0.517 |Percentile| Excellent inference speed |\n| se-resnext50-unet+gcnet50-unet | 0.857 | 0.576 | 0.16 | - |\n| se-resnext50-unet+gcnet50-unet | 0.895 | 0.542 |Percentile | - |\n| se-resnext50-unet+gcnet50-unet | 0.883 | 0.518 | Otsu | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet | 0.886 | 0.544 |Percentile | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale | - | 0.589 | 0.1 | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale | - | 0.452 | Percentile| - |\n\nAll the experiments, the results in private are not very ideal, perhaps due to the thresholds, or it could be due to other reasons\nAdditionally, since I cannot confirm whether private is the result of downsampling an entire kidney or a subset of a kidney, I did not spend too much time on it in the 2.5d method.\nAt the same time, in the 2-scale inference, some weights were fine-tuned at a 60um resolution, but there was actually no significant improvement.\n\n## Reasons for Failure:\n\n- **Threshold selection:** In my models, lower thresholds achieved better private scores, which contradicted my early idea that \"higher thresholds could better reduce false positives and improve the private results\". Additionally, the threshold selection method based on proportion carries too much risk. Choosing a fixed threshold is a more stable approach.\n\n- **Validation metric:** Since kidney2 was sparsely annotated, I chose average dice as the validation metric. And I found that at different thresholds, a higher dice with smaller dice variance usually did not result in a poor public score, but this is not a positive correlation, which may have introduced a potential risk of overfitting.\n\n- **Data augmentation:** I gradually added many data augmentations, assuming that if the validation metric did not decrease after adding augmentations, the model's generalization ability would be improved to some extent. The final result told me that one or more augmentation methods, such as mixup, might have affected the private score.\n\nNevertheless, this competition has ended. Congratulations to all the winners who have achieved such great results, and also to all the friends who have given their best in this competition but did not achieve good scores whose algorithm skills must have improved significantly.\n\nHere are some notebooks I used for inference (ugly code, no time to clean it up for now due to the Chinese New Year is coming). The related code and weights have been set to public. If anyone is interested, feel free to refer to them.\n[https://www.kaggle.com/code/tanxxx/inference-se-tugc](url)\n[https://www.kaggle.com/code/tanxxx/2d-tu-gcresnext50ts-inference](url)\n[https://www.kaggle.com/code/tanxxx/se-resnext-inference-1024](url)\n[https://www.kaggle.com/code/tanxxx/tu-hrnet-w30-and-effb3-inference](url)",
      "votes": null
    },
    {
      "id": "2643763",
      "postDate": "02/09/2024 04:48:32",
      "content": "<p>Great work regardless. Hahaha and sounds like your brother does what it takes LOL</p>",
      "rawMarkdown": "Great work regardless. Hahaha and sounds like your brother does what it takes LOL",
      "votes": null
    },
    {
      "id": "2643781",
      "postDate": "02/09/2024 05:21:23",
      "content": "<p>thanks, i love my brother so much!!!</p>",
      "rawMarkdown": "thanks, i love my brother so much!!!",
      "votes": null
    },
    {
      "id": "2645362",
      "postDate": "02/10/2024 07:20:21",
      "content": "<p>Congratulations and thanks for  sharing details of your solution.<br>\nI think you need to be sportive and this field can advance by learning also from failures.</p>",
      "rawMarkdown": "Congratulations and thanks for  sharing details of your solution.\nI think you need to be sportive and this field can advance by learning also from failures.",
      "votes": null
    },
    {
      "id": "2645649",
      "postDate": "02/10/2024 11:43:56",
      "content": "<p>Thanks a lot, at least I won a gold medal in the discussion :D</p>",
      "rawMarkdown": "Thanks a lot, at least I won a gold medal in the discussion :D",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2643763,
      "author_name": "cody11null",
      "author_url": "",
      "post_date": "02/09/2024 04:48:32",
      "content": "<p>Great work regardless. Hahaha and sounds like your brother does what it takes LOL</p>",
      "votes": null,
      "replies": [
        {
          "id": 2643781,
          "author_name": "tanxxx",
          "author_url": "",
          "post_date": "02/09/2024 05:21:23",
          "content": "<p>thanks, i love my brother so much!!!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 2645362,
      "author_name": "crsuthikshnkumar",
      "author_url": "",
      "post_date": "02/10/2024 07:20:21",
      "content": "<p>Congratulations and thanks for  sharing details of your solution.<br>\nI think you need to be sportive and this field can advance by learning also from failures.</p>",
      "votes": null,
      "replies": [
        {
          "id": 2645649,
          "author_name": "tanxxx",
          "author_url": "",
          "post_date": "02/10/2024 11:43:56",
          "content": "<p>Thanks a lot, at least I won a gold medal in the discussion :D</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2643728": "After being heartbroken for 48 hours, I finally recovered. I decided to share my method, which might help solve some of  friends' doubts.\n\nFirst of all, I want to thank my good brother, who spent more than 1,000 rmb calling a sexy beauty to give me a massage and relax, which made me realize that there are still such wonderful things in this world besides competition.\n\nAt the same time, I would like to thank @yoyobar for providing the training and inference notebooks. All my experiments are based on these two notebooks.\n\nI also want to thank @hengck23 , @lihaoweicvch and others who provided such detailed experimental details early in the competition, which reduced many difficulties I had in the initial stage of the experiments\n\n## Training Strategy:\n\n- High probability strong data augmentation - mixup  pre-training for over 300 epochs, using kidney1 and kidney3 both dense and sparse datasets.\n- Low probability data augmentation - mixup - EMA fine-tuning on kidney1 and kidney3 in dense datasets, with kidney2 dataset for validation.\n- Validation metric uses average dice score from thresholds in (0.1, 0.2 ... 0.9) range. \n- Loss function is simple dice loss.\n- Training resolution is 1024x1024.\n-  Silde-window inference with 5 TTA + 50um resolution inference for public test, 5 TTA + 50um and 60um resolution inference for private test, using F.interpolate(..., scale=0.8)\n- Threshold selection: 1. Based on fixed value, 2. Based on percentile, 3. Based on Otsu adaptive thresholding.\n\n## Model Choices:\n\n| Model | Public Score | Private Score | Thresholding Strategy | Notes |\n| --- | --- | --- | --- | --- |\n| se-resnext50-unet | 0.891 | 0.546 | Percentile | Local receptive field |\n| se-resnext50-unet | 0.363 | 0.553 | Otsu | - |\n| gcnet50-unet | 0.881 | 0.458 | Percentile | Global receptive field |\n| gcnet50-unet | 0.857 | 0.435 | Otsu | - |\n| 2.5d-hrnet-w32-unet | 0.868 | 0.546 | Percentile | Excellent detail recovery ability |\n| effiecientnet-b3-unet | 0.878 | 0.517 |Percentile| Excellent inference speed |\n| se-resnext50-unet+gcnet50-unet | 0.857 | 0.576 | 0.16 | - |\n| se-resnext50-unet+gcnet50-unet | 0.895 | 0.542 |Percentile | - |\n| se-resnext50-unet+gcnet50-unet | 0.883 | 0.518 | Otsu | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet | 0.886 | 0.544 |Percentile | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale | - | 0.589 | 0.1 | - |\n| se-resnext50-unet+gcnet50-unet+effiecientnet-b3-unet-2scale | - | 0.452 | Percentile| - |\n\nAll the experiments, the results in private are not very ideal, perhaps due to the thresholds, or it could be due to other reasons\nAdditionally, since I cannot confirm whether private is the result of downsampling an entire kidney or a subset of a kidney, I did not spend too much time on it in the 2.5d method.\nAt the same time, in the 2-scale inference, some weights were fine-tuned at a 60um resolution, but there was actually no significant improvement.\n\n## Reasons for Failure:\n\n- **Threshold selection:** In my models, lower thresholds achieved better private scores, which contradicted my early idea that \"higher thresholds could better reduce false positives and improve the private results\". Additionally, the threshold selection method based on proportion carries too much risk. Choosing a fixed threshold is a more stable approach.\n\n- **Validation metric:** Since kidney2 was sparsely annotated, I chose average dice as the validation metric. And I found that at different thresholds, a higher dice with smaller dice variance usually did not result in a poor public score, but this is not a positive correlation, which may have introduced a potential risk of overfitting.\n\n- **Data augmentation:** I gradually added many data augmentations, assuming that if the validation metric did not decrease after adding augmentations, the model's generalization ability would be improved to some extent. The final result told me that one or more augmentation methods, such as mixup, might have affected the private score.\n\nNevertheless, this competition has ended. Congratulations to all the winners who have achieved such great results, and also to all the friends who have given their best in this competition but did not achieve good scores whose algorithm skills must have improved significantly.\n\nHere are some notebooks I used for inference (ugly code, no time to clean it up for now due to the Chinese New Year is coming). The related code and weights have been set to public. If anyone is interested, feel free to refer to them.\n[https://www.kaggle.com/code/tanxxx/inference-se-tugc](url)\n[https://www.kaggle.com/code/tanxxx/2d-tu-gcresnext50ts-inference](url)\n[https://www.kaggle.com/code/tanxxx/se-resnext-inference-1024](url)\n[https://www.kaggle.com/code/tanxxx/tu-hrnet-w30-and-effb3-inference](url)",
    "2643763": "Great work regardless. Hahaha and sounds like your brother does what it takes LOL",
    "2643781": "thanks, i love my brother so much!!!",
    "2645362": "Congratulations and thanks for  sharing details of your solution.\nI think you need to be sportive and this field can advance by learning also from failures.",
    "2645649": "Thanks a lot, at least I won a gold medal in the discussion :D"
  },
  "source": "meta"
}