Combining classifiers

Hello,

"Boosting is a powerful learning concept that provides a solution to the supervised classification learning task. It combines the performance of many "weak" classifiers to produce a powerful committee [139] . A weak classifier is only required to be better than chance, and thus can be very simple and computationally inexpensive. However, many of them smartly combine results to a strong classifier that often outperforms most "monolithic" strong classifiers such as SVMs and Neural Networks."

So how i understand it i could train several small feature classifiers and use them together. For example train a face and body classifier if want to detect humans.

Is my understandig correct / does this makes sense? And if so - can i do it from command line or do i have to do it programatically?

edit retag close merge delete

Sort by » oldest newest most voted

That is indeed how the boosting principle works. However it more like, we want to build a face detector, and in order to do so we combine weak classifiers that look at ears, nose, mouth, hair, eyebrows, ... but in theory that principle could indeed be expanded towards a larger main class with more subclasses like pedestrians. In principle that is what ICF/ACF does, without telling the classifiers what to look for first. You could force classifiers to look for specific parts in your seperate weak stages of classifiers inside the cascade and that way force the boosting to look for features related to specific parts of an object.

Doing this from command line, without any combinational programming will be impossible, but what you can do

• Then write software that simple subsequently executes those cascades

However one could wonder if this will be more efficient than simply going for a person at once! A benefit I see is that you could weight the separate cascades and through that way somehow cover partial occlusion.

more

"However one could wonder if this will be more efficient than simply going for a person at once! " I am wondering too :-) I guess the answer is "Try it out". I will try to do this. Maybe it makes sense too because you could also reuse classifiers for differerent models?

So some further question for clarification: What does ICF/ACF stands for?

You suggested : - "Make different cascades" Ok i can do this.

"Then write software that simple subsequently executes those cascades" What does "execute cascade" means? Multiple calls of detectMultiScale to detect all feature? Multiple calls of forward() on the net after configuring it? Should i take a look at the source of the opencv_traincascade tool(had a short look some time ago)?

Sorry for the confusion and thank you in advance, Holger

( 2018-04-25 08:21:31 -0500 )edit

Lets sum some things up

1. Yep trying stuff is the only way to verify if it actually works.
2. ICF is integral channel features detector, while ACF stands for aggregate channel features detector. They are both a more advanced algorithm based on the viola and jones approach and generalized for other object categories. Have a look at their papers. OpenCV does not contain them, but several C++ version retrievable on the net.
3. Subsequent calls --> first go through cascade 1 --> if you get a true positive, pass it to the second cascade --> continue this until the end of all your cascades.
4. I do not get how you mix up detectMultiScale and forward(). They are both complete different approaches and thus you have to make a choice. Either classic with Viola&Jones or SOTA with deep learning.
( 2018-04-26 07:15:27 -0500 )edit

Thank you again, i mixed detectMultiScale() and net.forward() because my understanding is still to little :-/. Maybe i can clarify this?. What is a cascade classifier? https://en.wikipedia.org/wiki/Cascadi...

What is a cnn? https://de.wikipedia.org/wiki/Convolu...

So my current understanding (please correct if wrong). For both you need information about the image. These information are called features. Several feature extracting methods exists (HAAR, HOG, LBP) In both cases you feed these information to a neuronal network. Ok about the sentence above i am not sure, the rest should be correct.

So a cascade classifiers is a combination of weak classifier. And a cnn does classification too, so again somthing overlapping. I hope i am not completly of the track.

( 2018-04-26 07:36:03 -0500 )edit

In both cases you feed these information to a neuronal network well that is possible, but in general, classic machine learning like cascades need features, while for cnn's we simply provide the raw pixel data and NOT image features.

( 2018-04-26 07:41:27 -0500 )edit

Thank you - things are getting a bit clear for me now - its hard to find someone who gives basic explanation on the topic. But i dont blame anyone - the topic itself is difficult (but rewarding).

( 2018-04-26 07:52:18 -0500 )edit

Ok one last thing because i dont really got it. You wrote: "Subsequent calls --> first go through cascade 1 --> if you get a true positive, pass it to the second cascade --> continue this until the end of all your cascades."

I think the api calls i have to make are around this class? https://docs.opencv.org/3.0-beta/modu...

Would make sense as my initial question on which you answered was referencing to combining classifiers. Should be - hope i am on right track this time (cross fingers):-)

Thx again + Greetings, Holger

( 2018-04-26 07:56:51 -0500 )edit

Wow wait, no this has nothing to do with support vector machines, that is again a complete different class of machine learning algorithms. You have to stick with cascade classifiers, which are based on the internal boosting algorithm as machine learning step.

( 2018-04-26 08:54:58 -0500 )edit

Oh well - i am lost right now :-) The only thing left i can imagine is that you talking about the same things the training tool does. The tool trains cascades. So i would need to study the training tool source code for getting into the matter? Can you give me a class in the api where to start?

https://docs.opencv.org/3.4.1/d0/d0b/... Seems to be one of the parts i need to use.

Greetings, Holger

( 2018-04-26 11:07:54 -0500 )edit

@holger, I suggest you read chapter 5 of the OpenCV 3 Blueprints book which discusses the complete architecture of cascades quite in the detail. That being said, the train cascade tool, what it basically does internally is create a feature representation of your image, which can be HAAR or LBP style, then give that to a boosting algorithm that trains your cascade tree structure. The base class for that is the boosting class, which can be found here.

( 2018-04-27 02:26:00 -0500 )edit
1

That helps! Its like always - you need to understand the thing before using an api for the thing. Had a bad day yesterday ;-)

( 2018-04-27 05:50:54 -0500 )edit