chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用OpenCV來實現(xiàn)模型加載與推演

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 作者:流浪AI ? 2020-11-27 09:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

現(xiàn)場圍觀該Issue:

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

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

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

使用OpenCV加載模型

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

凍結(jié)網(wǎng)絡(luò)

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

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())

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

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

加載并推演

網(wǎng)絡(luò)凍結(jié)完成后,并可以使用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。

接下來我們來談?wù)勅绾翁醝ssue。

Issue是什么

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

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

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

圖源:作者GitHub頁面截圖

造成Issue的原因

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

嘗試解決問題

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

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

逐條列出已經(jīng)嘗試過的方案

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

準(zhǔn)確描述現(xiàn)象

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

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

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

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

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

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

而一個優(yōu)秀的描述則是:

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

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

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

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

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

提供必要信息

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

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

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

TensorFlow提供的issue模板

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

我在issue回復(fù)時標(biāo)明了版本信息

交流溝通的能力

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

責(zé)任編輯:xj

原文標(biāo)題:使用OpenCV加載TensorFlow2模型

文章出處:【微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    44610
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    486

    瀏覽量

    18499
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    334

    瀏覽量

    61957

原文標(biāo)題:使用OpenCV加載TensorFlow2模型

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    NVIDIA Cosmos世界基礎(chǔ)模型如何塑造機(jī)器人未來

    在這一演進(jìn)過程中,世界模型逐漸成為連接高層智能與底層執(zhí)行的關(guān)鍵基礎(chǔ)設(shè)施。通過對環(huán)境狀態(tài)及其時間演化進(jìn)行建模,世界模型使機(jī)器人系統(tǒng)能夠在受控環(huán)境中進(jìn)行仿真、訓(xùn)練與決策推演,從而為機(jī)器人在真實物理世界中
    的頭像 發(fā)表于 01-22 16:38 ?150次閱讀
    NVIDIA Cosmos世界基礎(chǔ)<b class='flag-5'>模型</b>如何塑造機(jī)器人未來

    圖撲軟件 3D 場景預(yù)加載應(yīng)用實現(xiàn)

    預(yù)加載是在進(jìn)入正式場景之前提前加載所需模型、材質(zhì)、圖片等資源的技術(shù)手段,其核心價值在于消除資源加載等待,確保場景首次渲染即可完整呈現(xiàn),從而提供無縫、流暢的用戶體驗。在復(fù)雜的 Web 3
    的頭像 發(fā)表于 12-01 16:04 ?193次閱讀
    圖撲軟件 3D 場景預(yù)<b class='flag-5'>加載</b>應(yīng)用<b class='flag-5'>實現(xiàn)</b>

    零成本鋼鐵俠手套!樹莓派+OpenCV 秒變手勢遙控器!

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追
    的頭像 發(fā)表于 08-16 16:16 ?1145次閱讀
    零成本鋼鐵俠手套!樹莓派+<b class='flag-5'>OpenCV</b> 秒變手勢遙控器!

    如何使用樹莓派與OpenCV實現(xiàn)面部和運動追蹤的云臺系統(tǒng)?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追
    的頭像 發(fā)表于 08-14 17:45 ?1149次閱讀
    如何使用樹莓派與<b class='flag-5'>OpenCV</b><b class='flag-5'>實現(xiàn)</b>面部和運動追蹤的云臺系統(tǒng)?

    如何使用樹莓派+OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤?

    大家好,這是一個樹莓派和OpenCV的連載專題。使用樹莓派與OpenCV實現(xiàn)姿態(tài)估計和面部特征點追蹤使用樹莓派與OpenCV實現(xiàn)面部和運動追
    的頭像 發(fā)表于 08-13 17:44 ?1183次閱讀
    如何使用樹莓派+<b class='flag-5'>OpenCV</b><b class='flag-5'>實現(xiàn)</b>姿態(tài)估計和面部特征點追蹤?

    如何板端編譯OpenCV并搭建應(yīng)用--基于瑞芯微米爾RK3576開發(fā)板

    運行opencv代碼,完成一些視覺內(nèi)容,充分發(fā)揮該板的性能。要先編譯opencv需要一些預(yù)先的準(zhǔn)備工作首先更新軟件包并安裝必要的依賴:sudo apt update sudo apt upgrade
    發(fā)表于 08-08 17:14

    是否可以僅使用 Bootloader Host 實現(xiàn)可引導(dǎo)加載項目的相同編程結(jié)果?

    。我知道可以使用PSoC?編程器通過 SWD 直接對目標(biāo)芯片進(jìn)行編程。 但是,我想知道是否可以僅使用 Bootloader Host 實現(xiàn)可引導(dǎo)加載項目的相同編程結(jié)果,而不依賴于PSoC?編程器或
    發(fā)表于 07-18 07:39

    請問K210可以同時加載幾個自定義模型?

    K210可以同時加載幾個自定義模型?
    發(fā)表于 07-18 06:20

    【Milk-V Duo S 開發(fā)板免費體驗】SDK編譯、人臉檢測、OpenCV測試

    【Milk-V Duo S 開發(fā)板免費體驗】SDK編譯、人臉檢測、OpenCV測試 本文介紹了 Milk-V Duo S 開發(fā)板實現(xiàn) Buildroot SDK 鏡像編譯、基于 TDL 模型的人
    發(fā)表于 07-11 13:48

    快速部署!米爾全志T527開發(fā)板的OpenCV行人檢測方案指南

    :使用測試數(shù)據(jù)集評估訓(xùn)練后的模型。計算模型的準(zhǔn)確率、召回率和F1分?jǐn)?shù)等指標(biāo)。 三、代碼實現(xiàn)import cv2 import time def detect(image,scale
    發(fā)表于 04-11 18:14

    為LSDK構(gòu)建opencv時遇到的問題求解

    我正在嘗試使用 flex-builder 運行 bld -c opencv -r ubuntu:桌面 我想要最新版本的 OpenCV。在我的 sdk.yml 文件中,我將 opencv
    發(fā)表于 03-26 08:26

    使用OpenVINO?模型OpenCV進(jìn)行人臉檢測,檢測到多張人臉時,伺服電機(jī)和步入器電機(jī)都發(fā)生移動是為什么?

    使用OpenVINO?模型OpenCV* 進(jìn)行人臉檢測。 使用 cv2.矩形 函數(shù),能夠獲取檢測到的面部的坐標(biāo)。 檢測到多張人臉時,多個坐標(biāo)被捕獲到,伺服電機(jī)和步入器電機(jī)都發(fā)生移動。
    發(fā)表于 03-07 06:35

    請問為什么模型加載時間比CPU長?

    為什么模型加載時間比 CPU 長?
    發(fā)表于 03-06 06:03

    OpenVINO?工具套件使用CRNN_CS模型運行OpenCV* text_detection.cpp報錯怎么解決?

    將 crnn_cs.onnx 文本識別模型轉(zhuǎn)換為中間表示 (IR): python mo.py --input_model crnn_cs.onnx 使用生成的 IR 文件運行 OpenCV
    發(fā)表于 03-05 09:19

    使用OpenCV保存從攝像頭捕獲的視頻時更改顏色輸出視頻收到警告怎么解決?

    [ 警告:0] global .。/opencv/modules/videoio/src/cap.cpp (609) 開放式 VIDEOIO (FFMPEG):不提供后端(插件丟失,或因依賴關(guān)系而無法加載或不兼容)
    發(fā)表于 03-05 07:20