精品视频日韩无码,伊人久久无码av一区二区三区,久久艹视频国产视频,欧美成A人免费观看久久

  1. <tt id="u23fe"><i id="u23fe"><sub id="u23fe"></sub></i></tt>

      <b id="u23fe"><address id="u23fe"><kbd id="u23fe"></kbd></address></b>

      <source id="u23fe"><track id="u23fe"></track></source>
    1. 位置: IT常識(shí) - 正文

      2022.07.25 C++下使用opencv部署yolov7模型(五)(c++~怎么用)

      編輯:rootadmin
      2022.07.25 C++下使用opencv部署yolov7模型(五) 0.寫在最前

      推薦整理分享2022.07.25 C++下使用opencv部署yolov7模型(五)(c++~怎么用),希望有所幫助,僅作參考,歡迎閱讀內(nèi)容。

      文章相關(guān)熱門搜索詞:c++ kbhit,c++ ...,c++ ...,c++中使用c,c++%怎么用,c++2019怎么用,c++ ...,c++ ...,內(nèi)容如對(duì)您有幫助,希望把文章鏈接給更多的朋友!

      此篇文字針對(duì)yolov7-1.0版本。

      最近粗略的看了一遍yolov7的論文,關(guān)于yolov7和其他yolo系列的對(duì)比,咱就不多說了,大佬們的文章很多很詳細(xì)。關(guān)于opencv部署方面,其實(shí)yolov7和yolov5的初期版本(5.0以前的版本)很像,分為三個(gè)輸出口,yolov5-6.0之后的版本合并了三個(gè)輸出口變成一個(gè)output輸出【需要注意的是,雖然yolov可以在export的時(shí)候加上--grid參數(shù)將detect層加入之后變成和yolov5最新版本的輸出一致(可以不用改yolov5代碼直接跑yolov7的那種一致,當(dāng)然,anchors數(shù)據(jù)還是得改的),但是我試過了,opencv包括onnxruntime推理加grid參數(shù)的onnx模型都有問題,暫時(shí)我也在探索一種適用于所有yolov7版本的修改方案,但是改了幾種都是適用某幾個(gè)模型,其他模型掛掉的情況】。使用Netron打開兩個(gè)模型對(duì)比下很明顯,數(shù)據(jù)格式也和yolo的一致。所以基本上可以和yolov5的代碼通用。只不過具體使用的時(shí)候還是有一點(diǎn)區(qū)別的。另外,yolov7目前可以直接通過其自身帶的export.py導(dǎo)出onnx模型,并不需要像yolov5早期的代碼修改。

      一.yolov5代碼修改適用yolov7

      1.歸一化框的讀取類似yolov5的早期版本

      上面說過,yolov7和yolov5的不同,實(shí)際上應(yīng)該是一致的才對(duì)(實(shí)際上,如果yolov7導(dǎo)出的時(shí)候加上--grid參數(shù),結(jié)果就和yolov5目前的版本一毛一樣,但是加上之后opencv推理onnx的時(shí)候會(huì)報(bào)錯(cuò),目前yolov7暫時(shí)未修復(fù)該bug,所以下面的yolov7代碼導(dǎo)出的時(shí)候不要加--grid參數(shù))。我沒仔細(xì)debug,所以我們需要根據(jù)下面的紅色框中的內(nèi)容對(duì)網(wǎng)絡(luò)的歸一化anchors框進(jìn)行變換變成正常的像素位置。也就是像yolov5之前古老的版本沒優(yōu)化之前一樣(這就是我上面說的和yolov5-5.0以前的版本類似的原因)??梢钥吹谌拇a中的讀取歸一化框的方式獲取原始圖像位置。2021.09.02更新說明 c++下使用opencv部署yolov5模型 (三)_愛晚乏客游的博客-CSDN博客_c++ yolov5

      2.anchors數(shù)據(jù)不同2022.07.25 C++下使用opencv部署yolov7模型(五)(c++~怎么用)

      ?對(duì)比下兩者的anchors數(shù)據(jù),可以看到兩個(gè)的anchors不一致了,修改這部分內(nèi)容即可。

      所以綜上所訴,對(duì)于yolov5-6.0的代碼,修改一些地方即可馬上應(yīng)用到y(tǒng)olov7上面,可以說很方便了。

      具體修改有兩處,一處是anchors,另外一處是推理程序,修改之后的鏈接我放最下面了,其實(shí)就是在第四篇的基礎(chǔ)上面修改下:GitHub - UNeedCryDear/yolov5-opencv-dnn-cpp: 使用opencv模塊部署yolov5-6.0版本?

      //yolo.h中改下anchorsconst float netAnchors[3][6] = { {12, 16, 19, 36, 40, 28},{36, 75, 76, 55, 72, 146},{142, 110, 192, 243, 459, 401} }; //yolov7-P5 anchors//yolo.cpp中推理代碼修改bool Yolo::Detect(Mat& SrcImg, Net& net, vector<Output>& output) {Mat blob;int col = SrcImg.cols;int row = SrcImg.rows;int maxLen = MAX(col, row);Mat netInputImg = SrcImg.clone();if (maxLen > 1.2 * col || maxLen > 1.2 * row) {Mat resizeImg = Mat::zeros(maxLen, maxLen, CV_8UC3);SrcImg.copyTo(resizeImg(Rect(0, 0, col, row)));netInputImg = resizeImg;}vector<Ptr<Layer> > layer;vector<string> layer_names;layer_names= net.getLayerNames();blobFromImage(netInputImg, blob, 1 / 255.0, cv::Size(netWidth, netHeight), cv::Scalar(0, 0, 0), true, false);//如果在其他設(shè)置沒有問題的情況下但是結(jié)果偏差很大,可以嘗試下用下面兩句語句//blobFromImage(netInputImg, blob, 1 / 255.0, cv::Size(netWidth, netHeight), cv::Scalar(104, 117, 123), true, false);//blobFromImage(netInputImg, blob, 1 / 255.0, cv::Size(netWidth, netHeight), cv::Scalar(114, 114,114), true, false);net.setInput(blob);std::vector<cv::Mat> netOutputImg;net.forward(netOutputImg, net.getUnconnectedOutLayersNames());std::vector<int> classIds;//結(jié)果id數(shù)組std::vector<float> confidences;//結(jié)果每個(gè)id對(duì)應(yīng)置信度數(shù)組std::vector<cv::Rect> boxes;//每個(gè)id矩形框float ratio_h = (float)netInputImg.rows / netHeight;float ratio_w = (float)netInputImg.cols / netWidth;int net_width = className.size() + 5; //輸出的網(wǎng)絡(luò)寬度是類別數(shù)+5for (int stride = 0; stride < strideSize; stride++) { //stridefloat* pdata = (float*)netOutputImg[stride].data;int grid_x = (int)(netWidth / netStride[stride]);int grid_y = (int)(netHeight / netStride[stride]);for (int anchor = 0; anchor < 3; anchor++) {//anchorsconst float anchor_w = netAnchors[stride][anchor * 2];const float anchor_h = netAnchors[stride][anchor * 2 + 1];for (int i = 0; i < grid_y; i++) {for (int j = 0; j < grid_x; j++) {float box_score = sigmoid_x(pdata[4]); ;//獲取每一行的box框中含有某個(gè)物體的概率if (box_score >= boxThreshold) {cv::Mat scores(1, className.size(), CV_32FC1, pdata + 5);Point classIdPoint;double max_class_socre;minMaxLoc(scores, 0, &max_class_socre, 0, &classIdPoint);max_class_socre = sigmoid_x(max_class_socre);if (max_class_socre >= classThreshold) {float x = (sigmoid_x(pdata[0]) * 2.f - 0.5f + j) * netStride[stride]; //xfloat y = (sigmoid_x(pdata[1]) * 2.f - 0.5f + i) * netStride[stride]; //yfloat w = powf(sigmoid_x(pdata[2]) * 2.f, 2.f) * anchor_w; //wfloat h = powf(sigmoid_x(pdata[3]) * 2.f, 2.f) * anchor_h; //hint left = (int)(x - 0.5 * w) * ratio_w + 0.5;int top = (int)(y - 0.5 * h) * ratio_h + 0.5;classIds.push_back(classIdPoint.x);confidences.push_back(max_class_socre * box_score);boxes.push_back(Rect(left, top, int(w * ratio_w), int(h * ratio_h)));}}pdata += net_width;//下一行}}}}//執(zhí)行非最大抑制以消除具有較低置信度的冗余重疊框(NMS)vector<int> nms_result;NMSBoxes(boxes, confidences, nmsScoreThreshold, nmsThreshold, nms_result);for (int i = 0; i < nms_result.size(); i++) {int idx = nms_result[i];Output result;result.id = classIds[idx];result.confidence = confidences[idx];result.box = boxes[idx];output.push_back(result);}if (output.size())return true;elsereturn false;}二、yolov7一些模型轉(zhuǎn)換的問題

      評(píng)論區(qū)有些小伙伴反饋yolov7-d6模型在opencv4.5.1下面會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息類似之前讀取早期的yolov5的報(bào)錯(cuò)一致。

      OpenCV(4.5.0) Error: Unspecified error (> Node [Slice]:(341) parse error: OpenCV(4.5.0) D:\opencv\ocv4.5.0\sources\modules\dnn\src\onnx\onnx_importer.cpp:697: error: (-2:Unspecified error) in function 'void __cdecl cv::dnn::dnn4_v20200908::ONNXImporter::handleNode(const class opencv_onnx::NodeProto &)' Slice layer only supports steps = 1 (expected: 'countNonZero(step_blob != 1) == 0'), where 'countNonZero(step_blob != 1)' is 1 must be equal to '0' is 0 in cv::dnn::dnn4_v20200908::ONNXImporter::handleNode, file D:\opencv\ocv4.5.0\sources\modules\dnn\src\onnx\onnx_importer.cpp, line 1797

      經(jīng)過對(duì)比yolov7和yolov7-d6的yaml文件,發(fā)現(xiàn)是由于yolov7-d6中使用了ReOrg模塊引起的報(bào)錯(cuò),也就是步長為2的切片,像我這個(gè)系列中第一篇的問題一樣。

      這個(gè)模塊有點(diǎn)類似早期的yolov5的Facos模塊,需要將ReOrg模塊修改成下面的代碼。 在models/common.py里面搜索下ReOrg,改成一下代碼之后重新導(dǎo)出onnx模型即可正確讀取。

      class ReOrg(nn.Module): def __init__(self): super(ReOrg, self).__init__() def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) #origin code # return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1) self.concat=Contract(gain=2) return self.concat(x)

      最后貼個(gè)yolov7和yolov5的對(duì)比圖,可以看到y(tǒng)olov7提升還是蠻明顯的,結(jié)果的置信度高了一些,后面的自行車也檢測出來了,就是領(lǐng)帶這里誤檢了。?

      ?

      貼合github鏈接,里面包括了yolov7和yolov5,通過宏定義來控制:

      GitHub - UNeedCryDear/yolov7-opencv-dnn-cpp

      本文鏈接地址:http://esstyw.cn/zhishi/293118.html 轉(zhuǎn)載請(qǐng)保留說明!

      上一篇:一文詳解Yolov5——基于Yolov5的火災(zāi)檢測系統(tǒng)(yolov5 入門)

      下一篇:Web 攻防之業(yè)務(wù)安全:接口未授權(quán)訪問/調(diào)用測試(敏感信息泄露)(web攻防之業(yè)務(wù)安全實(shí)戰(zhàn)指南)

    2. 小米手機(jī)怎么敲兩下出健康碼(小米手機(jī)怎么敲后殼截屏)

      小米手機(jī)怎么敲兩下出健康碼(小米手機(jī)怎么敲后殼截屏)

    3. pdf和jpg的區(qū)別是什么(pdf圖片與jpg圖片區(qū)別)

      pdf和jpg的區(qū)別是什么(pdf圖片與jpg圖片區(qū)別)

    4. 微信里找群的步驟是什么(微信運(yùn)動(dòng)群排行榜不顯示步數(shù))

      微信里找群的步驟是什么(微信運(yùn)動(dòng)群排行榜不顯示步數(shù))

    5. mate30如何設(shè)置自動(dòng)對(duì)焦拍照(mate30如何設(shè)置自動(dòng)開關(guān)機(jī))

      mate30如何設(shè)置自動(dòng)對(duì)焦拍照(mate30如何設(shè)置自動(dòng)開關(guān)機(jī))

    6. 三星相冊回收站不見了(三星相冊回收站在哪個(gè)文件夾)

      三星相冊回收站不見了(三星相冊回收站在哪個(gè)文件夾)

    7. mpg與mp4區(qū)別(mpg和mp4哪個(gè)好)

      mpg與mp4區(qū)別(mpg和mp4哪個(gè)好)

    8. 蘋果手機(jī)過熱黑屏怎么辦(蘋果手機(jī)過熱黑屏重啟)

      蘋果手機(jī)過熱黑屏怎么辦(蘋果手機(jī)過熱黑屏重啟)

    9. PowerPoint運(yùn)行的平臺(tái)是(ppt運(yùn)行于什么環(huán)境下)

      PowerPoint運(yùn)行的平臺(tái)是(ppt運(yùn)行于什么環(huán)境下)

    10. 用錄音機(jī)可執(zhí)行文件的類型有(錄音機(jī)可執(zhí)行的文件類型有哪些)

      用錄音機(jī)可執(zhí)行文件的類型有(錄音機(jī)可執(zhí)行的文件類型有哪些)

    11. 蘋果11怎么設(shè)置懸浮窗口(蘋果11怎么設(shè)置動(dòng)態(tài)壁紙)

      蘋果11怎么設(shè)置懸浮窗口(蘋果11怎么設(shè)置動(dòng)態(tài)壁紙)

    12. 5C與10C動(dòng)力鋰電池的區(qū)別(5C與10C動(dòng)力鋰電池壓實(shí))

      5C與10C動(dòng)力鋰電池的區(qū)別(5C與10C動(dòng)力鋰電池壓實(shí))

    13. 支付寶怎么設(shè)置余額不自動(dòng)轉(zhuǎn)入余額寶(支付寶怎么設(shè)置支付順序)

      支付寶怎么設(shè)置余額不自動(dòng)轉(zhuǎn)入余額寶(支付寶怎么設(shè)置支付順序)

    14. wifi范圍怎么擴(kuò)大(wifi怎么擴(kuò)大覆蓋范圍)

      wifi范圍怎么擴(kuò)大(wifi怎么擴(kuò)大覆蓋范圍)

    15. 手機(jī)volte要不要打開

      手機(jī)volte要不要打開

    16. 華為手機(jī)plus10有nfc嗎(華為plus10是5g嗎)

      華為手機(jī)plus10有nfc嗎(華為plus10是5g嗎)

    17. vivox27怎么換微信提示音(vivox27微信怎么換主題)

      vivox27怎么換微信提示音(vivox27微信怎么換主題)

    18. 免打擾模式怎么解除(免打擾模式怎么關(guān)閉)

      免打擾模式怎么解除(免打擾模式怎么關(guān)閉)

    19. 微信商品櫥窗怎么做(微信商品櫥窗怎么開通小程序)

      微信商品櫥窗怎么做(微信商品櫥窗怎么開通小程序)

    20. 抖音通訊錄怎么刪除(抖音通訊錄怎么設(shè)置別人看不到)

      抖音通訊錄怎么刪除(抖音通訊錄怎么設(shè)置別人看不到)

    21. 蘋果手機(jī)如何清理垃圾(蘋果手機(jī)如何清理緩存和垃圾)

      蘋果手機(jī)如何清理垃圾(蘋果手機(jī)如何清理緩存和垃圾)

    22. 蘋果11有耳機(jī)孔嗎(蘋果手機(jī)沒有耳機(jī)孔)

      蘋果11有耳機(jī)孔嗎(蘋果手機(jī)沒有耳機(jī)孔)

    23. 蘋果xs沒有電池百分比嗎(iphone xs沒有顯示電池百分比)

      蘋果xs沒有電池百分比嗎(iphone xs沒有顯示電池百分比)

    24. Win7系統(tǒng)怎么禁用休眠快捷鍵?Win7系統(tǒng)禁用休眠快捷鍵的方法(Win7系統(tǒng)怎么禁用TDPF)

      Win7系統(tǒng)怎么禁用休眠快捷鍵?Win7系統(tǒng)禁用休眠快捷鍵的方法(Win7系統(tǒng)怎么禁用TDPF)

    25. dvldr32.exe進(jìn)程有危險(xiǎn)嗎 dvldr32進(jìn)程安全嗎(dll進(jìn)程)

      dvldr32.exe進(jìn)程有危險(xiǎn)嗎 dvldr32進(jìn)程安全嗎(dll進(jìn)程)

    26. Http請(qǐng)求-hutool工具類的使用

      Http請(qǐng)求-hutool工具類的使用

    27. java泛型方法是什么(java泛型方法的作用)

      java泛型方法是什么(java泛型方法的作用)

    28. 增值稅開票軟件客服電話
    29. 高新技術(shù)企業(yè)加計(jì)抵減
    30. 外資企業(yè)法最新
    31. 差額征稅專用發(fā)票如何開
    32. 民辦非企業(yè)單位可以盈利嗎
    33. 企業(yè)收入為0要報(bào)企業(yè)所得稅嗎
    34. 金蝶怎么反結(jié)賬上月的憑證
    35. 同一控制下企業(yè)合并取得的長期股權(quán)投資
    36. 固定資產(chǎn)到期怎么處理
    37. 領(lǐng)導(dǎo)報(bào)銷發(fā)票掛哪個(gè)科目
    38. 農(nóng)業(yè)企業(yè)土地租賃費(fèi)賬務(wù)處理
    39. 企業(yè)虧損情況下股東借款怎么辦
    40. 網(wǎng)絡(luò)信息化服務(wù)中心是干嘛的
    41. 企業(yè)少報(bào)收入
    42. 問福利費(fèi)的發(fā)票如果是增值稅專用發(fā)票,增值稅可以抵扣嗎?
    43. 固定資產(chǎn)進(jìn)項(xiàng)票能抵扣嗎
    44. 免征的教育費(fèi)附加如何賬務(wù)處理
    45. 不用開票的收入有哪些
    46. 簡易計(jì)稅進(jìn)項(xiàng)稅額轉(zhuǎn)出公式
    47. 做買賣交稅
    48. 銷售不動(dòng)產(chǎn)土地增值稅納稅義務(wù)時(shí)間
    49. 樹木種植公司
    50. 事業(yè)單位基建賬并入大賬規(guī)定
    51. 認(rèn)繳制沒有實(shí)資本會(huì)怎么樣
    52. 默認(rèn)網(wǎng)關(guān)為什么有兩個(gè)
    53. 商品房的維修金該怎么交
    54. 跨期發(fā)票怎么作廢
    55. 固定資產(chǎn)減值判斷標(biāo)準(zhǔn)
    56. PHP:curl_multi_select()的用法_cURL函數(shù)
    57. 進(jìn)項(xiàng)稅額轉(zhuǎn)出會(huì)造成增值稅應(yīng)納稅額
    58. unc方式
    59. 徹底清理緩存
    60. 房產(chǎn)稅的納稅申報(bào)與處理會(huì)計(jì)分錄
    61. php獲取地理位置
    62. 初雪與最后的秋天的區(qū)別
    63. 加拿大猞猁雪兔
    64. 股權(quán)轉(zhuǎn)讓怎么做帳務(wù)處理
    65. php評(píng)論蓋樓
    66. 購買方納稅人信息與第三方信息不符
    67. 慈善組織接受股票捐贈(zèng)流程
    68. 培訓(xùn)機(jī)構(gòu)賬務(wù)處理
    69. 認(rèn)繳出資和注冊資本
    70. php_fileinfo不支持
    71. 酒店周轉(zhuǎn)材料怎么攤銷
    72. 會(huì)計(jì)核算方式有幾種
    73. 理財(cái)產(chǎn)品分紅和收益比例
    74. 適用5%征收率的范圍
    75. 企業(yè)主營業(yè)務(wù)收入凈額怎么算
    76. 子公司注銷時(shí)的賬務(wù)處理
    77. 承兌匯票大回頭是什么意思
    78. mongodb如何查詢數(shù)據(jù)
    79. 收據(jù)可以入賬報(bào)銷嗎
    80. 休產(chǎn)假的工資扣個(gè)人所得稅嗎
    81. 清算期間發(fā)生的利息支出應(yīng)計(jì)入
    82. 應(yīng)付賬款數(shù)字太大咋辦
    83. 抵賬房買賣流程
    84. 給客戶買的禮品要交稅嗎
    85. 車輛購置稅的會(huì)計(jì)科目怎么寫
    86. 遞延納稅籌劃策略研究
    87. 報(bào)銷餐費(fèi)屬于什么費(fèi)用
    88. 給別人的借款怎么記賬
    89. 企業(yè)初建
    90. sql server數(shù)據(jù)
    91. solaris syslog
    92. windowsxp錯(cuò)誤提示
    93. freebsd怎么安裝
    94. 太極越獄助手
    95. linux ora11g安裝教程
    96. Win10打不開IE瀏覽器
    97. linux安裝有幾種方法
    98. 電腦win10顯卡驅(qū)動(dòng)
    99. jquery validation plugin
    100. 安卓關(guān)鍵詞覆蓋
    101. Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼
    102. javascript運(yùn)用
    103. python多線程怎么用
    104. 湖南電子稅務(wù)局密碼錯(cuò)誤5次
    105. 期貨手續(xù)費(fèi)怎么算
    106. 實(shí)名辦稅有什么作用
    107. 混凝土稅率是多少2021
    108. 免責(zé)聲明:網(wǎng)站部分圖片文字素材來源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)及時(shí)告知,我們會(huì)第一時(shí)間刪除,謝謝! 郵箱:opceo@qq.com

      鄂ICP備2023003026號(hào)

      網(wǎng)站地圖: 企業(yè)信息 工商信息 財(cái)稅知識(shí) 網(wǎng)絡(luò)常識(shí) 編程技術(shù)

      友情鏈接: 武漢網(wǎng)站建設(shè)