I am working on a project that involves using a ConvNet to identify screws. I am able to train from scratch a ConvNet based on the first version of the inception network, but shallower (only 3 inception modules), and at the moment classifying only 45 different screws (the goal is to cover a significant part of a catalog containing ~ 4000 different itens).
My training set consists of rectangular grayscale images of the screws (150 x 300 pixels), approx. 700 images for each class.
The prototype of this model has been working pretty well with 45 classes (test set accuracy ~98%), but I am starting to worry about two things:
1) Many screws in the catalog have similar shapes, but different sizes, so the production model will have to be able to infer the scale of the objects. This is important because future users will image screws with different smartphone cameras, yielding different screw sizes in the images fed to the ConvNet. I haven't been able to find much about this in the literature. And from what I have read about ConvNets, they are good at detecting shapes, which mean that two objects, the first 1 meter long and the other 1 centimeter long, would be considered "equal" by a ConvNet if they appeared similar in an image. One (not very elegant) solution I imagined would be to include a scale in the training images, by means either of a ruler or a common object (a coin, for example). Anyway, I wonder if this problem has a simple solution, since I believe many people might have faced it.
2) All of the notorious ConvNets I know of are trained with the ImageNet dataset, which comprises 1000 different classes. My screw dataset will ultimately have more than that. Is that an issue? Assuming I have the hardware resources to train very large fully connected layers and softmax output layers, is there an upper bound to the number of classes a ConvNet can identify?