国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

簡述OpenVINO? + ResNet實現(xiàn)圖像分類

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 作者:英特爾物聯(lián)網(wǎng) ? 2021-05-18 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

推理引擎(IE)應(yīng)用開發(fā)流程

與相關(guān)函數(shù)介紹

通過OpenVINO的推理引擎跟相關(guān)應(yīng)用集成相關(guān)深度學(xué)習(xí)模型的應(yīng)用基本流程如下:

3f4a03ea-b4ff-11eb-bf61-12bb97331649.png

圖-1

從圖-1可以看到只需要七步就可以完成應(yīng)用集成,實現(xiàn)深度學(xué)習(xí)模型的推理預(yù)測,各步驟中相關(guān)的API函數(shù)支持與作用解釋如下:

Step 1:

InferenceEngine::Core // IE對象

Step 2:

Core.ReadNetwork(xml/onnx)輸入的IR或者onnx格式文件,返回CNNNetwork對象

Step 3:

InferenceEngine::InputsDataMap, InferenceEngine::InputInfo, // 模型輸入信息
InferenceEngine::OutputsDataMap // 模型輸出信息

使用上述兩個相關(guān)輸入與輸出對象就可以設(shè)置輸入的數(shù)據(jù)類型與精度,獲取輸入與輸出層的名稱。

Step 4:

ExecutableNetwork LoadNetwork (
const CNNNetwork &network,
const std::string &deviceName,
const std::map< std::string, std::string > &config={}
)

通過Core的LoadNetwork方法生成可執(zhí)行的網(wǎng)絡(luò),如果你有多個設(shè)備,就可以創(chuàng)建多個可執(zhí)行的網(wǎng)絡(luò)。其參數(shù)解釋如下:

network 參數(shù)表示step2加載得到CNNNetwork對象實例

deviceName表示模型計算所依賴的硬件資源,可以為CPUGPUFPGA、 FPGA、MYRIAD

config默認(rèn)為空

InferRequest InferenceEngine::CreateInferRequest()

表示從可執(zhí)行網(wǎng)絡(luò)創(chuàng)建推理請求。

Step 5:

根據(jù)輸入層的名稱獲取輸入buffer數(shù)據(jù)緩沖區(qū),然后把輸入圖像數(shù)據(jù)填到緩沖區(qū),實現(xiàn)輸入設(shè)置。其中根據(jù)輸入層名稱獲取輸入緩沖區(qū)的函數(shù)為如下:

Blob::Ptr GetBlob (
const std::string &name // 輸入層名稱
)

注意:返回包含輸入層維度信息,支持多個輸入層數(shù)據(jù)設(shè)置!

Step 6:

推理預(yù)測,直接調(diào)用推理請求的InferRequest.infer()方法即可,該方法無參數(shù)。

Step 7:

調(diào)用InferRequest的GetBlob()方法,使用參數(shù)為輸出層名稱,就會得到網(wǎng)絡(luò)的輸出預(yù)測結(jié)果,根據(jù)輸出層維度信息進(jìn)行解析即可獲取輸出預(yù)測信息與顯示。

圖像分類與ResNet網(wǎng)絡(luò)

圖像分類是計算機視覺的關(guān)鍵任務(wù)之一,關(guān)于圖像分類最知名的數(shù)據(jù)集是ImageNet,包含了自然場景下大量各種的圖像數(shù)據(jù),支持1000個類別的圖像分類。OpenVINO在模型庫的public中有ResNet模型1000個分類的預(yù)訓(xùn)練模型支持,它們主要是:

- resnest-18-pytorch

- resnest-34-pytorch

- resnest-50-pytorch

- resnet-50-tf

其中18、34、50表示權(quán)重層,pytorch表示模型來自pytorch框架訓(xùn)練生成、tf表示tensorflow訓(xùn)練生成。ResNet系列網(wǎng)絡(luò)的詳細(xì)說明如下:

406b3d52-b4ff-11eb-bf61-12bb97331649.png

圖-2(來自《Deep Residual Learning for Image Recognition》論文)

我們以ResNet18-pytorch的模型為例,基于Pytorch框架我們可以很輕松的把它轉(zhuǎn)換為ONNX格式文件。然后使用Netron工具打開,可以看到網(wǎng)絡(luò)的輸入圖示如下:

40f2157a-b4ff-11eb-bf61-12bb97331649.png

圖-3

查看網(wǎng)絡(luò)的輸出:

40fe8af8-b4ff-11eb-bf61-12bb97331649.png

圖-4

這樣我們很清楚的知道網(wǎng)絡(luò)的輸入與輸出層名稱,輸入數(shù)據(jù)格式與輸出數(shù)據(jù)格式,其中輸入數(shù)據(jù)格式NCHW中的N表示圖像數(shù)目,這里是1、C表示圖像通道數(shù),這里輸入的是彩色圖像,通道數(shù)為3、H與W分別表示圖像的高與寬,均為224。在輸出格式中1x1000中1表示圖像數(shù)目、1000表示預(yù)測的1000個分類的置信度數(shù)據(jù)。

程序?qū)崿F(xiàn)的基本流程與步驟

前面已經(jīng)介紹了IE SDK相關(guān)函數(shù),圖像分類模型ResNet18的輸入與輸出格式信息。現(xiàn)在我們就可以借助IE SDK來完成一個完整的圖像分類模型的應(yīng)用部署了,根據(jù)前面提到的步驟各步的代碼實現(xiàn)與解釋如下:

1. 初始化IE

InferenceEngine::Core ie;

2. 加載ResNet18網(wǎng)絡(luò)

InferenceEngine::CNNNetwork network = ie.ReadNetwork(onnx);
InferenceEngine::InputsDataMap inputs = network.getInputsInfo();
InferenceEngine::OutputsDataMap outputs = network.getOutputsInfo();

3. 獲取輸入與輸出名稱、設(shè)置輸入與輸出數(shù)據(jù)格式

std::string input_name = "";
for (auto item : inputs) {
input_name = item.first;
auto input_data = item.second;
input_data->setPrecision(Precision::FP32);
input_data->setLayout(Layout::NCHW);
input_data->getPreProcess().setColorFormat(ColorFormat::RGB);
std::cout << "input name: " << input_name << std::endl;
}

std::string output_name = "";
for (auto item : outputs) {
output_name = item.first;
auto output_data = item.second;
output_data->setPrecision(Precision::FP32);
std::cout << "output name: " << output_name << std::endl;
}

4. 獲取推理請求對象實例

auto executable_network = ie.LoadNetwork(network, "CPU");
auto infer_request = executable_network.CreateInferRequest();

5. 輸入圖像數(shù)據(jù)設(shè)置

auto input = infer_request.GetBlob(input_name);
size_t num_channels = input->getTensorDesc().getDims()[1];
size_t h = input->getTensorDesc().getDims()[2];
size_t w = input->getTensorDesc().getDims()[3];
size_t image_size = h*w;
cv::Mat blob_image;
cv::resize(src, blob_image, cv::Size(w, h));
cv::cvtColor(blob_image, blob_image, cv::COLOR_BGR2RGB);
blob_image.convertTo(blob_image, CV_32F);
blob_image = blob_image / 255.0;
cv::subtract(blob_image, cv::Scalar(0.485, 0.456, 0.406), blob_image);
cv::divide(blob_image, cv::Scalar(0.229, 0.224, 0.225), blob_image);

// HWC =》NCHW
float* data = static_cast(input->buffer());for (size_t row = 0; row < h; row++) { ? ?for (size_t col = 0; col < w; col++) { ? ? ? ?for (size_t ch = 0; ch < num_channels; ch++) { ? ? ? ? ? ?data[image_sizech + row*w + col] = blob_image.at<:vec3f>(row, col)[ch];
}
}
}

在輸入數(shù)據(jù)部分OpenCV導(dǎo)入的圖像三通道順序是BGR,所以要轉(zhuǎn)換為RGB,resize到224x224大小、像素值歸一化為0~1之間、然后要減去均值(0.485, 0.456, 0.406),除以方差(0.229, 0.224, 0.225)完成預(yù)處理之后再填充到Blob緩沖區(qū)中區(qū)。

6. 推理

infer_request.Infer();

7. 解析輸出與顯示結(jié)果

auto output = infer_request.GetBlob(output_name);
const float* probs = static_cast ::value_type*>(output->buffer());
const SizeVector outputDims = output->getTensorDesc().getDims();
std::cout << outputDims[0] << "x" << outputDims[1] << std::endl;
float max = probs[0];
int max_index = 0;
for (int i = 1; i < outputDims[1]; i++) {
if (max < probs[i]) {
max = probs[i];
max_index = i;
}
}<:fp32>

cv::putText(src, labels[max_index], cv::Point(50, 50), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 255), 2, 8);
cv::imshow("輸入圖像", src);
cv::waitKey(0);

解析部分代碼首先通過輸出層名稱獲取輸出數(shù)據(jù)對象BLOB,然后根據(jù)輸出格式1x1000,尋找最大值對應(yīng)的index,根據(jù)索引index得到對應(yīng)的分類標(biāo)簽,然后通過OpenCV圖像輸出分類結(jié)果。

運行結(jié)果

圖-5(來自ImageNet測試集)

這樣我們就使用OpenVINO 的推理引擎相關(guān)的SDK函數(shù)支持成功部署ResNet18模型,并預(yù)測了一張輸入圖像。你可以能還想知道除了圖像分類模型,OpenVINO 推理引擎在對象檢測方面都有哪些應(yīng)用,我們下次繼續(xù)…….

編輯:jq

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

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67521
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73988
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    44801
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1101

    瀏覽量

    51737

原文標(biāo)題:OpenVINO? + ResNet實現(xiàn)圖像分類

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    圖像采集卡分類、接口與性能指標(biāo)詳解

    圖像采集卡是機器視覺、工業(yè)檢測、安防監(jiān)控、醫(yī)療影像等領(lǐng)域的核心硬件,核心作用是將相機等圖像源輸出的模擬/數(shù)字信號轉(zhuǎn)化為計算機可識別、處理的數(shù)字圖像數(shù)據(jù),同時完成信號同步、緩存、傳輸?shù)汝P(guān)鍵操作,其
    的頭像 發(fā)表于 01-29 16:55 ?469次閱讀
    <b class='flag-5'>圖像</b>采集卡<b class='flag-5'>分類</b>、接口與性能指標(biāo)詳解

    基于瑞芯微RK3576的resnet50訓(xùn)練部署教程

    Resnet50簡介ResNet50網(wǎng)絡(luò)是2015年由微軟實驗室的何愷明提出,獲得ILSVRC2015圖像分類競賽第一名。在ResNet網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-10 11:19 ?1323次閱讀
    基于瑞芯微RK3576的<b class='flag-5'>resnet</b>50訓(xùn)練部署教程

    請問OpenVINO? 是否支持 Rust 綁定?

    無法確定OpenVINO?是否支持 Rust 綁定。
    發(fā)表于 06-25 07:45

    無法運行Whisper Asr GenAI OpenVINO? Notebook怎么解決?

    冉小 聲說-asr-genai OpenVINO?筆記本。 遇到的錯誤: Port for tensor name cache_position was not found.
    發(fā)表于 06-25 07:41

    請問如何優(yōu)化OpenVINO?工具套件中的內(nèi)存使用?

    運行OpenVINO?推斷時找不到優(yōu)化內(nèi)存使用情況的方法。
    發(fā)表于 06-25 06:56

    無法使用OpenVINO?在 GPU 設(shè)備上運行穩(wěn)定擴(kuò)散文本到圖像的原因?

    OpenVINO? GPU 設(shè)備上使用圖像大小 (1024X576) 運行穩(wěn)定擴(kuò)散文本到圖像,并收到錯誤消息: RuntimeError: Exception from
    發(fā)表于 06-25 06:36

    請問如何通過OpenVINO?加速啟用穩(wěn)定的擴(kuò)散 Web UI?

    無法運行具有OpenVINO?加速的穩(wěn)定擴(kuò)散 Web UI。
    發(fā)表于 06-24 06:48

    無法將Openvino? 2025.0與onnx運行時Openvino? 執(zhí)行提供程序 1.16.2 結(jié)合使用,怎么處理?

    使用OpenVINO?與英特爾 i5-8500 CPU 和超核處理器 630 iGPU 一起部署模型。 使用了 Microsoft.ML.OnnxRuntime.OpenVino
    發(fā)表于 06-24 06:31

    為什么無法通過“pip install openvino-dev==2025.0.0”安裝 2025.0 OpenVINO??

    通過“pip install openvino-dev==2025.0.0OpenVINO? 2025.0 安裝。 收到的錯誤: ERROR: No matching distribution found for openvino
    發(fā)表于 06-23 08:13

    Intel OpenVINO? Day0 實現(xiàn)阿里通義 Qwen3 快速部署

    本文將以 Qwen3-8B 為例,介紹如何利用 OpenVINO 的 Python API 在英特爾平臺(GPU, NPU)Qwen3 系列模型。
    的頭像 發(fā)表于 05-11 11:36 ?1719次閱讀
    Intel <b class='flag-5'>OpenVINO</b>? Day0 <b class='flag-5'>實現(xiàn)</b>阿里通義 Qwen3 快速部署

    OpenVINO C#如何運行YOLO11實例分割模型

    代碼是我在OpenVINO-CSharp-API作者開源的YOLOv8對象檢測的代碼基礎(chǔ)上修改而成。
    的頭像 發(fā)表于 04-29 09:30 ?2049次閱讀
    <b class='flag-5'>OpenVINO</b> C#如何運行YOLO11實例分割模型

    在友晶LabCloud平臺上使用PipeCNN實現(xiàn)ImageNet圖像分類

    利用深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行圖像分類是通過使用多個卷積層來從輸入數(shù)據(jù)中提取特征,最后通過分類層做決策來識別出目標(biāo)物體。
    的頭像 發(fā)表于 04-23 09:42 ?1083次閱讀
    在友晶LabCloud平臺上使用PipeCNN<b class='flag-5'>實現(xiàn)</b>ImageNet<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>

    基于RV1126開發(fā)板實現(xiàn)自學(xué)習(xí)圖像分類方案

    在RV1126開發(fā)板上實現(xiàn)自學(xué)習(xí):在識別前對物體圖片進(jìn)行模型學(xué)習(xí),訓(xùn)練完成后通過算法分類得出圖像的模型ID。 方案設(shè)計邏輯流程圖,方案代碼分為分為兩個業(yè)務(wù)流程,主體代碼負(fù)責(zé)抓取、合成
    的頭像 發(fā)表于 04-21 13:37 ?11次閱讀
    基于RV1126開發(fā)板<b class='flag-5'>實現(xiàn)</b>自學(xué)習(xí)<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>方案

    基于RV1126開發(fā)板的resnet50訓(xùn)練部署教程

    本教程基于圖像分類算法ResNet50的訓(xùn)練和部署到EASY-EAI-Nano(RV1126)進(jìn)行說明
    的頭像 發(fā)表于 04-18 15:07 ?1144次閱讀
    基于RV1126開發(fā)板的<b class='flag-5'>resnet</b>50訓(xùn)練部署教程

    如何在Ollama中使用OpenVINO后端

    Ollama 和 OpenVINO 的結(jié)合為大型語言模型(LLM)的管理和推理提供了強大的雙引擎驅(qū)動。Ollama 提供了極簡的模型管理工具鏈,而 OpenVINO 則通過 Intel 硬件(CPU
    的頭像 發(fā)表于 04-14 10:22 ?1541次閱讀