I am looking for a technique to do binary classification on videos with severe imbalance problem.
no. of positive images : 101872
no. of negative images : 2607
Dataset contains grayscale images and they are very different from ImagNet so i’ve not tried pretrained networks.
Here is what I’ve tried so far :

break videos into images
label each image individually

Strategy 1:
3. train one of the cnn (lenet, vgg and resnet)
4. all positives classified correctly by all networks and negatives are all classified as false positives.
Strategy 2:
3. simple oversampling by a factor by adjusting length of dataloader and multiplying minority class image indexes with the factor (hyperparameter)
4. get some true negatives at the cost of false negatives but still ain’t good.
Strategy 3:
3. use weighted oversampler provided by pytorch. weights = (1, len(trainset)/len(positives))
4. train/ test results no good than oversampling.
Strategy 4:
3. use cnn + rnn together, train on one of the cnn architectures and give the outputs before fully connected layers to lstm/gru (many to many).
4. still no good.
Strategy 5:
tried strategy 4 with oversampling/ weighted oversampling but didn’t get better results (played with sequence length of rnn too).
I don’t know what am I missing here, but something is really off and I can’t figure out where and what. Should I use different cnn arch? I’m guessing that’s not the problem since I get very similar results from vgg/resnet/lenet. Any suggestion would be an immense help.
Some notes:
-no shuffling of train/test set (retains sequential info for strategy 4/5)
-tried only with sgd and adam optimizers
-learning rate always 0.001
-tried different batch sizes too