Thursday, December 29, 2011

Submission

The code is done, report is written, and video is made. A file containing the NNs in the last epoch (#1527) as well as best NN from every epoch up to #1527) is here.

I also made a poster.

Wednesday, October 12, 2011

Neuroevolution

So I actually have very little experience with neural networks (NN), and even less with evolutionary algorithms (EA). I dug up some papers on neuro-evolution from the University of Texas NN Research Group. In particular, I reaEvolving Neural Networks Through Augmenting Topologies for an overview of neuroevolution to help me get started. The results in that paper seem very nice, but I have no idea how fast an implementation would be able to run (ideally, the trained NN could process images in real time). I also don't know how well it will scale. I'm sure I can find other papers in the field that address scaling and efficient implementation issues.

Monday, October 10, 2011

Project Pitch


For my final project, I will do boundary detection and/or image segmentation. This is an interesting problem because detection object boundaries correctly is critical to performing higher-level object recognition and ultimately scene perception. Currently, the best, state-of-the-art computer vision algorithms for this task are vastly outperformed by humans.

To approach this task, I will start with standard image processing techniques (eg, filtering), then proceed with building and training a neural network to analyze the image to detect edges. Neural networks are a simple AI approximation of how the brain and its neurons work. Training neural networks is very computationally intensive, but readily paralellizable. It is thus suitable for conversion to GPU. To train and evaluate the performance of the network, I will use the Berkeley Segmentation Dataset and Benchmark. The dataset contains ~500 natural images along with human segmentation of the images indicating the "ground truth". As an aside, the human segmentation exposes the ill-posed nature of this problem in that for most images, different human subjects that were individually asked to segment the pictures do not agree on weather some boundaries exist or on precisely where some boundaries lie. My goal is to train a neural network which learns to perform image segmentation similarly to the average human.

I am considering two main options for writing the actual code. The first is to use C++ and Thrust to write the algorithms in such a way that I can execute the same algorithm on either the CPU or the GPU and allow Thrust to handle all the details of running the CUDA kernels. This way, it will be easier to quantify performance contrast between the two implementations by knowing that the algorithm is the same and the only thing different is the compute platform. Another option is to use PyCUDA. PyCUDA facilitates meta-programming and optimization of CUDA kernels by making it easy to tweak grid/block/thread layout, loop unrolling, etc. at runtime in order to dynamically optimize for performance.

There are several factors with which to evaluate the success of the project. The main metric will be speedup in training the neural network on the GPU vs the CPU. (Given the same dataset and ample time, both versions should eventually arrive at a similar answer.) Another, related metric would be to test how much better (hopefully!) the GPU implementation will be vs. the CPU if both implementations of the learning and optimization algorithm are run for a limited amount of wall time and not allowed to converge. Once the network is trained, it should also be faster to run an image through the GPU version of the NN than the CPU version.

It is well known that getting the right network topology can be more important than the particular algorithm used to train the network. Time permitting, I want to try to use genetic algorithms to evolve the NN topology automagically. This hybrid neural network/evolutionary algorithm approach is known as neuroevolution. In principle, neuroevolution can probably learn to do anything. Unfortunately, evolutionary algorithms are amongst the slowest machine learning algorithms, so leveraging these techniques may not be feasible during the course of this semester.