Object detection is a computer vision technique that identifies the objects of interest within digital images or video frames.
Here's the step by step procedure of how the object detection technique works:
Data collection and preparation: Gather a dataset of images or video frames containing the objects you want to detect. Split the dataset into training and test sets. For the training set, annotate the objects of interest by labeling them. For example, if you're building a car detection model, mark the cars in the training images like in the .xml
file below:
<annotation><folder>dataset</folder><filename>car1.jpg</filename><path>/path/to/car1.jpg</path><source><database>Unknown</database></source><size><width>640</width><height>480</height><depth>3</depth></size><segmented>0</segmented><object><name>car</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>100</xmin><ymin>200</ymin><xmax>400</xmax><ymax>350</ymax></bndbox></object></annotation>
The file above contains the annotation of only one car from an image car1.jpg
. You have to annotate hundreds of vehicles to get better accuracy. There are several training methods other than annotating every image in .xml
files.
Detection: You can choose any of the available detection algorithms such as haar cascades, you look only once (Yolo), or single shot multi-box detector (SSD), etc. The choice depends upon the factors like accuracy, speed, and computational power.
Preprocessing: Depending on your specific needs, perform preprocessing steps on your dataset. This may involve resizing, normalization, or converting images to grayscale, among other operations.
Apply detection algorithms: Utilize the chosen detection algorithm to analyze the annotated training images. Feed the annotations from the XML files into the algorithm to train it and generate the necessary model files or parameters.
Test and visualize the results: Draw bounding boxes or segmentation masks around the detected objects to visualize the results. If you do not get the desired results, iterate your detection process with tuned annotations, redefined preprocessing, or a different detection algorithm.
Here's an example of a vehicle detection model trained over thousands of car images. We use the haar cascade detection algorithm, where the images are already annotated in the cars.xml
file. We test the model with a sample video and see how accurate our results are:
<?xml version="1.0"?> <!-- Add more negative to training. --> <opencv_storage> <cars3 type_id="opencv-haar-classifier"> <size> 20 20</size> <stages> <_> <!-- stage 0 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 6 12 8 8 -1.</_> <_> 6 16 8 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0452074706554413</threshold> <left_val>-0.7191650867462158</left_val> <right_val>0.7359663248062134</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 1 -1.</_> <_> 7 12 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0161712504923344</threshold> <left_val>0.5866637229919434</left_val> <right_val>-0.5909150242805481</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 7 18 5 2 -1.</_> <_> 7 19 5 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0119725503027439</threshold> <left_val>-0.3645753860473633</left_val> <right_val>0.8175076246261597</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 11 4 -1.</_> <_> 5 14 11 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0554178208112717</threshold> <left_val>-0.5766019225120544</left_val> <right_val>0.8059020042419434</right_val></_></_></trees> <stage_threshold>-1.0691740512847900</stage_threshold> <parent>-1</parent> <next>-1</next></_> <_> <!-- stage 1 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 2 -1.</_> <_> 7 12 6 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0243058893829584</threshold> <left_val>0.5642552971839905</left_val> <right_val>-0.7375097870826721</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 3 1 14 6 -1.</_> <_> 3 3 14 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0302439108490944</threshold> <left_val>0.5537161827087402</left_val> <right_val>-0.5089462995529175</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 4 8 12 9 -1.</_> <_> 4 11 12 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.1937028020620346</threshold> <left_val>0.7614368200302124</left_val> <right_val>-0.3485977053642273</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 8 18 12 2 -1.</_> <_> 14 18 6 1 2.</_> <_> 8 19 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0120156398043036</threshold> <left_val>-0.4035871028900146</left_val> <right_val>0.6296288967132568</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 6 6 -1.</_> <_> 2 12 2 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.9895049519836903e-03</threshold> <left_val>-0.4086846113204956</left_val> <right_val>0.4285241067409515</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 6 11 9 8 -1.</_> <_> 6 15 9 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.1299877017736435</threshold> <left_val>-0.2570166885852814</left_val> <right_val>0.5929297208786011</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 1 6 10 2 -1.</_> <_> 1 6 5 1 2.</_> <_> 6 7 5 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-6.0164160095155239e-03</threshold> <left_val>0.5601549744606018</left_val> <right_val>-0.2849527895450592</right_val></_></_></trees> <stage_threshold>-1.0788700580596924</stage_threshold> <parent>0</parent> <next>-1</next></_> <_> <!-- stage 2 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 3 2 14 12 -1.</_> <_> 3 6 14 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0943963602185249</threshold> <left_val>-0.5406976938247681</left_val> <right_val>0.5407304763793945</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 1 11 18 9 -1.</_> <_> 7 11 6 9 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0279577299952507</threshold> <left_val>0.3281945884227753</left_val> <right_val>-0.7144141197204590</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 10 4 -1.</_> <_> 5 14 10 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0635356530547142</threshold> <left_val>-0.3744345009326935</left_val> <right_val>0.5956786870956421</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 6 18 9 2 -1.</_> <_> 6 19 9 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0211040005087852</threshold> <left_val>-0.4845815896987915</left_val> <right_val>0.7378302812576294</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 9 12 2 8 -1.</_> <_> 9 16 2 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.6957250665873289e-03</threshold> <left_val>-0.8702409863471985</left_val> <right_val>0.2475769072771072</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 15 3 3 16 -1.</_> <_> 15 11 3 8 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0110464803874493</threshold> <left_val>-0.5981134176254272</left_val> <right_val>0.1849218010902405</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 7 9 1 6 -1.</_> <_> 7 11 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.3549139839597046e-04</threshold> <left_val>0.3266639113426208</left_val> <right_val>-0.8332661986351013</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 6 0 8 6 -1.</_> <_> 6 3 8 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0495516993105412</threshold> <left_val>0.7439032196998596</left_val> <right_val>-0.4024896025657654</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 1 13 6 1 -1.</_> <_> 4 13 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.9892829004675150e-03</threshold> <left_val>0.5047793984413147</left_val> <right_val>-0.5123764276504517</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 10 10 6 1 -1.</_> <_> 12 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.7016697246581316e-04</threshold> <left_val>0.2391823977231979</left_val> <right_val>-0.2104973942041397</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 4 10 6 1 -1.</_> <_> 6 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>5.4985969327390194e-03</threshold> <left_val>-0.3141318857669830</left_val> <right_val>0.7439212799072266</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 6 6 8 3 -1.</_> <_> 6 7 8 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-7.7209789305925369e-03</threshold> <left_val>0.6021335721015930</left_val> <right_val>-0.3841854035854340</right_val></_></_></trees> <stage_threshold>-1.5200910568237305</stage_threshold> <parent>1</parent> <next>-1</next></_> <_> <!-- stage 3 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 14 1 -1.</_> <_> 8 12 7 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.1992900399491191e-03</threshold> <left_val>0.2906270921230316</left_val> <right_val>-0.7548354268074036</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 5 2 15 12 -1.</_> <_> 5 6 15 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0943495184183121</threshold> <left_val>-0.4595882892608643</left_val> <right_val>0.3241611123085022</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 7 18 6 2 -1.</_> <_> 7 19 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0227251593023539</threshold> <left_val>-0.2826507091522217</left_val> <right_val>0.7242512702941895</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 10 4 -1.</_> <_> 5 14 10 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0585403405129910</threshold> <left_val>-0.5193219780921936</left_val> <right_val>0.6013407111167908</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 2 19 4 1 -1.</_> <_> 4 19 2 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.8358890631352551e-05</threshold> <left_val>-0.6561384201049805</left_val> <right_val>0.3897354006767273</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 10 12 10 8 -1.</_> <_> 10 16 10 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>3.9341559750027955e-04</threshold> <left_val>-0.8008638024330139</left_val> <right_val>0.2018187046051025</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 1 13 6 6 -1.</_> <_> 4 13 3 6 2.</_></rects> <tilted>0</tilted></feature> <threshold>-5.8259762590751052e-04</threshold> <left_val>0.2970958054065704</left_val> <right_val>-0.8628513216972351</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 9 18 6 2 -1.</_> <_> 12 18 3 1 2.</_> <_> 9 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.7955149562330917e-05</threshold> <left_val>-0.4508801102638245</left_val> <right_val>0.1758446991443634</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 1 10 9 10 -1.</_> <_> 1 15 9 5 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.2162160128355026e-03</threshold> <left_val>-0.8695623278617859</left_val> <right_val>0.2619656026363373</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 1 2 18 5 -1.</_> <_> 7 2 6 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0133769698441029</threshold> <left_val>-0.6464508175849915</left_val> <right_val>0.3887208998203278</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 4 -1.</_> <_> 7 12 6 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0113867800682783</threshold> <left_val>0.2826564013957977</left_val> <right_val>-0.8351002931594849</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 9 11 6 3 -1.</_> <_> 9 11 3 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.6949660386890173e-03</threshold> <left_val>-0.5282859802246094</left_val> <right_val>0.6657627820968628</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 5 10 3 2 -1.</_> <_> 6 10 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.8329479391686618e-05</threshold> <left_val>-0.6864507794380188</left_val> <right_val>0.5240061283111572</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 8 12 9 8 -1.</_> <_> 8 16 9 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.4069270109757781e-03</threshold> <left_val>-0.8969905972480774</left_val> <right_val>0.2389785945415497</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 6 1 3 2 -1.</_> <_> 6 2 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.9115570214344189e-05</threshold> <left_val>0.4608972072601318</left_val> <right_val>-0.8574141860008240</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 2 12 18 6 -1.</_> <_> 2 14 18 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.5082978904247284e-03</threshold> <left_val>-0.7511271238327026</left_val> <right_val>0.4849173128604889</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 0 11 18 1 -1.</_> <_> 6 11 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0198406204581261</threshold> <left_val>0.6246759295463562</left_val> <right_val>-0.7629678845405579</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 9 5 6 3 -1.</_> <_> 9 6 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.8021910004317760e-03</threshold> <left_val>-0.4809493124485016</left_val> <right_val>0.6243296861648560</right_val></_></_> <_> <!-- tree 18 --> <_> <!-- root node --> <feature> <rects> <_> 3 11 4 6 -1.</_> <_> 3 14 4 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.1158349661855027e-04</threshold> <left_val>-0.8559886217117310</left_val> <right_val>0.3861764967441559</right_val></_></_> <_> <!-- tree 19 --> <_> <!-- root node --> <feature> <rects> <_> 12 18 2 2 -1.</_> <_> 13 18 1 1 2.</_> <_> 12 19 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.7662550564855337e-05</threshold> <left_val>-0.7629433274269104</left_val> <right_val>0.3604950010776520</right_val></_></_> <_> <!-- tree 20 --> <_> <!-- root node --> <feature> <rects> <_> 3 12 9 8 -1.</_> <_> 3 16 9 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.7047859039157629e-03</threshold> <left_val>-0.9496951103210449</left_val> <right_val>0.3921845853328705</right_val></_></_> <_> <!-- tree 21 --> <_> <!-- root node --> <feature> <rects> <_> 6 12 9 2 -1.</_> <_> 9 12 3 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>5.1935878582298756e-04</threshold> <left_val>-0.8682754039764404</left_val> <right_val>0.4790566861629486</right_val></_></_> <_> <!-- tree 22 --> <_> <!-- root node --> <feature> <rects> <_> 2 12 12 8 -1.</_> <_> 2 12 6 4 2.</_> <_> 8 16 6 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.0928940173471346e-04</threshold> <left_val>-0.9670708775520325</left_val> <right_val>0.6848754286766052</right_val></_></_> <_> <!-- tree 23 --> <_> <!-- root node --> <feature> <rects> <_> 1 6 19 3 -1.</_> <_> 1 7 19 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>5.7576759718358517e-03</threshold> <left_val>-0.9778658747673035</left_val> <right_val>0.8792119026184082</right_val></_></_> <_> <!-- tree 24 --> <_> <!-- root node --> <feature> <rects> <_> 0 0 8 2 -1.</_> <_> 0 0 4 1 2.</_> <_> 4 1 4 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-4.2572239181026816e-05</threshold> <left_val>1.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 25 --> <_> <!-- root node --> <feature> <rects> <_> 12 0 8 2 -1.</_> <_> 16 0 4 1 2.</_> <_> 12 1 4 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>3.4698568924795836e-05</threshold> <left_val>-0.8942371010780334</left_val> <right_val>0.6385173201560974</right_val></_></_> <_> <!-- tree 26 --> <_> <!-- root node --> <feature> <rects> <_> 1 0 13 15 -1.</_> <_> 1 5 13 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>6.0833231545984745e-03</threshold> <left_val>-0.9911761283874512</left_val> <right_val>0.8617964982986450</right_val></_></_> <_> <!-- tree 27 --> <_> <!-- root node --> <feature> <rects> <_> 17 18 1 2 -1.</_> <_> 17 19 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.5569420065730810e-04</threshold> <left_val>-1.</left_val> <right_val>0.9989972114562988</right_val></_></_> <_> <!-- tree 28 --> <_> <!-- root node --> <feature> <rects> <_> 0 0 4 3 -1.</_> <_> 2 0 2 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.</threshold> <left_val>0.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 29 --> <_> <!-- root node --> <feature> <rects> <_> 9 19 4 1 -1.</_> <_> 9 19 2 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>5.8437039115233347e-05</threshold> <left_val>-0.9401987791061401</left_val> <right_val>0.9499294161796570</right_val></_></_> <_> <!-- tree 30 --> <_> <!-- root node --> <feature> <rects> <_> 3 13 14 4 -1.</_> <_> 3 15 14 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>8.5243082139641047e-04</threshold> <left_val>-1.</left_val> <right_val>1.0000870227813721</right_val></_></_> <_> <!-- tree 31 --> <_> <!-- root node --> <feature> <rects> <_> 17 0 3 4 -1.</_> <_> 17 2 3 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.</threshold> <left_val>0.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 32 --> <_> <!-- root node --> <feature> <rects> <_> 7 1 2 3 -1.</_> <_> 7 2 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>8.8114888058044016e-05</threshold> <left_val>-1.</left_val> <right_val>1.0001029968261719</right_val></_></_> <_> <!-- tree 33 --> <_> <!-- root node --> <feature> <rects> <_> 17 0 3 4 -1.</_> <_> 17 2 3 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.</threshold> <left_val>0.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 34 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 2 -1.</_> <_> 7 12 6 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.6535379691049457e-03</threshold> <left_val>0.9649471044540405</left_val> <right_val>-0.9946994185447693</right_val></_></_> <_> <!-- tree 35 --> <_> <!-- root node --> <feature> <rects> <_> 16 3 2 4 -1.</_> <_> 17 3 1 2 2.</_> <_> 16 5 1 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.2355250257533044e-04</threshold> <left_val>-0.8841317892074585</left_val> <right_val>0.5885220170021057</right_val></_></_> <_> <!-- tree 36 --> <_> <!-- root node --> <feature> <rects> <_> 3 13 10 2 -1.</_> <_> 3 13 5 1 2.</_> <_> 8 14 5 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.0420220680534840e-03</threshold> <left_val>0.8850557208061218</left_val> <right_val>-0.9887136220932007</right_val></_></_> <_> <!-- tree 37 --> <_> <!-- root node --> <feature> <rects> <_> 11 13 6 2 -1.</_> <_> 11 13 3 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.7822980191558599e-03</threshold> <left_val>0.8021606206893921</left_val> <right_val>-0.8011325001716614</right_val></_></_> <_> <!-- tree 38 --> <_> <!-- root node --> <feature> <rects> <_> 6 4 6 12 -1.</_> <_> 9 4 3 12 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.6262819301337004e-03</threshold> <left_val>-0.8629643917083740</left_val> <right_val>0.9028394818305969</right_val></_></_> <_> <!-- tree 39 --> <_> <!-- root node --> <feature> <rects> <_> 14 5 2 14 -1.</_> <_> 15 5 1 7 2.</_> <_> 14 12 1 7 2.</_></rects> <tilted>0</tilted></feature> <threshold>-5.8437039115233347e-05</threshold> <left_val>0.5506380796432495</left_val> <right_val>-0.8834760189056396</right_val></_></_> <_> <!-- tree 40 --> <_> <!-- root node --> <feature> <rects> <_> 3 2 12 10 -1.</_> <_> 9 2 6 10 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.1351429857313633e-03</threshold> <left_val>0.9118285179138184</left_val> <right_val>-0.8601468205451965</right_val></_></_> <_> <!-- tree 41 --> <_> <!-- root node --> <feature> <rects> <_> 16 11 4 4 -1.</_> <_> 16 13 4 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>6.5544509561732411e-04</threshold> <left_val>-0.5529929995536804</left_val> <right_val>0.6181765794754028</right_val></_></_> <_> <!-- tree 42 --> <_> <!-- root node --> <feature> <rects> <_> 5 19 10 1 -1.</_> <_> 10 19 5 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>3.8200760172912851e-05</threshold> <left_val>-0.8676869273185730</left_val> <right_val>0.7274010777473450</right_val></_></_> <_> <!-- tree 43 --> <_> <!-- root node --> <feature> <rects> <_> 15 2 1 18 -1.</_> <_> 15 11 1 9 2.</_></rects> <tilted>0</tilted></feature> <threshold>-6.2933329900261015e-05</threshold> <left_val>0.3377492129802704</left_val> <right_val>-0.8335667848587036</right_val></_></_> <_> <!-- tree 44 --> <_> <!-- root node --> <feature> <rects> <_> 1 4 5 16 -1.</_> <_> 1 12 5 8 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.8638119692914188e-04</threshold> <left_val>-0.8729416131973267</left_val> <right_val>0.7917960286140442</right_val></_></_> <_> <!-- tree 45 --> <_> <!-- root node --> <feature> <rects> <_> 7 6 12 6 -1.</_> <_> 7 8 12 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.6316178739070892e-04</threshold> <left_val>-0.9013931751251221</left_val> <right_val>0.7772005200386047</right_val></_></_> <_> <!-- tree 46 --> <_> <!-- root node --> <feature> <rects> <_> 2 11 12 6 -1.</_> <_> 2 11 6 3 2.</_> <_> 8 14 6 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.2007999466732144e-03</threshold> <left_val>-0.9860498905181885</left_val> <right_val>0.8049355149269104</right_val></_></_> <_> <!-- tree 47 --> <_> <!-- root node --> <feature> <rects> <_> 6 0 14 18 -1.</_> <_> 6 6 14 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>-2.3152970243245363e-03</threshold> <left_val>1.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 48 --> <_> <!-- root node --> <feature> <rects> <_> 0 0 19 18 -1.</_> <_> 0 6 19 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0144739197567105</threshold> <left_val>-0.9682086706161499</left_val> <right_val>0.9563586115837097</right_val></_></_> <_> <!-- tree 49 --> <_> <!-- root node --> <feature> <rects> <_> 10 17 1 3 -1.</_> <_> 10 18 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-3.2585670705884695e-03</threshold> <left_val>1.</left_val> <right_val>-0.9941142201423645</right_val></_></_> <_> <!-- tree 50 --> <_> <!-- root node --> <feature> <rects> <_> 2 10 5 10 -1.</_> <_> 2 15 5 5 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0134088601917028</threshold> <left_val>-0.9944000840187073</left_val> <right_val>0.8795533776283264</right_val></_></_> <_> <!-- tree 51 --> <_> <!-- root node --> <feature> <rects> <_> 17 0 3 1 -1.</_> <_> 18 0 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.0174949390348047e-05</threshold> <left_val>-0.9955059885978699</left_val> <right_val>0.4559975862503052</right_val></_></_> <_> <!-- tree 52 --> <_> <!-- root node --> <feature> <rects> <_> 0 16 5 3 -1.</_> <_> 0 17 5 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>1.8752219330053777e-04</threshold> <left_val>-1.</left_val> <right_val>1.0003039836883545</right_val></_></_> <_> <!-- tree 53 --> <_> <!-- root node --> <feature> <rects> <_> 19 0 1 2 -1.</_> <_> 19 1 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.</threshold> <left_val>0.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 54 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 14 1 -1.</_> <_> 7 12 7 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-5.7442798279225826e-03</threshold> <left_val>1.</left_val> <right_val>-1.</right_val></_></_> <_> <!-- tree 55 --> <_> <!-- root node --> <feature> <rects> <_> 13 12 6 6 -1.</_> <_> 13 14 6 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.8128331177867949e-04</threshold> <left_val>-0.9679043292999268</left_val> <right_val>0.5377150774002075</right_val></_></_> <_> <!-- tree 56 --> <_> <!-- root node --> <feature> <rects> <_> 0 11 4 4 -1.</_> <_> 0 13 4 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.9258249560371041e-04</threshold> <left_val>-0.9925985932350159</left_val> <right_val>0.7377948760986328</right_val></_></_> <_> <!-- tree 57 --> <_> <!-- root node --> <feature> <rects> <_> 10 17 3 3 -1.</_> <_> 10 18 3 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-7.6873782090842724e-03</threshold> <left_val>0.4390138089656830</left_val> <right_val>-0.9956768155097961</right_val></_></_> <_> <!-- tree 58 --> <_> <!-- root node --> <feature> <rects> <_> 2 10 15 5 -1.</_> <_> 7 10 5 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.6997690545395017e-04</threshold> <left_val>0.8890876173973083</left_val> <right_val>-0.9900755286216736</right_val></_></_> <_> <!-- tree 59 --> <_> <!-- root node --> <feature> <rects> <_> 14 9 1 4 -1.</_> <_> 14 11 1 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.8665470381383784e-05</threshold> <left_val>0.4759410917758942</left_val> <right_val>-0.9352231025695801</right_val></_></_> <_> <!-- tree 60 --> <_> <!-- root node --> <feature> <rects> <_> 5 9 6 4 -1.</_> <_> 5 9 3 2 2.</_> <_> 8 11 3 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>4.4182338751852512e-04</threshold> <left_val>-0.7511792182922363</left_val> <right_val>0.8805574178695679</right_val></_></_></trees> <stage_threshold>-4.9593520164489746</stage_threshold> <parent>2</parent> <next>-1</next></_> <_> <!-- stage 4 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 0 3 14 14 -1.</_> <_> 0 3 7 7 2.</_> <_> 7 10 7 7 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0127300098538399</threshold> <left_val>0.4832380115985870</left_val> <right_val>-0.7198603749275208</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 0 2 20 8 -1.</_> <_> 0 6 20 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0589522011578083</threshold> <left_val>-0.4658026993274689</left_val> <right_val>0.4875808060169220</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 8 8 -1.</_> <_> 0 16 8 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>7.8740529716014862e-04</threshold> <left_val>-0.7789018750190735</left_val> <right_val>0.2557401061058044</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 7 12 6 6 -1.</_> <_> 7 14 6 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0105524603277445</threshold> <left_val>-0.6375812888145447</left_val> <right_val>0.3461680114269257</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 1 18 8 2 -1.</_> <_> 1 18 4 1 2.</_> <_> 5 19 4 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>8.0834580585360527e-03</threshold> <left_val>-0.6557192206382751</left_val> <right_val>0.6636518239974976</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 8 10 4 8 -1.</_> <_> 8 14 4 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0235214307904243</threshold> <left_val>-0.9006652832031250</left_val> <right_val>0.4957715868949890</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 6 5 -1.</_> <_> 2 12 2 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.1901269792579114e-04</threshold> <left_val>-0.9414082765579224</left_val> <right_val>0.4645870029926300</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 8 9 12 -1.</_> <_> 10 12 9 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.5295119374059141e-04</threshold> <left_val>0.1733245998620987</left_val> <right_val>-0.9518421888351440</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 5 5 10 15 -1.</_> <_> 5 10 10 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>-4.9944370985031128e-03</threshold> <left_val>0.2332555055618286</left_val> <right_val>-0.9303036928176880</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 1 2 18 14 -1.</_> <_> 10 2 9 7 2.</_> <_> 1 9 9 7 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.8488549869507551e-03</threshold> <left_val>0.5224574208259583</left_val> <right_val>-0.6394140124320984</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 2 3 3 16 -1.</_> <_> 2 11 3 8 2.</_></rects> <tilted>0</tilted></feature> <threshold>8.3920639008283615e-03</threshold> <left_val>-0.6068183183670044</left_val> <right_val>0.4723689854145050</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 6 17 13 3 -1.</_> <_> 6 18 13 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-3.5511489841155708e-05</threshold> <left_val>0.2968985140323639</left_val> <right_val>-0.6452224850654602</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 5 11 9 3 -1.</_> <_> 8 11 3 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.1621841005980968e-03</threshold> <left_val>-0.4258666932582855</left_val> <right_val>0.5548338890075684</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 4 -1.</_> <_> 7 12 6 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.1551498472690582e-03</threshold> <left_val>0.3051683902740479</left_val> <right_val>-0.8206862807273865</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 3 9 4 2 -1.</_> <_> 3 9 2 1 2.</_> <_> 5 10 2 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.7603079322725534e-04</threshold> <left_val>-0.4252283871173859</left_val> <right_val>0.4734784960746765</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 7 3 8 3 -1.</_> <_> 7 4 8 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.6310528889298439e-03</threshold> <left_val>0.4430184960365295</left_val> <right_val>-0.5268139839172363</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 0 17 2 3 -1.</_> <_> 0 18 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>1.0609399760141969e-04</threshold> <left_val>-0.4128456115722656</left_val> <right_val>0.4862971007823944</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 5 8 10 4 -1.</_> <_> 5 10 10 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0146872196346521</threshold> <left_val>0.3483710885047913</left_val> <right_val>-0.6565722227096558</right_val></_></_> <_> <!-- tree 18 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 15 6 -1.</_> <_> 1 14 15 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0810066536068916</threshold> <left_val>-0.3347136080265045</left_val> <right_val>0.6498758792877197</right_val></_></_> <_> <!-- tree 19 --> <_> <!-- root node --> <feature> <rects> <_> 6 19 14 1 -1.</_> <_> 6 19 7 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>7.1147878770716488e-05</threshold> <left_val>-0.5422406792640686</left_val> <right_val>0.2807042896747589</right_val></_></_> <_> <!-- tree 20 --> <_> <!-- root node --> <feature> <rects> <_> 0 19 16 1 -1.</_> <_> 8 19 8 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.6208710551145487e-05</threshold> <left_val>-0.7503160834312439</left_val> <right_val>0.4175724089145660</right_val></_></_> <_> <!-- tree 21 --> <_> <!-- root node --> <feature> <rects> <_> 14 11 1 2 -1.</_> <_> 14 12 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.2025800717528909e-05</threshold> <left_val>0.3986887931823730</left_val> <right_val>-0.8484249711036682</right_val></_></_> <_> <!-- tree 22 --> <_> <!-- root node --> <feature> <rects> <_> 3 11 3 2 -1.</_> <_> 3 12 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.7908370611839928e-05</threshold> <left_val>0.4262354969978333</left_val> <right_val>-0.6090481281280518</right_val></_></_> <_> <!-- tree 23 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 12 1 -1.</_> <_> 5 12 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-3.7988298572599888e-04</threshold> <left_val>0.2306731045246124</left_val> <right_val>-0.3030667901039124</right_val></_></_> <_> <!-- tree 24 --> <_> <!-- root node --> <feature> <rects> <_> 3 12 12 1 -1.</_> <_> 9 12 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.8329479391686618e-05</threshold> <left_val>0.4294688999652863</left_val> <right_val>-0.6150280237197876</right_val></_></_></trees> <stage_threshold>-2.0059499740600586</stage_threshold> <parent>3</parent> <next>-1</next></_> <_> <!-- stage 5 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 7 18 3 2 -1.</_> <_> 8 18 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-8.7926961714401841e-04</threshold> <left_val>-0.8508998155593872</left_val> <right_val>0.2012203931808472</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 10 18 3 2 -1.</_> <_> 11 18 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.0719529818743467e-03</threshold> <left_val>-0.8750498294830322</left_val> <right_val>0.1188623011112213</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 7 18 3 2 -1.</_> <_> 8 18 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>1.1958930408582091e-03</threshold> <left_val>0.1821606010198593</left_val> <right_val>-0.8673701882362366</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 4 1 13 6 -1.</_> <_> 4 3 13 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0367217697203159</threshold> <left_val>0.3615708947181702</left_val> <right_val>-0.3918508887290955</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 8 15 2 1 -1.</_> <_> 9 15 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.8816348640248179e-04</threshold> <left_val>0.1872649937868118</left_val> <right_val>-0.7076212763786316</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 10 15 3 1 -1.</_> <_> 11 15 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>6.8340590223670006e-04</threshold> <left_val>0.1269242018461227</left_val> <right_val>-0.7228708863258362</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 1 -1.</_> <_> 7 12 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0425732918083668</threshold> <left_val>0.5858349800109863</left_val> <right_val>-0.2147608995437622</right_val></_></_></trees> <stage_threshold>-0.9255558848381042</stage_threshold> <parent>4</parent> <next>-1</next></_> <_> <!-- stage 6 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 6 18 7 2 -1.</_> <_> 6 19 7 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0233492702245712</threshold> <left_val>-0.2366411983966827</left_val> <right_val>0.5849282145500183</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 12 16 2 1 -1.</_> <_> 12 16 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>4.9444608157500625e-04</threshold> <left_val>0.1428918987512589</left_val> <right_val>-0.6820772290229797</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 3 8 4 6 -1.</_> <_> 3 8 2 3 2.</_> <_> 5 11 2 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0177930891513824</threshold> <left_val>0.5955523848533630</left_val> <right_val>-0.2330096960067749</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 2 3 18 4 -1.</_> <_> 2 5 18 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0353034809231758</threshold> <left_val>-0.3556973040103912</left_val> <right_val>0.3598164916038513</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 6 16 2 2 -1.</_> <_> 7 16 1 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>7.1409897645935416e-04</threshold> <left_val>0.1659422963857651</left_val> <right_val>-0.7856965065002441</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 9 19 2 1 -1.</_> <_> 9 19 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-3.5466518602333963e-04</threshold> <left_val>-0.7188175916671753</left_val> <right_val>0.1491793990135193</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 9 19 2 1 -1.</_> <_> 10 19 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-3.2956211362034082e-04</threshold> <left_val>-0.7239602804183960</left_val> <right_val>0.1283237040042877</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 3 -1.</_> <_> 7 12 6 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0558854192495346</threshold> <left_val>0.2699365019798279</left_val> <right_val>-0.3814569115638733</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 5 8 10 9 -1.</_> <_> 5 11 10 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.2315281033515930</threshold> <left_val>0.5102406740188599</left_val> <right_val>-0.2150623947381973</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 7 0 6 18 -1.</_> <_> 9 0 2 18 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.8320471066981554e-03</threshold> <left_val>-0.3187570869922638</left_val> <right_val>0.3741405010223389</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 2 5 8 4 -1.</_> <_> 2 5 4 2 2.</_> <_> 6 7 4 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-7.1148001588881016e-03</threshold> <left_val>0.3868972063064575</left_val> <right_val>-0.3064059019088745</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 13 11 2 3 -1.</_> <_> 13 11 1 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.0463730432093143e-03</threshold> <left_val>-0.0578359216451645</left_val> <right_val>0.2854403853416443</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 5 11 2 3 -1.</_> <_> 6 11 1 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.2736029748339206e-04</threshold> <left_val>-0.3159281015396118</left_val> <right_val>0.4068993926048279</right_val></_></_></trees> <stage_threshold>-1.1411540508270264</stage_threshold> <parent>5</parent> <next>-1</next></_> <_> <!-- stage 7 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 1 19 18 1 -1.</_> <_> 7 19 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0220439601689577</threshold> <left_val>-0.2536872923374176</left_val> <right_val>0.5212177038192749</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 12 14 3 6 -1.</_> <_> 13 14 1 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.1312560420483351e-03</threshold> <left_val>0.1482914984226227</left_val> <right_val>-0.5914195775985718</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 0 11 12 4 -1.</_> <_> 4 11 4 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0413990207016468</threshold> <left_val>0.4204145073890686</left_val> <right_val>-0.2349137067794800</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 0 2 20 8 -1.</_> <_> 0 6 20 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.1522327959537506</threshold> <left_val>-0.3104422092437744</left_val> <right_val>0.4176956117153168</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 7 14 2 4 -1.</_> <_> 8 14 1 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>7.2278419975191355e-04</threshold> <left_val>0.2251144051551819</left_val> <right_val>-0.6049224138259888</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 5 10 10 8 -1.</_> <_> 10 10 5 4 2.</_> <_> 5 14 5 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0139188598841429</threshold> <left_val>0.1998808979988098</left_val> <right_val>-0.5362910032272339</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 1 4 -1.</_> <_> 5 14 1 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>9.3200067058205605e-03</threshold> <left_val>-0.3086053133010864</left_val> <right_val>0.3600850105285645</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 0 1 8 -1.</_> <_> 10 4 1 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0135594001039863</threshold> <left_val>0.7699136137962341</left_val> <right_val>-0.1129935979843140</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 1 8 18 8 -1.</_> <_> 7 8 6 8 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.2024694979190826</threshold> <left_val>0.5726454854011536</left_val> <right_val>-0.1685701012611389</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 9 8 10 4 -1.</_> <_> 9 8 5 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0256939493119717</threshold> <left_val>-0.0890305936336517</left_val> <right_val>0.4055748879909515</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 6 6 8 3 -1.</_> <_> 6 7 8 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0135868499055505</threshold> <left_val>0.4805161952972412</left_val> <right_val>-0.1680151969194412</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 10 9 3 3 -1.</_> <_> 11 9 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-6.3351547578349710e-04</threshold> <left_val>0.2068227976560593</left_val> <right_val>-0.2571463882923126</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 4 14 2 4 -1.</_> <_> 5 14 1 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.3086969556752592e-04</threshold> <left_val>0.2003916949033737</left_val> <right_val>-0.4468185007572174</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 10 17 10 2 -1.</_> <_> 15 17 5 1 2.</_> <_> 10 18 5 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>9.4451867043972015e-03</threshold> <left_val>0.0453975386917591</left_val> <right_val>-0.6604390144348145</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 3 18 3 2 -1.</_> <_> 4 18 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.1732289567589760e-03</threshold> <left_val>-0.7233589887619019</left_val> <right_val>0.1189457029104233</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 13 2 4 9 -1.</_> <_> 13 2 2 9 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0270948894321918</threshold> <left_val>0.4183718860149384</left_val> <right_val>-0.0622722618281841</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 3 2 4 9 -1.</_> <_> 5 2 2 9 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0128746498376131</threshold> <left_val>-0.2036883980035782</left_val> <right_val>0.4376415908336639</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 9 8 2 8 -1.</_> <_> 10 8 1 4 2.</_> <_> 9 12 1 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>-2.8124409727752209e-03</threshold> <left_val>-0.6812670230865479</left_val> <right_val>0.1294167041778564</right_val></_></_></trees> <stage_threshold>-1.2025229930877686</stage_threshold> <parent>6</parent> <next>-1</next></_> <_> <!-- stage 8 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 0 18 14 2 -1.</_> <_> 0 18 7 1 2.</_> <_> 7 19 7 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0179104395210743</threshold> <left_val>-0.2364671975374222</left_val> <right_val>0.5514438152313232</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 10 13 9 1 -1.</_> <_> 13 13 3 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.0143511034548283e-03</threshold> <left_val>0.4693753123283386</left_val> <right_val>-0.3883568942546844</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 6 15 3 1 -1.</_> <_> 7 15 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.2181540629826486e-04</threshold> <left_val>0.1153784990310669</left_val> <right_val>-0.7132592797279358</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 0 16 20 4 -1.</_> <_> 10 16 10 2 2.</_> <_> 0 18 10 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0263313204050064</threshold> <left_val>-0.6675789952278137</left_val> <right_val>0.1828629970550537</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 1 13 18 4 -1.</_> <_> 1 13 9 2 2.</_> <_> 10 15 9 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0270899794995785</threshold> <left_val>0.0714882835745811</left_val> <right_val>-0.7389600276947021</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 10 10 6 1 -1.</_> <_> 12 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.9808810688555241e-03</threshold> <left_val>-0.0624900311231613</left_val> <right_val>0.2579961121082306</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 0 10 12 6 -1.</_> <_> 4 10 4 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0938581079244614</threshold> <left_val>-0.1166857033967972</left_val> <right_val>0.8323975801467896</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 11 9 4 -1.</_> <_> 13 11 3 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0170704908668995</threshold> <left_val>0.2551425099372864</left_val> <right_val>-0.1464619040489197</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 1 13 9 1 -1.</_> <_> 4 13 3 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.6102341040968895e-03</threshold> <left_val>0.3810698091983795</left_val> <right_val>-0.2898282110691071</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 12 17 1 3 -1.</_> <_> 12 18 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.6884109936654568e-03</threshold> <left_val>0.3976930975914001</left_val> <right_val>-0.1791553944349289</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 5 17 3 3 -1.</_> <_> 6 17 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>1.1422219686210155e-03</threshold> <left_val>0.1220583021640778</left_val> <right_val>-0.7954893708229065</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 0 2 20 8 -1.</_> <_> 0 6 20 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0854484736919403</threshold> <left_val>-0.3227156102657318</left_val> <right_val>0.2583124935626984</right_val></_></_></trees> <stage_threshold>-0.8488889932632446</stage_threshold> <parent>7</parent> <next>-1</next></_> <_> <!-- stage 9 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 1 6 -1.</_> <_> 5 15 1 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.2407209724187851e-03</threshold> <left_val>0.7162470817565918</left_val> <right_val>-0.2007752954959869</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 6 5 14 10 -1.</_> <_> 13 5 7 5 2.</_> <_> 6 10 7 5 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0822703167796135</threshold> <left_val>0.3968873023986816</left_val> <right_val>-0.2290832996368408</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 2 9 9 1 -1.</_> <_> 5 9 3 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>6.2309550121426582e-03</threshold> <left_val>-0.2406931966543198</left_val> <right_val>0.3659430146217346</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 10 11 9 3 -1.</_> <_> 13 11 3 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0140555696561933</threshold> <left_val>0.2607584893703461</left_val> <right_val>-0.2829737067222595</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 7 14 6 1 -1.</_> <_> 9 14 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>6.5327459014952183e-04</threshold> <left_val>0.1528156995773315</left_val> <right_val>-0.5593969821929932</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 19 0 1 16 -1.</_> <_> 19 8 1 8 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0125494198873639</threshold> <left_val>-0.2089716047048569</left_val> <right_val>0.2781802117824554</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 7 4 6 10 -1.</_> <_> 7 4 3 5 2.</_> <_> 10 9 3 5 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0156330708414316</threshold> <left_val>0.1483357995748520</left_val> <right_val>-0.6003684997558594</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 9 2 3 -1.</_> <_> 10 9 1 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>7.4582709930837154e-04</threshold> <left_val>-0.2270790934562683</left_val> <right_val>0.1987556070089340</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 12 2 -1.</_> <_> 4 12 4 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0158222708851099</threshold> <left_val>0.2820397913455963</left_val> <right_val>-0.2920896112918854</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 12 18 3 2 -1.</_> <_> 12 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>8.7247788906097412e-03</threshold> <left_val>-0.1720713973045349</left_val> <right_val>0.4697273969650269</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 5 17 1 2 -1.</_> <_> 5 18 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>6.8489677505567670e-04</threshold> <left_val>0.1544692963361740</left_val> <right_val>-0.6636797189712524</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 9 11 2 1 -1.</_> <_> 9 11 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.5823758915066719e-04</threshold> <left_val>0.1690579950809479</left_val> <right_val>-0.4210532009601593</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 5 0 9 4 -1.</_> <_> 8 0 3 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0420489497482777</threshold> <left_val>-0.1286004930734634</left_val> <right_val>0.6025344729423523</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 7 11 7 3 -1.</_> <_> 7 12 7 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0152104198932648</threshold> <left_val>0.3247380852699280</left_val> <right_val>-0.2400044947862625</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 8 14 3 1 -1.</_> <_> 9 14 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-7.4586068512871861e-04</threshold> <left_val>-0.7052754759788513</left_val> <right_val>0.1198176965117455</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 7 9 6 4 -1.</_> <_> 10 9 3 2 2.</_> <_> 7 11 3 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-5.6090662255883217e-03</threshold> <left_val>-0.5189142227172852</left_val> <right_val>0.1511954963207245</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 7 9 3 3 -1.</_> <_> 8 9 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-6.9692882243543863e-04</threshold> <left_val>0.2492880970239639</left_val> <right_val>-0.2738071978092194</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 9 9 2 1 -1.</_> <_> 9 9 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.3032859424129128e-03</threshold> <left_val>-0.7021797895431519</left_val> <right_val>0.1096538975834846</right_val></_></_></trees> <stage_threshold>-1.0809509754180908</stage_threshold> <parent>8</parent> <next>-1</next></_> <_> <!-- stage 10 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 1 19 15 1 -1.</_> <_> 6 19 5 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0127973603084683</threshold> <left_val>-0.2490361928939819</left_val> <right_val>0.4674673080444336</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 9 3 3 3 -1.</_> <_> 9 4 3 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-4.1834129951894283e-03</threshold> <left_val>0.3007251024246216</left_val> <right_val>-0.2219883054494858</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 1 12 18 1 -1.</_> <_> 7 12 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0236128699034452</threshold> <left_val>0.2414264976978302</left_val> <right_val>-0.3374670147895813</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 14 8 1 9 -1.</_> <_> 14 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0251536108553410</threshold> <left_val>0.4372070133686066</left_val> <right_val>-0.3275614082813263</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 2 2 2 18 -1.</_> <_> 2 11 2 9 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0211393106728792</threshold> <left_val>-0.2863174080848694</left_val> <right_val>0.3124063909053802</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 13 11 6 6 -1.</_> <_> 16 11 3 3 2.</_> <_> 13 14 3 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0217125993221998</threshold> <left_val>0.6942697763442993</left_val> <right_val>-0.1012582033872604</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 1 9 18 6 -1.</_> <_> 1 9 9 3 2.</_> <_> 10 12 9 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0430783592164516</threshold> <left_val>-0.5607234239578247</left_val> <right_val>0.1663125008344650</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 10 6 1 -1.</_> <_> 12 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.4987450558692217e-03</threshold> <left_val>0.1272646039724350</left_val> <right_val>-0.1166080012917519</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 4 10 6 1 -1.</_> <_> 6 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.1716569103300571e-03</threshold> <left_val>-0.2401334047317505</left_val> <right_val>0.4614624083042145</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 17 13 3 7 -1.</_> <_> 18 13 1 7 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.8898528330028057e-03</threshold> <left_val>0.0905465632677078</left_val> <right_val>-0.4839006960391998</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 0 13 3 7 -1.</_> <_> 1 13 1 7 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.1625960469245911e-03</threshold> <left_val>-0.5429257154464722</left_val> <right_val>0.1364106982946396</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 3 10 14 6 -1.</_> <_> 10 10 7 3 2.</_> <_> 3 13 7 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0367816612124443</threshold> <left_val>-0.7064548730850220</left_val> <right_val>0.1088668033480644</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 1 10 6 5 -1.</_> <_> 3 10 2 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0246897693723440</threshold> <left_val>-0.1673354059457779</left_val> <right_val>0.5149983167648315</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 9 7 2 3 -1.</_> <_> 9 8 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-4.8654521815478802e-03</threshold> <left_val>0.5060626268386841</left_val> <right_val>-0.1594700068235397</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 5 8 10 3 -1.</_> <_> 5 9 10 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0117849996313453</threshold> <left_val>0.4351908862590790</left_val> <right_val>-0.1512733995914459</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 10 13 2 1 -1.</_> <_> 10 13 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>9.4989547505974770e-04</threshold> <left_val>0.0692935213446617</left_val> <right_val>-0.4393649101257324</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 8 13 2 1 -1.</_> <_> 9 13 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>5.9616740327328444e-04</threshold> <left_val>0.0982565581798553</left_val> <right_val>-0.6629868745803833</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 9 9 2 3 -1.</_> <_> 9 10 2 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-6.2817288562655449e-03</threshold> <left_val>0.4888150990009308</left_val> <right_val>-0.1557238996028900</right_val></_></_></trees> <stage_threshold>-1.1087180376052856</stage_threshold> <parent>9</parent> <next>-1</next></_> <_> <!-- stage 11 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 9 0 1 8 -1.</_> <_> 9 4 1 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>-9.9095050245523453e-03</threshold> <left_val>0.5630884766578674</left_val> <right_val>-0.2063539028167725</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 19 0 1 14 -1.</_> <_> 19 7 1 7 2.</_></rects> <tilted>0</tilted></feature> <threshold>4.5435219071805477e-03</threshold> <left_val>-0.2470169961452484</left_val> <right_val>0.1799020022153854</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 7 6 6 2 -1.</_> <_> 7 7 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-8.7091082241386175e-04</threshold> <left_val>0.2453050017356873</left_val> <right_val>-0.2765454053878784</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 14 8 1 9 -1.</_> <_> 14 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0216368697583675</threshold> <left_val>0.2515161931514740</left_val> <right_val>-0.3227509856224060</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 2 18 4 2 -1.</_> <_> 2 18 2 1 2.</_> <_> 4 19 2 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.5493409484624863e-03</threshold> <left_val>-0.1476895958185196</left_val> <right_val>0.5545899271965027</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 9 11 6 3 -1.</_> <_> 9 11 3 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.6613079933449626e-03</threshold> <left_val>-0.2122790962457657</left_val> <right_val>0.1571837961673737</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 0 0 1 14 -1.</_> <_> 0 7 1 7 2.</_></rects> <tilted>0</tilted></feature> <threshold>9.4684818759560585e-03</threshold> <left_val>-0.2621173858642578</left_val> <right_val>0.2920702099800110</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 10 5 2 15 -1.</_> <_> 10 10 2 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0522385612130165</threshold> <left_val>0.1780423969030380</left_val> <right_val>-0.3343229889869690</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 5 11 6 3 -1.</_> <_> 8 11 3 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>2.5752868968993425e-03</threshold> <left_val>-0.2065097987651825</left_val> <right_val>0.4189889132976532</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 11 6 6 7 -1.</_> <_> 13 6 2 7 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0160471405833960</threshold> <left_val>0.2585200071334839</left_val> <right_val>-0.1094772964715958</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 4 10 12 9 -1.</_> <_> 8 10 4 9 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.1159958988428116</threshold> <left_val>0.6298483014106750</left_val> <right_val>-0.1196947023272514</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 10 14 3 1 -1.</_> <_> 11 14 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-9.7595580155029893e-04</threshold> <left_val>-0.6507467031478882</left_val> <right_val>0.0756275802850723</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 7 14 3 1 -1.</_> <_> 8 14 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-4.2097578989341855e-04</threshold> <left_val>-0.5833796858787537</left_val> <right_val>0.1222841963171959</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 10 14 3 2 -1.</_> <_> 11 14 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.9017631206661463e-04</threshold> <left_val>0.0758925378322601</left_val> <right_val>-0.2629995942115784</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 4 8 2 6 -1.</_> <_> 5 8 1 6 2.</_></rects> <tilted>0</tilted></feature> <threshold>3.1535029411315918e-03</threshold> <left_val>-0.1664831042289734</left_val> <right_val>0.4664255082607269</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 10 14 3 2 -1.</_> <_> 11 14 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-1.4046890428289771e-03</threshold> <left_val>-0.3981274962425232</left_val> <right_val>0.0561619699001312</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 3 12 3 4 -1.</_> <_> 4 12 1 4 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.1666089780628681e-03</threshold> <left_val>-0.1787768006324768</left_val> <right_val>0.4090973138809204</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 3 1 14 6 -1.</_> <_> 3 3 14 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0164993591606617</threshold> <left_val>0.2048030048608780</left_val> <right_val>-0.3630825877189636</right_val></_></_> <_> <!-- tree 18 --> <_> <!-- root node --> <feature> <rects> <_> 7 14 3 2 -1.</_> <_> 8 14 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.1761019383557141e-04</threshold> <left_val>0.1311777979135513</left_val> <right_val>-0.4833852946758270</right_val></_></_> <_> <!-- tree 19 --> <_> <!-- root node --> <feature> <rects> <_> 12 11 3 3 -1.</_> <_> 13 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>9.0707670897245407e-03</threshold> <left_val>9.2487707734107971e-03</left_val> <right_val>-0.6447566151618958</right_val></_></_> <_> <!-- tree 20 --> <_> <!-- root node --> <feature> <rects> <_> 5 11 3 3 -1.</_> <_> 6 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>3.3107338822446764e-04</threshold> <left_val>-0.2549797892570496</left_val> <right_val>0.2758406996726990</right_val></_></_> <_> <!-- tree 21 --> <_> <!-- root node --> <feature> <rects> <_> 4 0 12 3 -1.</_> <_> 4 1 12 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0139847695827484</threshold> <left_val>0.1226134970784187</left_val> <right_val>-0.5258917808532715</right_val></_></_> <_> <!-- tree 22 --> <_> <!-- root node --> <feature> <rects> <_> 1 19 18 1 -1.</_> <_> 7 19 6 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0238846298307180</threshold> <left_val>-0.1637594997882843</left_val> <right_val>0.3971964120864868</right_val></_></_> <_> <!-- tree 23 --> <_> <!-- root node --> <feature> <rects> <_> 5 10 11 6 -1.</_> <_> 5 12 11 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0941136777400970</threshold> <left_val>0.2231238931417465</left_val> <right_val>-0.2817093133926392</right_val></_></_> <_> <!-- tree 24 --> <_> <!-- root node --> <feature> <rects> <_> 0 9 12 1 -1.</_> <_> 6 9 6 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0163963604718447</threshold> <left_val>0.5174812078475952</left_val> <right_val>-0.1398597955703735</right_val></_></_></trees> <stage_threshold>-1.1378910541534424</stage_threshold> <parent>10</parent> <next>-1</next></_> <_> <!-- stage 12 --> <trees> <_> <!-- tree 0 --> <_> <!-- root node --> <feature> <rects> <_> 5 12 1 6 -1.</_> <_> 5 15 1 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.8984159396495670e-04</threshold> <left_val>0.4796459972858429</left_val> <right_val>-0.1926054060459137</right_val></_></_> <_> <!-- tree 1 --> <_> <!-- root node --> <feature> <rects> <_> 14 12 6 6 -1.</_> <_> 16 12 2 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>4.7213290818035603e-03</threshold> <left_val>-0.3855938911437988</left_val> <right_val>0.2359178066253662</right_val></_></_> <_> <!-- tree 2 --> <_> <!-- root node --> <feature> <rects> <_> 5 17 3 2 -1.</_> <_> 5 18 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.7611780203878880e-03</threshold> <left_val>0.1145095974206924</left_val> <right_val>-0.5536686778068542</right_val></_></_> <_> <!-- tree 3 --> <_> <!-- root node --> <feature> <rects> <_> 14 12 6 6 -1.</_> <_> 16 12 2 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>0.0619058012962341</threshold> <left_val>0.0361764803528786</left_val> <right_val>-0.7537580132484436</right_val></_></_> <_> <!-- tree 4 --> <_> <!-- root node --> <feature> <rects> <_> 0 12 6 6 -1.</_> <_> 2 12 2 6 3.</_></rects> <tilted>0</tilted></feature> <threshold>6.8295709788799286e-03</threshold> <left_val>-0.2995564043521881</left_val> <right_val>0.2059424966573715</right_val></_></_> <_> <!-- tree 5 --> <_> <!-- root node --> <feature> <rects> <_> 14 8 1 9 -1.</_> <_> 14 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0229486804455519</threshold> <left_val>0.1910860985517502</left_val> <right_val>-0.2746480107307434</right_val></_></_> <_> <!-- tree 6 --> <_> <!-- root node --> <feature> <rects> <_> 0 16 11 4 -1.</_> <_> 0 18 11 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0131213096901774</threshold> <left_val>-0.1467829048633575</left_val> <right_val>0.4494847953319550</right_val></_></_> <_> <!-- tree 7 --> <_> <!-- root node --> <feature> <rects> <_> 14 8 1 9 -1.</_> <_> 14 11 1 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0331512987613678</threshold> <left_val>0.2912957966327667</left_val> <right_val>-0.1595291942358017</right_val></_></_> <_> <!-- tree 8 --> <_> <!-- root node --> <feature> <rects> <_> 5 2 4 6 -1.</_> <_> 5 5 4 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0224155597388744</threshold> <left_val>-0.1776317954063416</left_val> <right_val>0.3403505980968475</right_val></_></_> <_> <!-- tree 9 --> <_> <!-- root node --> <feature> <rects> <_> 9 0 2 8 -1.</_> <_> 9 4 2 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0255698896944523</threshold> <left_val>0.5480523109436035</left_val> <right_val>-0.1752621978521347</right_val></_></_> <_> <!-- tree 10 --> <_> <!-- root node --> <feature> <rects> <_> 8 10 2 8 -1.</_> <_> 8 14 2 4 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0174023006111383</threshold> <left_val>-0.3940981030464172</left_val> <right_val>0.1953804939985275</right_val></_></_> <_> <!-- tree 11 --> <_> <!-- root node --> <feature> <rects> <_> 12 12 8 3 -1.</_> <_> 12 12 4 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-6.6808518022298813e-03</threshold> <left_val>0.1267247051000595</left_val> <right_val>-0.3698250055313110</right_val></_></_> <_> <!-- tree 12 --> <_> <!-- root node --> <feature> <rects> <_> 1 3 18 3 -1.</_> <_> 7 3 6 3 3.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0474075004458427</threshold> <left_val>-0.6734154224395752</left_val> <right_val>0.0941268503665924</right_val></_></_> <_> <!-- tree 13 --> <_> <!-- root node --> <feature> <rects> <_> 10 13 4 4 -1.</_> <_> 12 13 2 2 2.</_> <_> 10 15 2 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>-7.0174131542444229e-03</threshold> <left_val>-0.4878580868244171</left_val> <right_val>-4.7722761519253254e-03</right_val></_></_> <_> <!-- tree 14 --> <_> <!-- root node --> <feature> <rects> <_> 4 17 1 3 -1.</_> <_> 4 18 1 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.6818639859557152e-04</threshold> <left_val>0.3031811118125916</left_val> <right_val>-0.1906266957521439</right_val></_></_> <_> <!-- tree 15 --> <_> <!-- root node --> <feature> <rects> <_> 12 12 8 3 -1.</_> <_> 12 12 4 3 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0346436500549316</threshold> <left_val>0.1061747968196869</left_val> <right_val>-0.1113270968198776</right_val></_></_> <_> <!-- tree 16 --> <_> <!-- root node --> <feature> <rects> <_> 5 13 8 4 -1.</_> <_> 5 13 4 2 2.</_> <_> 9 15 4 2 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0128513900563121</threshold> <left_val>0.1139544025063515</left_val> <right_val>-0.6669226884841919</right_val></_></_> <_> <!-- tree 17 --> <_> <!-- root node --> <feature> <rects> <_> 0 0 20 18 -1.</_> <_> 0 9 20 9 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.2961465120315552</threshold> <left_val>-0.1820058971643448</left_val> <right_val>0.3209075033664703</right_val></_></_> <_> <!-- tree 18 --> <_> <!-- root node --> <feature> <rects> <_> 5 17 1 2 -1.</_> <_> 5 18 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-1.3540580403059721e-03</threshold> <left_val>-0.7073159813880920</left_val> <right_val>0.0918638333678246</right_val></_></_> <_> <!-- tree 19 --> <_> <!-- root node --> <feature> <rects> <_> 17 18 3 2 -1.</_> <_> 17 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-7.0616841549053788e-04</threshold> <left_val>0.1960162967443466</left_val> <right_val>-0.1338178962469101</right_val></_></_> <_> <!-- tree 20 --> <_> <!-- root node --> <feature> <rects> <_> 4 8 7 3 -1.</_> <_> 4 9 7 1 3.</_></rects> <tilted>0</tilted></feature> <threshold>-5.4999729618430138e-03</threshold> <left_val>0.3074981868267059</left_val> <right_val>-0.1724286973476410</right_val></_></_> <_> <!-- tree 21 --> <_> <!-- root node --> <feature> <rects> <_> 7 9 13 2 -1.</_> <_> 7 10 13 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-0.0122836297377944</threshold> <left_val>0.1942628026008606</left_val> <right_val>-0.1230755969882011</right_val></_></_> <_> <!-- tree 22 --> <_> <!-- root node --> <feature> <rects> <_> 7 12 2 1 -1.</_> <_> 8 12 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>1.9181630341336131e-04</threshold> <left_val>0.1334999054670334</left_val> <right_val>-0.3691028952598572</right_val></_></_> <_> <!-- tree 23 --> <_> <!-- root node --> <feature> <rects> <_> 7 11 6 5 -1.</_> <_> 9 11 2 5 3.</_></rects> <tilted>0</tilted></feature> <threshold>2.7476788964122534e-03</threshold> <left_val>-0.1872316002845764</left_val> <right_val>0.2906386852264404</right_val></_></_> <_> <!-- tree 24 --> <_> <!-- root node --> <feature> <rects> <_> 8 14 3 2 -1.</_> <_> 9 14 1 2 3.</_></rects> <tilted>0</tilted></feature> <threshold>5.3845712682232261e-04</threshold> <left_val>0.1176405027508736</left_val> <right_val>-0.5548595190048218</right_val></_></_> <_> <!-- tree 25 --> <_> <!-- root node --> <feature> <rects> <_> 17 18 3 2 -1.</_> <_> 17 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-6.2914132140576839e-03</threshold> <left_val>-0.6762797832489014</left_val> <right_val>0.0256425291299820</right_val></_></_> <_> <!-- tree 26 --> <_> <!-- root node --> <feature> <rects> <_> 0 18 3 2 -1.</_> <_> 0 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-8.0435717245563865e-04</threshold> <left_val>0.3097242116928101</left_val> <right_val>-0.2231778949499130</right_val></_></_> <_> <!-- tree 27 --> <_> <!-- root node --> <feature> <rects> <_> 16 18 3 2 -1.</_> <_> 16 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>0.0178245995193720</threshold> <left_val>0.0100319497287273</left_val> <right_val>-1.0000309944152832</right_val></_></_> <_> <!-- tree 28 --> <_> <!-- root node --> <feature> <rects> <_> 1 18 3 2 -1.</_> <_> 1 19 3 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-4.5915339142084122e-03</threshold> <left_val>-0.7925583124160767</left_val> <right_val>0.0804975628852844</right_val></_></_> <_> <!-- tree 29 --> <_> <!-- root node --> <feature> <rects> <_> 11 15 2 2 -1.</_> <_> 12 15 1 1 2.</_> <_> 11 16 1 1 2.</_></rects> <tilted>0</tilted></feature> <threshold>-4.2610289528965950e-04</threshold> <left_val>-0.4836213886737823</left_val> <right_val>0.0490311309695244</right_val></_></_></trees> <stage_threshold>-1.0918780565261841</stage_threshold> <parent>11</parent> <next>-1</next></_></stages></cars3> </opencv_storage>
Line 1: Imports CV2 library.
Line 4: Feeds the annotated training dataset (stored in cars.xml
) to the CascadeClassifier()
method of the haar detection algorithm.
Line 6: Loads the test video (named video.avi
).
Line 9: Starts the loop until every test video frame has been traversed.
Line 11: The read()
method reads the frame and stores it in the frames
variable. The frames
variable gets updated in each iteration. ret
is a boolean variable that stores True
if a frame has been read successfully. Otherwise, it stores False
.
Line 14: Greyscale every frame under preprocessing.
Line 17: Uses the detectMultiScale()
method to recognize cars of different sizes, where gray
is the frame over which the car will be detected. scaleFactor
specifies the rate at which the image size is reduced during the process. minNeighbors
specifies the minimum number of neighbors a detected region needs to be considered a car. minSize
sets the minimum size of the detected car.
Lines 20–21: Draw rectangles over the image where it detects a car.
Line 24: Displays the results on the screen.
Lines 27–29: Waits for the user to press q
if they want to quit the window.
Line 32: Closes all the opened windows.
Like vehicle detection, OpenCV provides the tools and libraries to detect various objects in image frames. We can use OpenCV's object detection algorithms to identify and localize those objects precisely by training our model with images of the objects we want to detect.
Note: Learn how to: