# Top %8 solution - (with unselected top %4)

Hi everyone,
First of all, congrats to all the winners. It is a fantastic achievement. Also thanks to Kaggle and the competition host. This was quite an interesting challenge with multiple aspects. The noise and the class imbalance were hard to tackle.
Our team consists of two people (me and my great teammate
[@emirkocak](https://www.kaggle.com/emirkocak)
). We finished the competition in the top %8. But like many other teams, we had a higher private LB submission which we did not select :) Here, we will summarize both of our solutions:
Our final submission (Top %8 - private: 0.8984):
We started this competition by visualizing and exploring the data. At first glance, it was somewhat confusing because of the wrong labels. With this in mind, we passed to the modeling stage.
To set up a baseline score, we used this
[notebook](https://www.kaggle.com/yasufuminakama/cassava-resnext50-32x4d-starter-training/)
(thanks a lot
[@yasufuminakama](https://www.kaggle.com/yasufuminakama)
🙏) and used the following augmentations. Here
HueSaturationValue
and
RandomBrightnessContrast
was optional. We experimented with the different versions of them.
def get_train_transforms():
    return albumentations.Compose([
        # Optionally only resize
        # albumentations.Resize(512, 512),
        albumentations.RandomResizedCrop(
            512, 512, 
            scale=(0.6, 1.0), ratio=(3/5, 5/3)),
        albumentations.Transpose(),
        albumentations.HorizontalFlip(),
        albumentations.VerticalFlip(),
        albumentations.ShiftScaleRotate(),
        albumentations.HueSaturationValue(
            hue_shift_limit=0.2,
            sat_shift_limit=0.2,
            val_shift_limit=0.2,
            p=0.5
        ),
        albumentations.RandomBrightnessContrast(
            brightness_limit=(-0.1, 0.1),
            contrast_limit=(-0.1, 0.1),
            p=0.5
        ),
        albumentations.Normalize(
            mean=[0.485, 0.456, 0.406], 
            std=[0.229, 0.224, 0.225]),
        albumentations.Cutout(num_holes=8, max_h_size=32, max_w_size=32, fill_value=0, p=0.5),
        ToTensorV2(),
    ])
Model Details:
Backbone: resnext50, efficient_net_b3, ViT
2019 data
Image size:
(resnext50, efficient_net_b3): 512
(ViT): 384
Folds: 5
Epoch: 10 (for each fold)
Optimizer: Adam(lr=0.001)
Scheduler: Cosine + Warmup (1 warmup + 9 cosine annealing)
TTA: 5 for resnext50 and ViT, 8 for the efficient_net_b3
Here we applied both light and heavy tta. Heavy one performed better.
Top %4 submission: (private: 0.8993)
This submission looks pretty much the same as above but a little bit lighter. I guess "The Less is More" philosophy was correct here :)
Backbone: resnext50, efficient_net_b1
Image size: 512
Folds: 5
Other parameters are the same
TTA: 5
Opposite to the model above, here light TTA worked much better (only transpose and flip).
Things did not work:
SnapMix and CutMix
Pseudo Labelling
It was funny and challenging competition for both of us. We learned a lot. Congratulations to the top teams again. ✌️
Sinan & Emir