OpenVINO 部署 YOLOv5 转换IR文件
環(huán)境:
- Windows:10
- YOLOv5:3.1
- Python 3.7.10
- torch:1.7.0+cu101
- torchvision:0.8.1+cu101
- OpenVINO:openvino_2021.2.185
- Anaconda:2.0.4
運(yùn)行以下腳本臨時(shí)設(shè)置 OpenVINO 環(huán)境和變量:
cd C:\Program Files (x86)\Intel\openvino_2021.2.185\bin setupvars.bat(Python37) C:\Program Files (x86)\Intel\openvino_2021.2.185\bin>setupvars.bat
Python 3.7.10
[setupvars.bat] OpenVINO environment initialized
運(yùn)行以下命令來生成YOLOv5模型的IR:
cd C:\Program Files (x86)\Intel\openvino_2021.2.185\deployment_tools\model_optimizer python mo.py --input_model M:\yolov5-3.1\yolov5-v3\best.onnx --model_name M:\yolov5-3.1\best -s 255 --reverse_input_channels --output Conv_487,Conv_471,Conv_455注:mo.py文件在 \openvino_[版本號]\deployment_tools\model_optimizer 路徑下
- –input_model 定義了預(yù)訓(xùn)練的模型
- –model_name 是生成的 IR 和輸出 .xml/.bin 文件中的網(wǎng)絡(luò)名稱
- -s 表示來自原始網(wǎng)絡(luò)輸入的所有輸入值將除以 this value,
- –reverse_input_channels 用于將輸入通道順序從RGB 切換到BGR(反之亦然)
- –output 表示模型的輸出操作的名稱。
(pytorch) C:\Program Files (x86)\Intel\openvino_2021.2.185\deployment_tools\model_optimizer>python mo.py --input_model M:\yolov5-3.1\yolov5-v3\best.onnx --model_name M:\yolov5-3.1\best -s 255 --reverse_input_channels --output Conv_487,Conv_471,Conv_455
Model Optimizer arguments:
Common parameters:
- Path to the Input Model: M:\yolov5-3.1\yolov5-v3\best.onnx
- Path for generated IR: C:\Program Files (x86)\Intel\openvino_2021.2.185\deployment_tools\model_optimizer.
- IR output name: M:\yolov5-3.1\best
- Log level: ERROR
- Batch: Not specified, inherited from the model
- Input layers: Not specified, inherited from the model
- Output layers: Conv_487,Conv_471,Conv_455
- Input shapes: Not specified, inherited from the model
- Mean values: Not specified
- Scale values: Not specified
- Scale factor: 255.0
- Precision of IR: FP32
- Enable fusing: True
- Enable grouped convolutions fusing: True
- Move mean values to preprocess section: None
- Reverse input channels: True
ONNX specific parameters:
Model Optimizer version: 2021.2.0-1877-176bdf51370-releases/2021/2
[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file: M:\yolov5-3.1\best.xml
[ SUCCESS ] BIN file: M:\yolov5-3.1\best.bin
[ SUCCESS ] Total execution time: 37.53 seconds.
It’s been a while, check for a new version of Intel? Distribution of OpenVINO? toolkit here https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/choose-download.html?cid=other&source=Prod&campid=ww_2021_bu_IOTG&content=upg_pro&medium=organic_uid_agjj or on the GitHub*
對轉(zhuǎn)換的IR文件使用OpenVINO 2021.2 進(jìn)行測試
python yolov5_OV2021.2.py -i img.jpg -m best.xmlyolov5_OV2021.2.py 文件 部分代碼
#!/usr/bin/env python from __future__ import print_function, divisionimport logging import os import sys from argparse import ArgumentParser, SUPPRESS from math import exp as exp from time import time import numpy as npimport cv2 from openvino.inference_engine import IENetwork, IECorelogging.basicConfig(format="[ %(levelname)s ] %(message)s", level=logging.INFO, stream=sys.stdout) log = logging.getLogger()def build_argparser():parser = ArgumentParser(add_help=False)args = parser.add_argument_group('Options')args.add_argument('-h', '--help', action='help', default=SUPPRESS, help='Show this help message and exit.')args.add_argument("-m", "--model", help="Required. Path to an .xml file with a trained model.",required=True, type=str)args.add_argument("-i", "--input", help="Required. Path to an image/video file. (Specify 'cam' to work with ""camera)", required=True, type=str)args.add_argument("-l", "--cpu_extension",help="Optional. Required for CPU custom layers. Absolute path to a shared library with ""the kernels implementations.", type=str, default=None)args.add_argument("-d", "--device",help="Optional. Specify the target device to infer on; CPU, GPU, FPGA, HDDL or MYRIAD is"" acceptable. The sample will look for a suitable plugin for device specified. ""Default value is CPU", default="CPU", type=str)args.add_argument("--labels", help="Optional. Labels mapping file", default=None, type=str)args.add_argument("-t", "--prob_threshold", help="Optional. Probability threshold for detections filtering",default=0.5, type=float)args.add_argument("-iout", "--iou_threshold", help="Optional. Intersection over union threshold for overlapping ""detections filtering", default=0.4, type=float)args.add_argument("-ni", "--number_iter", help="Optional. Number of inference iterations", default=1, type=int)args.add_argument("-pc", "--perf_counts", help="Optional. Report performance counters", default=False,action="store_true")args.add_argument("-r", "--raw_output_message", help="Optional. Output inference results raw values showing",default=False, action="store_true")args.add_argument("--no_show", help="Optional. Don't show output", action='store_true')return parser如果需要將yolov5s.pt轉(zhuǎn)換為IR文件使用OpenVINO 部署以下是yolov5s.pt的下載鏈接:
https://github.com/ultralytics/yolov5/releases/download/v3.0/yolov5s.pt
自定義訓(xùn)練生成權(quán)重文件:
python train.py --img 640 --batch-size 2 --epoch 5 --data ./hand_data/hand.yaml --cfg ./models/yolov5s.yaml --weights '' --workers 0 --nosave --cache --device cpu- –img:輸入圖片分辨率大小,nargs=’+'表示參數(shù)可設(shè)置一個(gè)或多個(gè)
- –batch-size:批次大小,一次訓(xùn)練所選取的樣本數(shù),顯卡不行的話,就調(diào)小點(diǎn)
- –epoch:訓(xùn)練總輪次,1個(gè)epoch等于使用訓(xùn)練集中的全部樣本訓(xùn)練一次,值越大模型越精確,訓(xùn)練時(shí)間也越長。
- –data:數(shù)據(jù)集配置文件,數(shù)據(jù)集路徑,類名等,使用數(shù)據(jù)集方面的coco.yaml文件
- –cfg:模型配置文件,網(wǎng)絡(luò)結(jié)構(gòu),使用修改好的yolov5m.yaml文件
- –weights:選用訓(xùn)練的權(quán)重,可用根目錄下的yolov5s.pt,也可用runs/train/exp/weights/best.pt,不選擇的話,從頭開始訓(xùn)練。
- –workers:dataloader的最大worker數(shù)量,建議為0
- –nosave:不保存模型,默認(rèn)False
- –cache: 是否提前緩存圖片到內(nèi)存,以加快訓(xùn)練速度,默認(rèn)False
- –device:訓(xùn)練的設(shè)備,cpu;0(表示一個(gè)gpu設(shè)備cuda:0);0,1,2,3(多個(gè)gpu設(shè)備)。值為空時(shí),訓(xùn)練時(shí)默認(rèn)使用 計(jì)算機(jī)自帶的顯卡或CPU
以下為測試自定義訓(xùn)練生成權(quán)重文件使用
hand.yaml 文件
train: ../hand_data/images/ val: ../hand_data/images/nc: 1 names: ['1']數(shù)據(jù)集標(biāo)定工具:LabelImg
下載:https://github.com/tzutalin/labelImg
總結(jié)
以上是生活随笔為你收集整理的OpenVINO 部署 YOLOv5 转换IR文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YOLOv5的pytorch模型文件转换
- 下一篇: Python 批量修改图片