I am trying to train a MobileNetV2 on a custom dataset, to image Classification task. Cardinality is 864 images, split in 70%/20%/10%, balanced between the 3 different classes.

Weights are pre-loaded from imagenet, I froze the net and I added to the bottom of the net a GlobalAveragePooling, a Dropout (with 50% drop probability), and a Dense layer with 3 classes and softmax as activation function, since i want the output layer to give me an output like (1,0,0) if the inference image is from the first class, and so on.

  • image size: 96x96 (I normalized, too)
  • batch_size: 32
  • Learning rate: 0.001
  • trainable params: 3843
  • optimizer: sgd ('adam' doesn't improve my accuracy)
  • loss: categorical cross entropy
  • metrics: accuracy

Training for 20 epochs gives me these results: First learning curve

After that I decided to try some fine-tuning, by freezing only the first 100 layers of the net. Trained again for 10 epochs, that's what I get:

Learning Curve after fine-tuning

My net is overfitting, but I don't know why it's happening and what am I expected to do in order to improve my accuracy.

Edit: I also tried increasing dataset images with some source images or even with some data augmentation, up to more than 3K images, but it didn't work out at any rate.



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.