Add POT how-to (#5092)
This commit is contained in:
parent
812175268a
commit
ead6040b21
163
docs/how_tos/POT_how_to_example.md
Normal file
163
docs/how_tos/POT_how_to_example.md
Normal file
@ -0,0 +1,163 @@
|
||||
# Post-Training Optimization Tool - A real example
|
||||
|
||||
This tutorial describes the example from the following YouTube* video:
|
||||
|
||||
http://XXXXX
|
||||
|
||||
Watch this video to learn the basics of Post-training Optimization Tool (POT):
|
||||
https://www.youtube.com/watch?v=SvkI25Ca_SQ
|
||||
|
||||
The example has been tested on OpenVINO™ 2021 on Ubuntu 18.04 Operating System.
|
||||
|
||||
|
||||
## 1. Installation
|
||||
|
||||
Install OpenVINO™ toolkit and Model Optimizer, Accuracy Checker, and Post-training Optimization Tool components.
|
||||
|
||||
1. Define the OpenVINO™ install directory:
|
||||
```
|
||||
export OV=/opt/intel/openvino_2021/
|
||||
```
|
||||
2. Install the Model Optimizer prerequisites:
|
||||
```
|
||||
cd $OV/deployment_tools/model_optimizer/install_prerequisites
|
||||
sudo ./install_prerequisites.sh
|
||||
```
|
||||
3. Install the Accuracy Checker requirements:
|
||||
```
|
||||
cd $OV/deployment_tools/open_model_zoo/tools/accuracy_checker
|
||||
sudo python3 setup.py install
|
||||
```
|
||||
4. Install the Post-training Optimization Tool:
|
||||
```
|
||||
cd $OV/deployment_tools/tools/post_training_optimization_toolkit
|
||||
sudo python3 setup.py install
|
||||
```
|
||||
|
||||
## 2. Download Model
|
||||
|
||||
This tutorial describes MobileNet v2 model from PyTorch* framework. You can choose any other model.
|
||||
|
||||
Download the MobileNet v2 PyTorch* model using the commands below:
|
||||
```
|
||||
mkdir ~/POT
|
||||
```
|
||||
```
|
||||
cd ~/POT
|
||||
```
|
||||
```
|
||||
python3 $OV/deployment_tools/tools/model_downloader/downloader.py --name mobilenet-v2-pytorch -o .
|
||||
```
|
||||
|
||||
## 3. Prepare Model for Inference
|
||||
|
||||
Install requirements for PyTorch using the commands below:
|
||||
```
|
||||
cd $OV/deployment_tools/open_model_zoo/tools/downloader
|
||||
```
|
||||
```
|
||||
python3 -mpip install --user -r ./requirements-pytorch.in
|
||||
```
|
||||
|
||||
You can find the parameters for Mobilnet v2 conversion here:
|
||||
```
|
||||
vi /opt/intel/openvino_2021/deployment_tools/open_model_zoo/models/public/mobilenet-v2-pytorch/model.yml
|
||||
```
|
||||
|
||||
Convert the model from PyTorch to ONNX*:
|
||||
```
|
||||
cd ~/POT/public/mobilenet-v2-pytorch
|
||||
python3 /opt/intel/openvino_2021/deployment_tools/open_model_zoo/tools/downloader/pytorch_to_onnx.py \
|
||||
--model-name=MobileNetV2 \
|
||||
--model-path=. \
|
||||
--weights=mobilenet-v2.pth \
|
||||
--import-module=MobileNetV2 \
|
||||
--input-shape=1,3,224,224 /
|
||||
--output-file=mobilenet-v2.onnx \
|
||||
--input-names=data \
|
||||
--output-names=prob
|
||||
|
||||
```
|
||||
Convert the model from ONNX to the OpenVINO™ Intermediate Representation (IR):
|
||||
```
|
||||
mo_onnx.py \
|
||||
-m mobilenet-v2.onnx \
|
||||
--input=data \
|
||||
--mean_values=data[123.675,116.28,103.53] \
|
||||
--scale_values=data[58.624,57.12,57.375] \
|
||||
--reverse_input_channels \
|
||||
--output=prob
|
||||
```
|
||||
|
||||
Move the IR files to my directory:
|
||||
|
||||
```
|
||||
mv mobilenet-v2.xml ~/POT/model.xml
|
||||
mv mobilenet-v2.bin ~/POT/model.bin
|
||||
```
|
||||
|
||||
## 4. Edit Configurations
|
||||
|
||||
Edit the configuration files:
|
||||
```
|
||||
sudo vi $OV/deployment_tools/open_model_zoo/tools/accuracy_checker/dataset_definitions.yml
|
||||
(edit imagenet_1000_classes)
|
||||
```
|
||||
```
|
||||
export DEFINITIONS_FILE=/opt/intel/openvino_2021/deployment_tools/open_model_zoo/tools/accuracy_checker/dataset_definitions.yml
|
||||
```
|
||||
|
||||
Copy the JSON file to my directory and edit:
|
||||
|
||||
```
|
||||
cp $OV/deployment_tools/tools/post_training_optimization_toolkit/configs/examples/quantization/classification/mobilenetV2_pytorch_int8.json ~/POT
|
||||
```
|
||||
```
|
||||
vi mobilenetV2_pytorch_int8.json
|
||||
```
|
||||
|
||||
Copy the YML file to my directory and edit:
|
||||
|
||||
```
|
||||
cp /opt/intel/openvino_2021/deployment_tools/open_model_zoo/tools/accuracy_checker/configs/mobilenet-v2.yml ~/POT
|
||||
```
|
||||
```
|
||||
vi mobilenet-v2.yml
|
||||
```
|
||||
|
||||
## 5. Run Baseline
|
||||
|
||||
Run Accuracy Checker on the original model:
|
||||
|
||||
```
|
||||
accuracy_check -c mobilenet-v2.yml
|
||||
```
|
||||
|
||||
Install the Benchmark Tool first. To learn more about Benchmark Tool refer to [Benchmark C++ Tool](https://docs.openvinotoolkit.org/latest/openvino_inference_engine_samples_benchmark_app_README.html)
|
||||
or [Benchmark Python* Tool](https://docs.openvinotoolkit.org/latest/openvino_inference_engine_tools_benchmark_tool_README.html).
|
||||
|
||||
Run performance benchmark:
|
||||
```
|
||||
~/inference_engine_cpp_samples_build/intel64/Release/benchmark_app -m ~/POT/model.xml
|
||||
```
|
||||
|
||||
## 6. Run Integer Calibration
|
||||
|
||||
You can edit the JSON file to switch between two modes of calibration:
|
||||
|
||||
- AccuracyAwareQuantization
|
||||
- DefaultQuantization
|
||||
|
||||
|
||||
```
|
||||
pot --config /home/~/POT/mobilenetV2_pytorch_int8.json \
|
||||
--output-dir /home/~/POT/ \
|
||||
--evaluate \
|
||||
--log-level INFO
|
||||
```
|
||||
|
||||
Run the Benchmark Tool for the calibrated model. Make sure the name contains `DafultQuantization/.../optimized/...`
|
||||
|
||||
```
|
||||
~/inference_engine_cpp_samples_build/intel64/Release/benchmark_app -m mobilenetv2_DefaultQuantization/2021-03-07/optimized/mobilenetv2.xml
|
||||
```
|
Loading…
Reference in New Issue
Block a user