• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Cascade Classifier Training {#tutorial_traincascade}
2===========================
3
4Introduction
5------------
6
7The work with a cascade classifier inlcudes two major stages: training and detection. Detection
8stage is described in a documentation of objdetect module of general OpenCV documentation.
9Documentation gives some basic information about cascade classifier. Current guide is describing how
10to train a cascade classifier: preparation of the training data and running the training application.
11
12### Important notes
13
14There are two applications in OpenCV to train cascade classifier: opencv_haartraining and
15opencv_traincascade. opencv_traincascade is a newer version, written in C++ in accordance to
16OpenCV 2.x API. But the main difference between this two applications is that opencv_traincascade
17supports both Haar @cite Viola01 and @cite Liao2007 (Local Binary Patterns) features. LBP features
18are integer in contrast to Haar features, so both training and detection with LBP are several times
19faster then with Haar features. Regarding the LBP and Haar detection quality, it depends on
20training: the quality of training dataset first of all and training parameters too. It's possible to
21train a LBP-based classifier that will provide almost the same quality as Haar-based one.
22
23opencv_traincascade and opencv_haartraining store the trained classifier in different file
24formats. Note, the newer cascade detection interface (see CascadeClassifier class in objdetect
25module) support both formats. opencv_traincascade can save (export) a trained cascade in the older
26format. But opencv_traincascade and opencv_haartraining can not load (import) a classifier in
27another format for the futher training after interruption.
28
29Note that opencv_traincascade application can use TBB for multi-threading. To use it in multicore
30mode OpenCV must be built with TBB.
31
32Also there are some auxilary utilities related to the training.
33
34-   opencv_createsamples is used to prepare a training dataset of positive and test samples.
35    opencv_createsamples produces dataset of positive samples in a format that is supported by
36    both opencv_haartraining and opencv_traincascade applications. The output is a file
37    with \*.vec extension, it is a binary format which contains images.
38-   opencv_performance may be used to evaluate the quality of classifiers, but for trained by
39    opencv_haartraining only. It takes a collection of marked up images, runs the classifier and
40    reports the performance, i.e. number of found objects, number of missed objects, number of
41    false alarms and other information.
42
43Since opencv_haartraining is an obsolete application, only opencv_traincascade will be described
44futher. opencv_createsamples utility is needed to prepare a training data for opencv_traincascade,
45so it will be described too.
46
47Training data preparation
48-------------------------
49
50For training we need a set of samples. There are two types of samples: negative and positive.
51Negative samples correspond to non-object images. Positive samples correspond to images with
52detected objects. Set of negative samples must be prepared manually, whereas set of positive samples
53is created using opencv_createsamples utility.
54
55### Negative Samples
56
57Negative samples are taken from arbitrary images. These images must not contain detected objects.
58Negative samples are enumerated in a special file. It is a text file in which each line contains an
59image filename (relative to the directory of the description file) of negative sample image. This
60file must be created manually. Note that negative samples and sample images are also called
61background samples or background images, and are used interchangeably in this document.
62Described images may be of different sizes. But each image should be (but not nessesarily) larger
63than a training window size, because these images are used to subsample negative image to the
64training size.
65
66An example of description file:
67
68Directory structure:
69@code{.text}
70/img
71  img1.jpg
72  img2.jpg
73bg.txt
74@endcode
75File bg.txt:
76@code{.text}
77img/img1.jpg
78img/img2.jpg
79@endcode
80### Positive Samples
81
82Positive samples are created by opencv_createsamples utility. They may be created from a single
83image with object or from a collection of previously marked up images.
84
85Please note that you need a large dataset of positive samples before you give it to the mentioned
86utility, because it only applies perspective transformation. For example you may need only one
87positive sample for absolutely rigid object like an OpenCV logo, but you definetely need hundreds
88and even thousands of positive samples for faces. In the case of faces you should consider all the
89race and age groups, emotions and perhaps beard styles.
90
91So, a single object image may contain a company logo. Then a large set of positive samples is
92created from the given object image by random rotating, changing the logo intensity as well as
93placing the logo on arbitrary background. The amount and range of randomness can be controlled by
94command line arguments of opencv_createsamples utility.
95
96Command line arguments:
97
98-   -vec \<vec_file_name\>
99
100    Name of the output file containing the positive samples for training.
101
102-   -img \<image_file_name\>
103
104    Source object image (e.g., a company logo).
105
106-   -bg \<background_file_name\>
107
108    Background description file; contains a list of images which are used as a background for
109    randomly distorted versions of the object.
110
111-   -num \<number_of_samples\>
112
113    Number of positive samples to generate.
114
115-   -bgcolor \<background_color\>
116
117    Background color (currently grayscale images are assumed); the background color denotes the
118    transparent color. Since there might be compression artifacts, the amount of color tolerance
119    can be specified by -bgthresh. All pixels withing bgcolor-bgthresh and bgcolor+bgthresh range
120    are interpreted as transparent.
121
122-   -bgthresh \<background_color_threshold\>
123-   -inv
124
125    If specified, colors will be inverted.
126
127-   -randinv
128
129    If specified, colors will be inverted randomly.
130
131-   -maxidev \<max_intensity_deviation\>
132
133    Maximal intensity deviation of pixels in foreground samples.
134
135-   -maxxangle \<max_x_rotation_angle\>
136-   -maxyangle \<max_y_rotation_angle\>
137-   -maxzangle \<max_z_rotation_angle\>
138
139    Maximum rotation angles must be given in radians.
140
141-   -show
142
143    Useful debugging option. If specified, each sample will be shown. Pressing Esc will continue
144    the samples creation process without.
145
146-   -w \<sample_width\>
147
148    Width (in pixels) of the output samples.
149
150-   -h \<sample_height\>
151
152    Height (in pixels) of the output samples.
153
154For following procedure is used to create a sample object instance: The source image is rotated
155randomly around all three axes. The chosen angle is limited my -max?angle. Then pixels having the
156intensity from [bg_color-bg_color_threshold; bg_color+bg_color_threshold] range are
157interpreted as transparent. White noise is added to the intensities of the foreground. If the -inv
158key is specified then foreground pixel intensities are inverted. If -randinv key is specified then
159algorithm randomly selects whether inversion should be applied to this sample. Finally, the obtained
160image is placed onto an arbitrary background from the background description file, resized to the
161desired size specified by -w and -h and stored to the vec-file, specified by the -vec command line
162option.
163
164Positive samples also may be obtained from a collection of previously marked up images. This
165collection is described by a text file similar to background description file. Each line of this
166file corresponds to an image. The first element of the line is the filename. It is followed by the
167number of object instances. The following numbers are the coordinates of objects bounding rectangles
168(x, y, width, height).
169
170An example of description file:
171
172Directory structure:
173@code{.text}
174/img
175  img1.jpg
176  img2.jpg
177info.dat
178@endcode
179File info.dat:
180@code{.text}
181img/img1.jpg  1  140 100 45 45
182img/img2.jpg  2  100 200 50 50   50 30 25 25
183@endcode
184Image img1.jpg contains single object instance with the following coordinates of bounding rectangle:
185(140, 100, 45, 45). Image img2.jpg contains two object instances.
186
187In order to create positive samples from such collection, -info argument should be specified instead
188of \`-img\`:
189
190-   -info \<collection_file_name\>
191
192    Description file of marked up images collection.
193
194The scheme of samples creation in this case is as follows. The object instances are taken from
195images. Then they are resized to target samples size and stored in output vec-file. No distortion is
196applied, so the only affecting arguments are -w, -h, -show and -num.
197
198opencv_createsamples utility may be used for examining samples stored in positive samples file. In
199order to do this only -vec, -w and -h parameters should be specified.
200
201Note that for training, it does not matter how vec-files with positive samples are generated. But
202opencv_createsamples utility is the only one way to collect/create a vector file of positive
203samples, provided by OpenCV.
204
205Example of vec-file is available here opencv/data/vec_files/trainingfaces_24-24.vec. It can be
206used to train a face detector with the following window size: -w 24 -h 24.
207
208Cascade Training
209----------------
210
211The next step is the training of classifier. As mentioned above opencv_traincascade or
212opencv_haartraining may be used to train a cascade classifier, but only the newer
213opencv_traincascade will be described futher.
214
215Command line arguments of opencv_traincascade application grouped by purposes:
216
217-#  Common arguments:
218
219    -   -data \<cascade_dir_name\>
220
221        Where the trained classifier should be stored.
222
223    -   -vec \<vec_file_name\>
224
225        vec-file with positive samples (created by opencv_createsamples utility).
226
227    -   -bg \<background_file_name\>
228
229        Background description file.
230
231    -   -numPos \<number_of_positive_samples\>
232    -   -numNeg \<number_of_negative_samples\>
233
234        Number of positive/negative samples used in training for every classifier stage.
235
236    -   -numStages \<number_of_stages\>
237
238        Number of cascade stages to be trained.
239
240    -   -precalcValBufSize \<precalculated_vals_buffer_size_in_Mb\>
241
242        Size of buffer for precalculated feature values (in Mb).
243
244    -   -precalcIdxBufSize \<precalculated_idxs_buffer_size_in_Mb\>
245
246        Size of buffer for precalculated feature indices (in Mb). The more memory you have the
247        faster the training process.
248
249    -   -baseFormatSave
250
251        This argument is actual in case of Haar-like features. If it is specified, the cascade will
252        be saved in the old format.
253
254    -   -numThreads \<max_number_of_threads\>
255
256        Maximum number of threads to use during training. Notice that the actual number of used
257        threads may be lower, depending on your machine and compilation options.
258
259    -   -acceptanceRatioBreakValue \<break_value\>
260
261        This argument is used to determine how precise your model should keep learning and when to stop.
262        A good guideline is to train not further than 10e-5, to ensure the model does not overtrain on your training data.
263        By default this value is set to -1 to disable this feature.
264
265-#  Cascade parameters:
266
267    -   -stageType \<BOOST(default)\>
268
269        Type of stages. Only boosted classifier are supported as a stage type at the moment.
270
271    -   -featureType\<{HAAR(default), LBP}\>
272
273        Type of features: HAAR - Haar-like features, LBP - local binary patterns.
274
275    -   -w \<sampleWidth\>
276    -   -h \<sampleHeight\>
277
278        Size of training samples (in pixels). Must have exactly the same values as used during
279        training samples creation (opencv_createsamples utility).
280
281-#  Boosted classifer parameters:
282
283    -   -bt \<{DAB, RAB, LB, GAB(default)}\>
284
285        Type of boosted classifiers: DAB - Discrete AdaBoost, RAB - Real AdaBoost, LB - LogitBoost,
286        GAB - Gentle AdaBoost.
287
288    -   -minHitRate \<min_hit_rate\>
289
290        Minimal desired hit rate for each stage of the classifier. Overall hit rate may be estimated
291        as (min_hit_rate\^number_of_stages).
292
293    -   -maxFalseAlarmRate \<max_false_alarm_rate\>
294
295        Maximal desired false alarm rate for each stage of the classifier. Overall false alarm rate
296        may be estimated as (max_false_alarm_rate\^number_of_stages).
297
298    -   -weightTrimRate \<weight_trim_rate\>
299
300        Specifies whether trimming should be used and its weight. A decent choice is 0.95.
301
302    -   -maxDepth \<max_depth_of_weak_tree\>
303
304        Maximal depth of a weak tree. A decent choice is 1, that is case of stumps.
305
306    -   -maxWeakCount \<max_weak_tree_count\>
307
308        Maximal count of weak trees for every cascade stage. The boosted classifier (stage) will
309        have so many weak trees (\<=maxWeakCount), as needed to achieve the
310        given -maxFalseAlarmRate.
311
312-#  Haar-like feature parameters:
313
314    -   -mode \<BASIC (default) | CORE | ALL\>
315
316        Selects the type of Haar features set used in training. BASIC use only upright features,
317        while ALL uses the full set of upright and 45 degree rotated feature set. See @cite Lienhart02
318        for more details.
319
320-#  Local Binary Patterns parameters:
321
322    Local Binary Patterns don't have parameters.
323
324After the opencv_traincascade application has finished its work, the trained cascade will be saved
325in cascade.xml file in the folder, which was passed as -data parameter. Other files in this folder
326are created for the case of interrupted training, so you may delete them after completion of
327training.
328
329Training is finished and you can test you cascade classifier!
330