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

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

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

3天內不再提示

如何使用OpenCV來實現模型加載與推演

新機器視覺 ? 來源:新機器視覺 ? 作者:流浪AI ? 2020-11-27 09:43 ? 次閱讀

今早在GitHub上收到一則issue,發信人為Suaro。

Suaro希望使用OpenCV來實現模型加載與推演,但是沒有成功,因此開了issue尋求我的幫助。

現場圍觀該Issue:

https://github.com/yinguobing/facial-landmark-detection-hrnet/issues/3

說實話這個功能并沒有在我最初的考慮范圍內。該項目所遵守的開源協議意味著我沒有義務去解決這個問題。但是,Suaro提issue的方式在我看來是非常值得贊許與推廣的。所以,我不僅幫TA解決了issue,還要以此為樣本,與大家分享下一些提issue時的注意事項。

首先,我們先解決OpenCV加載模型的問題。

使用OpenCV加載模型

OpenCV在3.0的版本時引入了一個dnn模塊,實現了一些基本的神經網絡模型layer。在最新的4.5版本中,dnn模塊使用函數 readNet 實現模型加載。不過根據官方解釋,OpenCV不支持TensorFlow推薦的模型保存格式 saved_model 。所以在加載模型之前,模型需要首先被凍結。

凍結網絡

在之前的文章“TensorFlow如何凍結網絡模型”中介紹過了凍結網絡的具體含義以及原理。但是在TensorFlow2中網絡凍結似乎被棄用了,文中提到的凍結腳本也無法使用。幸運的是,網絡凍結的原理仍然有效,而且OpenCV作者提供了一小段示例樣本展示了凍結網絡的方法如下:

importtensorflowastffrom tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2# Load the model from saved_model.loaded=tf.saved_model.load('my_model')infer=loaded.signatures['serving_default']f=tf.function(infer).get_concrete_function(input_1=tf.TensorSpec(shape=[None,256,256,3],dtype=tf.float32))f2=convert_variables_to_constants_v2(f)graph_def=f2.graph.as_graph_def()#Exportfrozengraphwithtf.io.gfile.GFile('frozen_graph.pb','wb')asf:f.write(graph_def.SerializeToString())

凍結TensorFlow2模型的示例代碼,作者:Dmitry Kurtaev

在這段代碼中,模型的推演功能被包裹在 tf.function 中,構建了靜態圖。然后通過 convert_variables_to_constant_v2 將變量轉換為常量,并將最終獲得的 graph_def 寫入單獨的protobuf文件。

加載并推演

網絡凍結完成后,并可以使用OpenCV加載推演了。示例代碼如下:

import numpy as npimportcv2ascv net=cv.dnn.readNet('frozen_graph.pb')inp=np.random.standard_normal([1,3,256,256]).astype(np.float32)net.setInput(inp)out=net.forward()print(out.shape)

OpenCV加載模型的示例代碼,作者:Dmitry Kurtaev

Issue順利解決。 注意TensorFlow版本為2.3.1。OpenCV版本4.5.0。

接下來我們來談談如何提issue。

Issue是什么

Issue在中文環境下多譯為“問題”,而且是那種可能造成反復糾纏、難以解決的問題例如社會問題(social issue)。電視劇“神盾局特工”中的“反派”局長也曾用這個詞來調侃Daisy。

實際上,這個詞在現代制造業中也經常會遇到。在我工作的第一家公司中,每個項目在啟動前都會組織不同維度與形式的技術研討,核心就是可能會遇到的“技術issue”。而且項目一旦進入實質性質的試生產流片階段,大家最害怕出現的也是issue。它通常意味著加班、業績壓力以及可能的推倒重來。

軟件行業中,issue這個詞常被用來指代計算機程序使用過程中出現的異常表現。因此源代碼托管平臺GitHub專門為每一個項目提供了一個專門的討論空間,供代碼的使用者提出自己遇到的issue使用。這個區域在UI界面上緊挨著源代碼,其重要性可見一斑。

圖源:作者GitHub頁面截圖

造成Issue的原因

程序的異常行為背后可能存在多種原因,有可能是代碼中存在的錯誤,也有可能是使用者的不當操作造成。例如一臺微波爐無法加熱食物,可能是磁控管故障,也有可能是沒插電源。面對“無法加熱”這個現象,找到其背后的原因是解決issue的關鍵。這時候,提issue的方式在某種程度上直接決定了問題解決的速度。根據我的觀察,一個優秀的issue提出者能夠做到以下幾點。

嘗試解決問題

如果你家的微波爐不工作了,大部分人的第一反應可能會去檢查電源線是不是沒有插上。這就是在嘗試解決問題。理論上越是成熟的項目代碼,發生故障的概率越低。一旦異常事件發生了,首先要嘗試排除最可能發生的狀況。畢竟因為松動的電源線叫廠家的維修人員上門服務,除了費用不說,主要是耽誤自己的午餐。

嘗試解決問題的手段因每個人的能力不同而不同。在保證安全的前提下盡力即可。例如本次提issue的小伙伴就詳細的描述了TA已經嘗試過的方案,而且以列表的形式一一列出,這無疑顯示了TA的誠意,是加分項。

逐條列出已經嘗試過的方案

反過來,如果issue提出者上來就說“XXX不能用,該怎么辦呀”,這樣多多少少顯得有些伸手黨,不過也沒什么大不了,只要TA能做到——

準確描述現象

這是最常見的現象,不僅僅是issue區域,在生活中也隨處可見。當問題出現時,無法使用語言傳遞準確的有價值信息。同樣是微波爐的例子,以下是兩種不同的表述:

A:我家的微波爐壞了,咋辦呀?

B:我家的微波爐不工作了,大火力加熱兩分鐘,指示燈不亮,微波爐不響,食物不熱。電源插好了,可能是什么原因呀?

準確描述現象的最大好處在于這樣做可以盡可能的排除各種導致故障的可能性。最為廠家售后人員,如果你聽到的是第一種回答,你多半會要求用戶檢查電源線是否插好。而第二種回答顯然已經排除了這種可能性,甚至可以初步估計出故障的嚴重程度已經超過了普通用戶的解決能力。這無疑有利于問題盡快解決。

代碼issue與之類似,當問題出現時,在issue中要盡可能的描述出具體的現象。一個糟糕的描述可能是:

A: 我的代碼奔潰了,是什么原因呀?

而一個優秀的描述則是:

B: 我在執行 python3 train.py --batch_size=32 的時候訓練中斷了,并且顯示錯誤信息 ValueError ...

代碼的錯誤信息就像是微波爐上的指示燈,它可以提供非常有用的信息幫助排除錯誤發生的原因。解決代碼的錯誤需要“抓現行”,也就是要讓程序在你眼前奔潰給你看。這也是為什么幾乎所有的代碼作者要求提issue的時候附上導致錯誤出現的具體指令或者示例代碼。

這一點Suaro就做得很好。TA在issue中附上了完整的錯誤信息:

在issue中附上具體的錯誤信息

一般來說,做到這種程度解決該issue就有希望了。如果是代碼問題,多半會修復。如果該issue無法復現,那有可能不是代碼問題,此時代碼作者多半會要求你——

提供必要信息

實際上這是最基礎的要求,但往往是最先被忽略的部分。繼續拿廣受歡迎的微波爐舉例。作為廠家的售后人員,當你要求客戶提供微波爐的型號代碼后,你有可能會發現用戶買的其實根本就不是微波爐,而是洗碗機!

這一問題在軟件行業更加突出。一是因為同一個軟件可能存在多版本并存的現象。例如OpenCV就有2.x, 3.x和4.x這三個主版本分支。TensorFlow也有1和2兩個主版本。除此以外,現今軟件更迭速度前所未有的迅速,nightly(每日更新)也不罕見。如果把git commit算進去那更是多如牛毛。所以issue可能是由于版本不兼容造成的。

所以,我強烈建議在提issue時一定要附上自己所使用的環境信息。實際上,GitHub已經內置了issue模板,將必要的信息嵌入進去,用戶提issue就像是在做選擇題一樣。

TensorFlow提供的issue模板

Suaro在issue中并沒有附上這部分信息。這種情況下我會默認TA使用的環境信息與我在README文件中的一致。當然,反過來考慮,當代碼作者的環境與README不同時,也需要在issue回復中明示。

我在issue回復時標明了版本信息

交流溝通的能力

寫了這么多關于issue的內容,聰明的你應該已經看出來了。Issue只是表面形式,內里的核心是溝通與交流。有誠意的、有效率的溝通與交流是每個人都應該掌握的能力。工作中它有助于項目推進,生意中可以避免誤解與爭端,生活中可以讓你交到真心朋友。雖然目前的大環境對于真誠交流的人不那么友好,但是,對于每一個真誠的人,總會有另一份真誠不負期望。

責任編輯:xj

原文標題:使用OpenCV加載TensorFlow2模型

文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

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

    關注

    31

    文章

    635

    瀏覽量

    41373
  • GitHub
    +關注

    關注

    3

    文章

    471

    瀏覽量

    16464
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60537

原文標題:使用OpenCV加載TensorFlow2模型

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    直線、圓等)的技術,它通過參數空間的投票機制實現。對于圓形檢測,Hough變換可以識別出滿足特定條件的圓形結構。下面是使用 OpenCV 進行圓形檢測的基本步驟: 首先加載需要檢測圓
    發表于 12-14 09:31

    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.MX93開發板

    的是Haar特征人臉檢測,此外OpenCV中還集成了深度學習方法實現人臉檢測。 【參考資料】 使用OpenCV工具包成功實現人臉檢測與人
    發表于 11-15 17:58

    ADS 2011.10版本無法加載lmk04828 IBIS模型,為什么?

    ADS 2011.10版本無法加載lmk04828 IBIS模型
    發表于 11-13 07:06

    PyTorch 數據加載與處理方法

    PyTorch 是一個流行的開源機器學習庫,它提供了強大的工具構建和訓練深度學習模型。在構建模型之前,一個重要的步驟是加載和處理數據。 1. PyTorch 數據
    的頭像 發表于 11-05 17:37 ?414次閱讀

    TiNa里能不能加載HCNR的模型啊?

    我在用TI的運放配合HCNR201做一個隔離方案,想仿真一下,用的是Multisim,但是Multisim里的運放沒有輸出幅值對電源的限制,從TI網站上下載了一個擴展名是MOD的模型,在Multisim里無法加載,只能用.cir的文件。想問一下怎講解決啊,或者TiNa里
    發表于 09-14 07:39

    linux驅動程序如何加載進內核

    ,需要了解Linux內核的基本概念和API。以下是一些關鍵概念: 1.1 內核模塊:Linux內核模塊是一種動態加載和卸載的代碼,可以在不重新啟動系統的情況下加載和卸載。驅動程序通常以內核模塊的形式實現。 1.2 設備
    的頭像 發表于 08-30 15:02 ?497次閱讀

    【龍芯2K0300蜂鳥板試用】5 搭建opencv開發環境

    buildroot上需要打開opencv,將其編譯進系統中,如下所示 測試可行性 測試是否編譯成功,通過獲取usb攝像頭的視頻完成,本來是想通過qt的multimedia實現,無奈
    發表于 08-27 15:08

    labview實現DBC在界面加載配置

    labview實現DBC在界面加載配置
    發表于 08-19 14:27 ?27次下載

    opencv-python和opencv一樣嗎

    -Python是OpenCV的一個Python語言接口,它允許開發者使用Python語言調用OpenCV庫的功能。 雖然OpenCVOpenCV
    的頭像 發表于 07-16 10:38 ?1221次閱讀

    python訓練出的模型怎么調用

    在Python中,訓練出的模型可以通過多種方式進行調用。 1. 模型保存與加載 在Python中,訓練好的模型需要被保存,以便在其他程序或會話中使用。以下是一些常用的
    的頭像 發表于 07-11 10:15 ?2002次閱讀

    如何使用Tensorflow保存或加載模型

    TensorFlow是一個廣泛使用的開源機器學習庫,它提供了豐富的API構建和訓練各種深度學習模型。在模型訓練完成后,保存模型以便將來使用或部署是一項常見的需求。同樣,
    的頭像 發表于 07-04 13:07 ?1568次閱讀

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

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

    如何實現PIL和OpenCV之間圖像數據的轉換呢?

    PIL圖像數據格式轉換成OpenCV圖像數據格式
    的頭像 發表于 02-25 13:43 ?1232次閱讀

    人工智能在兵棋推演中的應用案例分享

    人工智能的黑箱效應與推演結果可驗證之間存在矛盾。充分理解人工智能做出決策的機理,需要相當高的專業門檻,這帶來了嚴重的黑箱效應。
    發表于 01-10 15:53 ?571次閱讀
    人工智能在兵棋<b class='flag-5'>推演</b>中的應用案例分享

    OpenCV零代碼實現線段距離測量

    OpenMV2024版本即將發行,支持多種主流深度學習模型從訓練到部署,支持更多傳統OpenCV算子流程設計與組合,支持一鍵導出流程,相比2023版本OpenMV,提供更多輔助開發工具。
    的頭像 發表于 01-08 09:15 ?671次閱讀
    <b class='flag-5'>OpenCV</b>零代碼<b class='flag-5'>實現</b>線段距離測量
    主站蜘蛛池模板: 本庄优花aⅴ全部在线影片| 欧美日韩中文国产一区发布| 九九黄色大片| 色久天| 69xx欧美| 久久er国产精品免费观看2| 欧美派对xxxhdparty| 成年AV动漫| 亚洲国产免费观看视频| 古月娜下面好紧好爽| 日本中文字幕巨大的乳专区| 我们中文在线观看免费完整版 | 伊人久久综合影院首页| 国产精品久久久久久AV免费不卡 | 国产精品三级在线观看| 爽爽影院线观看免费| 成年人深夜福利| 亚洲乱码国产一区三区| 黑人巨茎大战白人女40CMO| 晓雪老师我要进你里面好爽| 国产精品.XX视频.XXTV| 视频在线免费观看| 久久精品国产亚洲AV麻豆欧美玲| my pico未删减在线观看| 日本xxxxxxx| 亚洲人成电影网站| 久久久午夜精品福利内容| 姉调无修版ova国语版| 嗯好大好猛皇上好深用力| 99视频这里只有精品| 欧美派对xxxhdparty| 果冻传媒在线播放 免费观看| 一级毛片两人添下面| 久久综合一个色综合网| 97在线看视频福利免费| 强奸日本美女小游戏| 丰满五十老女人性视频| 性夜a爽黄爽| 日韩经典欧美一区二区三区| 久久久久久久网| 国产亚洲精品香蕉视频播放|