作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
目录
环境准备
win10的OpenVINO安装
使用OpenVINO将yolo预训练模型转成IR格式
安装accuracy_check
安装pot
查看pot和ac是否安装成功
过程中遇到的问题:
裁剪数据集
数据集和脚本准备
执行裁剪
accuracy checker测试精度
准备数据和配置文件
执行命令:
结果:
由FP32量化至int8
准备json文件、模型和数据
pot命令执行
结果:
速度提升效果
win10搭建pytorch环境跑通pytorch版本的yolov5_RayChiu757374816的博客-CSDN博客
win10环境yolov5s预训练模型转onnx然后用openvino生成推理加速模型并测试推理_RayChiu757374816的博客-CSDN博客
到OpenVINO安装路径下执行自带安装脚本
cd C:\Program Files (x86)\IntelSWTools\openvino_2020.4.287\deployment_tools\open_model_zoo\tools\accuracy_checker
python setup.py install
cd C:\Program Files (x86)\IntelSWTools\openvino_2020.4.287\deployment_tools\tools\post_training_optimization_toolkit
python setup.py install --install-extras
accuracy_check -h
pot -h
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
原因:numpy的问题,我的numpy 19.5的,升级即可:
pip uninstall numpy
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple numpy
参考:Cut Datasets — OpenVINO™ documentation
先下载coco数据集:Dataset Preparation Guide — OpenVINO™ documentation
然后准备脚本,放到C盘work目录下:https://raw.githubusercontent.com/aalborov/cut_dataset/38c6dd3948ce4084a52c66e2e83c63eb3fa883e9/cut_dataset.py
然后把数据集解压也放到C盘work目录下。
python C:/Work/cut_dataset.py --source_images_archive_dir=C:/Work/val2017.zip --source_annotations_archive_dir=C:/Work/annotations_trainval2017.zip --output_size=200 --output_archive_dir=C:/Work/subsets --first_image=10 --dataset_type=coco
数据和配置文件放到同一个目录下,配置文件yolov5_640_ac.yml为:
models:
- name: yolo-v5
launchers:
- framework: dlsdk
model: ./changeModle2/yolov5s_sim.xml
weights: ./changeModle2/yolov5s_sim.bin
adapter:
type: yolo_v5
anchors: "10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326"
num: 9
coords: 4
classes: 80
anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2], ]
outputs:
- Conv_455
- Conv_504
- Conv_553
datasets:
- name: ms_coco_detection_80_class_without_background
data_source: val2017
annotation_conversion:
converter: mscoco_detection
annotation_file: instances_val2017.json
has_background: False
sort_annotations: True
use_full_label_map: False
annotation: mscoco_det_80.pickle
dataset_meta: mscoco_det_80.json
preprocessing:
- type: resize
size: 640
postprocessing:
- type: resize_prediction_boxes
- type: filter
apply_to: prediction
min_confidence: 0.001
remove_filtered: True
- type: nms
overlap: 0.5
- type: clip_boxes
apply_to: prediction
metrics:
- type: map
integral: 11point
ignore_difficult: true
presenter: print_scalar
- type: coco_precision
max_detections: 100
threshold: 0.5
注意对应一下自己的model和数据路径,yolov5的相关信息就不用改了,因为本次测试就是针对的yolov5。
accuracy_check -c ./vinoAcDemo/yolov5_640_ac.yml -s ./vinoAcDemo/ -td CPU
非常奇怪呀,我这个模型没有做过多的处理只是将预训练的yolov5模型转为onnx后简化了一下再转为IR文件的,没想到这么低的精度,而且后边量化至int8后测试map还不到5%,不知道啥原因。
数据模型还有下边的json配置文件放到同一目录下。
pot量化命令使用有两种方式,其中常用的一种是依赖于json配置文件的,我们准备一个yolov5s_int8_simple.json
{
"model": {
"model_name": "yolov5s_int8_cpu",
"model": "E:/projects/pyHome/about_yolo/yolov5-master/best.xml",
"weights": "E:/projects/pyHome/about_yolo/yolov5-master/best.bin"
},
"engine": {
"type": "simplified",
// you can specify path to directory with images or video file
// also you can specify template for file names to filter images to load
// templates are unix style
//"data_source": "val2017"
},
"compression": {
"target_device": "CPU",
"algorithms": [
{
"name": "DefaultQuantization",
"params": {
"preset": "performance",
"stat_subset_size": 128
}
}
]
}
}
pot -c ./yolov5s_int8_simple.json
提升到三倍快了,差不多22fps
参考:OpenVINO 2021r4.1 - 瞎搞YOLOV5 模型转换,INT8量化及C++推理实现_sandmangu的专栏-CSDN博客
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】