戰(zhàn)指南:從模型下載到推理部署全解析)
簡(jiǎn)介Open Model Zoo預(yù)訓(xùn)練模型與演示資源包面向需要快速落地深度學(xué)習(xí)推理的算法工程師與部署開發(fā)者。資源整合了圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割等方向的預(yù)訓(xùn)練模型并提供通過(guò)OpenVINO工具套件調(diào)用模型的示例工程可幫助跳過(guò)繁瑣訓(xùn)練與模型轉(zhuǎn)換環(huán)節(jié)直接評(píng)估模型精度與部署性能適用于邊緣計(jì)算、智能攝像頭、工業(yè)視覺等推理場(chǎng)景。由于這些模型面向OpenVINO工具鏈做過(guò)多輪優(yōu)化可減少自行轉(zhuǎn)換與調(diào)優(yōu)帶來(lái)的兼容性問(wèn)題適合在成熟框架與邊緣設(shè)備之間快速打通推理鏈路。壓縮包整體約159.61MB以預(yù)訓(xùn)練模型和配套演示工程為主適合配合官方文檔作環(huán)境配置與二次開發(fā)當(dāng)前已有618人瀏覽學(xué)習(xí)適合作為OpenVINO相關(guān)模型部署的入門參考。結(jié)合Caffe、TensorFlow等模型與OpenVINO工具鏈?zhǔn)褂谜呖蓮氖纠霭l(fā)快速替換業(yè)務(wù)數(shù)據(jù)并驗(yàn)證邊緣設(shè)備上的運(yùn)行表現(xiàn)也能將這套流程遷移到自定義模型中。1. 聊聊Open Model Zoo它到底解決了什么問(wèn)題做深度學(xué)習(xí)落地的人十有八九都經(jīng)歷過(guò)這種場(chǎng)景項(xiàng)目剛立項(xiàng)老板問(wèn)能不能先跑個(gè)效果看看客戶問(wèn)這個(gè)方案可行性怎么樣然后你打開GitHub開始漫無(wú)目的地搜模型下載一個(gè)預(yù)訓(xùn)練權(quán)重結(jié)果發(fā)現(xiàn)這個(gè)模型是用你沒(méi)見過(guò)的框架訓(xùn)練的配置文件格式也不兼容連輸入尺寸都要自己翻論文去猜。一上午過(guò)去了連個(gè)Demo的影子都沒(méi)看到。這個(gè)痛點(diǎn)Intel的Open Model Zoo就是沖著它來(lái)的。Open Model Zoo是Intel開源的預(yù)訓(xùn)練深度學(xué)習(xí)模型倉(cāng)庫(kù)里面收錄了大量已經(jīng)訓(xùn)練好的模型覆蓋目標(biāo)檢測(cè)、圖像分類、語(yǔ)義分割、人體姿態(tài)估計(jì)、文本識(shí)別、語(yǔ)音識(shí)別、推薦系統(tǒng)等常見任務(wù)。它的核心價(jià)值不在模型數(shù)量多而在于兩點(diǎn)一是這些模型全部經(jīng)過(guò)OpenVINO工具套件的轉(zhuǎn)換和優(yōu)化可以直接用推理引擎跑起來(lái)二是每個(gè)模型都配套了標(biāo)準(zhǔn)的預(yù)處理方法、輸入輸出格式說(shuō)明和Demo示例你不需要去猜任何參數(shù)。說(shuō)白了Open Model Zoo給的是從模型到可運(yùn)行Demo的一條龍?bào)w驗(yàn)。它特別適合這幾類人剛接觸OpenVINO的開發(fā)者想快速驗(yàn)證某個(gè)視覺任務(wù)落地效果的算法工程師以及需要在資源受限設(shè)備上做原型驗(yàn)證的嵌入式工程師。我自己最常用的場(chǎng)景就是客戶說(shuō)幫我看看這個(gè)任務(wù)用深度學(xué)習(xí)能不能做我打開Open Model Zoo找到對(duì)應(yīng)模型跑個(gè)Demo效果好壞一目了然前后不超過(guò)半小時(shí)。需要先說(shuō)明一個(gè)概念Open Model Zoo里有一部分模型是Intel自己訓(xùn)練的另一部分是從公開模型庫(kù)比如TensorFlow Hub、Caffe Model Zoo收集過(guò)來(lái)并轉(zhuǎn)換格式的。無(wú)論來(lái)源是哪兒發(fā)布前都經(jīng)過(guò)了精度驗(yàn)證和性能調(diào)優(yōu)比你自己去網(wǎng)上隨便找個(gè)權(quán)重文件靠譜得多。2. 倉(cāng)庫(kù)結(jié)構(gòu)拆解第一次打開該從哪里入手很多人第一次clone Open Model Zoo會(huì)被它的目錄結(jié)構(gòu)嚇到感覺東西又多又雜。其實(shí)它的組織邏輯非常清晰核心就幾個(gè)目錄。2.1 頂層目錄的分工邏輯整個(gè)倉(cāng)庫(kù)主要分成這幾塊models模型定義目錄按任務(wù)類型分子文件夾比如public公開模型、intelIntel訓(xùn)練的模型。每個(gè)模型文件夾里都有一個(gè)model.yml文件里面記錄了模型的下載地址、輸入輸出格式、預(yù)處理參數(shù)、license等信息。demosDemo程序目錄按任務(wù)類型分子文件夾比如object_detection_demo、segmentation_demo。每個(gè)Demo都是完整的C或Python工程可以直接編譯運(yùn)行。notebooksJupyter Notebook教程適合想邊看邊跑的人。這部分后來(lái)獨(dú)立出去了但倉(cāng)庫(kù)里仍有指引。tools輔助工具比如模型下載腳本、模型轉(zhuǎn)換工具等。data存放Demo運(yùn)行時(shí)需要的測(cè)試圖片、視頻等數(shù)據(jù)。實(shí)際用下來(lái)我建議的順序是先看models目錄搞清楚有哪些模型可以用再看demos目錄找對(duì)應(yīng)的Demo最后用tools里的腳本把模型下載下來(lái)跑通Demo。2.2 模型清單文件才是真正的索引models目錄下的每個(gè)子文件夾都有model.yml文件這個(gè)文件是模型的身份證。里面包含了模型名稱、任務(wù)類型、框架來(lái)源、輸入輸出格式、預(yù)處理細(xì)節(jié)、license信息等。我強(qiáng)烈建議你花十分鐘隨手打開幾個(gè)model.yml看看它比任何文檔都直觀。比如你要找一個(gè)做人體姿態(tài)估計(jì)的模型打開models/intel目錄下的human-pose-estimation-0001文件夾里面的model.yml會(huì)告訴你輸入是1x3x384x288的BGR圖像輸出是1x80x96x96的熱力圖預(yù)處理需要把圖像縮放到384x288減均值除方差這些信息直接決定了你怎么寫預(yù)處理代碼省掉了翻論文的時(shí)間。3. 模型下載與轉(zhuǎn)換這步最容易踩坑3.1 用官方腳本下載別手動(dòng)去點(diǎn)鏈接Open Model Zoo提供了一個(gè)統(tǒng)一的下載腳本tools/model_tools/downloader.py這是最推薦的方式。手動(dòng)去瀏覽器點(diǎn)鏈接下載容易因?yàn)榘姹靖聦?dǎo)致路徑失效而且模型文件通常很大斷點(diǎn)續(xù)傳也不好處理?;居梅ㄊ莗ython tools/model_tools/downloader.py --name human-pose-estimation-0001 --output_dir /opt/models如果想一次下載某個(gè)任務(wù)類型下的所有模型可以用--all參數(shù)配合任務(wù)類型過(guò)濾python tools/model_tools/downloader.py --all --task_type detection --output_dir /opt/models--task_type支持的取值包括classification、detection、segmentation、pose_estimation等具體可以參考腳本的--help輸出。3.2 轉(zhuǎn)換到IR格式的兩種路徑Open Model Zoo里的模型分兩類一類是已經(jīng)轉(zhuǎn)換好的OpenVINO IR格式.xml.bin另一類是原始框架格式比如.pb、.caffemodel、.onnx。對(duì)于后者需要先轉(zhuǎn)換成IR格式才能用OpenVINO Runtime加載。轉(zhuǎn)換工具是OpenVINO自帶的Model Optimizerpython mo.py --input_model /opt/models/public/mobilenet-v2/mobilenet-v2.onnx --output_dir /opt/models/public/mobilenet-v2/IR如果模型來(lái)自TensorFlow的GraphDef格式可能需要額外指定輸入輸出節(jié)點(diǎn)名比如python mo.py --input_model /opt/models/public/ssd_mobilenet_v2/ssd_mobilenet_v2.pb --input_shape [1,300,300,3] --reverse_input_channels --output_dir /opt/models/public/ssd_mobilenet_v2/IRModel Optimizer轉(zhuǎn)換過(guò)程中的幾個(gè)高頻參數(shù)--input_shape指定固定的輸入形狀不指定的話OpenVINO會(huì)保留動(dòng)態(tài)shape雖然也能跑但性能會(huì)差一些。--reverse_input_channels如果訓(xùn)練時(shí)用的是RGB順序、推理時(shí)數(shù)據(jù)是BGR需要加這個(gè)參數(shù)做通道反轉(zhuǎn)。--mean_values和--scale_values對(duì)應(yīng)模型訓(xùn)練時(shí)的歸一化參數(shù)不設(shè)置的后果是推理精度明顯下降。提示Model Optimizer在OpenVINO 2023及以上版本中已經(jīng)合并到ovcOpenVINO Converter工具里遷移后的命令格式有變化但model_tools里的腳本會(huì)自動(dòng)處理這些細(xì)節(jié)。如果你手動(dòng)轉(zhuǎn)換建議先確認(rèn)OpenVINO版本再查對(duì)應(yīng)文檔。3.3 下載慢或失敗時(shí)的替代方案國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境下直接從GitHub或Model Zoo下載大模型經(jīng)常超時(shí)。我的經(jīng)驗(yàn)是先用downloader.py跑一遍看它卡在哪個(gè)URL然后用支持?jǐn)帱c(diǎn)續(xù)傳的下載工具單獨(dú)下載該文件放到對(duì)應(yīng)目錄后重新運(yùn)行腳本腳本會(huì)跳過(guò)已下載的文件。另外downloader.py支持--precisions參數(shù)用來(lái)指定想要的精度版本FP32、FP16、INT8等。嵌入式設(shè)備上通常選FP16或INT8模型體積能小一半甚至更多推理速度也有肉眼可見的提升精度損失在多數(shù)任務(wù)里可以接受。4. Demo實(shí)戰(zhàn)跑通一個(gè)人體姿態(tài)估計(jì)示例理論說(shuō)再多不如親手跑通一個(gè)Demo。我用Open Model Zoo里最經(jīng)典的人體姿態(tài)估計(jì)模型來(lái)演示完整流程。4.1 環(huán)境準(zhǔn)備清單跑這個(gè)Demo需要準(zhǔn)備Python 3.8及以上版本OpenVINO Runtimepip install openvino即可OpenCV Python庫(kù)pip install opencv-pythonOpen Model Zoo倉(cāng)庫(kù)代碼安裝OpenVINO時(shí)有個(gè)細(xì)節(jié)pip安裝的OpenVINO和完整安裝包帶Model Optimizer等工具不是一回事。如果你只需要推理pip install openvino就夠了如果你還需要做模型轉(zhuǎn)換建議用完整安裝包或者在虛擬環(huán)境里額外安裝Model Optimizer相關(guān)組件。4.2 下載模型和Demo代碼# 克隆倉(cāng)庫(kù) git clone https://github.com/openvinotoolkit/open_model_zoo.git cd open_model_zoo # 下載人體姿態(tài)估計(jì)模型IR格式 python tools/model_tools/downloader.py --name human-pose-estimation-0001 --precisions FP16 --output_dir models_ir這里指定FP16是因?yàn)槲业哪繕?biāo)設(shè)備是集成顯卡FP16精度在視覺任務(wù)上幾乎無(wú)損但內(nèi)存占用和計(jì)算量都更低。4.3 跑通Python推理腳本Open Model Zoo里這個(gè)模型對(duì)應(yīng)的Demo是C工程對(duì)于Python用戶我建議直接用官方Notebook里的思路或者手動(dòng)寫一個(gè)最簡(jiǎn)腳本其實(shí)核心代碼不超過(guò)50行import cv2 import numpy as np from openvino import Core # 初始化推理引擎 core Core() model core.read_model(models_ir/intel/human-pose-estimation-0001/FP16/human-pose-estimation-0001.xml) compiled_model core.compile_model(model, CPU) # 獲取輸入輸出信息 input_layer compiled_model.input(0) output_layer compiled_model.output(0) # 讀取并預(yù)處理圖像 image cv2.imread(test.jpg) input_image cv2.resize(image, (288, 384)) # 模型的寬高順序要留意 input_image input_image.transpose((2, 0, 1)) # HWC - CHW input_image np.expand_dims(input_image, axis0).astype(np.float32) # 推理 result compiled_model([input_image])[output_layer] heatmaps result[0] # shape: [80, 96, 96] # 從熱力圖提取關(guān)鍵點(diǎn)坐標(biāo) h, w heatmaps.shape[1:] keypoints [] for i in range(heatmaps.shape[0]): heatmap heatmaps[i] _, max_val, _, max_loc cv2.minMaxLoc(heatmap) if max_val 0.1: keypoints.append((int(max_loc[0] * image.shape[1] / w), int(max_loc[1] * image.shape[0] / h))) else: keypoints.append((0, 0)) # 可視化 for point in keypoints: if point ! (0, 0): cv2.circle(image, point, 4, (0, 255, 0), -1) cv2.imwrite(output.jpg, image)這段腳本有幾個(gè)容易出錯(cuò)的地方我逐個(gè)說(shuō)明圖像縮放尺寸的順序模型輸入是384x288我第一次寫反了導(dǎo)致推理結(jié)果完全錯(cuò)亂。OpenVINO的模型輸入順序是NCHW即通道數(shù)在前、高度其次、寬度最后對(duì)應(yīng)到OpenCV的resize時(shí)參數(shù)是(width, height)也就是(288, 384)。熱力圖坐標(biāo)映射回原圖熱力圖尺寸是96x96要映射回原圖坐標(biāo)需要分別乘以縮放比例。上面代碼里用了int(max_loc[0] * image.shape[1] / w)其中image.shape[1]是原圖寬度對(duì)應(yīng)的是x軸別搞反了。置信度閾值我設(shè)了0.1實(shí)際使用中這個(gè)值要根據(jù)場(chǎng)景調(diào)整。背景復(fù)雜、目標(biāo)較小的時(shí)候閾值太低會(huì)出來(lái)一堆噪點(diǎn)太高會(huì)漏檢關(guān)鍵點(diǎn)建議在0.05到0.2之間多試幾次。4.4 推理速度的真實(shí)體感我在一臺(tái)普通的辦公筆記本上用的是CPU推理跑這個(gè)模型輸入是1920x1080的視頻幀F(xiàn)P16精度下實(shí)測(cè)單幀推理時(shí)間在40到60毫秒之間大概是20幀每秒左右的處理速度。如果換成視頻文件后處理不算在推理時(shí)間里實(shí)際體感是接近實(shí)時(shí)的。這個(gè)速度對(duì)原型驗(yàn)證和Demo演示來(lái)說(shuō)已經(jīng)相當(dāng)夠用了。如果還想更快可以轉(zhuǎn)為INT8精度速度還能再提升50%左右把輸入尺寸從384x288降到192x160速度翻倍但小目標(biāo)檢測(cè)精度會(huì)下降用--device GPU跑在核顯上通常比CPU快提示OpenVINO把CPU和核顯統(tǒng)稱為CPU和GPU設(shè)備在compile_model時(shí)通過(guò)第二個(gè)參數(shù)指定比如core.compile_model(model, GPU)。核顯推理需要安裝OpenCL驅(qū)動(dòng)Windows下一般裝顯卡驅(qū)動(dòng)即可Linux下需要額外裝intel-opencl-icd包。5. 精度與性能之間的調(diào)優(yōu)經(jīng)驗(yàn)5.1 FP32、FP16、INT8該怎么選Open Model Zoo里很多模型都提供了多種精度版本。選哪種取決于你的硬件、精度要求和推理速度要求。精度模型體積相對(duì)速度精度損失適用場(chǎng)景FP32基準(zhǔn)基準(zhǔn)無(wú)PC端、服務(wù)器端追求最高精度FP16約一半提升1.5-2倍幾乎不可感知大多數(shù)實(shí)際應(yīng)用推薦首選INT8約四分之一提升2-4倍部分任務(wù)損失1-3%嵌入式設(shè)備、實(shí)時(shí)性要求高的場(chǎng)景實(shí)際經(jīng)驗(yàn)是FP16在絕大多數(shù)視覺任務(wù)上可以直接替代FP32模型體積減半、速度翻倍精度差異在肉眼層面看不出來(lái)。INT8需要謹(jǐn)慎分類任務(wù)損失很小但檢測(cè)任務(wù)里的小目標(biāo)容易丟。5.2 預(yù)處理參數(shù)不匹配是最隱蔽的精度殺手我見過(guò)不少人下載了模型、寫好了推理代碼結(jié)果輸出結(jié)果一團(tuán)糟。排查到最后發(fā)現(xiàn)是預(yù)處理參數(shù)和模型訓(xùn)練時(shí)不一致。Open Model Zoo的model.yml文件里每個(gè)模型都標(biāo)明了預(yù)處理要求。以human-pose-estimation-0001為例它的預(yù)處理是圖像縮放到384x288BGR格式減均值[123.675, 116.28, 103.53]除以標(biāo)準(zhǔn)差[58.395, 57.12, 57.375]。這個(gè)均值和標(biāo)準(zhǔn)差對(duì)應(yīng)的是訓(xùn)練集統(tǒng)計(jì)出來(lái)的數(shù)據(jù)如果你的預(yù)處理不匹配輸入分布就偏移了模型效果自然會(huì)崩。用model.yml的另一個(gè)好處是你可以在下載模型前先確認(rèn)預(yù)處理復(fù)雜度。有些模型的預(yù)處理特別繁瑣如果你的項(xiàng)目對(duì)端到端流程有強(qiáng)要求盡量選預(yù)處理簡(jiǎn)單的模型能省不少事。5.3 多個(gè)模型串聯(lián)時(shí)的性能陷阱Open Model Zoo的價(jià)值不止于單個(gè)模型。在實(shí)際項(xiàng)目里我經(jīng)常把多個(gè)模型串聯(lián)起來(lái)用比如人體檢測(cè) → 姿態(tài)估計(jì) → 行為識(shí)別或者車牌檢測(cè) → 字符識(shí)別。多模型串聯(lián)最容易踩的性能坑是每個(gè)模型單獨(dú)推理時(shí)都很快但串起來(lái)后總耗時(shí)遠(yuǎn)超各部分之和。原因在于Python層面的數(shù)據(jù)格式轉(zhuǎn)換、內(nèi)存拷貝開銷以及CPU推理時(shí)OpenVINO的線程調(diào)度策略。緩解方法有幾個(gè)方向盡量復(fù)用輸入輸出緩沖區(qū)避免每幀都重新分配內(nèi)存推理前統(tǒng)一所有模型的圖像縮放尺寸減少resize次數(shù)如果兩個(gè)模型可以并行考慮用OpenVINO的Async API讓前一個(gè)模型還在推理時(shí)下一個(gè)模型的數(shù)據(jù)已經(jīng)在準(zhǔn)備了6. 模型選型的核心判斷標(biāo)準(zhǔn)Open Model Zoo里的模型越來(lái)越多新手反而會(huì)挑花眼。我的選型邏輯很簡(jiǎn)單按優(yōu)先級(jí)看三件事。6.1 首選任務(wù)匹配度高的專精模型同樣是檢測(cè)任務(wù)ssd_mobilenet_v2能檢測(cè)80類物體person-detection-0200專門檢測(cè)人。如果場(chǎng)景固定為人流統(tǒng)計(jì)那后者的精度和速度都遠(yuǎn)勝前者。Open Model Zoo的好處是它按task_type分了類你可以先粗篩再精挑。從架構(gòu)上看專精模型因?yàn)轭悇e數(shù)少最后一層分類頭的計(jì)算量小同樣的backbone在相同算力下可以跑更大的輸入分辨率或者塞進(jìn)更小的設(shè)備。這是很多人在模型選型時(shí)容易忽略的維度。6.2 用model.yml的license判斷商用風(fēng)險(xiǎn)做商業(yè)項(xiàng)目的人一定要看這個(gè)。Open Model Zoo里的模型license并不統(tǒng)一有的來(lái)自Apache 2.0有的來(lái)自MIT還有的是Intel自己的license。商用前務(wù)必逐個(gè)確認(rèn)模型來(lái)源和license條款別等到客戶審代碼時(shí)才被發(fā)現(xiàn)用了不合適的模型。6.3 在Demo里看真實(shí)效果別只看指標(biāo)模型自帶的README和model.yml里通常有精度指標(biāo)mAP、accuracy等但那些指標(biāo)是在特定數(shù)據(jù)集和設(shè)定下測(cè)出來(lái)的跟你的真實(shí)場(chǎng)景未必匹配。最靠譜的做法是把模型下載下來(lái)直接用Open Model Zoo的Demo跑一遍你的測(cè)試圖片看看在目標(biāo)小、遮擋多、光照差等極端情況下的表現(xiàn)。Open Model Zoo的Demo程序都支持輸入圖片或視頻測(cè)試非常方便。7. 我踩過(guò)的幾個(gè)坑寫出來(lái)免得你再踩7.1 版本不匹配導(dǎo)致的模型加載失敗OpenVINO的版本更新很頻繁每個(gè)版本對(duì)IR格式的兼容性有一定窗口期。你上個(gè)月下載的模型這個(gè)月升級(jí)了OpenVINO后發(fā)現(xiàn)加載報(bào)錯(cuò)很大概率是老模型是舊版IR版本新版本OpenVINO已經(jīng)不支持了。解決辦法升級(jí)OpenVINO后不用重新下載模型用官方的mo.py或者ovc重新轉(zhuǎn)換一次IR即可。如果模型是直接從Open Model Zoo下載的也可以刪掉重新跑一次downloader.py它會(huì)下載匹配新版本格式的模型。7.2 多線程推理的資源競(jìng)爭(zhēng)OpenVINO默認(rèn)會(huì)占用所有可用的CPU核。如果你在推理的同時(shí)還要做視頻解碼、圖像預(yù)處理這兩件事就會(huì)搶CPU資源導(dǎo)致推理時(shí)間反而變慢。我的做法是給推理設(shè)置CPU核心數(shù)限制config {PERFORMANCE_HINT: THROUGHPUT, NUM_STREAMS: 2} compiled_model core.compile_model(model, CPU, config)或者顯式設(shè)置線程數(shù)config {INFERENCE_NUM_THREADS: 4}具體開幾個(gè)線程取決于你的CPU核數(shù)和任務(wù)并行度通常設(shè)為核心數(shù)的一半到三分之二留給其他任務(wù)一些余量。7.3 攝像頭輸入時(shí)的緩沖問(wèn)題用Open Model Zoo跑攝像頭實(shí)時(shí)視頻時(shí)攝像頭幀率高于模型推理速度會(huì)出現(xiàn)視頻緩沖越來(lái)越大、延遲越來(lái)越高的現(xiàn)象。要解決這個(gè)問(wèn)題最有效的辦法是丟幀策略不處理每一幀而是固定間隔處理或者隊(duì)列里只保留最新幀。我在實(shí)際代碼里用的方式很簡(jiǎn)單while True: ret, frame cap.read() if not ret: break frame_count 1 if frame_count % 3 ! 0: # 每3幀處理一幀 continue # 推理處理這個(gè)方法雖然粗暴但在實(shí)時(shí)演示場(chǎng)景下非常管用視覺上畫面依然連貫推理延遲卻大大降低了。8. 從Demo到項(xiàng)目落地還差這幾步跑通Open Model Zoo的Demo只是第一步真正把它用到項(xiàng)目里還需要做幾件事。8.1 封裝統(tǒng)一的推理接口Open Model Zoo的Demo代碼往往為了展示效果在可視化上寫了很多代碼。實(shí)際項(xiàng)目里你需要把推理邏輯封裝成一個(gè)干凈的接口只接收?qǐng)D像、返回結(jié)果對(duì)象。這樣換模型時(shí)只需要改模型加載部分業(yè)務(wù)邏輯完全不用動(dòng)。8.2 加入業(yè)務(wù)邏輯和后處理模型輸出的是裸結(jié)果比如檢測(cè)框坐標(biāo)、關(guān)鍵點(diǎn)坐標(biāo)要對(duì)接業(yè)務(wù)系統(tǒng)還需要做跟蹤、計(jì)數(shù)、告警等后處理。Open Model Zoo本身不提供這些能力但好消息是它輸出的數(shù)據(jù)結(jié)構(gòu)很標(biāo)準(zhǔn)對(duì)接起來(lái)很方便。8.3 性能Profiling看瓶頸在哪如果落地后發(fā)現(xiàn)性能不達(dá)標(biāo)先別急著換模型做一次Profiling。把整條鏈路拆成視頻采集、解碼、預(yù)處理、推理、后處理、可視化、傳輸七個(gè)環(huán)節(jié)分別計(jì)時(shí)找到耗時(shí)最高的環(huán)節(jié)再針對(duì)性地優(yōu)化。我遇到過(guò)很多次推理本身只要20毫秒但視頻解碼花了80毫秒或者可視化繪制花了50毫秒。優(yōu)化解碼方式或降低可視化頻率性能問(wèn)題就解決了完全不需要?jiǎng)幽P汀pen Model Zoo給我最大的感受是它把深度學(xué)習(xí)模型從論文里的數(shù)學(xué)公式變成了可以直接運(yùn)行的程序。如果你卡在模型怎么選、Demo怎么跑這個(gè)階段我建議你直接clone倉(cāng)庫(kù)挑一個(gè)任務(wù)相關(guān)的模型按本文的流程跑一遍。跑通了你對(duì)OpenVINO和模型落地的理解會(huì)上一個(gè)臺(tái)階后面再選型、調(diào)優(yōu)都有了自己的判斷基準(zhǔn)。本文還有配套的精品資源點(diǎn)擊獲取