Hi I have a programming problem that I would like to solve using some artificial intelligence technique. I really dont know where to start. I would like some guidance as to what methodology to pursue.
Lets say I have 10,000 images of random people, and I need to detect elderly people in images. I might have algorithms like wrinkle detector, glasses detector, walking cane detector, missing teeth detector, skateboard detector, Playstation detector, etc. Each algorithm does a scan independently and outputs a number from 0 to 10 on the likelihood it thinks the image contains that item. Lets assume that works. There might be 100 different algorithms.
My set of 10,000 images would be divided by a human into two groups, those that contain an elderly person, and those that do not.
Now I need to develop a system that takes the series of values from the algorithm modules, when given an image to analyze, and calculates a single value that represents the likelihood that an image has elderly people in it or not.
During training I would like it to be able to automatically build rules by analyzing all the algorithms’ outputs. For example:
-
If wrinkle detector, glasses detector, walking cane detector and missing teeth detector all output a high number, then output a high number.
-
If wrinkle, glasses, cane and teeth detectors are high, but playstation and skateboard detectors are also high, then output is neither low nor high.
-
hands detector and clothes detector should be essentially ignored as old and young people both have those (hopefully)
What type of technology should I be implementing for the automated rule building system?
Is this better solved by a neural network system?
A fuzzy logic system?
Something else?
Thanks for any advice.
4
Have a Look in ada boost (adaptative booster). The idea is to use independent weak classifier (your detectors) and combine them in a clever way. It roughly goes like this:
- It first tries to evaluate the different detectors to detect and use an optimal linear combination of them to classify the data.
- It then tries to find another combination able to provide a better discrimination on the first pass’ failure cases
- It goes on like this for any number of passes you want
You then have n combination applied in cascade, which gives you a “boosted” version of your detectors. Each pass will be expressed as 0.25 * wrinkle - 0.1 * playstation + ...
. Now I think you need a lot of detectors for this method to shine.
See here for an example of face detection using adaboost.
It sounds like this would be suitable for a neural network, probably a standard feedforward type.
I’m not sure how much you know about neural networks, but FYI the ‘rules’ it discovers won’t be in a human-readable format. So if you want to run images through it and sort them, it’ll do that; but if you’re aiming to get a list of rules that you can see, you’re probably better off choosing a different algorithm.
You mention in a comment you’d like to see which detectors are not contributing much. After the network is trained, you can look at the weights and see which inputs aren’t doing much. Alternatively I believe there are some variations of neural networks that can automatically prune inputs; not my area of knowledge but worth looking into.
I should mention that neural networks can be fiddly, there’s always a chance that they won’t do what you expect, but from what I can see in this case it’s very likely to work.