# Congrats to the winners (88th place solution) Congrats to the winners 💯. My result comes from a single model EfficientNetB3, pretrained on 2015 (combination of training and private testset), valid on 2015 public testset and then fine-tuned on 2019 dataset. I approached this problem as a regression problem, the output node is not a regular linear output but a rectified linear output with max_value of 4, so output value is in proper range. Image size 300x300. Image preprocessing: Crop blackbars, subtract local means (similar to Ben Graham's preprocessing technique, but his technique also remaps the images to 50% gray and removes outer shadow effect) with sigmaX = 10. Image augmentation: Random zoom (0.75-1.25), random rotation (360 degrees), random horizontal flip. I pretrained B3 on previous dataset until val-loss didn't improved after 5 epochs. First phase of finetuning: Load pretrained weights, train on 2019 dataset with 20% validation split for 40 epochs, monitor valloss. The purpose of this phase is to find the optimal number of epochs to train on entire 2019 dataset. Second phase of finetuning: Load pretrained weights again, this time train on entire 2019 dataset where the number of epochs is when val-loss reaches minimum in the first phase. I tried TTA, Optimized Rounder and Model Ensembles but none works well for me on public score as well as private score. Maybe I made mistakes somewhere. Thanks kaggle, the organizers and all participants for this amazing and challenging competition. I was just a novice when I first take on this challenge and I've learned a lot along the way. Gaining knowledge and experience for me is a victory. Thank you all!