vendor: OpenCV 5.0.0 snapshot at 755e50675d97db9b7d449d8bd6b09888646f6c6e
@@ -0,0 +1,134 @@
|
||||
Object Detection using CNNs {#tutorial_dnn_objdetect}
|
||||
===========================
|
||||
|
||||
# Building
|
||||
|
||||
Build samples of "dnn_objectect" module. Refer to OpenCV build tutorials for details.
|
||||
Enable `BUILD_EXAMPLES=ON` CMake option and build these targets (Linux):
|
||||
- example_dnn_objdetect_image_classification
|
||||
- example_dnn_objdetect_obj_detect
|
||||
|
||||
Download the weights file and model definition file from `opencv_extra/dnn_objdetect`
|
||||
|
||||
|
||||
# Object Detection
|
||||
|
||||
```bash
|
||||
example_dnn_objdetect_obj_detect <model-definition-file> <model-weights-file> <test-image>
|
||||
```
|
||||
|
||||
All the following examples were run on a laptop with `Intel(R) Core(TM)2 i3-4005U CPU @ 1.70GHz` (without GPU).
|
||||
|
||||
The model is incredibly fast taking just `0.172091` seconds on an average to predict multiple bounding boxes.
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_obj_detect SqueezeDet_deploy.prototxt SqueezeDet.caffemodel tutorials/images/aeroplane.jpg
|
||||
|
||||
Total objects detected: 1 in 0.168792 seconds
|
||||
------
|
||||
Class: aeroplane
|
||||
Probability: 0.845181
|
||||
Co-ordinates: 41 116 415 254
|
||||
------
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_obj_detect SqueezeDet_deploy.prototxt SqueezeDet.caffemodel tutorials/images/bus.jpg
|
||||
|
||||
Total objects detected: 1 in 0.201276 seconds
|
||||
------
|
||||
Class: bus
|
||||
Probability: 0.701829
|
||||
Co-ordinates: 0 32 415 244
|
||||
------
|
||||
```
|
||||
|
||||

|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_obj_detect SqueezeDet_deploy.prototxt SqueezeDet.caffemodel tutorials/images/cat.jpg
|
||||
|
||||
Total objects detected: 1 in 0.190335 seconds
|
||||
------
|
||||
Class: cat
|
||||
Probability: 0.703465
|
||||
Co-ordinates: 34 0 381 282
|
||||
------
|
||||
```
|
||||
|
||||

|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_obj_detect SqueezeDet_deploy.prototxt SqueezeDet.caffemodel tutorials/images/persons_mutli.jpg
|
||||
|
||||
Total objects detected: 2 in 0.169152 seconds
|
||||
------
|
||||
Class: person
|
||||
Probability: 0.737349
|
||||
Co-ordinates: 160 67 313 363
|
||||
------
|
||||
Class: person
|
||||
Probability: 0.720328
|
||||
Co-ordinates: 187 198 222 323
|
||||
------
|
||||
```
|
||||
|
||||

|
||||
|
||||
Go ahead and run the model with other images !
|
||||
|
||||
|
||||
## Changing threshold
|
||||
|
||||
By default this model thresholds the detections at confidence of `0.53`. While filtering there are number of bounding boxes which are predicted, you can manually control what gets thresholded by passing the value of optional arguement `threshold` like:
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_obj_detect <model-definition-file> <model-weights-file> <test-image> <threshold>
|
||||
```
|
||||
|
||||
Changing the threshold to say `0.0`, produces the following:
|
||||
|
||||

|
||||
|
||||
That doesn't seem to be that helpful !
|
||||
|
||||
# Image Classification
|
||||
|
||||
```bash
|
||||
example_dnn_objdetect_image_classification <model-definition-file> <model-weights-file> <test-image>
|
||||
```
|
||||
|
||||
The size of the model being **4.9MB**, just takes a time of **0.136401** seconds to classify the image.
|
||||
|
||||
Running the model on examples produces the following results:
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_image_classification SqueezeNet_deploy.prototxt SqueezeNet.caffemodel tutorials/images/aeroplane.jpg
|
||||
Best class Index: 404
|
||||
Time taken: 0.137722
|
||||
Probability: 77.1757
|
||||
```
|
||||
|
||||
Looking at [synset_words.txt](https://raw.githubusercontent.com/opencv/opencv/3.4.0/samples/data/dnn/synset_words.txt), the predicted class belongs to `airliner`
|
||||
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_image_classification SqueezeNet_deploy.prototxt SqueezeNet.caffemodel tutorials/images/cat.jpg
|
||||
Best class Index: 285
|
||||
Time taken: 0.136401
|
||||
Probability: 40.7111
|
||||
```
|
||||
|
||||
This belongs to the class: `Egyptian cat`
|
||||
|
||||
```bash
|
||||
<bin_path>/example_dnn_objdetect_image_classification SqueezeNet_deploy.prototxt SqueezeNet.caffemodel tutorials/images/space_shuttle.jpg
|
||||
Best class Index: 812
|
||||
Time taken: 0.137792
|
||||
Probability: 15.8467
|
||||
```
|
||||
|
||||
This belongs to the class: `space shuttle`
|
||||
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 27 KiB |