那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何將Pytorch自訓練模型變成OpenVINO IR模型形式

SDNLAB ? 來源:英特爾物聯(lián)網(wǎng) ? 2023-06-07 09:31 ? 次閱讀

簡 介


本文章將依次介紹如何將Pytorch自訓練模型經(jīng)過一系列變換變成OpenVINO IR模型形式,而后使用OpenVINO Python API 對IR模型進行推理,并將推理結果通過OpenCV API顯示在實時畫面上。

本文Python程序的開發(fā)環(huán)境是Ubuntu20.04 LTS + PyCharm,硬件平臺是AIxBoard愛克斯板開發(fā)者套件。

本文項目背景:針對2023第十一屆全國大學生光電設計競賽賽題2“迷宮尋寶”光電智能小車題目。基于該賽項寶藏樣式,我通過深度學習訓練出能分類四種不同顏色不同標記形狀骨牌的模型,骨牌樣式詳見圖1.1。

13bd2a62-0486-11ee-90ce-dac502259ad0.png

| 圖1.1 四種骨牌類型

Pytorch pth模型轉(zhuǎn)換成OpenVINO IR模型

Pytorch是一個基于Torch的開源Python學習庫,是一個以Python優(yōu)先的深度學習框架。Pth模型文件是Pytorch進行模型保存時的一種模型格式,OpenVINO暫不支持直接對Pth模型文件進行推理,所以我們要將Pth格式的模型先轉(zhuǎn)換成ONNX格式文件,再通過OpenVINO自帶的Model Optimizer(模型優(yōu)化器)進一步轉(zhuǎn)變成OpenVINO IR模型。處理過程如下所示:

通過Pytorch將Pth模型轉(zhuǎn)換成ONNX模型

轉(zhuǎn)換后的文件(Pth —> ONNX):

import torch.onnx

# SZTU LIXROBO 23.5.14 #

#******************************************#

# 1. 模型加載

model = torch.load('Domino_best.pth', map_location=torch.device('cpu'))

# 2. 設置模型為評估模式而非訓練模式

model.eval()

# 3. 生成隨機從標準正態(tài)分布抽取的張量

dummy_input = torch.randn(1,3,224,224,device='cpu')

# 4. 導出ONNX模型(保存訓練參數(shù)權重)

torch.onnx.export(model,dummy_input,"Domino_best.onnx",export_params=True)

13e5b982-0486-11ee-90ce-dac502259ad0.png

通過終端來將ONNX模型轉(zhuǎn)化成OpenVINO IR模型格式

在終端中輸入(Terminal):

mo --input_model Domino_best.onnx --compress_to_fp16

# mo 啟動OpenVINO 的Model Optimizer(模型優(yōu)化器) # input_model 輸入您轉(zhuǎn)換的ONNX模型內(nèi)容根的路徑 # compress _to_fp16 將模型輸出精度變?yōu)镕P16 等后一會,終端輸出:

13f02caa-0486-11ee-90ce-dac502259ad0.png ?

代表ONNX模型轉(zhuǎn)換成OpenVINO IR模型成功。這里的信息告訴我們該Model是IR 11的形式,并分別保存在.xml和.bin文件下。

轉(zhuǎn)換后的文件(ONNX —> IR 11):

140620dc-0486-11ee-90ce-dac502259ad0.png ?

mapping文件是一些轉(zhuǎn)換信息,暫時不會用到該文件。

至此,我們模型轉(zhuǎn)換的全部工作已經(jīng)完成,接下來就是運用OpenVINO Runtime對IR 11模型進行推理。

使用OpenVINO Runtime對IR 11模型進行推理

在這一章節(jié)里我們將在Pycharm中使用OpenVINO Runtime對我們在1.2章中轉(zhuǎn)換得來的IR 11模型進行推理,并將推理結果實時展現(xiàn)在攝像頭畫面中。

在開始之前,我們不妨了解推理程序的整個工作流程:

導入必要的功能庫(如openvino.runtime 以及 cv2和numpy)

探測硬件平臺所能使用的可搭載設備

創(chuàng)建核心對象以及加載模型和標簽

輸入圖像進行預處理,正則化,轉(zhuǎn)變成網(wǎng)絡輸入形狀

將處理后的圖像交由推理程序進行推理,得到推理結果和處理時間并顯示出來

導入功能包

import openvino.runtime as ov

import numpy as np

import cv2

import time

這里一共導入4個功能包:

1. openvino.runtime 這是openvino runtime推理的主要功能包,也可用openvino.inference_engine進行推理,過程大體是一致的。

2.numpy 這是常用的一個Python開源科學計算庫

3.cv2 也即OpenCV,用來處理有關圖像的一些信息

4.time 記錄系統(tǒng)運行時間

設備檢測以及模型載入

我們可以使用Core對象中的available_devices函數(shù)來獲取當前硬件平臺可供推理引擎使用的設備。

core = ov.Core()

print(core.available_devices)

如圖所示我們能得到在AlxBoard愛克斯開發(fā)板上可供我們使用的推理設備有CPU和GPU

14220dba-0486-11ee-90ce-dac502259ad0.png ?

將模型進行載入:

# SZTU LIXROBO 23.5.19 #

#************************************#

# 1. 創(chuàng)建核心對象

core = ov.Core()

# 2. 規(guī)定IR 11模型的模型文件和權重文件

model = "Domino_best.xml"

weights = "Domino_best.bin"

# 3. 將模型文件和權重文件進行讀取

model_ir = core.read_model(model= model,weights=weights)

# 4. 把模型加載到設備上

(此處使用HETERO插件進行異構,加載到GPU和CPU上)

com_model_ir= core.compile_model(model=model_ir,device_name="HETERO:GPU,CPU")

# 5. 獲取模型輸出層

output_layer_ir = com_model_ir.outputs[0]

# 6. 由于是簡單模型,故label手動注入,也可使用導入標簽文件等其他方式

label = ['BlueFake','BlueTrue','RedFake','RedTrue']

圖像預處理

得到的圖像我們需要做一些預先處理才能輸入到推理引擎中進行推理并得到結果。這一小節(jié)我們將展示如何把圖像進行處理。

#************************************#

# 圖像預處理、歸一化 #

def normalize(img: np.ndarray) ->np.ndarray:

# 1. 類型轉(zhuǎn)換成np.float32

img = img.astype(np.float32)

# 2. 設置常用均值和標準差來正則化

mean =(0.485,0.456,0.406)

std =(0.299,0.224,0.255)

img /=255.0

img -=mean

img /=std

# 3. 返回處理后的img

return img

#************************************#

# 圖像處理函數(shù) #

def img_pre(img):

# 1. 對OV輸入圖像顏色模型從BGR轉(zhuǎn)變成RGB

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

# 2. 對圖像進行裁切

res_img = cv2.resize(img, (224, 224))

# 3. 使用我們定義的預處理函數(shù)對圖像進行處理

nor_img = normalize(res_img)

# 4. 將處理好的圖像轉(zhuǎn)變?yōu)榫W(wǎng)絡輸入形狀

nor_input_img = np.expand_dims(np.transpose(nor_img, (2, 0, 1)), 0)

# 5. 返回處理結果

return nor_input_img

推理過程以及結果展示

在上一節(jié)中我們把輸入圖像所要進行的預處理圖像進行了一個定義,在這一小節(jié)則是OpenVINO Runtime推理程序的核心。

#************************************#

# 推理主程序 #

def image_infer(img):

# 1. 設置記錄起始時間

start_time = time.time()

# 2. 將圖像進行處理

imgb = img_pre(img)

# 3. 輸入圖像進行推理,得到推理結果

res_ir = com_model_ir([imgb])[output_layer_ir]

# 4. 對結果進行歸一化處理,使用Sigmod歸一

Confidence_Level = 1/(1+np.exp(-res_ir[0]))

# 5. 將結果進行從小到大的排序,便于我們獲取置信度最高的類別

result_mask_ir = np.squeeze(np.argsort(res_ir, axis=1)).astype(np.uint8)

# 6. 用CV2的putText方法將置信度最高對應的label以及其置信度繪制在圖像上

img = cv2.putText(img,str(label[result_mask_ir[3]])+' '+ str(Confidence_Level[result_mask_ir[3]]),(50,80), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2,cv2.LINE_AA)

# 7. 記錄推理結束時間

end_time = time.time()

# 8. 計算出攝像頭運行幀數(shù)

FPS = 1 / (end_time - start_time)

# 9. 將幀數(shù)繪制在圖像上

img = cv2.putText(img, 'FPS ' + str(int(FPS)), (50, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2,cv2.LINE_AA)

# 10. 返回圖像

return img

以上推理函數(shù)編寫已經(jīng)完成。以下是運行主程序:

#********************主程序***********************#

# 1. 獲取攝像頭

cap = cv2.VideoCapture(0)

# 2. 循環(huán)判斷

while 1:

# 1. 獲得實時畫面

success,frame = cap.read()

# 2. 把實時畫面交由推理函數(shù)進行推理

frame = image_infer(frame)

# 3. 將畫面顯示在窗口

cv2.imshow("img",frame)

cv2.waitKey(1)

當我們運行該程序時,會得到如下畫面。

14308dea-0486-11ee-90ce-dac502259ad0.png143e7b1c-0486-11ee-90ce-dac502259ad0.png

如圖所示,我們的Pytorch模型成功在OpenVINO的優(yōu)化以及推理下成功部署在AlxBoard愛克斯開發(fā)板,幀數(shù)在40-60之間,推理的結果非常好,很穩(wěn)定。

與Pytorch模型 CPU推理進行比較

原先推理的過程我們是通過torch功能庫進行推理,我們將兩者進行比較。

143e7b1c-0486-11ee-90ce-dac502259ad0.png14833f4a-0486-11ee-90ce-dac502259ad0.png

| 左為OpenVINO優(yōu)化推理,右為torch推理

如圖所示OpenVINO優(yōu)化推理過后的結果從實際幀數(shù)上看大約有5-8倍的提升,推理精度也有少許加強。

結 論

自訓練Pytorch模型在通過OpenVINO Model Optimizer 模型優(yōu)化后用OpenVINO Runtime進行推理,推理過程簡單清晰。推理僅需幾個核心函數(shù)便可實現(xiàn)基于自訓練Pytorch模型的轉(zhuǎn)化以及推理程序。OpenVINO簡單易上手,提供了強大的資料庫供學者查閱,其包含了從模型建立到模型推理的全過程。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41559
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85040
  • Ubuntu系統(tǒng)

    關注

    0

    文章

    91

    瀏覽量

    4034
  • pytorch
    +關注

    關注

    2

    文章

    808

    瀏覽量

    13361

原文標題:自訓練Pytorch模型使用OpenVINO優(yōu)化并部署在AIxBoard?

文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請問電腦端Pytorch訓練模型如何轉(zhuǎn)化為能在ESP32S3平臺運行的模型

    由題目, 電腦端Pytorch訓練模型如何轉(zhuǎn)化為能在ESP32S3平臺運行的模型? 如何把這個Pytorch
    發(fā)表于 06-27 06:06

    Pytorch模型訓練實用PDF教程【中文】

    模型部分?還是優(yōu)化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對癥下藥,才能訓練出一個較滿意的模型。本教程內(nèi)容及結構:本教程內(nèi)容主要為在 Py
    發(fā)表于 12-21 09:18

    pytorch模型轉(zhuǎn)化為onxx模型的步驟有哪些

    首先pytorch模型要先轉(zhuǎn)化為onxx模型,然后從onxx模型轉(zhuǎn)化為rknn模型直接轉(zhuǎn)化會出現(xiàn)如下問題,環(huán)境都是正確的,論壇詢問后也沒給出
    發(fā)表于 05-09 16:36

    怎樣使用PyTorch Hub去加載YOLOv5模型

    使用 PyTorch Hub 加載自定義 20 類VOC訓練的YOLOv5s 模型'best.pt'。TensorRT、ONNX 和 OpenVINO
    發(fā)表于 07-22 16:02

    通過Cortex來非常方便的部署PyTorch模型

    的工作。那么,問題是如何將 RoBERTa 部署為一個 JSON API,而不需要手動滾動所有這些自定義基礎設施? PyTorch 模型與 Cortex 一起投入生產(chǎn)你可以使用 Co
    發(fā)表于 11-01 15:25

    Pytorch模型轉(zhuǎn)換為DeepViewRT模型時出錯怎么解決?

    我最終可以在 i.MX 8M Plus 處理器上部署 .rtm 模型。 我遵循了 本指南,我 Pytorch 模型轉(zhuǎn)換為 ONNX 模型
    發(fā)表于 06-09 06:42

    如何將PyTorch模型OpenVINO trade結合使用?

    無法確定如何轉(zhuǎn)換 PyTorch 掩碼 R-CNN 模型以配合OpenVINO?使用。
    發(fā)表于 08-15 07:04

    無法使用MYRIAD在OpenVINO trade中運行YOLOv7自定義模型怎么解決?

    無法確定如何將 YOLOv7 模型的重量(.pt 文件)轉(zhuǎn)換為OpenVINO?中間表示 (IR) 并推斷有 MYRIAD 的 IR
    發(fā)表于 08-15 08:29

    如何將Detectron2和Layout-LM模型轉(zhuǎn)換為OpenVINO中間表示(IR)和使用CPU插件進行推斷?

    無法確定如何將 Detectron2* 和 Layout-LM* 模型轉(zhuǎn)換為OpenVINO?中間表示 (IR) 和使用 CPU 插件進行推斷。
    發(fā)表于 08-15 06:23

    pytorch模型轉(zhuǎn)換需要注意的事項有哪些?

    和記錄張量上的操作,不會記錄任何控制流操作。 為什么不能是GPU模型? 答:BMNETP的編譯過程不支持。 如何將GPU模型轉(zhuǎn)成CPU模型? 答:在加載
    發(fā)表于 09-18 08:05

    OpenVINO模型優(yōu)化實測:PC/NB當AI辨識引擎沒問題!

    這次我們將會自制一個CNN分類器,并透過OpenVINO模型轉(zhuǎn)換程序轉(zhuǎn)換成IR模型,并進行模型效能與正確率分析。依據(jù)Intel官方網(wǎng)站的說
    的頭像 發(fā)表于 12-09 16:13 ?2482次閱讀

    訓練Pytorch模型使用OpenVINO?優(yōu)化并部署在AI愛克斯開發(fā)板

    本文章依次介紹如何將 Pytorch 訓練模型經(jīng)過一系列變換
    的頭像 發(fā)表于 05-26 10:23 ?1001次閱讀
    <b class='flag-5'>自</b><b class='flag-5'>訓練</b><b class='flag-5'>Pytorch</b><b class='flag-5'>模型</b>使用<b class='flag-5'>OpenVINO</b>?優(yōu)化并部署在AI愛克斯開發(fā)板

    沒有“中間商賺差價”, OpenVINO? 直接支持 PyTorch 模型對象

    體驗—— OpenVINO 的 mo 工具可以直接 PyTorch 模型對象轉(zhuǎn)化為 OpenVINO
    的頭像 發(fā)表于 06-27 16:39 ?820次閱讀
    沒有“中間商賺差價”, <b class='flag-5'>OpenVINO</b>? 直接支持 <b class='flag-5'>PyTorch</b> <b class='flag-5'>模型</b>對象

    解讀PyTorch模型訓練過程

    PyTorch作為一個開源的機器學習庫,以其動態(tài)計算圖、易于使用的API和強大的靈活性,在深度學習領域得到了廣泛的應用。本文深入解讀PyTorch模型
    的頭像 發(fā)表于 07-03 16:07 ?1164次閱讀

    PyTorch神經(jīng)網(wǎng)絡模型構建過程

    PyTorch,作為一個廣泛使用的開源深度學習庫,提供了豐富的工具和模塊,幫助開發(fā)者構建、訓練和部署神經(jīng)網(wǎng)絡模型。在神經(jīng)網(wǎng)絡模型中,輸出層是尤為關鍵的部分,它負責
    的頭像 發(fā)表于 07-10 14:57 ?566次閱讀
    大发888官方下载168| 易胜博足球开户| 澳门百家乐官网投注法| 金花百家乐官网的玩法技巧和规则| 百家乐扑克桌| 澳门百家乐必胜| 索雷尔百家乐官网的玩法技巧和规则| 百家乐真人博彩的玩法技巧和规则| 网络娱乐城| 百家乐官网tt娱乐平台| 茅台百家乐的玩法技巧和规则| 德清县| 做生意房门挂啥招财| 大发888娱乐城官方| 百家乐官网投注之对冲投注| 百家乐园鼎丰娱乐城| 博彩网58娱乐城| 百家乐官网赌博博彩赌博网| 丽星百家乐的玩法技巧和规则| 元朗区| 百家乐现金网平台| bet365 备用| 黄金城百家乐官网手机版| 大发888赢钱技巧| 百家乐官网游戏辅助| 威尼斯人娱乐城首选大丰收| 百家乐官网金海岸软件| 威尼斯人娱乐城可靠吗| 百家乐官网赌博现金网平台排名| 方形百家乐筹码| 澳门百家乐官网赌客| A8百家乐的玩法技巧和规则 | 玩百家乐澳门368娱乐城| 云霄县| 打百家乐庄闲的技巧| 百家乐官网单跳投注法| 玩百家乐出千方法| 百家乐官网太阳城怎么样| 利都百家乐国际娱乐| 澳门百家乐官网有赢钱的吗| 大发888娱乐场168|