Getting Started with Cognimem - An Autonomous Car Example

Note: The following content was originally published circa 2016, and has been migrated here in the interest of preserving historical information. Some products and/or resources mentioned may no longer be available.

Introduction

Driverless, or autonomous cars are getting a lot of attention these days. If successful, they could be the biggest automobile innovation since the days of the Model T, nearly 100 years ago. In case you’re thinking that teaching a car how to drive itself is complicated, it turns out to be a lot like teaching a teenager how to drive (but perhaps less stressful)! Usually autonomous cars use forward facing cameras so that it can see where it’s going. These images are analyzed by a processer, similar to how our eyes feed images to our brain. The processor then sends out control signals to the drive mechanisms of the car, like how the brain tells our body what to do.

So what does it take to teach the processor, or, that car’s brain? As I mentioned, it’s not a whole lot different from teaching a teenager when they’re learning how to drive. Basically the new driver needs to learn how much to turn the wheel so that the car goes in the desired direction. So on the road the driver learns when to start the turn based on the margins from the side of the car to the edge of the lanes, and how much to rotate the steering wheel based on the radius of the curve in the road. This learning might even happen multiple times throughout a turn, as a driver corrects for over-steering and under-steering.

That’s basically all you need to do to teach a processor that’s running a Neural Network. Now if you’re worried that you have to program a complicated Neural Network for you to try your hand at training the autonomous car’s brain, please don’t throw up your hands quite yet. First of all, if you’re a programmer, Neural Nets are very modular and are made up of simple modules called perceptrons. But if you want it even easier, there are dozens of open source projects with code that you can download, compile and run. And if you’re not even a programmer and don’t want to deal with Neural Network code at all, there’s also a relatively low-cost but extremely powerful little device that’s readily available to train and run, just like the process I described above.

Cognimem

Cognimem is a provider of devices with Neural Network technology implemented on what they’ve termed as the zero instruction set computing (ZISC) architecture. These devices implement efficient classification algorithms including a back propagation neural network (BPN) via radial basis functions (RBF), Restricted Coulomb Energy (RCE), as well as a k-NN (k Nearest Neighbor) classifier which make use of the neural network structure for parallel distance calculations that determine the K closest neighbor vectors at a speed independent of the training set size. For sake of efficiency, the metric that the Cognimem devices use for the distance calculation is the L1 norm (as opposed to the more computational L2 Euclidian distance). One of their devices is the CM1K.

image

When the CM1K is used for pattern recognition, a pattern is presented for training along with a category that the pattern is supposed to correspond. If adequately trained by a sufficient number of patterns, the CM1K will return the category that the image pattern belongs to based upon the trained images that it most closely resembles.

CogniStix

In order to make it simple for people to try out this technology, Cognimem offers a development kit with a USB device called the CogniStix which contains the CM1K 1024 Neuron, Neural Network IC with an SDK that includes documentation, libraries, examples capable of basic document OCR, image recognition via webcam, etc. The Cognimem Express SDK comes with several useful examples in C/C++ (as well as C# and Matlab, with Java and Python still in the works).

Since the link provided inside the Cognistix CD case for downloading the Express SDK didn’t work at the time, I simply contacted Cognimem and they promptly provided me with a link pointing to an installer. Running the installer creates a folder that contains the Express SDK. Within the SDK you’ll find a bin folder with several libraries and executables; including the cognicar.exe.

Executing the cognicar.exe brings up an application that shows a car on a track, as well as a control panel on the right portion of the graphical user interface. At the top of the control panel shows the image in front of the car, corresponding to the red box in front of the car on the track. This would be analogous to what a camera might capture for guiding an actual autonomous car. When the cognicar doesn’t recognize the pattern of the image it will refuse to move. By default the car is trained to go forward if the image is completely black (corresponding to the color of the road).

When the car approaches a curve in the road, blue pixels corresponding to the edge of the road will appear on the right or left side of the image, depending upon the direction of the curve. Initially these blue pixel patterns will cause the car to stop, since it hasn’t yet been trained for that pattern. Turning the car in the opposite direction as the side of the image that contains the blue pixels until the image contains only black pixels, then clicking the “Train” button, and finally the “Go” button will allow the car to continue down the track. To keep the car going continuously around the track, you need to repeat this training process every time the car approaches a curve where the pixel pattern in front of it is not recognized by the Cognimem classifier.

This entire process is demonstrated in a Youtube video online. The demo shows how the car is able to circle the track uninterrupted a couple times with just 3 training images.

Conclusion

20 years ago driverless vehicles were considered a pipe-dream, but now there are dozens of organizations with vehicles successfully running autonomously out on the test tracks. Obviously test tracks are idealized driving environments, but the benefit of our highways is that when there are enough cars with forward-facing cameras networked wirelessly, vast amounts of up-to-date training data quickly becomes available to further train each subsequent car that travels down that road. But for this to be practical, devices that are capable of quickly training with such vast amounts of data are required. Cognimem provides unique solutions to handle these demands.