# Congrats to all! (67th solution with code)

Congrats to all winners and everyone who finished this competition! It has been an amazing learning experience for me as I am still super new to image classification problems. Special thanks to
[@drhabib](/drhabib)
where I got the inspirition from for my approach and
[@ratthachat](/ratthachat)
for his amazing preprocessing kernels.
So here is my approach, which is quite simple:
The model is EfficientNet B4 in Pytorch with Adam with image size of 256.
Preprocessing:
Crop all images using the
crop_image_from_gray
function. 
For 2019 validation data only, random center crop (1.1 to 1.3) is applied
Augmentation:
RandomResizedCrop((256,256), scale=(0.5, 0.9)),
RandomHorizontalFlip(),
RandomRotation(360),
ColorJitter(contrast=(0.75,2.2))
Steps:
1.  Pretrain on previous competition data (2015) and validated by current training data (2019). 
     a. Freeze all layers except the last, train for 5 epochs
     b. Unfreeze all layers and train for 15 epochs
Finetune using 2019 data. CV-5 is used and train for 7 epochs for each fold
Optimised thresholds (credit goes to
[@abhishek](/abhishek)
)
For inference, no TTA, and use simple average of the 5 CV models
Other things I tried but did not work for me:
- Bigger image size and bigger EfficientNet models
- Ben's preprocessing
- CLAHE
- Circle cropping
Thanks to Kaggle, APTOS and everyone who contributed via Kernels and Discussions. I learned so much from you guys.
Code:
[https://github.com/qiletan/aptos2019-blindness-detection](https://github.com/qiletan/aptos2019-blindness-detection)