{
  "id": 561607,
  "title": "12th place solution",
  "url": "/competitions/czii-cryo-et-object-identification/writeups/siwooyong-12th-place-solution",
  "author_name": "",
  "post_date": "2025-02-08T21:00:10.423Z",
  "votes": 20,
  "comment_count": 2,
  "views": 0,
  "content": "<p>I would like to express my gratitude to kaggle and czii for organizing this competition. I have learned so much from this experience.</p>\n<hr>\n<h1>summary</h1>\n<p>I performed segmentation using a 3d unet with the predefined patch size.<br>\nMy main focus was on enhancing diversity through the following ensemble methods.</p>\n<ul>\n<li>various model types</li>\n<li>various patch sizes</li>\n<li>various tta combinations</li>\n</ul>\n<h3>various model types</h3>\n<p>I used three types of encoders.</p>\n<ol>\n<li>type1 : 3d encoder (converted from timm resnet18d) + 3d decoder(from scratch)</li>\n<li>type2 : 2d encoder(timm pretrained resnet18d) + 3d decoder(from scratch)</li>\n<li>type3 : 3d encoder(<a href=\"https://arxiv.org/abs/1904.02811\" target=\"_blank\">csn</a>) + 3d decoder(from scratch)</li>\n</ol>\n<h3>various patch sizes</h3>\n<p>I used four patch sizes.</p>\n<ol>\n<li>(64, 256, 256)</li>\n<li>(32, 352, 352)</li>\n<li>(32, 224, 224)</li>\n<li>(32, 128, 128)</li>\n</ol>\n<h3>various tta combinations</h3>\n<p>I applied different tta combinations for each model due to inference time constraints. for example,</p>\n<ol>\n<li>model a : transpose + hflip</li>\n<li>model b : rotate90 + rotate270<br>\n…</li>\n</ol>\n<hr>\n<h1>final submission</h1>\n<p>the final submission was made using an ensemble of 10 models.</p>\n<table>\n<thead>\n<tr>\n<th>model</th>\n<th>patch size</th>\n<th>model type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>model1</td>\n<td>(64, 256, 256)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model2</td>\n<td>(64, 256, 256)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model3</td>\n<td>(64, 256, 256)</td>\n<td>type3</td>\n</tr>\n<tr>\n<td>model4</td>\n<td>(32, 352, 352)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model5</td>\n<td>(32, 352, 352)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model6</td>\n<td>(32, 224, 224)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model7</td>\n<td>(32, 224, 224)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model8</td>\n<td>(32, 224, 224)</td>\n<td>type3</td>\n</tr>\n<tr>\n<td>model9</td>\n<td>(32, 128, 128)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model10</td>\n<td>(32, 128, 128)</td>\n<td>type2</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h1>training</h1>\n<ul>\n<li>label : radius * 0.5</li>\n<li>loss : dice, focal</li>\n<li>augmentation : flip, contrast, brightness, rotate, mixup, various filters(denoised, wbp, …)</li>\n<li>regularization : drop path, weight decay</li>\n<li>train data : use all for final submission</li>\n</ul>\n<hr>\n<h1>not worked</h1>\n<ul>\n<li>2 stage approach</li>\n<li>bigger encoder(e.g. convnext_tiny, maxvit_tiny)</li>\n<li>simulated data</li>\n</ul>\n<hr>\n<h1>code</h1>\n<p><a href=\"https://github.com/siwooyong/CZII-CryoET-Object-Identification\" target=\"_blank\">https://github.com/siwooyong/CZII-CryoET-Object-Identification</a></p>\n<hr>",
  "messages": [
    {
      "id": "3117354",
      "postDate": "02/06/2025 22:34:42",
      "content": "<p>I would like to express my gratitude to kaggle and czii for organizing this competition. I have learned so much from this experience.</p>\n<hr>\n<h1>summary</h1>\n<p>I performed segmentation using a 3d unet with the predefined patch size.<br>\nMy main focus was on enhancing diversity through the following ensemble methods.</p>\n<ul>\n<li>various model types</li>\n<li>various patch sizes</li>\n<li>various tta combinations</li>\n</ul>\n<h3>various model types</h3>\n<p>I used three types of encoders.</p>\n<ol>\n<li>type1 : 3d encoder (converted from timm resnet18d) + 3d decoder(from scratch)</li>\n<li>type2 : 2d encoder(timm pretrained resnet18d) + 3d decoder(from scratch)</li>\n<li>type3 : 3d encoder(<a href=\"https://arxiv.org/abs/1904.02811\" target=\"_blank\">csn</a>) + 3d decoder(from scratch)</li>\n</ol>\n<h3>various patch sizes</h3>\n<p>I used four patch sizes.</p>\n<ol>\n<li>(64, 256, 256)</li>\n<li>(32, 352, 352)</li>\n<li>(32, 224, 224)</li>\n<li>(32, 128, 128)</li>\n</ol>\n<h3>various tta combinations</h3>\n<p>I applied different tta combinations for each model due to inference time constraints. for example,</p>\n<ol>\n<li>model a : transpose + hflip</li>\n<li>model b : rotate90 + rotate270<br>\n…</li>\n</ol>\n<hr>\n<h1>final submission</h1>\n<p>the final submission was made using an ensemble of 10 models.</p>\n<table>\n<thead>\n<tr>\n<th>model</th>\n<th>patch size</th>\n<th>model type</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>model1</td>\n<td>(64, 256, 256)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model2</td>\n<td>(64, 256, 256)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model3</td>\n<td>(64, 256, 256)</td>\n<td>type3</td>\n</tr>\n<tr>\n<td>model4</td>\n<td>(32, 352, 352)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model5</td>\n<td>(32, 352, 352)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model6</td>\n<td>(32, 224, 224)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model7</td>\n<td>(32, 224, 224)</td>\n<td>type2</td>\n</tr>\n<tr>\n<td>model8</td>\n<td>(32, 224, 224)</td>\n<td>type3</td>\n</tr>\n<tr>\n<td>model9</td>\n<td>(32, 128, 128)</td>\n<td>type1</td>\n</tr>\n<tr>\n<td>model10</td>\n<td>(32, 128, 128)</td>\n<td>type2</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h1>training</h1>\n<ul>\n<li>label : radius * 0.5</li>\n<li>loss : dice, focal</li>\n<li>augmentation : flip, contrast, brightness, rotate, mixup, various filters(denoised, wbp, …)</li>\n<li>regularization : drop path, weight decay</li>\n<li>train data : use all for final submission</li>\n</ul>\n<hr>\n<h1>not worked</h1>\n<ul>\n<li>2 stage approach</li>\n<li>bigger encoder(e.g. convnext_tiny, maxvit_tiny)</li>\n<li>simulated data</li>\n</ul>\n<hr>\n<h1>code</h1>\n<p><a href=\"https://github.com/siwooyong/CZII-CryoET-Object-Identification\" target=\"_blank\">https://github.com/siwooyong/CZII-CryoET-Object-Identification</a></p>\n<hr>",
      "rawMarkdown": "I would like to express my gratitude to kaggle and czii for organizing this competition. I have learned so much from this experience.\n\n---\n\n# summary\nI performed segmentation using a 3d unet with the predefined patch size.\nMy main focus was on enhancing diversity through the following ensemble methods.\n- various model types\n- various patch sizes\n- various tta combinations\n\n### various model types\nI used three types of encoders.\n\n1. type1 : 3d encoder (converted from timm resnet18d) + 3d decoder(from scratch)\n2. type2 : 2d encoder(timm pretrained resnet18d) + 3d decoder(from scratch)\n3. type3 : 3d encoder([csn](https://arxiv.org/abs/1904.02811)) + 3d decoder(from scratch)\n\n### various patch sizes\nI used four patch sizes.\n\n1. (64, 256, 256)\n2. (32, 352, 352)\n3. (32, 224, 224)\n4. (32, 128, 128)\n\n### various tta combinations\nI applied different tta combinations for each model due to inference time constraints. for example,\n\n1. model a : transpose + hflip\n2. model b : rotate90 + rotate270\n...\n\n---\n\n# final submission\nthe final submission was made using an ensemble of 10 models.\n|model|patch size|model type|\n|---|---|---|\n|model1|(64, 256, 256)|type1|\n|model2|(64, 256, 256)|type2|\n|model3|(64, 256, 256)|type3|\n|model4|(32, 352, 352)|type1|\n|model5|(32, 352, 352)|type2|\n|model6|(32, 224, 224)|type1|\n|model7|(32, 224, 224)|type2|\n|model8|(32, 224, 224)|type3|\n|model9|(32, 128, 128)|type1|\n|model10|(32, 128, 128)|type2|\n\n---\n\n# training\n- label : radius * 0.5\n- loss : dice, focal\n- augmentation : flip, contrast, brightness, rotate, mixup, various filters(denoised, wbp, ...)\n- regularization : drop path, weight decay\n- train data : use all for final submission\n\n---\n\n# not worked\n- 2 stage approach\n- bigger encoder(e.g. convnext_tiny, maxvit_tiny)\n- simulated data\n\n---\n\n# code\nhttps://github.com/siwooyong/CZII-CryoET-Object-Identification\n\n---",
      "votes": null
    },
    {
      "id": "3117383",
      "postDate": "02/06/2025 23:50:58",
      "content": "<p>Congratulations on your strong finish and sorry that you missed the gold. Are you planning to share your training code as well?</p>",
      "rawMarkdown": "Congratulations on your strong finish and sorry that you missed the gold. Are you planning to share your training code as well?",
      "votes": null
    },
    {
      "id": "3119085",
      "postDate": "02/08/2025 21:00:53",
      "content": "<p>code is <a href=\"https://github.com/siwooyong/CZII-CryoET-Object-Identification\" target=\"_blank\">here</a> 😄</p>",
      "rawMarkdown": "code is [here](https://github.com/siwooyong/CZII-CryoET-Object-Identification) 😄",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3117383,
      "author_name": "snnclsr",
      "author_url": "",
      "post_date": "02/06/2025 23:50:58",
      "content": "<p>Congratulations on your strong finish and sorry that you missed the gold. Are you planning to share your training code as well?</p>",
      "votes": null,
      "replies": [
        {
          "id": 3119085,
          "author_name": "siwooyong",
          "author_url": "",
          "post_date": "02/08/2025 21:00:53",
          "content": "<p>code is <a href=\"https://github.com/siwooyong/CZII-CryoET-Object-Identification\" target=\"_blank\">here</a> 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "3117354": "I would like to express my gratitude to kaggle and czii for organizing this competition. I have learned so much from this experience.\n\n---\n\n# summary\nI performed segmentation using a 3d unet with the predefined patch size.\nMy main focus was on enhancing diversity through the following ensemble methods.\n- various model types\n- various patch sizes\n- various tta combinations\n\n### various model types\nI used three types of encoders.\n\n1. type1 : 3d encoder (converted from timm resnet18d) + 3d decoder(from scratch)\n2. type2 : 2d encoder(timm pretrained resnet18d) + 3d decoder(from scratch)\n3. type3 : 3d encoder([csn](https://arxiv.org/abs/1904.02811)) + 3d decoder(from scratch)\n\n### various patch sizes\nI used four patch sizes.\n\n1. (64, 256, 256)\n2. (32, 352, 352)\n3. (32, 224, 224)\n4. (32, 128, 128)\n\n### various tta combinations\nI applied different tta combinations for each model due to inference time constraints. for example,\n\n1. model a : transpose + hflip\n2. model b : rotate90 + rotate270\n...\n\n---\n\n# final submission\nthe final submission was made using an ensemble of 10 models.\n|model|patch size|model type|\n|---|---|---|\n|model1|(64, 256, 256)|type1|\n|model2|(64, 256, 256)|type2|\n|model3|(64, 256, 256)|type3|\n|model4|(32, 352, 352)|type1|\n|model5|(32, 352, 352)|type2|\n|model6|(32, 224, 224)|type1|\n|model7|(32, 224, 224)|type2|\n|model8|(32, 224, 224)|type3|\n|model9|(32, 128, 128)|type1|\n|model10|(32, 128, 128)|type2|\n\n---\n\n# training\n- label : radius * 0.5\n- loss : dice, focal\n- augmentation : flip, contrast, brightness, rotate, mixup, various filters(denoised, wbp, ...)\n- regularization : drop path, weight decay\n- train data : use all for final submission\n\n---\n\n# not worked\n- 2 stage approach\n- bigger encoder(e.g. convnext_tiny, maxvit_tiny)\n- simulated data\n\n---\n\n# code\nhttps://github.com/siwooyong/CZII-CryoET-Object-Identification\n\n---",
    "3117383": "Congratulations on your strong finish and sorry that you missed the gold. Are you planning to share your training code as well?",
    "3119085": "code is [here](https://github.com/siwooyong/CZII-CryoET-Object-Identification) 😄"
  },
  "source": "meta"
}