I am looking for techniques for augmenting very small image datasets. I have a classification problem with 3 classes. Each class consists of 20 different shapes. The shapes are similar between the classes, but the task is to identify which class the shapes belong to. Per shape, I have between 1 and 35 training examples. For two classes, I have 25 training examples per shape, but the number of examples per shape for the third classes is usually around 5. Now, what data augmentation schemes do you recommend? Geometric / affine transformations seem like a good place to start. However, I have also thought of applying Fast Fourier Transform (do the forward transform, add some noise, do the inverse transform). GANs seem infeasible, right? Not enough data, I suspect. In any case, I am grateful for your advice.
1 Answer
In my opinions, you have around $25\times 20 \times 2 + 5 \times 20 = 1100$ samples, so the list of problems is:
- Lack of data
- Imbalance between class 1,2 and class 3
With the simple task, the model with the low capacity (small number of parameters) is more suitable for your task and to avoid overfitting because of the lack of data. Since the augmentation is nothing but regularization, based on EfficientNetV2 paper, with the small model you don't need too much regularization, select some basic affine transformation and elastic transformation then apply Rand Augment with small magnitude mix with 0.1 dropout should be enough.
The second problem should be solved with the weight class for weight, which means set the scale factor for the third class, or duplicated the samples of the third class then apply the strong affine transformation to it.