基于OpenVINO C++ API部署YOLOv5-Seg實例分割模型

上一篇文章《基于OpenVNO部署YOLOv5-seg實時實例分割模型》 介紹了基于OpenVINO Python API部署YOLOv5-Seg實例分割模型,本文介紹基于OpenVINO C++ API部署YOLOv5-Seg實例分割模型,主要步驟有:

  1. 配置OpenVINO C++開發(fā)環(huán)境
  2. 下載并轉(zhuǎn)換YOLOv5-Seg預(yù)訓(xùn)練模型
  3. 使用OpenVINO Runtime C++ API編寫推理程序

下面,本文將依次詳述桂敛。

第一步右莱,配置OpenVINO C++開發(fā)環(huán)境僵朗,請參考《在Windows中基于Visual Studio配置OpenVINO C++開發(fā)環(huán)境》

第二步县踢,參考《基于OpenVNO部署YOLOv5-seg實時實例分割模型》 克隆YOLOv5 Github 代碼倉到本地,然后運行命令獲得 yolov5s-seg ONNX 格式模型:yolov5s-seg.onnx:

python export.py --weights yolov5s-seg.pt --include onnx

接著運行命令獲得yolov5s-seg IR格式模型:yolov5s-seg.xml和yolov5s-seg.bin修然,如下圖所示

mo -m yolov5s-seg.onnx --compress_to_fp16

yolov5-seg ONNX格式和IR格式模型

第三步:使用OpenVINO Runtime C++ API編寫推理程序。一個端到端的AI推理程序质况,主要包含五個典型的處理流程:

  1. 采集圖像&圖像解碼
  2. 圖像數(shù)據(jù)預(yù)處理
  3. AI推理計算
  4. 對推理結(jié)果進行后處理
  5. 將處理后的結(jié)果集成到業(yè)務(wù)流程
image.png

基于OpenVINO Runtime C++API的同步推理代碼的關(guān)鍵片段如下所示:

int main(int argc, char* argv[]) {
    // -------- Get OpenVINO runtime version --------
    std::cout << ov::get_openvino_version().description << ':' << ov::get_openvino_version().buildNumber << std::endl;

    // -------- Step 1. Initialize OpenVINO Runtime Core --------
    ov::Core core;

    // -------- Step 2. Compile the Model --------
    auto compiled_model = core.compile_model(model_file, "GPU.1"); //GPU.1 is dGPU A770

    // -------- Step 3. Create an Inference Request --------
    ov::InferRequest infer_request = compiled_model.create_infer_request();

    // -------- Step 4. Read a picture file and do the preprocess --------
    cv::RNG rng;
    cv::Mat img = cv::imread(image_file); //Load a picture into memory
    cv::Mat masked_img;
    std::vector<float> paddings(3);       //scale, half_h, half_w
    cv::Mat resized_img = letterbox(img, paddings); //resize to (640,640) by letterbox
    // BGR->RGB, u8(0-255)->f32(0.0-1.0), HWC->NCHW
    cv::Mat blob = cv::dnn::blobFromImage(resized_img, 1 / 255.0, cv::Size(640, 640), cv::Scalar(0, 0, 0), true);

    // -------- Step 5. Feed the blob into the input node of YOLOv5 -------
    // Get input port for model with one input
    auto input_port = compiled_model.input();
    // Create tensor from external memory
    ov::Tensor input_tensor(input_port.get_element_type(), input_port.get_shape(), blob.ptr(0));
    // Set input tensor for model with one input
    infer_request.set_input_tensor(input_tensor);

    // -------- Step 6. Start inference --------
    infer_request.infer();

    // -------- Step 7. Get the inference result --------
    auto detect = infer_request.get_output_tensor(0);
    auto detect_shape = detect.get_shape();
    std::cout << "The shape of Detection tensor:"<< detect_shape << std::endl;
    auto proto = infer_request.get_output_tensor(1);
    auto proto_shape = proto.get_shape();
    std::cout << "The shape of Proto tensor:" << proto_shape << std::endl;

    // --------- Do the Post Process

    // Detect Matrix: 25200 x 117  
    cv::Mat detect_buffer(detect_shape[1], detect_shape[2], CV_32F, detect.data());
    // Proto Matrix:  1x32x160x160 => 32 x 25600
    cv::Mat proto_buffer(proto_shape[1], proto_shape[2] * proto_shape[3], CV_32F, proto.data());

    // -------- Step 8. Post-process the inference result -----------
   ...
}

完整范例代碼:https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5seg_openvino_dGPU.cpp

運行結(jié)果如下:
yolov5seg_openvino_dGPU.cpp運行結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末低零,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拯杠,更是在濱河造成了極大的恐慌掏婶,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潭陪,死亡現(xiàn)場離奇詭異雄妥,居然都是意外死亡最蕾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門老厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘟则,“玉大人,你說我怎么就攤上這事枝秤〈着。” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵淀弹,是天一觀的道長丹壕。 經(jīng)常有香客問我,道長薇溃,這世上最難降的妖魔是什么菌赖? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮沐序,結(jié)果婚禮上琉用,老公的妹妹穿的比我還像新娘。我一直安慰自己策幼,他們只是感情好邑时,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著特姐,像睡著了一般晶丘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上到逊,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天铣口,我揣著相機與錄音,去河邊找鬼觉壶。 笑死脑题,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的铜靶。 我是一名探鬼主播叔遂,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼争剿!你這毒婦竟也來了已艰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蚕苇,失蹤者是張志新(化名)和其女友劉穎哩掺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩笤,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嚼吞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年盒件,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舱禽。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡炒刁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出誊稚,到底是詐尸還是另有隱情翔始,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布里伯,位于F島的核電站城瞎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俏脊。R本人自食惡果不足惜全谤,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一肤晓、第九天 我趴在偏房一處隱蔽的房頂上張望爷贫。 院中可真熱鬧,春花似錦补憾、人聲如沸漫萄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腾务。三九已至,卻和暖如春削饵,著一層夾襖步出監(jiān)牢的瞬間岩瘦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工窿撬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留启昧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓劈伴,卻偏偏與公主長得像密末,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跛璧,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容