{
  "id": 220599,
  "title": "Private 28th, Public 8th, Thank you all, my first medal!",
  "url": "/competitions/cassava-leaf-disease-classification/writeups/yoshio-sugiyama-private-28th-public-8th-thank-you-",
  "author_name": "",
  "post_date": "2021-02-21T10:52:54.273Z",
  "votes": 100,
  "comment_count": 39,
  "views": 0,
  "content": "<h2>✨ Result</h2>\n<ul>\n<li>Private: 28th, 0.901</li>\n<li>Public: 8th, 0.908</li>\n</ul>\n<p>This competition is my first image classification competition,<br>\nso many parts of my solution came from public notebooks and discussions in this competition.<br>\nI've learnt many things from it.</p>\n<p>Thank you for all kagglers and organizers for this competition.</p>\n<p>And I'm happy to get a solo silver as my first medal!</p>\n<h2>🔖 Solution</h2>\n<p>I don't have a strong single model, but the ensemble has surprised me.</p>\n<h3>🎨 Base Model</h3>\n<ul>\n<li>EfficientNet B4 with Noisy Student</li>\n<li>SE-ResNeXt50 (32x4d)</li>\n<li>Vision Transformer (base patch16)</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>Train</th>\n<th>Inference</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f639150116370039666b7bab452abd85932f4d24/cassava-training.ipynb\" target=\"_blank\">EfficientNet</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52135491\" target=\"_blank\">EfficientNet-inf</a></td>\n<td><strong>0.900</strong></td>\n<td>0.891</td>\n<td>0.89103</td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/fb7397ca97d624eb4db467c3d67a4c492313aaad/cassava-training.ipynb\" target=\"_blank\">SE-ResNeXt50</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52812836\" target=\"_blank\">SE-ResNeXt50-inf</a></td>\n<td>0.899</td>\n<td>0.894</td>\n<td><strong>0.89532</strong></td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/9b7093ed7501254f7705edd31f96467f2be00d8b/cassava-training.ipynb\" target=\"_blank\">ViT</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52893502\" target=\"_blank\">ViT-inf</a></td>\n<td>0.899</td>\n<td>0.890</td>\n<td>0.89220</td>\n</tr>\n</tbody>\n</table>\n<h3>🐎 Ensemble and TTA</h3>\n<p>I tried weighted average of no TTA and TTA.</p>\n<table>\n<thead>\n<tr>\n<th>Inference</th>\n<th>Validation</th>\n<th>TTA</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n<th>TTA weight</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54132321\" target=\"_blank\">inf-no-TTA</a></td>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f7143beaf5c25829e686f94162cdfa7d0d88d7b1/cassava-validation.ipynb\" target=\"_blank\">val-no-TTA</a></td>\n<td>noTTA</td>\n<td>0.905</td>\n<td>0.896</td>\n<td>0.9429</td>\n<td>-</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54141945\" target=\"_blank\">inf-TTA</a></td>\n<td>-</td>\n<td>noTTA + TTAx6</td>\n<td>0.907</td>\n<td>0.899</td>\n<td>-</td>\n<td>6:6</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54244968\" target=\"_blank\">inf-TTA-weight</a></td>\n<td>-</td>\n<td>noTTA + TTAx6</td>\n<td><strong>0.908</strong></td>\n<td>0.900</td>\n<td>-</td>\n<td>4:6</td>\n</tr>\n</tbody>\n</table>\n<p>I decided TTA weight by the public LB score, So I think this may overfit to public LB.<br>\nI choose second final submission is average of no TTA and TTA.</p>\n<table>\n<thead>\n<tr>\n<th>Inference</th>\n<th>Validation</th>\n<th>TTA</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n<th>TTA weight</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference/execution?scriptVersionId=54503857\" target=\"_blank\">inf-TTA-avg</a></td>\n<td>-</td>\n<td>noTTA + TTAx9</td>\n<td>0.908</td>\n<td>0.901</td>\n<td>-</td>\n<td>9:9</td>\n</tr>\n</tbody>\n</table>\n<h2>✏️ Memo</h2>\n<p>I've used following techniques for this competition.</p>\n<h3>🍃 Datasets</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook\" target=\"_blank\">Use 2019 datasets</a></li>\n</ul>\n<h3>🛠️ Preprocessing</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450\" target=\"_blank\">Image size 512 ~ 384</a></li>\n<li><a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-train-amp-aug#Define-Train\\Validation-Image-Augmentations\" target=\"_blank\">Additional augumentations</a><ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212347\" target=\"_blank\">No augmentation for first few epochs.</a></li>\n<li>Reduce augmentation for last few epochs.</li>\n<li>Remove augmentation for final epoch.</li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/209065\" target=\"_blank\">CutMix</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212060\" target=\"_blank\">MixUp</a></li></ul></li>\n</ul>\n<h3>📉 Loss</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/202017\" target=\"_blank\">Bi-Tempered Logistic Loss</a><ul>\n<li><a href=\"https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook#Bi-Tempered-Loss\" target=\"_blank\">with label smoothing</a></li></ul></li>\n</ul>\n<h3>🏃 Training</h3>\n<ul>\n<li><a href=\"https://keras.io/examples/vision/image_classification_efficientnet_fine_tuning/#tips-for-fine-tuning-efficientnet\" target=\"_blank\">batch normalization layers frozen for EfficientNet</a><ul>\n<li>also vision transformer.</li></ul></li>\n<li>Gradient accumulation for increasing batch size.</li>\n<li><ul>\n<li></li></ul></li>\n</ul>\n<h3>🚀 Inference</h3>\n<ul>\n<li>Random seed ensemble.</li>\n<li><a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta\" target=\"_blank\">TTA(Test Time Augmentation)</a><ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214559#1171803\" target=\"_blank\">10 is the minimum number to establish a stable result.</a></li></ul></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/210921#1153396\" target=\"_blank\">Include original image on TTA.</a><ul>\n<li>Weighted ensemble of original image inference and augmented one.</li></ul></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/206489\" target=\"_blank\">Light augmentation for inference</a></li>\n</ul>\n<h3>💡 Tips</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450\" target=\"_blank\">A few things for easy start</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/203594\" target=\"_blank\">Sharing some improvements and experiments</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/208402\" target=\"_blank\">Important points to boost the LB score</a></li>\n<li><a href=\"https://www2.slideshare.net/RyuichiKanoh/practical-tips-for-handling-noisy-data-and-annotaiton-204195412\" target=\"_blank\">Practical tips for handling noisy data and annotaiton</a></li>\n</ul>\n<p>Thank you again. I will try to be expert next competition!</p>",
  "messages": [
    {
      "id": "1209553",
      "postDate": "02/19/2021 00:28:27",
      "content": "<h2>✨ Result</h2>\n<ul>\n<li>Private: 28th, 0.901</li>\n<li>Public: 8th, 0.908</li>\n</ul>\n<p>This competition is my first image classification competition,<br>\nso many parts of my solution came from public notebooks and discussions in this competition.<br>\nI've learnt many things from it.</p>\n<p>Thank you for all kagglers and organizers for this competition.</p>\n<p>And I'm happy to get a solo silver as my first medal!</p>\n<h2>🔖 Solution</h2>\n<p>I don't have a strong single model, but the ensemble has surprised me.</p>\n<h3>🎨 Base Model</h3>\n<ul>\n<li>EfficientNet B4 with Noisy Student</li>\n<li>SE-ResNeXt50 (32x4d)</li>\n<li>Vision Transformer (base patch16)</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>Train</th>\n<th>Inference</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f639150116370039666b7bab452abd85932f4d24/cassava-training.ipynb\" target=\"_blank\">EfficientNet</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52135491\" target=\"_blank\">EfficientNet-inf</a></td>\n<td><strong>0.900</strong></td>\n<td>0.891</td>\n<td>0.89103</td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/fb7397ca97d624eb4db467c3d67a4c492313aaad/cassava-training.ipynb\" target=\"_blank\">SE-ResNeXt50</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52812836\" target=\"_blank\">SE-ResNeXt50-inf</a></td>\n<td>0.899</td>\n<td>0.894</td>\n<td><strong>0.89532</strong></td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/9b7093ed7501254f7705edd31f96467f2be00d8b/cassava-training.ipynb\" target=\"_blank\">ViT</a></td>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52893502\" target=\"_blank\">ViT-inf</a></td>\n<td>0.899</td>\n<td>0.890</td>\n<td>0.89220</td>\n</tr>\n</tbody>\n</table>\n<h3>🐎 Ensemble and TTA</h3>\n<p>I tried weighted average of no TTA and TTA.</p>\n<table>\n<thead>\n<tr>\n<th>Inference</th>\n<th>Validation</th>\n<th>TTA</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n<th>TTA weight</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54132321\" target=\"_blank\">inf-no-TTA</a></td>\n<td><a href=\"https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f7143beaf5c25829e686f94162cdfa7d0d88d7b1/cassava-validation.ipynb\" target=\"_blank\">val-no-TTA</a></td>\n<td>noTTA</td>\n<td>0.905</td>\n<td>0.896</td>\n<td>0.9429</td>\n<td>-</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54141945\" target=\"_blank\">inf-TTA</a></td>\n<td>-</td>\n<td>noTTA + TTAx6</td>\n<td>0.907</td>\n<td>0.899</td>\n<td>-</td>\n<td>6:6</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54244968\" target=\"_blank\">inf-TTA-weight</a></td>\n<td>-</td>\n<td>noTTA + TTAx6</td>\n<td><strong>0.908</strong></td>\n<td>0.900</td>\n<td>-</td>\n<td>4:6</td>\n</tr>\n</tbody>\n</table>\n<p>I decided TTA weight by the public LB score, So I think this may overfit to public LB.<br>\nI choose second final submission is average of no TTA and TTA.</p>\n<table>\n<thead>\n<tr>\n<th>Inference</th>\n<th>Validation</th>\n<th>TTA</th>\n<th>Public LB</th>\n<th>Private LB</th>\n<th>CV</th>\n<th>TTA weight</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/imokuri/cassava-inference/execution?scriptVersionId=54503857\" target=\"_blank\">inf-TTA-avg</a></td>\n<td>-</td>\n<td>noTTA + TTAx9</td>\n<td>0.908</td>\n<td>0.901</td>\n<td>-</td>\n<td>9:9</td>\n</tr>\n</tbody>\n</table>\n<h2>✏️ Memo</h2>\n<p>I've used following techniques for this competition.</p>\n<h3>🍃 Datasets</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook\" target=\"_blank\">Use 2019 datasets</a></li>\n</ul>\n<h3>🛠️ Preprocessing</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450\" target=\"_blank\">Image size 512 ~ 384</a></li>\n<li><a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-train-amp-aug#Define-Train\\Validation-Image-Augmentations\" target=\"_blank\">Additional augumentations</a><ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212347\" target=\"_blank\">No augmentation for first few epochs.</a></li>\n<li>Reduce augmentation for last few epochs.</li>\n<li>Remove augmentation for final epoch.</li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/209065\" target=\"_blank\">CutMix</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212060\" target=\"_blank\">MixUp</a></li></ul></li>\n</ul>\n<h3>📉 Loss</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/202017\" target=\"_blank\">Bi-Tempered Logistic Loss</a><ul>\n<li><a href=\"https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook#Bi-Tempered-Loss\" target=\"_blank\">with label smoothing</a></li></ul></li>\n</ul>\n<h3>🏃 Training</h3>\n<ul>\n<li><a href=\"https://keras.io/examples/vision/image_classification_efficientnet_fine_tuning/#tips-for-fine-tuning-efficientnet\" target=\"_blank\">batch normalization layers frozen for EfficientNet</a><ul>\n<li>also vision transformer.</li></ul></li>\n<li>Gradient accumulation for increasing batch size.</li>\n<li><ul>\n<li></li></ul></li>\n</ul>\n<h3>🚀 Inference</h3>\n<ul>\n<li>Random seed ensemble.</li>\n<li><a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta\" target=\"_blank\">TTA(Test Time Augmentation)</a><ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214559#1171803\" target=\"_blank\">10 is the minimum number to establish a stable result.</a></li></ul></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/210921#1153396\" target=\"_blank\">Include original image on TTA.</a><ul>\n<li>Weighted ensemble of original image inference and augmented one.</li></ul></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/206489\" target=\"_blank\">Light augmentation for inference</a></li>\n</ul>\n<h3>💡 Tips</h3>\n<ul>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450\" target=\"_blank\">A few things for easy start</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/203594\" target=\"_blank\">Sharing some improvements and experiments</a></li>\n<li><a href=\"https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/208402\" target=\"_blank\">Important points to boost the LB score</a></li>\n<li><a href=\"https://www2.slideshare.net/RyuichiKanoh/practical-tips-for-handling-noisy-data-and-annotaiton-204195412\" target=\"_blank\">Practical tips for handling noisy data and annotaiton</a></li>\n</ul>\n<p>Thank you again. I will try to be expert next competition!</p>",
      "rawMarkdown": "## ✨ Result\n\n- Private: 28th, 0.901\n- Public: 8th, 0.908\n\nThis competition is my first image classification competition,\nso many parts of my solution came from public notebooks and discussions in this competition.\nI've learnt many things from it.\n\nThank you for all kagglers and organizers for this competition.\n\nAnd I'm happy to get a solo silver as my first medal!\n\n## 🔖 Solution\n\nI don't have a strong single model, but the ensemble has surprised me.\n\n### 🎨 Base Model\n\n- EfficientNet B4 with Noisy Student\n- SE-ResNeXt50 (32x4d)\n- Vision Transformer (base patch16)\n\n| Train          | Inference          | Public LB | Private LB | CV          |\n| ---            | ---                | ---       | ---        | ---         |\n| [EfficientNet] | [EfficientNet-inf] | **0.900** | 0.891      | 0.89103     |\n| [SE-ResNeXt50] | [SE-ResNeXt50-inf] | 0.899     | 0.894      | **0.89532** |\n| [ViT]          | [ViT-inf]          | 0.899     | 0.890      | 0.89220     |\n\n[EfficientNet]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f639150116370039666b7bab452abd85932f4d24/cassava-training.ipynb\n[EfficientNet-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52135491\n[SE-ResNeXt50]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/fb7397ca97d624eb4db467c3d67a4c492313aaad/cassava-training.ipynb\n[SE-ResNeXt50-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52812836\n[ViT]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/9b7093ed7501254f7705edd31f96467f2be00d8b/cassava-training.ipynb\n[ViT-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52893502\n\n### 🐎 Ensemble and TTA\n\nI tried weighted average of no TTA and TTA.\n\n| Inference        | Validation   | TTA           | Public LB | Private LB | CV     | TTA weight |\n| ---              | ---          | ---           | ---       | ---        | ---    | ---        |\n| [inf-no-TTA]     | [val-no-TTA] | noTTA         | 0.905     | 0.896      | 0.9429 | -          |\n| [inf-TTA]        | -            | noTTA + TTAx6 | 0.907     | 0.899      | -      | 6:6        |\n| [inf-TTA-weight] | -            | noTTA + TTAx6 | **0.908** | 0.900      | -      | 4:6        |\n\nI decided TTA weight by the public LB score, So I think this may overfit to public LB.\nI choose second final submission is average of no TTA and TTA.\n\n| Inference     | Validation | TTA           | Public LB | Private LB | CV  | TTA weight |\n| ---           | ---        | ---           | ---       | ---        | --- | ---        |\n| [inf-TTA-avg] | -          | noTTA + TTAx9 | 0.908     | 0.901      | -   | 9:9        |\n\n[inf-no-TTA]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54132321\n[inf-TTA]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54141945\n[inf-TTA-weight]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54244968\n[val-no-TTA]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f7143beaf5c25829e686f94162cdfa7d0d88d7b1/cassava-validation.ipynb\n[inf-TTA-avg]: https://www.kaggle.com/imokuri/cassava-inference/execution?scriptVersionId=54503857\n\n## ✏️ Memo\n\nI've used following techniques for this competition.\n\n### 🍃 Datasets\n\n- [Use 2019 datasets](https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook)\n\n### 🛠️ Preprocessing\n\n- [Image size 512 ~ 384](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450)\n- [Additional augumentations](https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-train-amp-aug#Define-Train\\Validation-Image-Augmentations)\n    - [No augmentation for first few epochs.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212347)\n    - Reduce augmentation for last few epochs.\n    - Remove augmentation for final epoch.\n    - [CutMix](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/209065)\n    - [MixUp](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212060)\n\n### 📉 Loss\n\n- [Bi-Tempered Logistic Loss](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/202017)\n    - [with label smoothing](https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook#Bi-Tempered-Loss)\n\n### 🏃 Training\n\n- [batch normalization layers frozen for EfficientNet](https://keras.io/examples/vision/image_classification_efficientnet_fine_tuning/#tips-for-fine-tuning-efficientnet)\n    - also vision transformer.\n- Gradient accumulation for increasing batch size.\n- ~~[Distillation](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214959)~~\n    - ~~[Distillation Loss](https://ramesharvind.github.io/posts/deep-learning/knowledge-distillation/)~~\n\n### 🚀 Inference\n\n- Random seed ensemble.\n- [TTA(Test Time Augmentation)](https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta)\n    - [10 is the minimum number to establish a stable result.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214559#1171803)\n- [Include original image on TTA.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/210921#1153396)\n    - Weighted ensemble of original image inference and augmented one.\n- [Light augmentation for inference](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/206489)\n\n### 💡 Tips\n\n- [A few things for easy start](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450)\n- [Sharing some improvements and experiments](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/203594)\n- [Important points to boost the LB score](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/208402)\n- [Practical tips for handling noisy data and annotaiton](https://www2.slideshare.net/RyuichiKanoh/practical-tips-for-handling-noisy-data-and-annotaiton-204195412)\n\n\nThank you again. I will try to be expert next competition!",
      "votes": null
    },
    {
      "id": "1209561",
      "postDate": "02/19/2021 00:33:31",
      "content": "<p>Thanks for sharing.</p>",
      "rawMarkdown": "Thanks for sharing.",
      "votes": null
    },
    {
      "id": "1209567",
      "postDate": "02/19/2021 00:35:25",
      "content": "<p>Congratulations first your medal👍  I think mixing TTA with noTTA is a great solution. I'm going to learn a really good way.</p>",
      "rawMarkdown": "Congratulations first your medal👍  I think mixing TTA with noTTA is a great solution. I'm going to learn a really good way.",
      "votes": null
    },
    {
      "id": "1209572",
      "postDate": "02/19/2021 00:37:14",
      "content": "<p>Thank you! 😄</p>",
      "rawMarkdown": "Thank you! 😄",
      "votes": null
    },
    {
      "id": "1209573",
      "postDate": "02/19/2021 00:37:18",
      "content": "<p>Congratulations, can you share the code? please, thanks.</p>",
      "rawMarkdown": "Congratulations, can you share the code? please, thanks.",
      "votes": null
    },
    {
      "id": "1209580",
      "postDate": "02/19/2021 00:40:49",
      "content": "<p>Thank you! I made notebooks and repository public right before, so some time may need to affect.</p>",
      "rawMarkdown": "Thank you! I made notebooks and repository public right before, so some time may need to affect.",
      "votes": null
    },
    {
      "id": "1209600",
      "postDate": "02/19/2021 00:57:53",
      "content": "<p>Yeah. I should have tried this out. Never thought of it mix no tta and tta.</p>\n<p>Congrats on your medal :) おめでとう🎉</p>",
      "rawMarkdown": "Yeah. I should have tried this out. Never thought of it mix no tta and tta.\n\nCongrats on your medal :) おめでとう🎉",
      "votes": null
    },
    {
      "id": "1209606",
      "postDate": "02/19/2021 01:02:08",
      "content": "<p>Thank you so much! 😆</p>",
      "rawMarkdown": "Thank you so much! 😆",
      "votes": null
    },
    {
      "id": "1209613",
      "postDate": "02/19/2021 01:06:49",
      "content": "<p>Congrats for your first medal and thank you for sharing your solution :)</p>",
      "rawMarkdown": "Congrats for your first medal and thank you for sharing your solution :)",
      "votes": null
    },
    {
      "id": "1209616",
      "postDate": "02/19/2021 01:09:41",
      "content": "<p>Thank you! ✨</p>",
      "rawMarkdown": "Thank you! ✨",
      "votes": null
    },
    {
      "id": "1209625",
      "postDate": "02/19/2021 01:23:16",
      "content": "<p>Congratulations. I enjoyed comparing the results with your explanations  </p>",
      "rawMarkdown": "Congratulations. I enjoyed comparing the results with your explanations",
      "votes": null
    },
    {
      "id": "1209631",
      "postDate": "02/19/2021 01:27:40",
      "content": "<p>Thank you! 😄</p>",
      "rawMarkdown": "Thank you! 😄",
      "votes": null
    },
    {
      "id": "1209633",
      "postDate": "02/19/2021 01:28:21",
      "content": "<p>Nice! Congrats on your medal! Beautiful post, keep it up!</p>",
      "rawMarkdown": "Nice! Congrats on your medal! Beautiful post, keep it up!",
      "votes": null
    },
    {
      "id": "1209637",
      "postDate": "02/19/2021 01:31:55",
      "content": "<p>Thank you! 👍</p>",
      "rawMarkdown": "Thank you! 👍",
      "votes": null
    },
    {
      "id": "1209644",
      "postDate": "02/19/2021 01:48:40",
      "content": "<p>Congratulations and welcome! Nice job earning solo silver and great job surviving the shakeup!</p>",
      "rawMarkdown": "Congratulations and welcome! Nice job earning solo silver and great job surviving the shakeup!",
      "votes": null
    },
    {
      "id": "1209654",
      "postDate": "02/19/2021 01:58:40",
      "content": "<p>Thank you very much! 😆 I always learned many things, from what you discussed. I'll keep trying!</p>",
      "rawMarkdown": "Thank you very much! 😆 I always learned many things, from what you discussed. I'll keep trying!",
      "votes": null
    },
    {
      "id": "1209657",
      "postDate": "02/19/2021 02:00:49",
      "content": "<p>Congratulations !!<br>\nI learned no-TTA and TTA  weighted average technique from this discussion! <br>\nI also think CV 0.9429 is too high, and this is probably because your inference kernel (<a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta\" target=\"_blank\">https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta</a>)<br>\ndoes not set random_state when StratifiedKfold. This caused some leakage.</p>",
      "rawMarkdown": "Congratulations !!\nI learned no-TTA and TTA  weighted average technique from this discussion! \nI also think CV 0.9429 is too high, and this is probably because your inference kernel (https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta)\ndoes not set random_state when StratifiedKfold. This caused some leakage.",
      "votes": null
    },
    {
      "id": "1209675",
      "postDate": "02/19/2021 02:19:24",
      "content": "<p>Thank you! 😄</p>\n<blockquote>\n  <p>CV 0.9429 is too high</p>\n</blockquote>\n<p>Yeah, I don't know how to validate ensemble models in fact.<br>\nSo, this value came from the inference of training data after training.<br>\nIt means all data is leaked.<br>\nI would like to learn how to validate ensemble models using trained models…</p>",
      "rawMarkdown": "Thank you! 😄\n\n> CV 0.9429 is too high\n\nYeah, I don't know how to validate ensemble models in fact.\nSo, this value came from the inference of training data after training.\nIt means all data is leaked.\nI would like to learn how to validate ensemble models using trained models...",
      "votes": null
    },
    {
      "id": "1209701",
      "postDate": "02/19/2021 02:35:10",
      "content": "<p>Congratulations !!!<br>\nThanks for sharing~</p>",
      "rawMarkdown": "Congratulations !!!\nThanks for sharing~",
      "votes": null
    },
    {
      "id": "1209703",
      "postDate": "02/19/2021 02:38:16",
      "content": "<p>A  really  nice move.</p>",
      "rawMarkdown": "A  really  nice move.",
      "votes": null
    },
    {
      "id": "1209706",
      "postDate": "02/19/2021 02:39:30",
      "content": "<p>Congratulations on your medal👍.Great job! Ensemble of TTA with noTTA is a great idea. Thanks for sharing your solution &amp; tips</p>",
      "rawMarkdown": "Congratulations on your medal👍.Great job! Ensemble of TTA with noTTA is a great idea. Thanks for sharing your solution & tips",
      "votes": null
    },
    {
      "id": "1209708",
      "postDate": "02/19/2021 02:41:33",
      "content": "<p>Thank you! ✨</p>",
      "rawMarkdown": "Thank you! ✨",
      "votes": null
    },
    {
      "id": "1209721",
      "postDate": "02/19/2021 02:51:18",
      "content": "<p>Congratulations!</p>",
      "rawMarkdown": "Congratulations!",
      "votes": null
    },
    {
      "id": "1209814",
      "postDate": "02/19/2021 03:52:39",
      "content": "<p>Congrats！！ This is my first competition and I'm really grateful to those public notebooks for teaching me how to approach the competition. I'm so happy to get a very good grades,too. I hope we can keep up the good work and get better in the next competitons!!!! :)</p>",
      "rawMarkdown": "Congrats！！ This is my first competition and I'm really grateful to those public notebooks for teaching me how to approach the competition. I'm so happy to get a very good grades,too. I hope we can keep up the good work and get better in the next competitons!!!! :)",
      "votes": null
    },
    {
      "id": "1209840",
      "postDate": "02/19/2021 04:19:34",
      "content": "<p>Our approach was almost the same as you, though still, we may have missed some points that we should have taken care of and congrats on your first medal!</p>",
      "rawMarkdown": "Our approach was almost the same as you, though still, we may have missed some points that we should have taken care of and congrats on your first medal!",
      "votes": null
    },
    {
      "id": "1209915",
      "postDate": "02/19/2021 05:29:42",
      "content": "<p>Thank you! 😀 I also think someone tried the same approach. I'm not sure what is differentiated with you, but I hope it all goes well for you next competition.</p>",
      "rawMarkdown": "Thank you! 😀 I also think someone tried the same approach. I'm not sure what is differentiated with you, but I hope it all goes well for you next competition.",
      "votes": null
    },
    {
      "id": "1209917",
      "postDate": "02/19/2021 05:32:40",
      "content": "<p>Thank you! And congratulate you too! I also think Kaggle is a great place to learn.</p>",
      "rawMarkdown": "Thank you! And congratulate you too! I also think Kaggle is a great place to learn.",
      "votes": null
    },
    {
      "id": "1209976",
      "postDate": "02/19/2021 06:17:02",
      "content": "<p>How to do \"Random seed ensemble\"? I saw you only set \"seed = 4021\" in inference. Btw, what's the principle of setting the seed = 4021? Thanks.</p>",
      "rawMarkdown": "How to do \"Random seed ensemble\"? I saw you only set \"seed = 4021\" in inference. Btw, what's the principle of setting the seed = 4021? Thanks.",
      "votes": null
    },
    {
      "id": "1210028",
      "postDate": "02/19/2021 06:55:43",
      "content": "<p>I'm sorry, it may not correct word. I use different seed on training each base model. 4021 has no meaning, it's like throwing dice. 😁</p>",
      "rawMarkdown": "I'm sorry, it may not correct word. I use different seed on training each base model. 4021 has no meaning, it's like throwing dice. 😁",
      "votes": null
    },
    {
      "id": "1210155",
      "postDate": "02/19/2021 08:29:06",
      "content": "<p>LOL. Thanks for your reply.</p>",
      "rawMarkdown": "LOL. Thanks for your reply.",
      "votes": null
    },
    {
      "id": "1210174",
      "postDate": "02/19/2021 08:37:50",
      "content": "<p>Congrats and thank you for laying out your approach, very helpful!</p>",
      "rawMarkdown": "Congrats and thank you for laying out your approach, very helpful!",
      "votes": null
    },
    {
      "id": "1210228",
      "postDate": "02/19/2021 09:25:50",
      "content": "<p>Thank you! 😄</p>",
      "rawMarkdown": "Thank you! 😄",
      "votes": null
    },
    {
      "id": "1210266",
      "postDate": "02/19/2021 09:57:39",
      "content": "<p>Our approach was almost same… but we picked wrong submission for final score and fell by 1000 places… </p>",
      "rawMarkdown": "Our approach was almost same... but we picked wrong submission for final score and fell by 1000 places...",
      "votes": null
    },
    {
      "id": "1210974",
      "postDate": "02/19/2021 20:59:31",
      "content": "<p>Oh, I also think the final submission choice is most difficult part of kaggle.. I failed to choose my final submissions last competition MoA. And I've learned to more believe public LB for me. It is successful for this competition. Good luck for your next competition!</p>",
      "rawMarkdown": "Oh, I also think the final submission choice is most difficult part of kaggle.. I failed to choose my final submissions last competition MoA. And I've learned to more believe public LB for me. It is successful for this competition. Good luck for your next competition!",
      "votes": null
    },
    {
      "id": "1210981",
      "postDate": "02/19/2021 21:08:52",
      "content": "<p>I would love to know how to validate ensemble models too. My guess would be you just keep one hold out set for testing and never use it in any trainings. Then you use this to validate the ensemble models. This way you can avoid data leak.</p>",
      "rawMarkdown": "I would love to know how to validate ensemble models too. My guess would be you just keep one hold out set for testing and never use it in any trainings. Then you use this to validate the ensemble models. This way you can avoid data leak.",
      "votes": null
    },
    {
      "id": "1210996",
      "postDate": "02/19/2021 21:23:49",
      "content": "<p>Thank you. I think so. I prioritized having more training data rather than keeping verification data.</p>",
      "rawMarkdown": "Thank you. I think so. I prioritized having more training data rather than keeping verification data.",
      "votes": null
    },
    {
      "id": "1211000",
      "postDate": "02/19/2021 21:32:44",
      "content": "<p>Yes, it's very hard choice. There is no point to test with 2019 data too, as it is less noisy data. I didn't have a legit cross validation method so i just trust my instinct.</p>",
      "rawMarkdown": "Yes, it's very hard choice. There is no point to test with 2019 data too, as it is less noisy data. I didn't have a legit cross validation method so i just trust my instinct.",
      "votes": null
    },
    {
      "id": "1211373",
      "postDate": "02/20/2021 06:58:32",
      "content": "<p>Congratulations on your medal!!!<br>\nYour solution and references are so helpful. Thank you for sharing your solution. </p>",
      "rawMarkdown": "Congratulations on your medal!!!\nYour solution and references are so helpful. Thank you for sharing your solution.",
      "votes": null
    },
    {
      "id": "1211384",
      "postDate": "02/20/2021 07:05:42",
      "content": "<p>Thank you! 😄</p>",
      "rawMarkdown": "Thank you! 😄",
      "votes": null
    },
    {
      "id": "1211592",
      "postDate": "02/20/2021 10:47:29",
      "content": "<p>Thanks for the detailed solution with a lot of helpful links!</p>",
      "rawMarkdown": "Thanks for the detailed solution with a lot of helpful links!",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1209561,
      "author_name": "komakizzz",
      "author_url": "",
      "post_date": "02/19/2021 00:33:31",
      "content": "<p>Thanks for sharing.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1209567,
      "author_name": "chocozzz",
      "author_url": "",
      "post_date": "02/19/2021 00:35:25",
      "content": "<p>Congratulations first your medal👍  I think mixing TTA with noTTA is a great solution. I'm going to learn a really good way.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209572,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 00:37:14",
          "content": "<p>Thank you! 😄</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1209600,
          "author_name": "tom88jerry",
          "author_url": "",
          "post_date": "02/19/2021 00:57:53",
          "content": "<p>Yeah. I should have tried this out. Never thought of it mix no tta and tta.</p>\n<p>Congrats on your medal :) おめでとう🎉</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1209606,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 01:02:08",
          "content": "<p>Thank you so much! 😆</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209573,
      "author_name": "oscarrangel",
      "author_url": "",
      "post_date": "02/19/2021 00:37:18",
      "content": "<p>Congratulations, can you share the code? please, thanks.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209580,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 00:40:49",
          "content": "<p>Thank you! I made notebooks and repository public right before, so some time may need to affect.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209613,
      "author_name": "khursani8",
      "author_url": "",
      "post_date": "02/19/2021 01:06:49",
      "content": "<p>Congrats for your first medal and thank you for sharing your solution :)</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209616,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 01:09:41",
          "content": "<p>Thank you! ✨</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209625,
      "author_name": "imoore",
      "author_url": "",
      "post_date": "02/19/2021 01:23:16",
      "content": "<p>Congratulations. I enjoyed comparing the results with your explanations  </p>",
      "votes": null,
      "replies": [
        {
          "id": 1209631,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 01:27:40",
          "content": "<p>Thank you! 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209633,
      "author_name": "andyjianzhou",
      "author_url": "",
      "post_date": "02/19/2021 01:28:21",
      "content": "<p>Nice! Congrats on your medal! Beautiful post, keep it up!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209637,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 01:31:55",
          "content": "<p>Thank you! 👍</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209644,
      "author_name": "cdeotte",
      "author_url": "",
      "post_date": "02/19/2021 01:48:40",
      "content": "<p>Congratulations and welcome! Nice job earning solo silver and great job surviving the shakeup!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209654,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 01:58:40",
          "content": "<p>Thank you very much! 😆 I always learned many things, from what you discussed. I'll keep trying!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209657,
      "author_name": "yutoshibata",
      "author_url": "",
      "post_date": "02/19/2021 02:00:49",
      "content": "<p>Congratulations !!<br>\nI learned no-TTA and TTA  weighted average technique from this discussion! <br>\nI also think CV 0.9429 is too high, and this is probably because your inference kernel (<a href=\"https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta\" target=\"_blank\">https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta</a>)<br>\ndoes not set random_state when StratifiedKfold. This caused some leakage.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209675,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 02:19:24",
          "content": "<p>Thank you! 😄</p>\n<blockquote>\n  <p>CV 0.9429 is too high</p>\n</blockquote>\n<p>Yeah, I don't know how to validate ensemble models in fact.<br>\nSo, this value came from the inference of training data after training.<br>\nIt means all data is leaked.<br>\nI would like to learn how to validate ensemble models using trained models…</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1210981,
          "author_name": "tom88jerry",
          "author_url": "",
          "post_date": "02/19/2021 21:08:52",
          "content": "<p>I would love to know how to validate ensemble models too. My guess would be you just keep one hold out set for testing and never use it in any trainings. Then you use this to validate the ensemble models. This way you can avoid data leak.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1210996,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 21:23:49",
          "content": "<p>Thank you. I think so. I prioritized having more training data rather than keeping verification data.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1211000,
          "author_name": "tom88jerry",
          "author_url": "",
          "post_date": "02/19/2021 21:32:44",
          "content": "<p>Yes, it's very hard choice. There is no point to test with 2019 data too, as it is less noisy data. I didn't have a legit cross validation method so i just trust my instinct.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209701,
      "author_name": "yienngxiong",
      "author_url": "",
      "post_date": "02/19/2021 02:35:10",
      "content": "<p>Congratulations !!!<br>\nThanks for sharing~</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1209703,
      "author_name": "xujingzhao",
      "author_url": "",
      "post_date": "02/19/2021 02:38:16",
      "content": "<p>A  really  nice move.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1209706,
      "author_name": "deepi20",
      "author_url": "",
      "post_date": "02/19/2021 02:39:30",
      "content": "<p>Congratulations on your medal👍.Great job! Ensemble of TTA with noTTA is a great idea. Thanks for sharing your solution &amp; tips</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209708,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 02:41:33",
          "content": "<p>Thank you! ✨</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209721,
      "author_name": "wonjunpark",
      "author_url": "",
      "post_date": "02/19/2021 02:51:18",
      "content": "<p>Congratulations!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1209814,
      "author_name": "yuxuanchen666",
      "author_url": "",
      "post_date": "02/19/2021 03:52:39",
      "content": "<p>Congrats！！ This is my first competition and I'm really grateful to those public notebooks for teaching me how to approach the competition. I'm so happy to get a very good grades,too. I hope we can keep up the good work and get better in the next competitons!!!! :)</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209917,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 05:32:40",
          "content": "<p>Thank you! And congratulate you too! I also think Kaggle is a great place to learn.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209840,
      "author_name": "mrinath",
      "author_url": "",
      "post_date": "02/19/2021 04:19:34",
      "content": "<p>Our approach was almost the same as you, though still, we may have missed some points that we should have taken care of and congrats on your first medal!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1209915,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 05:29:42",
          "content": "<p>Thank you! 😀 I also think someone tried the same approach. I'm not sure what is differentiated with you, but I hope it all goes well for you next competition.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1209976,
      "author_name": "komakizzz",
      "author_url": "",
      "post_date": "02/19/2021 06:17:02",
      "content": "<p>How to do \"Random seed ensemble\"? I saw you only set \"seed = 4021\" in inference. Btw, what's the principle of setting the seed = 4021? Thanks.</p>",
      "votes": null,
      "replies": [
        {
          "id": 1210028,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 06:55:43",
          "content": "<p>I'm sorry, it may not correct word. I use different seed on training each base model. 4021 has no meaning, it's like throwing dice. 😁</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1210155,
          "author_name": "komakizzz",
          "author_url": "",
          "post_date": "02/19/2021 08:29:06",
          "content": "<p>LOL. Thanks for your reply.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1210174,
      "author_name": "zenokujawa",
      "author_url": "",
      "post_date": "02/19/2021 08:37:50",
      "content": "<p>Congrats and thank you for laying out your approach, very helpful!</p>",
      "votes": null,
      "replies": [
        {
          "id": 1210228,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 09:25:50",
          "content": "<p>Thank you! 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1210266,
      "author_name": "dmitriybelichenko",
      "author_url": "",
      "post_date": "02/19/2021 09:57:39",
      "content": "<p>Our approach was almost same… but we picked wrong submission for final score and fell by 1000 places… </p>",
      "votes": null,
      "replies": [
        {
          "id": 1210974,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/19/2021 20:59:31",
          "content": "<p>Oh, I also think the final submission choice is most difficult part of kaggle.. I failed to choose my final submissions last competition MoA. And I've learned to more believe public LB for me. It is successful for this competition. Good luck for your next competition!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1211373,
      "author_name": "yutasasaki",
      "author_url": "",
      "post_date": "02/20/2021 06:58:32",
      "content": "<p>Congratulations on your medal!!!<br>\nYour solution and references are so helpful. Thank you for sharing your solution. </p>",
      "votes": null,
      "replies": [
        {
          "id": 1211384,
          "author_name": "imokuri",
          "author_url": "",
          "post_date": "02/20/2021 07:05:42",
          "content": "<p>Thank you! 😄</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1211592,
      "author_name": "xfffrank",
      "author_url": "",
      "post_date": "02/20/2021 10:47:29",
      "content": "<p>Thanks for the detailed solution with a lot of helpful links!</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1209553": "## ✨ Result\n\n- Private: 28th, 0.901\n- Public: 8th, 0.908\n\nThis competition is my first image classification competition,\nso many parts of my solution came from public notebooks and discussions in this competition.\nI've learnt many things from it.\n\nThank you for all kagglers and organizers for this competition.\n\nAnd I'm happy to get a solo silver as my first medal!\n\n## 🔖 Solution\n\nI don't have a strong single model, but the ensemble has surprised me.\n\n### 🎨 Base Model\n\n- EfficientNet B4 with Noisy Student\n- SE-ResNeXt50 (32x4d)\n- Vision Transformer (base patch16)\n\n| Train          | Inference          | Public LB | Private LB | CV          |\n| ---            | ---                | ---       | ---        | ---         |\n| [EfficientNet] | [EfficientNet-inf] | **0.900** | 0.891      | 0.89103     |\n| [SE-ResNeXt50] | [SE-ResNeXt50-inf] | 0.899     | 0.894      | **0.89532** |\n| [ViT]          | [ViT-inf]          | 0.899     | 0.890      | 0.89220     |\n\n[EfficientNet]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f639150116370039666b7bab452abd85932f4d24/cassava-training.ipynb\n[EfficientNet-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52135491\n[SE-ResNeXt50]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/fb7397ca97d624eb4db467c3d67a4c492313aaad/cassava-training.ipynb\n[SE-ResNeXt50-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52812836\n[ViT]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/9b7093ed7501254f7705edd31f96467f2be00d8b/cassava-training.ipynb\n[ViT-inf]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=52893502\n\n### 🐎 Ensemble and TTA\n\nI tried weighted average of no TTA and TTA.\n\n| Inference        | Validation   | TTA           | Public LB | Private LB | CV     | TTA weight |\n| ---              | ---          | ---           | ---       | ---        | ---    | ---        |\n| [inf-no-TTA]     | [val-no-TTA] | noTTA         | 0.905     | 0.896      | 0.9429 | -          |\n| [inf-TTA]        | -            | noTTA + TTAx6 | 0.907     | 0.899      | -      | 6:6        |\n| [inf-TTA-weight] | -            | noTTA + TTAx6 | **0.908** | 0.900      | -      | 4:6        |\n\nI decided TTA weight by the public LB score, So I think this may overfit to public LB.\nI choose second final submission is average of no TTA and TTA.\n\n| Inference     | Validation | TTA           | Public LB | Private LB | CV  | TTA weight |\n| ---           | ---        | ---           | ---       | ---        | --- | ---        |\n| [inf-TTA-avg] | -          | noTTA + TTAx9 | 0.908     | 0.901      | -   | 9:9        |\n\n[inf-no-TTA]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54132321\n[inf-TTA]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54141945\n[inf-TTA-weight]: https://www.kaggle.com/imokuri/cassava-inference?scriptVersionId=54244968\n[val-no-TTA]: https://github.com/IMOKURI/Cassava-Leaf-Disease-Classification/blob/f7143beaf5c25829e686f94162cdfa7d0d88d7b1/cassava-validation.ipynb\n[inf-TTA-avg]: https://www.kaggle.com/imokuri/cassava-inference/execution?scriptVersionId=54503857\n\n## ✏️ Memo\n\nI've used following techniques for this competition.\n\n### 🍃 Datasets\n\n- [Use 2019 datasets](https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook)\n\n### 🛠️ Preprocessing\n\n- [Image size 512 ~ 384](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450)\n- [Additional augumentations](https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-train-amp-aug#Define-Train\\Validation-Image-Augmentations)\n    - [No augmentation for first few epochs.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212347)\n    - Reduce augmentation for last few epochs.\n    - Remove augmentation for final epoch.\n    - [CutMix](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/209065)\n    - [MixUp](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/212060)\n\n### 📉 Loss\n\n- [Bi-Tempered Logistic Loss](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/202017)\n    - [with label smoothing](https://www.kaggle.com/piantic/train-cassava-starter-using-various-loss-funcs/notebook#Bi-Tempered-Loss)\n\n### 🏃 Training\n\n- [batch normalization layers frozen for EfficientNet](https://keras.io/examples/vision/image_classification_efficientnet_fine_tuning/#tips-for-fine-tuning-efficientnet)\n    - also vision transformer.\n- Gradient accumulation for increasing batch size.\n- ~~[Distillation](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214959)~~\n    - ~~[Distillation Loss](https://ramesharvind.github.io/posts/deep-learning/knowledge-distillation/)~~\n\n### 🚀 Inference\n\n- Random seed ensemble.\n- [TTA(Test Time Augmentation)](https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta)\n    - [10 is the minimum number to establish a stable result.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/214559#1171803)\n- [Include original image on TTA.](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/210921#1153396)\n    - Weighted ensemble of original image inference and augmented one.\n- [Light augmentation for inference](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/206489)\n\n### 💡 Tips\n\n- [A few things for easy start](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/207450)\n- [Sharing some improvements and experiments](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/203594)\n- [Important points to boost the LB score](https://www.kaggle.com/c/cassava-leaf-disease-classification/discussion/208402)\n- [Practical tips for handling noisy data and annotaiton](https://www2.slideshare.net/RyuichiKanoh/practical-tips-for-handling-noisy-data-and-annotaiton-204195412)\n\n\nThank you again. I will try to be expert next competition!",
    "1209561": "Thanks for sharing.",
    "1209567": "Congratulations first your medal👍  I think mixing TTA with noTTA is a great solution. I'm going to learn a really good way.",
    "1209572": "Thank you! 😄",
    "1209573": "Congratulations, can you share the code? please, thanks.",
    "1209580": "Thank you! I made notebooks and repository public right before, so some time may need to affect.",
    "1209600": "Yeah. I should have tried this out. Never thought of it mix no tta and tta.\n\nCongrats on your medal :) おめでとう🎉",
    "1209606": "Thank you so much! 😆",
    "1209613": "Congrats for your first medal and thank you for sharing your solution :)",
    "1209616": "Thank you! ✨",
    "1209625": "Congratulations. I enjoyed comparing the results with your explanations",
    "1209631": "Thank you! 😄",
    "1209633": "Nice! Congrats on your medal! Beautiful post, keep it up!",
    "1209637": "Thank you! 👍",
    "1209644": "Congratulations and welcome! Nice job earning solo silver and great job surviving the shakeup!",
    "1209654": "Thank you very much! 😆 I always learned many things, from what you discussed. I'll keep trying!",
    "1209657": "Congratulations !!\nI learned no-TTA and TTA  weighted average technique from this discussion! \nI also think CV 0.9429 is too high, and this is probably because your inference kernel (https://www.kaggle.com/khyeh0719/pytorch-efficientnet-baseline-inference-tta)\ndoes not set random_state when StratifiedKfold. This caused some leakage.",
    "1209675": "Thank you! 😄\n\n> CV 0.9429 is too high\n\nYeah, I don't know how to validate ensemble models in fact.\nSo, this value came from the inference of training data after training.\nIt means all data is leaked.\nI would like to learn how to validate ensemble models using trained models...",
    "1209701": "Congratulations !!!\nThanks for sharing~",
    "1209703": "A  really  nice move.",
    "1209706": "Congratulations on your medal👍.Great job! Ensemble of TTA with noTTA is a great idea. Thanks for sharing your solution & tips",
    "1209708": "Thank you! ✨",
    "1209721": "Congratulations!",
    "1209814": "Congrats！！ This is my first competition and I'm really grateful to those public notebooks for teaching me how to approach the competition. I'm so happy to get a very good grades,too. I hope we can keep up the good work and get better in the next competitons!!!! :)",
    "1209840": "Our approach was almost the same as you, though still, we may have missed some points that we should have taken care of and congrats on your first medal!",
    "1209915": "Thank you! 😀 I also think someone tried the same approach. I'm not sure what is differentiated with you, but I hope it all goes well for you next competition.",
    "1209917": "Thank you! And congratulate you too! I also think Kaggle is a great place to learn.",
    "1209976": "How to do \"Random seed ensemble\"? I saw you only set \"seed = 4021\" in inference. Btw, what's the principle of setting the seed = 4021? Thanks.",
    "1210028": "I'm sorry, it may not correct word. I use different seed on training each base model. 4021 has no meaning, it's like throwing dice. 😁",
    "1210155": "LOL. Thanks for your reply.",
    "1210174": "Congrats and thank you for laying out your approach, very helpful!",
    "1210228": "Thank you! 😄",
    "1210266": "Our approach was almost same... but we picked wrong submission for final score and fell by 1000 places...",
    "1210974": "Oh, I also think the final submission choice is most difficult part of kaggle.. I failed to choose my final submissions last competition MoA. And I've learned to more believe public LB for me. It is successful for this competition. Good luck for your next competition!",
    "1210981": "I would love to know how to validate ensemble models too. My guess would be you just keep one hold out set for testing and never use it in any trainings. Then you use this to validate the ensemble models. This way you can avoid data leak.",
    "1210996": "Thank you. I think so. I prioritized having more training data rather than keeping verification data.",
    "1211000": "Yes, it's very hard choice. There is no point to test with 2019 data too, as it is less noisy data. I didn't have a legit cross validation method so i just trust my instinct.",
    "1211373": "Congratulations on your medal!!!\nYour solution and references are so helpful. Thank you for sharing your solution.",
    "1211384": "Thank you! 😄",
    "1211592": "Thanks for the detailed solution with a lot of helpful links!"
  },
  "source": "meta"
}