色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

使用OpenCV+ONNXRuntime部署YOLOV7目標檢測

OpenCV學堂 ? 來源:OpenCV學堂 ? 作者:王博 ? 2022-07-23 11:31 ? 次閱讀

簡單說明

分別使用OpenCV、ONNXRuntime部署YOLOV7目標檢測,一共包含12個onnx模型,依然是包含C++Python兩個版本的程序。 編寫這套YOLOV7的程序,跟此前編寫的YOLOV6的程序,大部分源碼是相同的,區別僅僅在于圖片預處理的過程不一樣。YOLOV7的圖片預處理是BGR2RGB+不保持高寬比的resize+除以255 由于onnx文件太多,無法直接上傳到倉庫里,需要從百度云盤下載

下載完成后把models目錄放在主程序文件的目錄內,編譯運行 使用opencv部署的程序,有一個待優化的問題。onnxruntime讀取.onnx文件可以獲得輸入張量的形狀信息, 但是opencv的dnn模塊讀取.onnx文件無法獲得輸入張量的形狀信息,目前是根據.onnx文件的名稱來解析字符串獲得輸入張量的高度和寬度的。

YOLOV7的訓練源碼是:

跟YOLOR是同一個作者的。

OpenCV+YOLOv7

推理過程跟之前的YOLO系列部署代碼可以大部分重用!這里就不在贅述了,詳細看源碼如下:輸出部分直接解析最后一個輸出層就好啦!

9c308ff6-0414-11ed-ba43-dac502259ad0.png

詳細實現代碼如下:

#include
#include
#include
#include
#include
#include

usingnamespacecv;
usingnamespacednn;
usingnamespacestd;

structNet_config
{
floatconfThreshold;//Confidencethreshold
floatnmsThreshold;//Non-maximumsuppressionthreshold
stringmodelpath;
};

classYOLOV7
{
public:
YOLOV7(Net_configconfig);
voiddetect(Mat&frame);
private:
intinpWidth;
intinpHeight;
vectorclass_names;
intnum_class;

floatconfThreshold;
floatnmsThreshold;
Netnet;
voiddrawPred(floatconf,intleft,inttop,intright,intbottom,Mat&frame,intclassid);
};

YOLOV7::YOLOV7(Net_configconfig)
{
this->confThreshold=config.confThreshold;
this->nmsThreshold=config.nmsThreshold;

this->net=readNet(config.modelpath);
ifstreamifs("coco.names");
stringline;
while(getline(ifs,line))this->class_names.push_back(line);
this->num_class=class_names.size();

size_tpos=config.modelpath.find("_");
intlen=config.modelpath.length()-6-pos;
stringhxw=config.modelpath.substr(pos+1,len);
pos=hxw.find("x");
stringh=hxw.substr(0,pos);
len=hxw.length()-pos;
stringw=hxw.substr(pos+1,len);
this->inpHeight=stoi(h);
this->inpWidth=stoi(w);
}

voidYOLOV7::drawPred(floatconf,intleft,inttop,intright,intbottom,Mat&frame,intclassid)//Drawthepredictedboundingbox
{
//Drawarectangledisplayingtheboundingbox
rectangle(frame,Point(left,top),Point(right,bottom),Scalar(0,0,255),2);

//Getthelabelfortheclassnameanditsconfidence
stringlabel=format("%.2f",conf);
label=this->class_names[classid]+":"+label;

//Displaythelabelatthetopoftheboundingbox
intbaseLine;
SizelabelSize=getTextSize(label,FONT_HERSHEY_SIMPLEX,0.5,1,&baseLine);
top=max(top,labelSize.height);
//rectangle(frame,Point(left,top-int(1.5*labelSize.height)),Point(left+int(1.5*labelSize.width),top+baseLine),Scalar(0,255,0),FILLED);
putText(frame,label,Point(left,top),FONT_HERSHEY_SIMPLEX,0.75,Scalar(0,255,0),1);
}

voidYOLOV7::detect(Mat&frame)
{
Matblob=blobFromImage(frame,1/255.0,Size(this->inpWidth,this->inpHeight),Scalar(0,0,0),true,false);
this->net.setInput(blob);
vectorouts;
this->net.forward(outs,this->net.getUnconnectedOutLayersNames());

intnum_proposal=outs[0].size[0];
intnout=outs[0].size[1];
if(outs[0].dims>2)
{
num_proposal=outs[0].size[1];
nout=outs[0].size[2];
outs[0]=outs[0].reshape(0,num_proposal);
}
/////generateproposals
vectorconfidences;
vectorboxes;
vectorclassIds;
floatratioh=(float)frame.rows/this->inpHeight,ratiow=(float)frame.cols/this->inpWidth;
intn=0,row_ind=0;///cx,cy,w,h,box_score,class_score
float*pdata=(float*)outs[0].data;
for(n=0;nthis->confThreshold)
{
Matscores=outs[0].row(row_ind).colRange(5,nout);
PointclassIdPoint;
doublemax_class_socre;
//Getthevalueandlocationofthemaximumscore
minMaxLoc(scores,0,&max_class_socre,0,&classIdPoint);
max_class_socre*=box_score;
if(max_class_socre>this->confThreshold)
{
constintclass_idx=classIdPoint.x;
floatcx=pdata[0]*ratiow;///cx
floatcy=pdata[1]*ratioh;///cy
floatw=pdata[2]*ratiow;///w
floath=pdata[3]*ratioh;///h

intleft=int(cx-0.5*w);
inttop=int(cy-0.5*h);

confidences.push_back((float)max_class_socre);
boxes.push_back(Rect(left,top,(int)(w),(int)(h)));
classIds.push_back(class_idx);
}
}
row_ind++;
pdata+=nout;
}

//Performnonmaximumsuppressiontoeliminateredundantoverlappingboxeswith
//lowerconfidences
vectorindices;
dnn::NMSBoxes(boxes,confidences,this->confThreshold,this->nmsThreshold,indices);
for(size_ti=0;idrawPred(confidences[idx],box.x,box.y,
box.x+box.width,box.y+box.height,frame,classIds[idx]);
}
}

intmain()
{
Net_configYOLOV7_nets={0.3,0.5,"models/yolov7_736x1280.onnx"};////choices=["models/yolov7_736x1280.onnx","models/yolov7-tiny_384x640.onnx","models/yolov7_480x640.onnx","models/yolov7_384x640.onnx","models/yolov7-tiny_256x480.onnx","models/yolov7-tiny_256x320.onnx","models/yolov7_256x320.onnx","models/yolov7-tiny_256x640.onnx","models/yolov7_256x640.onnx","models/yolov7-tiny_480x640.onnx","models/yolov7-tiny_736x1280.onnx","models/yolov7_256x480.onnx"]
YOLOV7net(YOLOV7_nets);
stringimgpath="images/dog.jpg";
Matsrcimg=imread(imgpath);
net.detect(srcimg);

staticconststringkWinName="DeeplearningobjectdetectioninOpenCV";
namedWindow(kWinName,WINDOW_NORMAL);
imshow(kWinName,srcimg);
waitKey(0);
destroyAllWindows();
}

運行測試如下:

9c3dd738-0414-11ed-ba43-dac502259ad0.png

9c670d92-0414-11ed-ba43-dac502259ad0.png



審核編輯:劉清

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

    關注

    31

    文章

    635

    瀏覽量

    41457
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    84945

原文標題:源碼 | OpenCV DNN + YOLOv7目標檢測

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

收藏 人收藏

    評論

    相關推薦

    YOLOV7網絡架構解讀

    繼美團發布YOLOV6之后,YOLO系列原作者也發布了YOLOV7
    的頭像 發表于 11-29 10:00 ?1922次閱讀
    <b class='flag-5'>YOLOV7</b>網絡架構解讀

    在英特爾AI開發板上用OpenVINO NNCF優化YOLOv7

    提高了性能和效率。YOLO算法作為one-stage目標檢測算法最典型的代表,其基于深度神經網絡進行對象的識別和定位,運行速度很快,可以用于實時系統。YOLOv7 是 YOLO 模型系列的下一個演進階段,在不增加推理成本的情況下
    的頭像 發表于 01-05 09:29 ?804次閱讀
    在英特爾AI開發板上用OpenVINO NNCF優化<b class='flag-5'>YOLOv7</b>

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

    yolov7tiny.onnx。輸入大小為 224x224,但 npu 推理時間為 127 毫秒。好像太慢了。這個時間合理嗎?以下是我的onnx模型轉換步驟和我的onnxruntime執行代碼: 1. 從 https
    發表于 04-04 06:13

    無法使用MYRIAD在OpenVINO trade中運行YOLOv7自定義模型怎么解決?

    無法確定如何將 YOLOv7 模型的重量(.pt 文件)轉換為OpenVINO?中間表示 (IR) 并推斷有 MYRIAD 的 IR。 分辨率 轉換使用此 GitHub* 存儲庫
    發表于 08-15 08:29

    深度解析YOLOv7的網絡結構

    最近,Scaled-YOLOv4的作者(也是后來的YOLOR的作者)和YOLOv4的作者AB大佬再次聯手推出了YOLOv7,目前來看,這一版的YOLOv7是一個比較正統的YOLO續作,
    的頭像 發表于 09-14 11:16 ?7676次閱讀

    YOLOv6在LabVIEW中的推理部署(含源碼)

    YOLOv6 是美團視覺智能部研發的一款目標檢測框架,致力于工業應用。如何使用python進行該模型的部署,官網已經介紹的很清楚了,但是對于如何在LabVIEW中實現該模型的
    的頭像 發表于 11-06 16:07 ?370次閱讀
    <b class='flag-5'>YOLOv</b>6在LabVIEW中的推理<b class='flag-5'>部署</b>(含源碼)

    YOLOv7訓練自己的數據集包括哪些

    ? YOLOv7訓練自己的數據集整個過程主要包括:環境安裝—制作數據集—模型訓練—模型測試—模型推理 一、準備深度學習環境 本人的筆記本電腦系統是:Windows10 首先下載YOLOv7的代碼
    的頭像 發表于 05-29 15:18 ?1125次閱讀
    <b class='flag-5'>YOLOv7</b>訓練自己的數據集包括哪些

    三種主流模型部署框架YOLOv8推理演示

    部署。這里以YOLOv8為例,演示了YOLOv8對象檢測模型在OpenVINO、ONNXRUNTIME、TensorRT三個主流框架上C++
    的頭像 發表于 08-06 11:39 ?2798次閱讀

    yolov5和YOLOX正負樣本分配策略

    整體上在正負樣本分配中,yolov7的策略算是yolov5和YOLOX的結合。因此本文先從yolov5和YOLOX正負樣本分配策略分析入手,后引入到YOLOv7的解析中。
    發表于 08-14 11:45 ?2339次閱讀
    <b class='flag-5'>yolov</b>5和YOLOX正負樣本分配策略

    使用OpenVINO優化并部署訓練好的YOLOv7模型

    在《英特爾銳炫 顯卡+ oneAPI 和 OpenVINO 實現英特爾 視頻 AI 計算盒訓推一體-上篇》一文中,我們詳細介紹基于英特爾 獨立顯卡搭建 YOLOv7 模型的訓練環境,并完成了 YOLOv7 模型訓練,獲得了最佳精度的模型權重。
    的頭像 發表于 08-25 11:08 ?1575次閱讀
    使用OpenVINO優化并<b class='flag-5'>部署</b>訓練好的<b class='flag-5'>YOLOv7</b>模型

    OpenCV4.8+YOLOv8對象檢測C++推理演示

    自從YOLOv5更新成7.0版本,YOLOv8推出以后,OpenCV4.6以前的版本都無法再加載導出ONNX格式模型了,只有OpenCV4.7以上版本才可以支持最新版本
    的頭像 發表于 09-27 11:07 ?1619次閱讀
    <b class='flag-5'>OpenCV4.8+YOLOv</b>8對象<b class='flag-5'>檢測</b>C++推理演示

    詳細解讀YOLOV7網絡架構設計

    YOLOV7提出了輔助頭的一個訓練方法,主要目的是通過增加訓練成本,提升精度,同時不影響推理的時間,因為輔助頭只會出現在訓練過程中。
    發表于 11-27 10:45 ?802次閱讀
    詳細解讀<b class='flag-5'>YOLOV7</b>網絡架構設計

    基于OpenCV DNN實現YOLOv8的模型部署與推理演示

    基于OpenCV DNN實現YOLOv8推理的好處就是一套代碼就可以部署在Windows10系統、烏班圖系統、Jetson的Jetpack系統
    的頭像 發表于 03-01 15:52 ?1831次閱讀
    基于<b class='flag-5'>OpenCV</b> DNN實現<b class='flag-5'>YOLOv</b>8的模型<b class='flag-5'>部署</b>與推理演示

    在樹莓派上部署YOLOv5進行動物目標檢測的完整流程

    卓越的性能。本文將詳細介紹如何在性能更強的計算機上訓練YOLOv5模型,并將訓練好的模型部署到樹莓派4B上,通過樹莓派的攝像頭進行實時動物目標檢測。 一、在電腦上訓練
    的頭像 發表于 11-11 10:38 ?1398次閱讀
    在樹莓派上<b class='flag-5'>部署</b><b class='flag-5'>YOLOv</b>5進行動物<b class='flag-5'>目標</b><b class='flag-5'>檢測</b>的完整流程

    采用華為云 Flexus 云服務器 X 實例部署 YOLOv3 算法完成目標檢測

    一、前言 1.1 開發需求 這篇文章講解:?采用華為云最新推出的 Flexus 云服務器 X 實例部署 YOLOv3 算法,完成圖像分析、目標檢測。 隨著計算機視覺技術的飛速發展,深度
    的頭像 發表于 01-02 12:00 ?99次閱讀
    采用華為云 Flexus 云服務器 X 實例<b class='flag-5'>部署</b> <b class='flag-5'>YOLOv</b>3 算法完成<b class='flag-5'>目標</b><b class='flag-5'>檢測</b>
    主站蜘蛛池模板: 玉娇龙续集春雪瓶txt免费阅读 | 97在线视频免费人妻 | 蜜芽国产在线精品欧美 | 杨幂视频在线观看1分30秒 | 免费观看桶机十分钟 | 无码AV免费精品一区二区三区 | 被六个男人躁到一夜同性 | 精品免费在线视频 | 9277在线观看资源 | 97人人添人人澡人人澡人人澡 | 女人和男人插曲视频大全 | 中文字幕一区在线观看视频 | 可以看的黄页的网站 | 十分钟免费看完整视频 | 亚洲 欧美 国产 在线 日韩 | 中国大陆一级毛片免费 | 一二三四在线高清中文版免费观看电影 | 亚洲国产精品久久精品成人网站 | 国产中文字幕一区 | 亚洲AV國產国产久青草 | 啪啪漫画无遮挡全彩h同人 啪啪激情婷婷久久婷婷色五月 | 九九热这里只有国产精品 | 海角国精产品一区一区三区糖心 | 亚洲高清视频在线观看 | 亚洲乱码国产一区三区 | 人妻体体内射精一区二区 | 国产亚洲视频中文字幕 | 四房播播开心色播 | 国产精品人妻久久无码不卡 | 欧美日韩888在线观看 | 国产午夜精品不卡观看 | 好大太快了快插穿子宫了 | 别停好爽好深好大好舒服视频 | 国产乱码二卡3卡四卡 | 在线亚洲精品国产一区麻豆 | 天天看学生视频 | 午夜国产精品视频 | 草莓国产视频免费观看 | 性xxx欧美 | 恋夜秀场1234手机视频在线观看 | 袖珍人与大黑人性视频 |