I've created a neural net using the ConvNetSharp library which has 3 fully connected hidden layers. The first having 35 neurons and the other two having 25 neurons each, each layer with a ReLU layer as the activation function layer.
I'm using this network for image classification - kinda. Basically it takes inputs as raw grayscale pixel values of the input image and guesses an output. I used stochastic gradient descent for the training of the model and a learning rate of 0.01. The input image is a row or column of OMR "bubbles" and the network has to guess which of the "bubble" is marked i.e filled and show the index of that bubble.
I think it is because it's very hard for the network to recognize the single filled bubble among many.
Using image-preprocessing The network is given a single row or column of the above image to evaluate the marked one.
Here is an example of a preprocessed image which the network sees:
Here is an example of a marked input:
I've tried to use Convolutional networks but I'm not able to get them working with this.
Basically, my question is that what type of neural network and network architecture should I use for this kind of task?. An example of such a network with code would be greatly appreciated.
I have tried many preprocessing techniques such as background subtraction using the AbsDiff function in EmguCv and also using the MOG2 Algorithm and I've also tried threshold binary function but there still remains enough noise in the images which makes it difficult for the neural net to learn.
I think this problem is not specific to using neural nets for OMR but for others too. It would be great if there could be a solution out there that could store a background/template using a camera and then when the camera sees that image again, it perspective transforms it to match exactly to the template
I'm able to achieve this much - and then find their difference or do some kind of preprocessing so that a neural net could learn from it. If this is not quite possible, then is there a type of neural network out there which could detect very small features from an image and learn from it. I have tried Convolutional Neural Network but that also isn't working very well or I'm not applying them efficiently.