Image Recognition Neural Networks, Open Sourced
sevarac writes "The latest release of Java Neural Network Framework Neuroph v2.3 comes with ready-to-use image recognition support. It provides GUI tool for training multi layer perceptrons for image recognition, and an easy-to-use API to deploy these neural networks in end-user applications. This image recognition approach has been successfully used by DotA AutoScript tool, and now it is released as open source. With this Java library basic image recognition can be performed in just few lines of code. The developers have published a howto article and an online demo which can be used to train image recognition neural networks online."
People are still using multi-layer perceptrons for that? Guess if you've got CPU power to burn...
Neural nets aren't a good solution for all problems (nothing is, of course).
Furthermore you need plenty of training data partitioned into training and test sets so you can evaluate the generalisation error. If you don't do that you can have absolutely no confidence about the performance of your system.
Working with neural nets has a mostly experimental feel to them (I am a final year AI student). I'm not sure application developers have the discipled methodology to use them correctly (though maybe this framework helps with that) as these behave quite differently from standard computer vision recognition techniques.
Nonetheless, good to see another free toolkit out there.
Is there a C++ library somewhere ? They have chosen GPL so probably somebody could make a nice and useful C++ fork out of this.
Maybe im wrong but to me "open sourced" sounds like the project was closed then it was "open sourced" and now its open source. This project has AFAICT always been open:
Neuroph started as a graduate thesis project, after that a part of master theses, and on September 2008. it became open source project on SourceForge.
Also why not give the license in the summary (LGPL3).
IranAir Flight 655 never forget!
This image recognition approach has been successfully used by DotA
Dammit, I knew the AI was getting better, but I didn't realize this was why.
current CO2 levels could lead to a sea-level rise of 25 to 40 meters. (80 to 130 ft)
Yes, I'm left. You have a problem with that?
What is it with Slashdot editors and this comma frenzy of theirs?
This is hardly news-worthy. Having looked at their web-site and having done object recognition myself I can tell you, that this wont work for several reasons. From their FAQ it seems that they are just taking the image and create very long vector from it and then feed that into an ANN.
The following problems exist with this approach (which has been known and addressed in at least the last 20 years):
1. What if you want to classify pictures that have different sizes (not too uncommon)? Wont work because you first have to set a fixed number of neurons in your first layer.
2. What about different locations of the same object? Even if you move the whole image just one image to the right this will dramatically change your flattened vector and can yield completely different classification. This is called location invariance and is solved in the computer vision community by extracting a lot of features on "interesting" regions in the image. With that you can also have different sized images. One famous extraction method is the scale invariant feature transform (SIFT).
I could go on but you get the point. As for using ANNs instead of other classification methods, it does not really matter that much what kind of classificator you use as the pre-processing is much more important. Support-Vector-Machines has been hyped and work pretty well, but it has it's own caveats. However, using a SVM on the raw-image data produces the same horrible results that I would expect here.
So, what do you suggest people should use instead?
She wants to shoot bugs out of the air with a water gun.
After reading that article about seeing through walls with mesh networks, I wonder if you couldn't implement something like this image recognition system on a cluster. The machines could locate a subject with their "sixth sense" and then point cameras at it to track, and none of the nodes would have to be spectacularly powerful.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
climate change
You remind me of Cato the Elder who had the habit of ending all his speeches with the words Furthermore, I think Carthage must be destroyed . I think he was right, and I think you're right, too. But that's slashdot: What earned the old Roman eternal reputation gives you only a "-1, Troll". Hang on, though.
Furthermore, I think that the CO2 level in the atmosphere must be reduced.
Say out loud: I'm an Aspie and I'm somewhat proud, I guess. Uh. Can I write an email in all caps instead? Hm...
So please don't take the (dumb) slashdot blurb as the exhaustive feature list of the library.
Supported :
-> Adaline
-> Perceptron
-> Multi layer perceptron
-> Hopfield
-> Kohonen
-> Hebbian
-> Maxnet
-> Competitive network
-> RBF network
So it does support several quite modern approaches. It also has a training utility which supports image training. This should be very useful to students imho.
Can it recognize John Connor?
If you want to see a neural network (-like) implementation that actually works well, you should look at Numenta's NuPic application and their vision toolkit. It works pretty amazingly well. They also have a nice architecture, in that the core is c++ but they use python for UI, file IO, and other utility stuff. It's under a 'research license' which means that you are allowed to do research and play with it, but if you want to sell a product with their technology, you need to get a real license.
The more people I meet, the better I like my dog.
Have you ever tried going to the limit in optimizing code? An SSE2 machine can do a multiply-and-sum operation on an array of four floating point numbers in one clock cycle. Multiply-and-sum is, basically, what's needed in an artificial neuron network. Get your best effort in java programming and count the cycles. I have seen papers showing an improvement of about 200 thousand times in the best C-plus-Assembly code, versus the best that java can do.
The problem with java is not that it's a "bad" language intrinsically, but that it's best used in what are normally called "corporate" applications. Java is excellent if you are doing database searches, inventory management, trouble ticket applications, CRM, ERP, etc. Java is an alternative for .NET, not forC/C++.
Now, when you go into scientific applications, you usually are developing new algorithms, which may need large amounts of optimization to become practical. This means you may need to unroll your loops, manage the several levels of cache efficiently, watch for all the details on how each byte passes through the CPU(s).
It's not practical to write large applications entirely in assembly code, therefore for those kinds of software you need a somewhat higher level language that blends in smoothly with assembly language, which means C.
Unless the water gun has an extremely high muzzle velocity, she would need to lead the target bugs by a non-trivial angle. The flightpath prediction algorithms required for reliable hits would probably be prohibitively complex since they would have to take species, sex and several environmental factors into account (and math is HARD).
She might get better results adapting this project to her purposes. Please invest in a high-powered laser for the project—killing mosquitos with a Blu-Ray laser is just cruel.
Unless the water gun has an extremely high muzzle velocity, she would need to lead the target bugs by a non-trivial angle. The flightpath prediction algorithms required for reliable hits would probably be prohibitively complex since they would have to take species, sex and several environmental factors into account (and math is HARD).
Great analogies to cluster computing design issues. Really expensive perfect bullets, or lots of cheap bullets... I'd try the lots of cheap bullets approach since water is cheap. I'd hook up the garden hose thru one of those lawn sprinkler solenoid valves, attach hose to RC car servos, and work the software for two things:
1) Image detection before and after water spray. If you can't tell if you've hit anything, then what you do doesn't matter. That in itself would be an interesting science fair project. Average number of bug flying by per hour vs time of day vs temperature. Average direction of bug flight per temperature (maybe there is an evolutionary advantage to move north when they're warm)
2) Optimized servo controlled blast pattern. I'm guessing bugs have no evolutionary reason to dodge left and right in the rain, but probably have some minimal motivation to either go ascend or descend. They don't always descend or the fish in the lake would be fat and all the bugs by the lakeshore would be dead, and they aren't, therefore they don't always descend. But they don't always ascend or jetliners would be unable to fly due to bug encrustation. So, servo controlled spray in a precisely up/down pattern. Or would a spiral pattern at the target be most effective, since bugs usually spend most of their time going straight... Or do they?
"Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
Wonder how well this could be trained to recognize characters in captchas. Here come the spambots!
Did you actually try it out yourself? I bought into Numenta's hype and downloaded this program, and it was laughably bad. It "learns" a list of objects and shows it can recognize them, but when I modified the test images just a little bit and fed them to it, it failed miserably. That's especially bad considering how low res the images are and how they're the same size.
Numenta is only different in having a disprportionately large marketing budget. (Yes, I took the plunge and read On Intelligence.)
Information theory is life. The rest is just the KL divergence.
> high muzzle velocity
Actually the plan is to use a waterpik which has a very high velocity (and won't require any change the the eletronics, just mash in the power button and apply power to the feeds to get it to fire) and short range (not trying to wet people across the room).
Sheesh, I got a '0-off topic' but the replies all got '2 - informative'?
I spent a lot of time on this project, writing a lot of neural net simulations, supervised and unsupervised learning, back-prop, Hopfield nets, reproducing a lot of Terry Sejnowski's and Grossman's work, taking trips over to Caltech to see what David Van Essen and his crew were doing with their analysis of the visual cortex of Monkey brains, trying to understand how "wetware" neural nets can so quickly identify features in a visual field, resolve 3D information from left-right pairs, and the like. For the most part, all of the neural net models were really programmable dynamical systems, and the big trick was to find ways (steepest descent, simulated annealing, lagrangian analysis) of computing a set of synaptic parameters whose response minimizes an error function. That, and figuring out the "right" error function and training sets (assuming you are doing supervised learning).
Bottom line was, not much came of all this, beyond a few research grants and published papers. The one thing that we do know now is, real biological neural networks do not learn by backward-error propagation. If they did, the learning would be so slow that we would all still be no smarter than trilobites if that. Most learning does appear to be "connectionist" and is stored in the synaptic connections between nodes, and that those connections are strengthened when the nodes that they connect often fire simultaneously. There is some evidence now of "grandmother cells" which are hypothetical cells that fire when, e.g. your grandmother comes into the room. But other than that, most of the real magic of biological vision appears to be in the pre-processing stages of the retinal signals, which are hardcoded layer upon layer of edge-detectors, color mapping, and some really amazing slicing, dicing and discrete FFT transforms of the orginal data into small enough and simple enough pieces that the cognitive part of the brain can make sense of the information.
It's pretty easy to train a small back-prop net to "spot" a silhouette of a cat and distinguish it from a triangle and a doughnut. It is not so easy to write a network simulation that can pick out a small cat in a busy urban scene, curled up beneath a dumpster, batting at a mouse....
To do that, you need a dog.
Numenta has a free download called the Vision Toolkit. It has a really simple approach to training: drag in your images, then press the Train button. You can use the Python API to build a desktop application, or upload it to the hosting service and use it via the web API.
Their approach has some superficial similarity to perceptrons, but it's a lot more brain-like.
Numenta has a simple app for doing image recognition now: you drag in your images, press the button, and it trains. No tweaking required. They have both a local API and a web API you can use to incorporate the technology into an app. It's free.
What open source packages would you recommend?
I recently ran across another software that also does image recognition. It uses texture for that, and claims to support other features soon. See Pinta at www.intopii.fi.
wouldnt it be cool if there was a neural net search engine, so rather than everyone training up their own individual image recognition bots in isolation they cook work together in a supernet when training but still be disconnected when in use. Prior art would be the matrix: "I know Kung Fu!"...
If you don't risk failure you don't risk success.