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