I am beginning an image analysis project to recognize images with a particular object centered on the image. If the object is at the center, I give the image a positive label, and if it is anywhere else, or simply not in the image, I give the image a negative label. The object, itself, has a complex pattern, such that statistical methods and basic image processing techniques are not able to detect it. The human eye, however, has no trouble detecting this object. Therefore, I am opting to develop a convolutional network that can parse the complexity of this pattern. The only issue, however, is that convolutional networks are inherently designed to be spatially invariant. Therefore, is it even possible to train the network to focus on the importance of the object being at the center simply by feeding the network many negative examples containing the object anywhere else but the center? Furthermore, is there perhaps a better or more direct way to go about incorporating this spatial aspect into the network's functionality?
-
$\begingroup$ Just feed only the center of the image into your CNN. $\endgroup$– BlindKungFuMasterApr 6, 2017 at 12:27
-
$\begingroup$ Not a bad thought, but that unfortunately will not work for my purposes since this particular object exists relative to its surrounding environment. The object is essentially a column of grouped together dots that shows up relative to background dots surrounding the object. If there are many background dots, then a zoomed in window might confuse background information for a column of clustered dots. In other words, it's the sudden increase in dot number, synchronized in a vertical fashion, that I am attempting to recognize. $\endgroup$– qualiaMachineApr 6, 2017 at 18:01
-
$\begingroup$ Ok, you can always just use a normal NN instead of a CNN, but this problem sounds like it might be solvable with a special purpose algorithm. $\endgroup$– BlindKungFuMasterApr 7, 2017 at 8:26
1 Answer
To use a convolutional net that isn't spatially invariant, you can make the convolution matrix of size equal to your input image size. Afterwards, just use any desired number of fully connected layers and your network should be able to learn your dataset.
-
$\begingroup$ I like this idea, but what if I wanted to still retain some degree of spatial invariance in the y-axis direction. For this, I could add a kernel that parses the image's full size in addition to the standard ones that translate over the image. I think that would work quite well. $\endgroup$ Apr 7, 2017 at 19:37