# EASE : Use POT to Quantize yolo-v4-tf Public Model
###### tags: `POT` `EASE`
## Use OpenVINO dockerhub image
```
docker run -it -v ~/Downloads:/mnt -u root --rm openvino/ubuntu20_dev:latest
```
## Run Accuracy Checker and POT
In ubuntu20_dev docker image,
#### 0. Download COCO 2017 trainval dataset and annotation
```=bash
cd /home/openvino
apt update
apt install unzip
mkdir coco_dataset
cd coco_dataset
curl http://images.cocodataset.org/zips/val2017.zip -o val2017.zip
unzip val2017.zip
curl http://images.cocodataset.org/annotations/annotations_trainval2017.zip -o trainval_2017.zip
unzip trainval_2017.zip
```
##### coco_dataset content
```
coco_dataset/
|--annotations/
|-- captions_train2017.json
|-- captions_val2017.json
|-- instances_train2017.json
|-- instances_val2017.json
|-- person_keypoints_train2017.json
`-- person_keypoints_val2017.json
|-- val2017/
|-- 000000042102.jpg
|-- 000000060102.jpg
|-- 000000245102.jpg
...
`-- 000000364102.jpg
```
#### 1. Download yolo-v4-tf
```=bash
omz_downloader.py --name yolo-v4-tf -o /home/openvino/openvino_models
```
#### 2. Convert yolo-v4-tf to IR
```=bash
omz_converter.py --name yolo-v4-tf -d /home/openvino/openvino_models -o /home/openvino/openvino_models
```
#### 3. Run Accuracy Checker on yolo-v4-tf
```=bash
accuracy_check -c yolo-v3-4f-int8.yml -m /home/openvino/openvino_models/public/yolo-v4-tf/FP32
```
#### 4. Run POT on yolo-v3-tf
```=bash
pot -c yolo-v4-tf-int8.json -e
```
#### 5. Copy yolo-v4-tf FP16-INT8 IR
```=bash
mkdir /home/openvino/openvino_models/public/yolo-v4-tf/FP16-INT8/
cp -ar results/yolo-v4-tf_DefaultQuantization/2*/optimized/* /home/openvino/openvino_models/public/yolo-v4-tf/FP16-INT8/
#### Note : Copy openvino_models foler to /mnt folder. They will be accessable in ~/Downloads folder in the host and /mnt in the container.
```
## Reference
### yolo-v4-tf-int8.yml
```
models:
- name: yolo_v4_tf
launchers:
- framework: openvino
device: CPU
adapter:
type: yolo_v3
anchors: 12,16,19,36,40,28,36,75,76,55,72,146,142,110,192,243,459,401
num: 3
coords: 4
classes: 80
threshold: 0.001
anchor_masks: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
raw_output: True
output_format: HWB
outputs:
- Func/StatefulPartitionedCall/output/_544
- Func/StatefulPartitionedCall/output/_542
- Func/StatefulPartitionedCall/output/_543
datasets:
- name: ms_coco_detection_80_class_without_background
annotation_conversion:
converter: mscoco_detection
annotation_file: /home/openvino/coco_dataset/annotations/instances_val2017.json
data_source: /home/openvino/coco_dataset/val2017
preprocessing:
- type: resize
size: 608
postprocessing:
- type: resize_prediction_boxes
- type: filter
apply_to: prediction
min_confidence: 0.001
remove_filtered: true
- type: diou_nms
overlap: 0.5
- type: clip_boxes
apply_to: prediction
metrics:
- type: map
integral: 11point
ignore_difficult: true
presenter: print_scalar
reference: 0.7123
- name: AP@0.5
type: coco_precision
max_detections: 100
threshold: 0.5
reference: 0.774
- name: AP@0.5:0.05:95
type: coco_precision
max_detections: 100
threshold: '0.5:0.05:0.95'
reference: 0.5026
```
### yolo-v4-tf-int8.json
```
{
"model": {
"model_name": "yolo-v4-tf",
"model": "/mnt/openvino_models/public/yolo-v4-tf/FP16/yolo-v4-tf.xml",
"weights": "/mnt/openvino_models/public/yolo-v4-tf/FP16/yolo-v4-tf.bin"
},
"engine": {
"config": "/mnt/yolo-v4-tf-int8.yml"
},
"compression": {
"algorithms": [
{
"name": "DefaultQuantization",
"params": {
"preset": "performance",
"stat_subset_size": 300
}
}
]
}
}
```
### accuracy_checker log
```
accuracy_check -c /mnt/yolo-v4-tf-int8.yml -m /mnt/openvino_models/public/yolo-v4-tf/FP32 -ss 300
Processing info:
model: yolo_v4_tf
launcher: openvino
device: CPU
dataset: ms_coco_detection_80_class_without_background
OpenCV version: 4.5.5
Annotation conversion for ms_coco_detection_80_class_without_background dataset has been started
Parameters to be used for conversion:
converter: mscoco_detection
annotation_file: /home/openvino/coco_dataset/annotations/instances_val2017.json
Total annotations size: 5000
100 / 5000 processed in 0.485s
200 / 5000 processed in 0.482s
300 / 5000 processed in 0.484s
400 / 5000 processed in 0.483s
500 / 5000 processed in 0.483s
600 / 5000 processed in 0.485s
700 / 5000 processed in 0.488s
800 / 5000 processed in 0.490s
900 / 5000 processed in 0.488s
1000 / 5000 processed in 0.489s
1100 / 5000 processed in 0.495s
1200 / 5000 processed in 0.493s
1300 / 5000 processed in 0.494s
1400 / 5000 processed in 0.495s
1500 / 5000 processed in 0.494s
1600 / 5000 processed in 0.498s
1700 / 5000 processed in 0.501s
1800 / 5000 processed in 0.500s
1900 / 5000 processed in 0.502s
2000 / 5000 processed in 0.506s
2100 / 5000 processed in 0.499s
2200 / 5000 processed in 0.502s
2300 / 5000 processed in 0.501s
2400 / 5000 processed in 0.501s
2500 / 5000 processed in 0.498s
2600 / 5000 processed in 0.500s
2700 / 5000 processed in 0.500s
2800 / 5000 processed in 0.500s
2900 / 5000 processed in 0.499s
3000 / 5000 processed in 0.499s
3100 / 5000 processed in 0.496s
3200 / 5000 processed in 0.499s
3300 / 5000 processed in 0.495s
3400 / 5000 processed in 0.495s
3500 / 5000 processed in 0.494s
3600 / 5000 processed in 0.495s
3700 / 5000 processed in 0.491s
3800 / 5000 processed in 0.490s
3900 / 5000 processed in 0.490s
4000 / 5000 processed in 0.489s
4100 / 5000 processed in 0.486s
4200 / 5000 processed in 0.484s
4300 / 5000 processed in 0.483s
4400 / 5000 processed in 0.534s
4500 / 5000 processed in 0.514s
4600 / 5000 processed in 0.511s
4700 / 5000 processed in 0.491s
4800 / 5000 processed in 0.499s
4900 / 5000 processed in 0.524s
5000 / 5000 processed in 0.510s
5000 objects processed in 24.805 seconds
Annotation conversion for ms_coco_detection_80_class_without_background dataset has been finished
IE version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
Loaded CPU plugin version:
CPU - openvino_intel_cpu_plugin: 2022.1.2022.1.0-7019-cdb9bec7210-releases/2022/1
Found model /mnt/openvino_models/public/yolo-v4-tf/FP32/yolo-v4-tf.xml
Found weights /mnt/openvino_models/public/yolo-v4-tf/FP32/yolo-v4-tf.bin
Input info:
Node name: image_input
Tensor names: image_input:0, image_input
precision: f32
shape: (1, 608, 608, 3)
Output info
Node name: Func/StatefulPartitionedCall/output/_542:0
Tensor names: StatefulPartitionedCall/model/conv2d_101/BiasAdd:0, StatefulPartitionedCall/Identity:0, Func/StatefulPartitionedCall/output/_542:0, Identity:0
precision: f32
shape: (1, 38, 38, 255)
Node name: Func/StatefulPartitionedCall/output/_543:0
Tensor names: Identity_1:0, StatefulPartitionedCall/model/conv2d_109/BiasAdd:0, Func/StatefulPartitionedCall/output/_543:0, StatefulPartitionedCall/Identity_1:0
precision: f32
shape: (1, 19, 19, 255)
Node name: Func/StatefulPartitionedCall/output/_544:0
Tensor names: Identity_2:0, StatefulPartitionedCall/Identity_2:0, Func/StatefulPartitionedCall/output/_544:0, StatefulPartitionedCall/model/conv2d_93/BiasAdd:0
precision: f32
shape: (1, 76, 76, 255)
0%| | 1/300 [00:00<02:53]12:30:45 accuracy_checker WARNING: /usr/local/lib/python3.8/dist-packages/openvino/tools/accuracy_checker/adapters/yolo.py:426: RuntimeWarning: overflow encountered in exp
prob_correct=lambda x: 1.0 / (1.0 + np.exp(-x)))
300 objects processed in 167.019 seconds
map: 71.78% [FAILED: abs error = 0.5475 | relative error = 0.007686]
AP@0.5: 78.38% [FAILED: abs error = 0.9796 | relative error = 0.01266]
AP@0.5:0.05:95: 53.79% [FAILED: abs error = 3.53 | relative error = 0.07023]
```
### POT log
```
pot -c /mnt/yolo-v4-tf-int8.json -e --output-dir INFO:openvino.tools.pot.app.run:Output log dir: /mnt/openvino_models/public/yolo-v4-tf/FP16-INT8/yolo-v4-tf_DefaultQuantization/2022-05-02_13-42-23
INFO:openvino.tools.pot.app.run:Creating pipeline:
Algorithm: DefaultQuantization
Parameters:
preset : performance
stat_subset_size : 300
target_device : ANY
model_type : None
dump_intermediate_model : False
inplace_statistics : True
exec_log_dir : /mnt/openvino_models/public/yolo-v4-tf/FP16-INT8/yolo-v4-tf_DefaultQuantization/2022-05-02_13-42-23
===========================================================================
IE version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
Loaded CPU plugin version:
CPU - openvino_intel_cpu_plugin: 2022.1.2022.1.0-7019-cdb9bec7210-releases/2022/1
Annotation conversion for ms_coco_detection_80_class_without_background dataset has been started
Parameters to be used for conversion:
converter: mscoco_detection
annotation_file: /home/openvino/coco_dataset/annotations/instances_val2017.json
Total annotations size: 5000
100 / 5000 processed in 0.543s
200 / 5000 processed in 0.537s
300 / 5000 processed in 0.544s
400 / 5000 processed in 0.554s
500 / 5000 processed in 0.545s
600 / 5000 processed in 0.543s
700 / 5000 processed in 0.556s
800 / 5000 processed in 0.561s
900 / 5000 processed in 0.616s
1000 / 5000 processed in 0.623s
1100 / 5000 processed in 0.633s
1200 / 5000 processed in 0.621s
1300 / 5000 processed in 0.615s
1400 / 5000 processed in 0.617s
1500 / 5000 processed in 0.624s
1600 / 5000 processed in 0.616s
1700 / 5000 processed in 0.620s
1800 / 5000 processed in 0.618s
1900 / 5000 processed in 0.619s
2000 / 5000 processed in 0.587s
2100 / 5000 processed in 0.572s
2200 / 5000 processed in 0.563s
2300 / 5000 processed in 0.560s
2400 / 5000 processed in 0.565s
2500 / 5000 processed in 0.562s
2600 / 5000 processed in 0.559s
2700 / 5000 processed in 0.561s
2800 / 5000 processed in 0.587s
2900 / 5000 processed in 0.602s
3000 / 5000 processed in 0.558s
3100 / 5000 processed in 0.558s
3200 / 5000 processed in 0.557s
3300 / 5000 processed in 0.556s
3400 / 5000 processed in 0.554s
3500 / 5000 processed in 0.553s
3600 / 5000 processed in 0.552s
3700 / 5000 processed in 0.550s
3800 / 5000 processed in 0.550s
3900 / 5000 processed in 0.552s
4000 / 5000 processed in 0.547s
4100 / 5000 processed in 0.546s
4200 / 5000 processed in 0.544s
4300 / 5000 processed in 0.545s
4400 / 5000 processed in 0.542s
4500 / 5000 processed in 0.542s
4600 / 5000 processed in 0.539s
4700 / 5000 processed in 0.543s
4800 / 5000 processed in 0.540s
4900 / 5000 processed in 0.539s
5000 / 5000 processed in 0.535s
5000 objects processed in 28.424 seconds
Annotation conversion for ms_coco_detection_80_class_without_background dataset has been finished
INFO:openvino.tools.pot.pipeline.pipeline:Inference Engine version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
INFO:openvino.tools.pot.pipeline.pipeline:Model Optimizer version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
INFO:openvino.tools.pot.pipeline.pipeline:Post-Training Optimization Tool version: 2022.1.0-7019-cdb9bec7210-releases/2022/1
INFO:openvino.tools.pot.statistics.collector:Start computing statistics for algorithms : DefaultQuantization
INFO:openvino.tools.pot.statistics.collector:Computing statistics finished
INFO:openvino.tools.pot.pipeline.pipeline:Start algorithm: DefaultQuantization
INFO:openvino.tools.pot.algorithms.quantization.default.algorithm:Start computing statistics for algorithm : ActivationChannelAlignment
INFO:openvino.tools.pot.algorithms.quantization.default.algorithm:Computing statistics finished
INFO:openvino.tools.pot.algorithms.quantization.default.algorithm:Start computing statistics for algorithms : MinMaxQuantization,FastBiasCorrection
INFO:openvino.tools.pot.algorithms.quantization.default.algorithm:Computing statistics finished
INFO:openvino.tools.pot.pipeline.pipeline:Finished: DefaultQuantization
===========================================================================
INFO:openvino.tools.pot.pipeline.pipeline:Evaluation of generated model
INFO:openvino.tools.pot.engines.ac_engine:Start inference on the whole dataset
Total dataset size: 5000
1000 / 5000 processed in 173.116s
2000 / 5000 processed in 176.532s
3000 / 5000 processed in 173.620s
4000 / 5000 processed in 175.386s
5000 / 5000 processed in 175.397s
5000 objects processed in 874.052 seconds
INFO:openvino.tools.pot.engines.ac_engine:Inference finished
INFO:openvino.tools.pot.app.run:map : 0.7084540024167995
INFO:openvino.tools.pot.app.run:AP@0.5 : 0.7726537047800925
INFO:openvino.tools.pot.app.run:AP@0.5:0.05:95 : 0.4798230247936459
```