女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

簡述OpenVINO? + ResNet實現圖像分類

英特爾物聯網 ? 來源:英特爾物聯網 ? 作者:英特爾物聯網 ? 2021-05-18 09:23 ? 次閱讀

推理引擎(IE)應用開發流程

與相關函數介紹

通過OpenVINO的推理引擎跟相關應用集成相關深度學習模型的應用基本流程如下:

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

圖-1

從圖-1可以看到只需要七步就可以完成應用集成,實現深度學習模型的推理預測,各步驟中相關的API函數支持與作用解釋如下:

Step 1:

InferenceEngine::Core // IE對象

Step 2:

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

Step 3:

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

使用上述兩個相關輸入與輸出對象就可以設置輸入的數據類型與精度,獲取輸入與輸出層的名稱。

Step 4:

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

通過Core的LoadNetwork方法生成可執行的網絡,如果你有多個設備,就可以創建多個可執行的網絡。其參數解釋如下:

network 參數表示step2加載得到CNNNetwork對象實例

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

config默認為空

InferRequest InferenceEngine::CreateInferRequest()

表示從可執行網絡創建推理請求。

Step 5:

根據輸入層的名稱獲取輸入buffer數據緩沖區,然后把輸入圖像數據填到緩沖區,實現輸入設置。其中根據輸入層名稱獲取輸入緩沖區的函數為如下:

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

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

Step 6:

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

Step 7:

調用InferRequest的GetBlob()方法,使用參數為輸出層名稱,就會得到網絡的輸出預測結果,根據輸出層維度信息進行解析即可獲取輸出預測信息與顯示。

圖像分類與ResNet網絡

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

- resnest-18-pytorch

- resnest-34-pytorch

- resnest-50-pytorch

- resnet-50-tf

其中18、34、50表示權重層,pytorch表示模型來自pytorch框架訓練生成、tf表示tensorflow訓練生成。ResNet系列網絡的詳細說明如下:

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

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

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

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

圖-3

查看網絡的輸出:

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

圖-4

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

程序實現的基本流程與步驟

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

1. 初始化IE

InferenceEngine::Core ie;

2. 加載ResNet18網絡

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

3. 獲取輸入與輸出名稱、設置輸入與輸出數據格式

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. 輸入圖像數據設置

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];
}
}
}

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

6. 推理

infer_request.Infer();

7. 解析輸出與顯示結果

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);

解析部分代碼首先通過輸出層名稱獲取輸出數據對象BLOB,然后根據輸出格式1x1000,尋找最大值對應的index,根據索引index得到對應的分類標簽,然后通過OpenCV圖像輸出分類結果。

運行結果

圖-5(來自ImageNet測試集)

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

編輯:jq

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

    關注

    3

    文章

    4368

    瀏覽量

    64180
  • 代碼
    +關注

    關注

    30

    文章

    4886

    瀏覽量

    70245
  • OpenCV
    +關注

    關注

    32

    文章

    642

    瀏覽量

    42420
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1065

    瀏覽量

    47673

原文標題:OpenVINO? + ResNet實現圖像分類

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    在友晶LabCloud平臺上使用PipeCNN實現ImageNet圖像分類

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

    基于RV1126開發板實現自學習圖像分類方案

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

    基于RV1126開發板的resnet50訓練部署教程

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

    在Visual Studio中使用OpenVINO? C API時無法讀取網絡怎么解決?

    使用 OpenVINO C API 加載中間表示 (IR),方法是引用Hello 分類 C 樣本。 使用ie_infer_request_set_blob 時收到的狀態為 -1(一般錯誤)。
    發表于 03-07 07:01

    如何部署OpenVINO?工具套件應用程序?

    編寫代碼并測試 OpenVINO? 工具套件應用程序后,必須將應用程序安裝或部署到生產環境中的目標設備。 OpenVINO?部署管理器指南包含有關如何輕松使用部署管理器將應用程序打包并部署到目標主機的詳細信息。 注意:OpenVIN
    發表于 03-06 08:23

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

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

    無法使用API實現NPU與OpenVINO?的內存共享怎么辦?

    無法使用 遠程張量 API 實現 NPU 與OpenVINO?的內存共享。
    發表于 03-06 07:11

    請問如何使用OpenVINO?生成熱圖?

    是否可以使用 OpenVINO? 實現像 [i]逐層相關性傳播 或 [i]Grad-CAM 這樣的熱圖生成技術?
    發表于 03-06 06:22

    安裝OpenVINO? 2023.2使用pip install openvino-dev命令的開發工具后報錯怎么解決?

    安裝OpenVINO? 2023.2 使用 pip install openvino-dev 命令的開發工具。 遇到錯誤: ModuleNotFoundError: 沒有名為 \'distutils\' 的模塊
    發表于 03-05 08:39

    安裝OpenVINO?工具包穩定擴散后報錯,怎么解決?

    已安裝OpenVINO?工具包穩定擴散并收到錯誤消息: \"BackendCompilerFailed: openvino_fx raised RuntimeError
    發表于 03-05 06:56

    C#集成OpenVINO?:簡化AI模型部署

    在開源測控、機器視覺、數采與分析三大領域中,如何快速將AI模型集成到應用程序中, 實現AI賦能和應用增值? 最容易的方式是:在C#中,使用 OpenVINO工具套件 集成AI模型。 1
    的頭像 發表于 02-17 10:03 ?1825次閱讀
    C#集成<b class='flag-5'>OpenVINO</b>?:簡化AI模型部署

    高通AI Hub:輕松實現Android圖像分類

    高通AI Hub為開發者提供了一個強大的平臺,以優化、驗證和部署在Android設備上的機器學習模型。這篇文章將介紹如何使用高通AI Hub進行圖像分類的程式碼開發,并提供一個實際的例子來展示其在Android平臺上的應用。
    的頭像 發表于 11-26 01:03 ?759次閱讀
    高通AI Hub:輕松<b class='flag-5'>實現</b>Android<b class='flag-5'>圖像</b><b class='flag-5'>分類</b>

    使用卷積神經網絡進行圖像分類的步驟

    使用卷積神經網絡(CNN)進行圖像分類是一個涉及多個步驟的過程。 1. 問題定義 確定目標 :明確你想要分類圖像類型,例如貓和狗、不同的植物種類等。 數據需求 :確定需要多少數據以及
    的頭像 發表于 11-15 15:01 ?753次閱讀

    基于改進ResNet50網絡的自動駕駛場景天氣識別算法

    ResNet50網絡4組模塊內加入SE模塊,以便更好地擬合通道間復雜的魯棒性。基于自動駕駛汽車路測圖像數據對所提算法進行Python編程實現,結果表明:SE模塊的加入能夠增加算法的魯棒性和準確性,提高了自動駕駛的天氣識別精度。
    的頭像 發表于 11-09 11:14 ?1268次閱讀
    基于改進<b class='flag-5'>ResNet</b>50網絡的自動駕駛場景天氣識別算法

    計算機視覺怎么給圖像分類

    圖像分類是計算機視覺領域中的一項核心任務,其目標是將輸入的圖像自動分配到預定義的類別集合中。這一過程涉及圖像的特征提取、特征表示以及分類器的
    的頭像 發表于 07-08 17:06 ?1541次閱讀