在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

OpenVINO? 中用于推理優化的自適應參數選擇功能介紹

OpenCV學堂 ? 來源:英特爾物聯網 ? 2023-03-24 10:33 ? 次閱讀

本文簡介

當你使用 AI 模型進行推理時,往往需要設置一些參數與選項,相應地,OpenVINO 工具套件為此提供了一些自動設定參數選項的功能。本文主要介紹 OpenVINO中與模型推理相關的3個功能,它們分別是:

用于 input 數據足夠多時,提供最大 throughput 的 Auto-batching 功能;

用于自動選擇設備進行推理的 Auto Plugin 功能;

以及用于滿足特定模型動態輸入的 Dynamic Shape 功能。

本文將逐一介紹這三個實用的功能,并在文末給出這三功能的優缺點總結對比。

功能介紹

Auto-batching

Auto-batching 設計目的是讓開發者利用最少的代碼去實現使用英特爾顯卡做模型推理的數據吞吐量最大化。在沒有設定 input 以及沒有限制范圍的情況下,它會按照集成顯卡或者是獨立顯卡能承受的最大吞吐量去設定推理線程數。如果應用程序有大量的輸入數據且以高頻率連續提交推理請求,推薦使用 Auto-batching 功能。

該功能通過幾行代碼實現了最多推理線程的響應,同時也不會對原先的示例代碼造成影響。如果在推理設備設置中,將“device“參數設置為:“BATCH:GPU“ 該功能將會被激活。例如,在 benchmark_app 應用使用 Auto-batching 的方式如下:

$benchmark_app -hint none -d BATCH:GPU -m ‘path to your favorite model’

向右滑動查看完整代碼

另外一種方法是:在 GPU 推理時,選擇性能模式為”THROUGHPUT”,該功能將會被自動觸發。所以在示例代碼中添加如下兩行,即可在 GPU 進行推理時,啟動 Auto-batching 功能:

config = {"PERFORMANCE_HINT": "THROUGHPUT"} compiled_model = core.compile_model(model, "GPU", config)

向右滑動查看完整代碼

無論是通過設置 BATCH:GPU,還是選擇”THROUGHPUT”的推理模式,推理的 batch size 值都會自動進行選取。選取的方式是查詢當前設備的 ov::optimal_batch_size 屬性并且通過模型拓撲結構的輸入端獲取 batch size 的值作為模型推理的 batch size 值。

接下來,是使用 Benchmark APP 做的對比實驗:

9026d99a-c9bc-11ed-bfe3-dac502259ad0.png

圖1:Disable Auto-batching

904d3c34-c9bc-11ed-bfe3-dac502259ad0.png

圖2:Enable Auto-batching

通過對比 Auto-batching 功能開閉的推理結果圖,可以看到當此功能開啟的時候:即使推理設備選擇的是集成顯卡,推理線程數仍舊被推上了128個,說明此功能確實會嘗試使用當前狀態下壓力最大的推理線程數,來達到推理最大的吞吐量。但是結果是當推理性能有限的集成顯卡啟動了128個線程的時候,整體的 throughput 的數值比單推理線程的 throughput 要低一些,所以當硬件推理性能有限時,需要對推理線程數進行限定。同樣,在 Auto-batching 中限定推理線程有兩種方式分別為,設置 BATCH: GPU (4)或設置 ov::num_requests 參數可以將推理線程設為4:

auto compiled_model = core.compile_model(model, "GPU", ov::THROUGHPUT), ov::num_requests(4));

向右滑動查看完整代碼

Auto-batching 中內置了 Auto_batch_timeout 參數,該參數用于監測輸入數據送達的時延,初始值為1000,表示若1000毫秒后無數據輸入則提示推理超時。注意,如果推理頻率較低,或者根據 Auto_batch_timeout 參數發現推理超時,可以手動關閉 Auto-batching:

// disabling the automatic batching auto compiled_model = core.compile_model(model, "GPU", ov::THROUGHPUT), ov::allow_auto_batching(false));

向右滑動查看完整代碼

AUTO Plugin

在 OpenVINO 工具套件的推理插件(Plugin)選擇上,除了常規的 CPU,iGPU,Myriad,您還可以選擇使用 AUTO Plugin。開發者通過它快速部署 AI 示例用于實驗,且不用考慮推理設備的選擇就能獲得一個不錯的推理性能。不需要指定設備,它會自動配置推理硬件,當有多個設備時,它也會自動聯合調用多個硬件進行推理。

AUTO Plugin 的工作流程是:首先,檢測當前環境下所有的可用設備,之后根據預制的硬件選擇規則,選擇相應的推理設備,并且優化推理的整體配置,最后執行 AI 推理。AUTO Plugin 對于推理設備選擇遵循以下的規則:

dGPU (e.g. Intel Iris Xe MAX) ->

iGPU (e.g. Intel UHD Graphics 620 (iGPU)) ->

Intel Movidius Myriad X VPU(e.g. Intel Neural Compute Stick 2 (Intel NCS2)) ->

Intel CPU (e.g. Intel Core i7-1165G7)

#常規用法: compiled_model = core.compile_model(model=model, device_name="AUTO") #您可以限定設備使用AUTO Plugin: compiled_model = core.compile_model(model=model, device_name="AUTO:GPU,CPU") #您也可以剔除使用AUTO Plugin的設備: compiled_model = core.compile_model(model=model, device_name="AUTO:-CPU")

向右滑動查看完整代碼

AUTO Plugin 內置有三個模式可供選擇:

1.THROUGHPUT

默認模式。該模式優先考慮高吞吐量,在延遲和功率之間進行平衡,最適合于涉及多個任務的推理,例如推理視頻源或大量圖像。注:此模式只會對 CPU 與 GPU 進行調用。若該模式下調用GPU進行推理,將會自動觸發“Auto-batching“功能。

compiled_model = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"THROUGHPUT"})

向右滑動查看完整代碼

2.LATENCY

此選項優先考慮低延遲,為每個推理任務提供比較短的響應時間。它對于需要對單個輸入圖像進行推斷的任務(例如超聲掃描圖像的醫學分析)。此外,它還適用于實時或接近實時應用的任務,例如工業機器人對其環境中動作的響應或自動駕駛車輛的避障。注:此模式只會對 CPU 與 GPU 進行調用。

compiled_modecompiled_model = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"LATENCY"})compiled_mode = core.compile_model(model, "AUTO", ov:: CUMULATIVE_THROUGHPUT)); l = core.compile_model(model=model, device_name="AUTO", config={"PERFORMANCE_HINT":"LATENCY"})

向右滑動查看完整代碼

3.CUMULATIVE_THROUGHPUT

CUMULTIVE_THROUGHPUT 模式允許同時在多個設備上運行推理以獲得更高的吞吐量。

使用 CUMULTIVE_THROUGHPUT 模式時,AUTO Plugin 將網絡模型加載到候選列表中的所有可用設備,然后根據默認的優先級載入設備運行推理。

compiled_mode = core.compile_model(model, "AUTO", ov:: CUMULATIVE_THROUGHPUT));

向右滑動查看完整代碼

注意:如果指定了沒有任何設備名稱的 AUTO,并且系統有兩個以上的 GPU 設備,則 AUTO 將從設備候選列表中刪除 CPU,以保持 GPU 以滿容量運行。如果指定了設備優先級,AUTO 將根據優先級在設備上運行推理請求。

Dynamic Shape

模型的動態輸入對于某些領域十分重要,比如說在自然語言處理(NLP)中就需要實時對語句進行分割,所以模型的輸入是實時變化的,又比如在圖像識別中,分割塊的形狀大小也會根據目標的大小實時變動。對于分割之后的圖像來說,進行 resize 操作往往會破壞它的特征屬性,導致在后期推理中造成推理準確性降低。動態形狀輸入功能的引入使得一些基于圖像識別的模型,運行結果的準確度提高。使用 Dynamic Shape 功能能夠更好地保留圖像的特征,根據輸入圖像的大小,動態調節模型輸入,最終模型推理的準確率獲得了提升。

在2022.1以前的 OpenVINO 版本中,使用 WPOD-NET (GitHub - sergiomsilva/alpr-unconstrained: License Plate Detection and Recognition in Unconstrained Scenarios):

地址(復制到瀏覽器打開)

https://github.com/sergiomsilva/alpr-unconstrained

模型進行車牌識別,如果出現動態形態輸入的話,在 MO 轉換時就會報錯,必須強制轉成靜態輸入,例如:

python3 $INTEL_OPENVINO_DIR/deployment_tools/model_optimizer/mo_tf. py --data_type=FP32 --saved_model_dir=./data/lpdetector/tf2/models/saved_model/ --model_name=wpod-net -- reverse_input_channels --input_shape [1,416,416,3] -- output_dir=./data/lpdetector/tf2/models/saved_model/FP32_416

向右滑動查看完整代碼

這會導致該模型在特定的例子下識別精度降低:

908e7708-c9bc-11ed-bfe3-dac502259ad0.png

912b857a-c9bc-11ed-bfe3-dac502259ad0.png

91af5544-c9bc-11ed-bfe3-dac502259ad0.png

圖例:輸入圖像Resize 為固定尺寸后進行模型推理

由于模型被強制轉成了靜態輸入,可以很明顯的發現輸入的圖像被被強制Resize到了(416,416),圖像分割的錯誤,最后導致了最后車牌識別的結果是不正確的。

在2022.1以后的 OpenVINO 版本中,MO 支持了 Dynamic Shape 的功能,故使用新版本 OpenVINO 工具套件中的模型優化器進行模型轉換:

mo --saved_model_dir ./data/lpdetector/tf2/models/saved_model/ -- output_dir ./data/lpdetector/tf2/models/FP32/

向右滑動查看完整代碼

在生成的 xml 文件中,可以開到 input shape 被識別為動態輸入,動態參數以“?”或“-1”進行顯示:

-1 -1 -1 3

向右滑動查看完整代碼

使用包含動態輸入的模型進行試驗,實驗結果如下:

91c29a0a-c9bc-11ed-bfe3-dac502259ad0.png

926c3d62-c9bc-11ed-bfe3-dac502259ad0.png

92a4be62-c9bc-11ed-bfe3-dac502259ad0.png

圖例:模型使用動態輸入進行推理

通過 WPOD-NET 的內置算法,計算得到合適的 Resize 長和寬(1232x608),將圖片 Resize 至1232x608,分割到的車牌是清晰完整且最終車牌號碼識別是正確的。

模型的動態輸入在這個例子中顯得十分重要,因為動態輸入的支持使得模型推理識別的精度更加準確了。如果模型優化器沒有識別到模型的動態輸入參數,您可以在代碼中手動指定 Dynamic Shape:

core = ov.Core() model = core.read_model("model.xml") # Set one static dimension (= 1) and another dynamic dimension (= Dimension()) model.reshape([1, ov.Dimension()])

向右滑動查看完整代碼

您也可以指定動態輸入的動態范圍:

# Both dimensions are dynamic, first has a size within 1..10 and the second has a size within 8..512 model.reshape([ov.Dimension(1, 10), ov.Dimension(8, 512)])

向右滑動查看完整代碼

由于您的輸入圖像是動態的,所以說您在初始化 input tensor 的時候,根據需要進行設定,您可以手動對每一個推理 tensor 進行指定:

# Get the tensor, shape is not initialized input_tensor = infer_request.get_input_tensor() # Set shape is required input_tensor.shape = [1, 128] input_tensor.shape = [1, 200]

向右滑動查看完整代碼

當然,也可以通過模型的 input layer 進行指定:

input_tensor = np.expand_dims(image_resized, 0) results = compiled_model.infer_new_request({0: input_tensor})

向右滑動查看完整代碼

總結

92b8cb32-c9bc-11ed-bfe3-dac502259ad0.png

針對不同模型推理場景下, Auto-batching 能夠自動給予設備最大壓力達到最大吞吐量;AUTO Plugin 能夠自動選擇推理設備;Dynamic shape 能供根據輸入圖像動態調整模型的 input shape 大小。這些功能都依據開發者的需求,在進行模型推理時,幫助住開發者自動完成相應的配置,對開發 OpenVINO 的示例應用進行輔助。

不過這些功能在使用時,也有一些注意事項需要知曉,請您在使用這些功能之前,了解每個功能的局限性以及每個功能正確的用法。

OpenVINO 工具套件下載地址:

https://www.intel.cn/content/www/cn/zh/developer/tools/openvino-toolkit/download.html

OpenVINO 使用文檔:

https://docs.openvino.ai/latest/

審核編輯 :李倩

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

    關注

    88

    文章

    34589

    瀏覽量

    276258
  • 模型
    +關注

    關注

    1

    文章

    3500

    瀏覽量

    50137
  • 線程
    +關注

    關注

    0

    文章

    507

    瀏覽量

    20112

原文標題:OpenVINO? 中用于推理優化的自適應參數選擇功能介紹 | 開發者實戰

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何在自己的固件中增加wifi自適應性相關功能,以通過wifi自適應認證測試?

    目前官方提供了自適應測試固件 ESP_Adaptivity_v2.0_26M_20160322.bin 用于進行 wifi 自適應認證測試. 請問如何在自己的固件中增加 wifi 自適應
    發表于 07-12 08:29

    為什么無法在運行時C++推理中讀取OpenVINO?模型?

    使用模型優化器 2021.1 版OpenVINO?轉換模型 使用 Runtime 2022.3 版本在 C++ 推理實現 ( core.read_model()) 中讀取模型OpenVINO
    發表于 03-05 06:17

    使用OpenVINO?進行推理時的內存泄漏怎么解決?

    使用 OpenVINO? 進行推理時,內存會隨著時間的推移而增加,并導致程序崩潰。
    發表于 03-06 08:29

    使用Python API在OpenVINO?中創建了用于異步推理的自定義代碼,輸出張量的打印結果會重復,為什么?

    使用 Python* API 在 OpenVINO? 中創建了用于異步推理的自定義代碼。 遇到輸出張量的打印結果會重復的問題,即使輸入圖像不同。
    發表于 03-06 07:53

    基于粒子群算法的自適應LMS濾波器設計及可重構硬件實現

    自適應濾波器設計是典型的多參數組合優化問題,利用一種改進的粒子群優化算法(MPSO)來優化設計自適應
    發表于 04-26 16:13

    自適應逆變電源的設計與實現

    應用。  (5)該方案更為有利的是,在設計時不必知道PWM逆變電源系統確切的數學模型,而只需在應用中用實時辨識的模型代替。這就提供了一條途徑,使得自適應控制方法能直接應用于傳統的模擬控制的PWM逆變電源中,進而
    發表于 10-11 16:07

    有什么方法可以優化自適應轉向大燈系統的設計嗎?

    有什么方法可以優化自適應轉向大燈系統的設計嗎?
    發表于 05-14 06:14

    基于遺傳優化和模糊推理PID參數及MATLAB仿真

    本文提出一種基于遺傳優化和模糊推理相結合的自適應模糊PID 控制算法,算法由遺傳算法和模糊推理兩部分構成,分別用于離線
    發表于 09-03 08:42 ?58次下載

    基于反饋的自適應參考幀選擇的率失真優化分析

    為了提高數字視頻實時傳輸的容差能力,該文提出了一種基于反饋的自適應參考幀選擇方法。在傳統參考幀選擇優點的基礎上,設計了一種新的通過率失真技術優化選擇
    發表于 11-17 13:02 ?5次下載

    自適應粒子群優化分數階PID控制器的參數整定

    自適應粒子群優化分數階PID控制器的參數整定_陳超波
    發表于 01-03 15:24 ?9次下載

    一種新的自適應變異粒子群優化算法在PMSM參數辨識中的應用

    一種新的自適應變異粒子群優化算法在PMSM參數辨識中的應用_黃松
    發表于 01-05 15:34 ?0次下載

    自適應系統決策:一種模型驅動的方法

    滿足功能需求的同時,還需要保證系統滿足特定的非功能需求,如可靠性和性能等.提出了一種基于驗證的自適應系統優化決策方法,以保證非功能需求的滿足
    發表于 12-27 16:04 ?0次下載

    基于自適應動態規劃的SVC自適應優化控制策略

    控制系統存在的不足,提出了一種基于自適應動態規劃(adaptive dynamic programming,ADP)的SVC自適應優化控制策略。采用小波神經網絡和BP神經網絡分別設計執行依賴啟發式動態規劃
    發表于 01-07 11:32 ?19次下載
    基于<b class='flag-5'>自適應</b>動態規劃的SVC<b class='flag-5'>自適應</b><b class='flag-5'>優化</b>控制策略

    激光跟蹤自適應焊接技術介紹

    本文介紹機器人激光跟蹤自適應焊接技術,激光跟蹤自適應擺動焊接不但可以用于實時跟蹤焊縫,避免焊偏,還能根據母材之間的間隙大小自動變換焊接參數
    的頭像 發表于 11-11 14:28 ?941次閱讀

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理
    的頭像 發表于 07-26 09:20 ?1491次閱讀
    主站蜘蛛池模板: 亚洲一区二区在线播放 | 精品久久久久久久免费加勒比 | 亚洲成a人片在线观看导航 亚洲成a人片在线观看尤物 | 国产综合图片 | 欧美一级第一免费高清 | 视频在线观看网站 | 欧美ol丝袜高跟秘书在线播放 | 欧美一区二区三区性 | 四虎成人免费观看在线网址 | 日韩在线网 | 欧美大片一区二区三区 | 亚洲狠狠网站色噜噜 | 免费在线黄视频 | 色老成人精品视频在线观看 | 日本大片免费观看视频 | 最近高清在线国语 | 男人j进女人j的一进一出视频 | 免费看大尺度视频在线观看 | 两性色午夜视频免费老司机 | 一级特黄性生活大片免费观看 | 日本精品视频四虎在线观看 | 国产精品天天看 | 伊人久久大线蕉香港三级 | 国产午夜影院 | 我要色综合网 | 亚洲丁香| 一级做a免费视频 | 你懂的免费在线观看 | 亚洲国产精品婷婷久久 | 最近2018中文字幕免费看2019 | 1024你懂的国产欧美日韩在 | 波多野结衣在线网址 | 欧美操bb| 免费啪视频在线观看免费的 | 都市禁忌猎艳风流美妇 | 夜夜操天天射 | 日本口工禁漫画无遮挡全彩 | 五月激情婷婷丁香 | 天天搞天天爽 | 色色视频网 | 狠狠狠色丁香婷婷综合久久88 |