next up previous
Next: Next steps Up: Finding and extracting information Previous: Fourier Transforms

Neural Networks

Neural Networks (NN) can be used to find features in digital images. We can imagine an ideal network that takes a sub image as input and outputs the discrete yes or no whether or not the feature is present in the presented sub image gif. The window can be tried at every position in the image. The highest activation of our NN will represent a high degree of certainty. This method has been described in [Per95].

This can be achieved by training the network with the desired pattern to recognize. It is also important to include many negative examples in the training set, otherwise the network would be very optimistic and output ``yes'' at every place in the image. Choosing the training set can be very tricky and it is the crucial part of our algorithm. On one side, we would like to have a low first order error, i.e. if the feature is present, we would like a high activation. This means that the NN needs to generalize well and not to be too biased towards the training data, which is also called Overfitting. On the other hand, we also want to make few second order errors, i.e. have a high output activation if there really is no feature. That's the reason to require also good negative examples. The training set therefore has a big importance on the quality of the final network.

Our task consists of finding hyperbolae in the image, because a buried object is represented by a hyperbola on the GPR image, as previously stated.

We used a 2 layer, backpropagation neural network with a sigmoid activation function. This function was already discussed before and is printed in Figure 12. The input layer consists of 120 inputs, as the window to find the hyperbolae is 40 by 30 pixels large. One output neuron collects the activation of the 11 hidden neurons.

Building a training set was not easy at all, as there were very few GPR images containing mines. To train a reliable network, tex2html_wrap_inline967  50 positive examples and 150 negative examples of good quality gif are needed. Therefore, we needed to generate our own training data. We want to find hyperbolae, so we created them with the Matlab script hyperbola.m. The function takes many arguments specifying the opening and width of the produced hyperbolae, plus additional parameters setting the image size, range of pixels, ...etc. One example of such a generated hyperbola is in Figure 17. The Matlab code hyperbola( 1, 1, 0.5, 2, -1, 1 ) generated this specific curve.

  figure354
Figure 17:  Artificially created Hyperbola

The negative examples were generated by taking 150 random images, having the same range and mean value as the real GPR images. This is not really optimal, but having very few images, we did not have a choice. We used a fast backpropagation algorithm to train our NN. This algorithm changes the learning rate and the inertia parameter during the training phase, to an optimal value. Using this method, our NN converged much faster. Training took between half an hour and 1 hour on a Sparc 20 with the Matlab NN Toolbox. Once we finished training, we tested the resulting net on each pixel of Sand3. The resulting activation diagram can be seen in Figure 18 and the activation surface is plotted in Figure 19.

  figure360
Figure 18:   Activation pattern of the NN applied to Sand3

  figure366
Figure 19:   Activation surface of the NN applied to Sand3

Ideally, we would expect an activation pattern that is very low on most parts of the image, but with some peaks in the presence of any hyperbola like structure. The resulting activation is very promising. Over most parts of the image, the activation is almost zero, but in the parts that contain the structure there is some activation. The activation is also present in areas containing not really an entire hyperbola. This is clear, as we did not add real negative examples. All the cases of ground noise, half a hyperbola or others, need to be added as negative examples, which would further improve the accuracy.

To ease the task of our network, we changed the image representation. Hyperbolae can be represented by directions or a gradient flow. In the intensity image, the neurons need to create some internal method to compute the gradient flow to predict hyperbolae. It might be a lot easier for our NN to present it a gradient flow diagram. We used a linear symmetry algorithm to compute the local flow of our images. Training was done using the flow of our self generated hyperbolae images. Unfortunately, the flow at each point is represented by 2 vectors, tex2html_wrap_inline985 and tex2html_wrap_inline987 , which doubles our input size. The number of input weights is also doubled, and the training time becomes much longer, about 1 hour on a Sparc 20.

The results in Figures 21, 22 and 23 look promising. In Figure 22 we can see that the activations have a Gaussian-like shape. This is a good sign for our training method. An activation similar to a Gaussian shows that the NN is not too general and on the other side not overfitted. It is possible to use this method to decide when to stop training.

  figure372
Figure 20:  Simulated Hyperbola in Quiver plot

  figure378
Figure 21:   Activation pattern of the NN applied to Sand3

  figure384
Figure 22:   Activation surface of the NN applied to Sand3

  figure390
Figure 23:   Activation surface of the NN applied to Sand3


next up previous
Next: Next steps Up: Finding and extracting information Previous: Fourier Transforms

Adrian Perrig
Wed Jun 5 22:28:55 MET DST 1996