在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

新機(jī)器視覺(jué) ? 來(lái)源:新機(jī)器視覺(jué) ? 作者:流浪AI ? 2020-11-27 09:43 ? 次閱讀

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

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

現(xiàn)場(chǎng)圍觀(guān)該Issue:

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

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

首先,我們先解決OpenCV加載模型的問(wèn)題。

使用OpenCV加載模型

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

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

在之前的文章“TensorFlow如何凍結(jié)網(wǎng)絡(luò)模型”中介紹過(guò)了凍結(jié)網(wǎng)絡(luò)的具體含義以及原理。但是在TensorFlow2中網(wǎng)絡(luò)凍結(jié)似乎被棄用了,文中提到的凍結(jié)腳本也無(wú)法使用。幸運(yùn)的是,網(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)圖。然后通過(guò) convert_variables_to_constant_v2 將變量轉(zhuǎn)換為常量,并將最終獲得的 graph_def 寫(xiě)入單獨(dú)的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。

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

Issue是什么

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

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

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

圖源:作者GitHub頁(yè)面截圖

造成Issue的原因

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

嘗試解決問(wèn)題

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

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

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

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

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

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

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

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

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

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

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

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

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

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

這一點(diǎn)Suaro就做得很好。TA在issue中附上了完整的錯(cuò)誤信息:

在issue中附上具體的錯(cuò)誤信息

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

提供必要信息

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

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

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

TensorFlow提供的issue模板

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

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

交流溝通的能力

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

責(zé)任編輯:xj

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

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

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

    關(guān)注

    31

    文章

    635

    瀏覽量

    41565
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    473

    瀏覽量

    16581
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60633

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EE-323:實(shí)現(xiàn)動(dòng)態(tài)加載的軟件模塊

    電子發(fā)燒友網(wǎng)站提供《EE-323:實(shí)現(xiàn)動(dòng)態(tài)加載的軟件模塊.pdf》資料免費(fèi)下載
    發(fā)表于 01-06 15:34 ?0次下載
    EE-323:<b class='flag-5'>實(shí)現(xiàn)</b>動(dòng)態(tài)<b class='flag-5'>加載</b>的軟件模塊

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

    直線(xiàn)、圓等)的技術(shù),它通過(guò)參數(shù)空間的投票機(jī)制來(lái)實(shí)現(xiàn)。對(duì)于圓形檢測(cè),Hough變換可以識(shí)別出滿(mǎn)足特定條件的圓形結(jié)構(gòu)。下面是使用 OpenCV 進(jìn)行圓形檢測(cè)的基本步驟: 首先加載需要檢測(cè)圓
    發(fā)表于 12-14 09:31

    如何用OpenCV的相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--基于米爾NXP i.MX93開(kāi)發(fā)板

    的是Haar特征人臉檢測(cè),此外OpenCV中還集成了深度學(xué)習(xí)方法來(lái)實(shí)現(xiàn)人臉檢測(cè)。 【參考資料】 使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測(cè)與人
    發(fā)表于 11-15 17:58

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

    ADS 2011.10版本無(wú)法加載lmk04828 IBIS模型
    發(fā)表于 11-13 07:06

    PyTorch 數(shù)據(jù)加載與處理方法

    PyTorch 是一個(gè)流行的開(kāi)源機(jī)器學(xué)習(xí)庫(kù),它提供了強(qiáng)大的工具來(lái)構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。在構(gòu)建模型之前,一個(gè)重要的步驟是加載和處理數(shù)據(jù)。 1. PyTorch 數(shù)據(jù)
    的頭像 發(fā)表于 11-05 17:37 ?498次閱讀

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

    我在用TI的運(yùn)放配合HCNR201做一個(gè)隔離方案,想仿真一下,用的是Multisim,但是Multisim里的運(yùn)放沒(méi)有輸出幅值對(duì)電源的限制,從TI網(wǎng)站上下載了一個(gè)擴(kuò)展名是MOD的模型,在Multisim里無(wú)法加載,只能用.cir的文件。想問(wèn)一下怎講解決啊,或者TiNa里
    發(fā)表于 09-14 07:39

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    ,需要了解Linux內(nèi)核的基本概念和API。以下是一些關(guān)鍵概念: 1.1 內(nèi)核模塊:Linux內(nèi)核模塊是一種動(dòng)態(tài)加載和卸載的代碼,可以在不重新啟動(dòng)系統(tǒng)的情況下加載和卸載。驅(qū)動(dòng)程序通常以?xún)?nèi)核模塊的形式實(shí)現(xiàn)。 1.2 設(shè)備
    的頭像 發(fā)表于 08-30 15:02 ?594次閱讀

    【龍芯2K0300蜂鳥(niǎo)板試用】5 搭建opencv開(kāi)發(fā)環(huán)境

    buildroot上需要打開(kāi)opencv,將其編譯進(jìn)系統(tǒng)中,如下所示 測(cè)試可行性 測(cè)試是否編譯成功,通過(guò)獲取usb攝像頭的視頻來(lái)完成,本來(lái)是想通過(guò)qt的multimedia來(lái)實(shí)現(xiàn),無(wú)奈
    發(fā)表于 08-27 15:08

    labview實(shí)現(xiàn)DBC在界面加載配置

    labview實(shí)現(xiàn)DBC在界面加載配置
    發(fā)表于 08-19 14:27 ?27次下載

    opencv-python和opencv一樣嗎

    -Python是OpenCV的一個(gè)Python語(yǔ)言接口,它允許開(kāi)發(fā)者使用Python語(yǔ)言來(lái)調(diào)用OpenCV庫(kù)的功能。 雖然OpenCVOpenCV
    的頭像 發(fā)表于 07-16 10:38 ?1407次閱讀

    基于OpenCV的人臉識(shí)別系統(tǒng)設(shè)計(jì)

    基于OpenCV的人臉識(shí)別系統(tǒng)是一個(gè)復(fù)雜但功能強(qiáng)大的系統(tǒng),廣泛應(yīng)用于安全監(jiān)控、人機(jī)交互、智能家居等多個(gè)領(lǐng)域。下面將詳細(xì)介紹基于OpenCV的人臉識(shí)別系統(tǒng)的基本原理、實(shí)現(xiàn)步驟,并附上具體的代碼示例。
    的頭像 發(fā)表于 07-11 15:37 ?1.5w次閱讀

    python訓(xùn)練出的模型怎么調(diào)用

    在Python中,訓(xùn)練出的模型可以通過(guò)多種方式進(jìn)行調(diào)用。 1. 模型保存與加載 在Python中,訓(xùn)練好的模型需要被保存,以便在其他程序或會(huì)話(huà)中使用。以下是一些常用的
    的頭像 發(fā)表于 07-11 10:15 ?2285次閱讀

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

    TensorFlow是一個(gè)廣泛使用的開(kāi)源機(jī)器學(xué)習(xí)庫(kù),它提供了豐富的API來(lái)構(gòu)建和訓(xùn)練各種深度學(xué)習(xí)模型。在模型訓(xùn)練完成后,保存模型以便將來(lái)使用或部署是一項(xiàng)常見(jiàn)的需求。同樣,
    的頭像 發(fā)表于 07-04 13:07 ?1719次閱讀

    基于OpenCV DNN實(shí)現(xiàn)YOLOv8的模型部署與推理演示

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

    如何實(shí)現(xiàn)PIL和OpenCV之間圖像數(shù)據(jù)的轉(zhuǎn)換呢?

    PIL圖像數(shù)據(jù)格式轉(zhuǎn)換成OpenCV圖像數(shù)據(jù)格式
    的頭像 發(fā)表于 02-25 13:43 ?1287次閱讀
    主站蜘蛛池模板: 午夜网站免费版在线观看 | 黄 色 免费网 站 成 人 | 一级特黄aa大片免费播放视频 | 激情综合五月天丁香婷婷 | 最近最新中文字幕在线第一页 | 久久久夜色精品国产噜噜 | 亚洲视频在线播放 | 天天干小说 | 天天插天天| 亚洲一区二区三区免费 | 国产色妞妞在线观看 | 免费观看一区二区 | 777色狠狠一区二区三区香蕉 | 亚洲春色www | 一区二区三区四区国产精品 | 亚洲黄网站wwwwww | 九色福利| 成人a级特黄毛片 | 四虎影院美女 | 国产精品久久久久影院免费 | 亚洲色啦啦狠狠网站 | 成人黄色免费网站 | 亚洲精品456人成在线 | 国产美女视频爽爽爽 | 377p亚洲欧洲日本大胆色噜噜 | 六月丁香深爱六月综合激情 | semimi亚洲综合在线观看 | 亚洲综合精品成人啪啪 | 午夜肉伦伦影院 | 2019偷偷狠狠的日日 | 亚欧免费视频一区二区三区 | 亚洲视频1区 | 久久久久久久国产精品影院 | 成人国产精品毛片 | 日韩毛片免费看 | 国产午夜人做人视频羞羞 | 福利在线播放 | 成年大片免费视频播放手机不卡 | 成人爽a毛片在线视频 | 久草男人天堂 | 亚洲欧美成人 |