I am training a ConvNet to detect different types of stripes in my images. As I am working on astronomical images, my pixel values are flux densities and therefore represent ground truth data. When I (as a human) look at my images with the full range (some images have ranges from -10 to 125, others from -0.05 to 3.5, etc...), I can often not detect these stripes. However, when condensing the range to 0 - 1sigma (for x < 0: x=0, and for x > 1sigma: x=1sigma) I can see stripe-type 1. To visually (human) detect stripe-type 2, I need to condense the range to 0 - 3sigma.

Now I am fine with doing these preprocessing steps in order to build an adequate and correct training set, but I obviously cannot apply different preprocessings depending on the class on the testing data.

So my question is: If I label my training data based on the condensed ranges (where humans can see the stripes), but I train the neural net on the original images (where humans cannot see the stripes due to bad spectral resolution), will the algorithm be able to see the artifacts nevertheless?

And how would the fact that ConvNets sometimes "squash" the values between 0 and 1 anyways play into this? Or is this only relevant when using sigmoid as an activation function?

Do I need to normalize or standardize my images? If I do so and look at the image, it is also nearly impossible to humanly detect the stripes.


Neural networks are popular (and good at) in areas like working with images and text, where they out-of-the box are able to detect patterns and do feature engineering by their own. If to extract (see) the features the only thing you need to do is to do some simple manipulations over your data, neural networks should handle it well on their own. This doesn't mean that they will always do so, or that they won't find some spurious patterns, since we already had lots of such examples. On another hand, if you could easily do some kind of meaningful feature engineering, this won't hurt and it will make it easier for the network to learn. So basically, you should try different neural network architectures and check if they work as expected. You probably should read more about feature visualization.

As about normalizing and standardizing the images, the operations only re-scale your data, so this should not have any negative effect. It only could be problematic if you cared about some very small values, that would be made even smaller, so that it would lead to numerical precision problems, but this probably is not something you should worry about.

| cite | improve this answer | |
  • $\begingroup$ Just to check if I understood correctly: You're saying that it might be easier for the NN to learn if I do 'some meaningful feature engineering'. But I do not have one type of preprocessing for the entire dataset but rather different ones for each class. This is feasible for building a train set, but not possible to do on the test set later. So are you saying that I could label them this way and train and test on the original, or that I could label and train on the preprocessed and test on the original? Will the NN be able to detect the patterns even though they are fainter (different range)? $\endgroup$ – sara Jul 13 '18 at 8:11
  • 1
    $\begingroup$ If it is not possible, then I'd try with NNs without the preprocessing. If NNs will be able to detect the features this may highly depend on your data and the NN architecture you choose. The different range can, or cannot be an issue, but I'm neither expert in computer vision, nor it woundn't be possible to answer for someone who does not have access to your data. TL;DR: try NNs, see what do they predict and what they don't, experiment, maybe the errors they make will inspire you to make some adjustments in NN architecture or feature engineering to overcome them. $\endgroup$ – Tim Jul 13 '18 at 8:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.