吴忠躺衫网络科技有限公司

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

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

3天內不再提示

YOLOX模型ONNX格式說明

我快閉嘴 ? 來源:OpenCV學堂 ? 作者:gloomyfish ? 2022-04-13 08:35 ? 次閱讀

yolox 推理openvino與c++支持

YOLOX模型ONNX格式說明

我記得大概是在去年七月份的時候我寫過一篇文章是介紹YOLOX+OpenVINO推理的,下載YOLOX的ONNX格式模型(github上可以下載)

https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntimehttps://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx

下載ONNX格式模型,打開之后如圖:

YOLOX模型ONNX格式說明

輸入格式:1x3x640x640,默認BGR,無需歸一化。輸出格式:1x8400x85

01

什么是85

其中85的前四個是cx、cy、w、h大小,第五個是object預測得分,后面80個是COCO類別。

02

什么是8400

模型在數據輸入端幾乎與YOLOv5的代碼一致,沒有什么特別之處,唯一不同的在于輸出層的解析,是把三個不同的輸出層合并在一個里面了,分別是80x80, 40x40, 20x20, 每個特征點預測,所以總數才會是80x80+40x40+20x20 =8400

03

輸出層解析解密

最后一層輸出,這點跟YOLOv5最新版本輸出層有點相似,但是YOLOv5的輸出層更近一步,已經計算了相關的矩形框位置信息,直接輸出就是絕對位置信息,而YOLOX還是輸出原始的相對位置信息,需要解析一波才行(跟最新的YOLOv5相同),說明YOLOX的工程化方面還有待提升!不是開源就完事了!

OpenVINO推理解析

必須說明一點,參考了官方的部分代碼,然后在上面猛改一通(原因是官方代碼寫的不是很好),改完之后,封裝成一個類了,主要的方法跟我封裝的YOLOv5的推理類相似,導出了兩個函數方法

void YOLOXDetector::string onnxpath, float nms, float score)

該方法表示初始化IE,然后加載模型,設置nms閾值與置信度閾值score,創建一個推理請求,同時初始化每一層上對應每個特征點尺度比率。這部分的代碼如下:

voidYOLOXDetector::initConfig(std::stringonnxpath,floatnms,floatscore){
this->nms_threshold=nms;
this->score_threshold=score;
Coreie;
CNNNetworknetwork=ie.ReadNetwork(onnxpath);
InputInfo::Ptrinput_info=network.getInputsInfo().begin()->second;
this->input_name=network.getInputsInfo().begin()->first;

DataPtroutput_info=network.getOutputsInfo().begin()->second;
this->out_name=network.getOutputsInfo().begin()->first;
output_info->setPrecision(Precision::FP32);

ExecutableNetworkexecutable_network=ie.LoadNetwork(network,"CPU");
this->infer_request=executable_network.CreateInferRequest();

std::vector<int>strides={8,16,32};
generate_grids_and_stride(INPUT_W,INPUT_H,strides,grid_strides);
}

檢測函數

void detect(cv::Mat & frame, std::vector&results);

該方法完成檢測,并把檢測結果作為resulte返回,相關的代碼實現可以參考之前的文章,感覺并沒有什么不同,其中最大的不同的地方是對輸出結果的解析,這邊代碼作為單獨的方法函數實現如下(參考官方):

voidYOLOXDetector::generate_yolox_proposals(std::vectorgrid_strides,constfloat*feat_ptr,floatprob_threshold,std::vector&objects)
{
constintnum_anchors=grid_strides.size();
for(intanchor_idx=0;anchor_idxconstintgrid0=grid_strides[anchor_idx].grid0;
constintgrid1=grid_strides[anchor_idx].grid1;
constintstride=grid_strides[anchor_idx].stride;

constintbasic_pos=anchor_idx*(NUM_CLASSES+5);

//yolox/models/yolo_head.pydecodelogic
floatx_center=(feat_ptr[basic_pos+0]+grid0)*stride;
floaty_center=(feat_ptr[basic_pos+1]+grid1)*stride;
floatw=exp(feat_ptr[basic_pos+2])*stride;
floath=exp(feat_ptr[basic_pos+3])*stride;
floatx0=x_center-w*0.5f;
floaty0=y_center-h*0.5f;

floatbox_objectness=feat_ptr[basic_pos+4];
for(intclass_idx=0;class_idxfloatbox_cls_score=feat_ptr[basic_pos+5+class_idx];
floatbox_prob=box_objectness*box_cls_score;
if(box_prob>prob_threshold)
{
DetectResultobj;
obj.box.x=x0;
obj.box.y=y0;
obj.box.width=w;
obj.box.height=h;
obj.classId=class_idx;
obj.score=box_prob;
objects.push_back(obj);
}
}
}
}

最終調用該類實現推理就顯得特別簡單,對圖像跟視頻都是一樣,使用下面的代碼:

detector->initConfig(this->settings->getOnnxModelPath(),score,conf);
std::vectorresults;
detector->detect(frame,results);

最后我發現在onnxruntime上面也一樣可以,基本上重用了大部分的代碼,然后把它們與我之前寫YOLOv5+QT的演示整合了一下,這樣就變成YOLOv5+YOLOx支持OpenVINO/ONNXRUNTIME全部可行的推理,可以自由的通過界面切換!

運行結果如下(請允許我show一下界面):

YOLOX模型ONNX格式說明

YOLOX模型ONNX格式說明

YOLOX模型ONNX格式說明

掃碼查看OpenCV+Pytorch系統化學習路線圖

原文標題:OpenVINO +YOLOX最新版本推理演示

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

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

    關注

    0

    文章

    23

    瀏覽量

    16915
  • 模型
    +關注

    關注

    1

    文章

    3305

    瀏覽量

    49217
  • 推理
    +關注

    關注

    0

    文章

    8

    瀏覽量

    7276
收藏 人收藏

    評論

    相關推薦

    cubemx ai導入onnx模型后壓縮失敗了怎么解決?

    cubemx ai導入onnx模型后壓縮失敗。請問我怎么解決
    發表于 03-19 07:58

    STM CUBE AI錯誤導入onnx模型報錯的原因?

    使用cube-AI分析模型時報錯,該模型是pytorch的cnn轉化成onnx ``` Neural Network Tools for STM32AI v1.7.0 (STM.ai v8.0.0-19389) INTER
    發表于 05-27 07:15

    yolox_bytetrack_osd_encode示例自帶的yolox模型效果不好是怎么回事?

    yolox_bytetrack_osd_encode示例自帶的模型如下,我看示例里面yolox_group.json、yolox_infer.json、
    發表于 07-05 07:51

    深度探索ONNX模型部署 精選資料分享

    這篇文章從多個角度探索了ONNX,從ONNX的導出到ONNX和Caffe的對比,以及使用ONNX遭遇的困難以及一些解決辦法,另...
    發表于 07-20 07:41

    ONNX的相關資料分享

    ONNX文件并生成特定平臺和運行框架所支持的神經網絡模型ONNX本身不是AI神經網絡運行框架,只是AI神經網絡模型通用中間描述文件格式Gi
    發表于 11-05 06:45

    如何使用Paddle2ONNX模型轉換工具將飛槳模型轉換為ONNX模型

    如何使用Paddle2ONNX模型轉換工具將飛槳模型轉換為ONNX模型
    發表于 12-29 07:42

    yolov5-face的pt模型是怎樣轉為onnx模型

    yolov5-face的pt模型是怎樣轉為onnx模型的?有哪些轉換步驟?
    發表于 02-21 07:19

    EIQ onnx模型轉換為tf-lite失敗怎么解決?

    我們正在嘗試將 tflite 框架與 npu 一起使用來進行機器學習。這是我們的步驟:1)用pytorch訓練一個模型2) 以onnx格式導出模型3) eiq工具的covnert
    發表于 03-31 08:03

    yolov7 onnx模型在NPU上太慢了怎么解決?

    我將 yolov7tiny.pt(yolov7-tiny 模型)轉換為具有 uint8 權重的 yolov7tiny.onnx,然后在 i.MX 8M Plus NPU 上運行
    發表于 04-04 06:13

    ONNX模型轉換為中間表示(IR)后,精度下降了怎么解決?

    ONNX 模型轉換為 IR。 與使用 PyTorch 運行 ONNX 模型相比,Ran IR 采用 基準 C++ 工具,其性能準確率降低了 20%。 無法確定如何對圖像進行預處理
    發表于 08-15 08:28

    將YOLOv5 ONNX模型轉換為中間表示(IR)格式時,收到與節點相關的錯誤怎么解決

    將 YOLOv5 ONNX 模型轉換為 IR 格式:python /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py
    發表于 08-15 08:14

    將TensorFlow Lite模型轉換為ONNX

    由 Facebook 和 Microsoft 創建的開放格式神經網絡交換格式 ONNX,是一種用于表示機器學習模型。
    的頭像 發表于 12-08 23:19 ?1458次閱讀

    YOLOX目標檢測模型的推理部署

    曠視科技開源了內部目標檢測模型-YOLOX,性能與速度全面超越YOLOv5早期版本!
    的頭像 發表于 04-16 23:00 ?3063次閱讀

    ONNX格式模型部署兼容性框架介紹

    ? ONNXRUNTIME介紹 ONNX格式模型部署兼容性最強的框架 ONNXRUNTIME,基本上不會有算子不支持跟不兼容的情況出現,只要能導出ONNX
    的頭像 發表于 06-19 11:50 ?2752次閱讀
    <b class='flag-5'>ONNX</b><b class='flag-5'>格式</b><b class='flag-5'>模型</b>部署兼容性框架介紹

    通過新的ONNX導出器簡化模型導出流程

    大家好。我叫Manav Dalal,今天我將講解如何通過新的ONNX導出器簡化模型導出流程。如果你還沒有聽說過ONNX,它是一種用于表示機器學習模型的開放
    的頭像 發表于 01-10 09:45 ?1018次閱讀
    通過新的<b class='flag-5'>ONNX</b>導出器簡化<b class='flag-5'>模型</b>導出流程
    水果机遥控器价格| 百家乐官网8点直赢| 肯博娱乐| 泰无聊棋牌游戏中心| 安徽棋牌游戏中心| 大发888娱乐城破解软件| 百家乐筹码防伪| 威尼斯人娱乐场棋牌| 郑州太阳城宾馆| 大发888娱乐场官网官方下载| 莆田棋牌迷| 光山县| 大发888娱乐城怎么玩| 狼2老虎机清零密码| 大发888官方网站登录| 娱乐城注册送奖金| 米林县| 大三巴娱乐城开户| 吉水县| 网上百家乐官网内幕| 网上百家乐官网真坑人| 百家乐洗码方法| 百家乐中庄闲比例| 百家乐笑话| 利都百家乐国际娱乐场| 速博百家乐的玩法技巧和规则| 百家乐博彩策略论坛| 百家乐超级市场| 网上棋牌游戏赚钱| 188金宝博备用网址| 百家乐官网外挂程式| 正规博彩通| 百家乐官网投注软件有用吗| 真人百家乐官网送钱| 百家乐官网技巧心| 真钱百家乐大转轮| 大发888娱乐场下载iypu| 宝马会在线娱乐城| 百家乐官网筹码免运费| 百家乐翻天qvod粤语| 大发888娱乐场下载 zhidu|