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

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

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

關(guān)于OpenCV深度學(xué)習(xí)模塊的內(nèi)容

LiveVideoStack ? 來源:lp ? 2019-04-13 09:59 ? 次閱讀

OpenCV是計(jì)算機(jī)視覺領(lǐng)域使用最為廣泛的開源庫,以功能全面使用方便著稱。自3.3版本開始,OpenCV加入了對深度神經(jīng)網(wǎng)絡(luò)(DNN)推理運(yùn)算的支持。在LiveVideoStack線上交流分享中英特爾亞太研發(fā)有限公司開源技術(shù)中心軟件工程師吳至文詳細(xì)介紹了OpenCVDNN模塊的現(xiàn)狀,架構(gòu),以及加速技術(shù)。

注:文中的ppt是作者在EmbeddedLinuxConference2018上的演講“DeepLearninginOpenCV”的ppt

大家好,我是吳至文,目前就職于英特爾開源技術(shù)中心,主要從事圖形、圖像深度學(xué)習(xí)算法方面的開發(fā)和優(yōu)化工作。很高興有機(jī)會和大家分享一下關(guān)于OpenCV深度學(xué)習(xí)模塊的內(nèi)容,同時,也會介紹一下我們團(tuán)隊(duì)在OpenCV深度學(xué)習(xí)方面所做的一些工作。

本次分享的主要內(nèi)容包含以下幾個方面:

首先,我會介紹一下OpenCV和深度學(xué)習(xí)的背景知識;然后,介紹今天的主題——OpenCV深度學(xué)習(xí)模塊;接下來,會簡單介紹我們團(tuán)隊(duì)在OpenCL加速方面所做的工作,以及開發(fā)的一個Vulkan后端;最后,會以一個例子的形式來展示如何使用DNN模塊開發(fā)深度神經(jīng)網(wǎng)絡(luò)的應(yīng)用。

一,OpenCV背景介紹

首先,什么是OpenCV呢?我相信做過圖形圖像、計(jì)算機(jī)視覺應(yīng)用開發(fā)的同學(xué)可能對OpenCV都不會陌生。OpenCV是一個包含了2500多個經(jīng)過優(yōu)化的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)算法的開源計(jì)算機(jī)視覺庫。換句話說,目前主流的、比較知名的計(jì)算機(jī)視覺算法和論文在OpenVC里都能找到相應(yīng)的實(shí)現(xiàn)。OpenCV不僅僅是一個很好用的開發(fā)工具集,它同時對有志于學(xué)習(xí)計(jì)算機(jī)視覺開發(fā)的學(xué)生也是一個寶庫。OpenVC支持C、C++Python語言,但是從OpenCV4.0開始,C語言的API就逐漸被清除出去了,現(xiàn)在比較常用的API是C++和Python語言的。此外,OpenCV也是一個很活躍的開源項(xiàng)目,到目前為止它在Github上有兩萬多個Forks。

2018年11月份,OpenCV發(fā)布了4.0的版本。在這個版本有了比較大的變化,大概有以下這幾點(diǎn):首先,它使用了C++11標(biāo)準(zhǔn)編譯器,并且移除了大多數(shù)的C語言的API接口;另外,它不再對之前的版本有二進(jìn)制的兼容,同時它使用了大量AVX2的指令集優(yōu)化,從而大大提高了一些算法在CPU上的運(yùn)行效率;再者就是,它具有更小的內(nèi)存占用以及支持OpenVINO作為DNN模塊的后端。OpenVINO對于有的同學(xué)可能比較陌生,它是英特爾發(fā)布的一個針對深度學(xué)習(xí)視覺應(yīng)用的SDK。OpenVINO支持各種設(shè)備上的加速,包括CPU、GPU和VPU上面的加速,我們在后面還會提及這個內(nèi)容。

二,深度神經(jīng)網(wǎng)絡(luò)的關(guān)鍵概念

接下來,我將介紹一些深度神經(jīng)網(wǎng)絡(luò)的關(guān)鍵概念。

深度神經(jīng)網(wǎng)絡(luò)最基本的組成單元是神經(jīng)元,我們在文獻(xiàn)中一般稱作Node、Neuron或Perceptron。一個神經(jīng)元會對多個輸入進(jìn)行加權(quán)和的運(yùn)算,然后經(jīng)過一個激活函數(shù),最后輸出一個響應(yīng)結(jié)果。多個神經(jīng)元就組成了網(wǎng)絡(luò)的層,我們將神經(jīng)網(wǎng)絡(luò)的第一層稱為輸入層,一般用來加載輸入數(shù)據(jù),如一幅圖像。我們將神經(jīng)網(wǎng)絡(luò)的最后一層稱為輸出層,根據(jù)具體網(wǎng)絡(luò)結(jié)構(gòu)的不同,輸出層的含義也會不同。以分類網(wǎng)絡(luò)為例,輸出層的每個節(jié)點(diǎn)表示屬于某個類別的概率大小。我們將在輸入層和輸出層之間的層稱為隱層,所謂的深度神經(jīng)網(wǎng)絡(luò)就是隱層數(shù)大于1的神經(jīng)網(wǎng)絡(luò)。

接下來是網(wǎng)絡(luò)訓(xùn)練。我們可以把神經(jīng)網(wǎng)絡(luò)看成一個復(fù)雜的函數(shù),在這個函數(shù)里有許多參數(shù)是未知的,因此我們需要通過訓(xùn)練來確定這些參數(shù)。為了方便理解,我把訓(xùn)練大體分為四個步驟:第一步,選定訓(xùn)練參數(shù),如學(xué)習(xí)比例、批次大小、損失函數(shù)類型,初始化網(wǎng)絡(luò)權(quán)重;第二步、設(shè)置輸入數(shù)據(jù),然后進(jìn)行前向的網(wǎng)絡(luò)運(yùn)算;第三步、比較運(yùn)算結(jié)果和真實(shí)結(jié)果的差異;第四步、進(jìn)行反向傳播運(yùn)算,然后修改網(wǎng)絡(luò)參數(shù),再回到第二步直到差異足夠小,或者人為終止訓(xùn)練過程。雖然整個訓(xùn)練過程看起來比較復(fù)雜,但是深度學(xué)習(xí)框架會幫我們把這些事完成的,深度學(xué)習(xí)框架有Tensorflow、Caffe和Torch等。因此,我們只需要設(shè)計(jì)好網(wǎng)絡(luò)結(jié)構(gòu)、選定訓(xùn)練參數(shù),剩下的事就可以交給框架去做。

在通過足夠的訓(xùn)練之后,我們就可以確定所有的網(wǎng)絡(luò)參數(shù),那么這個復(fù)雜的函數(shù)就可以確定了。然后,我們輸入數(shù)據(jù)來通過深度學(xué)習(xí)庫計(jì)算函數(shù)結(jié)果的過程就叫推理。與訓(xùn)練相比,推理過程簡單的多。上圖羅列了幾個使用了深度神經(jīng)網(wǎng)絡(luò)的計(jì)算機(jī)視覺應(yīng)用場景,如人臉識別、對象語義分割以及目標(biāo)檢測的應(yīng)用。

三,OpenCV深度學(xué)習(xí)模塊

從OpenCV3.3版本開始,OpenCV加入了深度學(xué)習(xí)模塊,但這個模塊它只提供推理功能,而不涉及訓(xùn)練,與此同時它支持多種深度學(xué)習(xí)框架,比如Tensorflow,Caffe,Torch和Darknet。

聽到這里,可能有的同學(xué)會問:“既然我們已經(jīng)有了Tensorflow、Caffe、Torch這些深度學(xué)習(xí)框架,為什么還要在OpenCV中再實(shí)現(xiàn)一個呢?這是不是在重復(fù)造輪子呢?”其實(shí)不是的,有下面幾個理由:第一、輕量,由于DNN模塊只實(shí)現(xiàn)了推理功能,它的代碼量、編譯運(yùn)行開銷與其他深度學(xué)習(xí)框架比起來會少很多;第二、方便使用,DNN模塊提供了內(nèi)建的CPU和GPU加速且無須依賴第三方庫,如果在之前項(xiàng)目使用了OpenCV,那么通過DNN模塊可以很方便的無縫的為原項(xiàng)目添加神經(jīng)網(wǎng)絡(luò)推理能力;第三、通用性,DNN模塊支持多種網(wǎng)絡(luò)模型格式,因此用戶無須額外進(jìn)行網(wǎng)絡(luò)模型的轉(zhuǎn)換就可以直接使用,同時它還支持多種運(yùn)算設(shè)備和操作系統(tǒng),比如CPU、GPU、VPU等,操作系統(tǒng)包括Linux、Windows、安卓和MacOS。

目前,OpenCV的DNN模塊支持40多種層的類型,基本涵蓋了常見的網(wǎng)絡(luò)運(yùn)算需求,而且新的類型也在不斷的加入當(dāng)中。

如上圖所示,這里列出的網(wǎng)絡(luò)架構(gòu)都是經(jīng)過了很好的測試。它們在OpenCV中能很好支持的,基本涵蓋了常用的對象檢測和語義分割的類別,我們可以直接拿來使用。

接下來給大家介紹DNN模塊的架構(gòu)。如上圖所示,從而往下,第一層是語言綁定,它支持Python和Java,其中Python用的比較多,因?yàn)殚_發(fā)起來會比較方便。此外,在第一層中還包括準(zhǔn)確度測試、性能測試以及一些示例程序。第二層是C++的API層,這屬于是原生的API,它的功能包括加載網(wǎng)絡(luò)模型、推理運(yùn)算以及獲取網(wǎng)絡(luò)輸出。第三層是實(shí)現(xiàn)層,它包括模型轉(zhuǎn)換器、DNN引擎、層實(shí)現(xiàn)等。模型轉(zhuǎn)換器負(fù)責(zé)將各種網(wǎng)絡(luò)模型格式轉(zhuǎn)換成DNN模塊內(nèi)部的表示,DNN引擎負(fù)責(zé)內(nèi)部網(wǎng)絡(luò)的組織和優(yōu)化,層實(shí)現(xiàn)是各種層運(yùn)算的具體實(shí)現(xiàn)過程。第四層是加速層,它包括CPU加速、GPU加速、Halide加速和新加入的Intel推理引擎加速。前三個均是DNN模塊的內(nèi)建實(shí)現(xiàn),無須外部依賴就直接可以使用。CPU加速用到了SSE和AVX指令以及大量的多線程元語,而OpenCL加速是針對GPU進(jìn)行并行運(yùn)算的加速,這也是我們團(tuán)隊(duì)工作的主要內(nèi)容。Halide是一個實(shí)驗(yàn)性的實(shí)現(xiàn),并且性能一般,因此不建議使用。Intel推理引擎加速需要安裝OpenVINO庫,它可以實(shí)現(xiàn)在CPU、GPU和VPU上的加速,在GPU上內(nèi)部會調(diào)用clDNN庫來做GPU上的加速,在CPU上內(nèi)部會調(diào)用MKL-DNN來做CPU加速,而Movidius主要是在VPU上使用的專用庫來進(jìn)行加速。

DNN模塊采用Backend和Target來管理各種加速方法。Backend分為三種類型:第一種是OpenCVBackend,這是OpenCV默認(rèn)的Backend;第二種是HalideBackend,第三種是推理引擎Backend。Target指的是最終的運(yùn)算設(shè)備,它包括四種類型,分別是CPU設(shè)備、OpenCL設(shè)備、OpenCL_FP16設(shè)備以及MYRIAD設(shè)備。強(qiáng)調(diào)一下,OpenCL和OpenCL_FP16實(shí)際上都是GPU設(shè)備,OpenCL_FP16設(shè)備指的是權(quán)重值的數(shù)據(jù)格式為16位浮點(diǎn)數(shù),OpenCL設(shè)備指的是權(quán)重值的數(shù)據(jù)格式為32位浮點(diǎn)數(shù)。MYRIAD設(shè)備是Movidius公司提供的VPU設(shè)備。我們通過Backend和Target的不同組合可以來決定具體的加速方法。舉個例子,如果你有Movidius的運(yùn)算棒,則可以通過SetPreferobleBackendAPI將Backend設(shè)置成Inference-NEGINE,通過SetPreferobleTargetAPI將Target設(shè)置成MYRIAD,然后你的網(wǎng)絡(luò)運(yùn)算將會在MYRIAD設(shè)備上進(jìn)行,而不再用任何的CPU資源。

除了上述的加速后端外,DNN模塊還做了一些網(wǎng)絡(luò)層面的優(yōu)化。由于在內(nèi)部使用了統(tǒng)一的網(wǎng)絡(luò)表示,網(wǎng)絡(luò)層級的優(yōu)化對DNN支持的所有格式的網(wǎng)絡(luò)模型都有好處。下面介紹兩種網(wǎng)絡(luò)層級的優(yōu)化方法:

一)層融合

第一種優(yōu)化方法是層融合的優(yōu)化。它是通過對網(wǎng)絡(luò)結(jié)構(gòu)的分析,把多個層合并到一起,從而降低網(wǎng)絡(luò)復(fù)雜度和減少運(yùn)算量。下面舉幾個具體的例子:

如上圖所示,在本例中黃色方框代表的是最終被融合掉的網(wǎng)絡(luò)層,在這種情況下,卷積層后面的BatchNorm層、Scale層和RelU層都被合并到了卷積層當(dāng)中。這樣一來,四個層運(yùn)算最終變成了一個層運(yùn)算,這種結(jié)構(gòu)多出現(xiàn)在ResNet50的網(wǎng)絡(luò)架構(gòu)當(dāng)中。

如上圖所示,在本例中,網(wǎng)絡(luò)結(jié)構(gòu)將卷積層1和EltwiseLayer和RelULayer合并成一個卷積層,將卷積層2作為第一個卷積層新增的一個輸入。這樣一來,原先的四個網(wǎng)絡(luò)層變成了兩個網(wǎng)絡(luò)層運(yùn)算,這種結(jié)構(gòu)也多出現(xiàn)于ResNet50的網(wǎng)絡(luò)架構(gòu)當(dāng)中。

如上圖所示,在本例中,這種網(wǎng)絡(luò)結(jié)構(gòu)是把三個層的輸出通過連接層連接之后輸入到后續(xù)層,這種情況可以把中間的連接層直接去掉,將三個網(wǎng)絡(luò)層輸出直接接到第四層的輸入上面,這種網(wǎng)絡(luò)結(jié)構(gòu)多出現(xiàn)SSD類型的網(wǎng)絡(luò)架構(gòu)當(dāng)中。

二)內(nèi)存復(fù)用

第二種優(yōu)化方式是內(nèi)存復(fù)用的優(yōu)化。深度神經(jīng)網(wǎng)絡(luò)運(yùn)算過程當(dāng)中會占用非常大量的內(nèi)存資源,一部分是用來存儲權(quán)重值,另一部分是用來存儲中間層的運(yùn)算結(jié)果。我們考慮到網(wǎng)絡(luò)運(yùn)算是一層一層按順序進(jìn)行的,因此后面的層可以復(fù)用前面的層分配的內(nèi)存。

上圖是一個沒有經(jīng)過優(yōu)化的內(nèi)存重用的運(yùn)行時的存儲結(jié)構(gòu),紅色塊代表的是分配出來的內(nèi)存,綠色塊代表的是一個引用內(nèi)存,藍(lán)色箭頭代表的是引用方向。數(shù)據(jù)流是自下而上流動的,層的計(jì)算順序也是自下而上進(jìn)行運(yùn)算。每一層都會分配自己的輸出內(nèi)存,這個輸出被后續(xù)層引用為輸入。對內(nèi)存復(fù)用也有兩種方法:

第一種內(nèi)存復(fù)用的方法是輸入內(nèi)存復(fù)用。如上圖所示,如果我們的層運(yùn)算是一個in-place模式,那么我們無須為輸出分配內(nèi)存,直接把輸出結(jié)果寫到輸入的內(nèi)存當(dāng)中即可。in-place模式指的是運(yùn)算結(jié)果可以直接寫回到輸入而不影響其他位置的運(yùn)算,如每個像素點(diǎn)做一次Scale的運(yùn)算。類似于in-place模式的情況,就可以使用輸入內(nèi)存復(fù)用的方式。

第二種內(nèi)存復(fù)用的方法是后續(xù)層復(fù)用前面層的輸出。如上圖所示,在這個例子中,Layer3在運(yùn)算時,Layer1和Layer2已經(jīng)完成了運(yùn)算。此時,Layer1的輸出內(nèi)存已經(jīng)空閑下來,因此,Layer3不需要再分配自己的內(nèi)存,直接引用Layer1的輸出內(nèi)存即可。由于深度神經(jīng)網(wǎng)絡(luò)的層數(shù)可以非常多,這種復(fù)用情景會大量的出現(xiàn),使用這種復(fù)用方式之后,網(wǎng)絡(luò)運(yùn)算的內(nèi)存占用量會下降30%~70%。

接下來,我會為大家介紹一下我們團(tuán)隊(duì)在深度學(xué)習(xí)模塊中做的一些工作。

四,OpenCL加速

OpenCL的加速是一個內(nèi)建的加速實(shí)現(xiàn),它是可以直接使用而不依賴與外部加速庫的,只需安裝有OpenCL的運(yùn)行時環(huán)境即可。此外,它還支持32位浮點(diǎn)數(shù)據(jù)格式和16位浮點(diǎn)數(shù)據(jù)格式。如果我們想要使用OpenCL加速,只需要把Backend設(shè)置成OpenCV,把Target設(shè)置成OpenCL或者OpenCL_FP16即可。

在OpenCL的加速方案中,我們提供了一組經(jīng)過高度優(yōu)化的卷積運(yùn)算和auto-tuning方案,來為特定的GPU和卷積運(yùn)算找到最佳的卷積核。簡單地說,auto-tuning方案針對每個卷積任務(wù),會選擇不同的子塊大小進(jìn)行運(yùn)算,然后選出用時最短的子塊大小來作為卷積和的配置。DNN模塊中內(nèi)置了一些已經(jīng)設(shè)好的卷積和配置,用戶也可以為自己的網(wǎng)絡(luò)和GPU重新運(yùn)行一次auto-tuning,從而找到最佳的卷積核。如果想要設(shè)置auto-tuning,則需要設(shè)置環(huán)境變量OpenCV_OCL4DNN_CONFIG_PATH,讓它指向一個可寫的目錄。這樣一來,DNN模塊就會把最佳的卷積核配置存儲在這個目錄下。注意,如果打開了auto-tuing,那么第一次運(yùn)行某個網(wǎng)絡(luò)模型的時間就會比較長。

對于OpenCL的驅(qū)動,我們建議使用Neo。Neo是開源IntelGPU的OpenCL驅(qū)動,它支持Gen8以及Gen8之后的英特爾GPU。我們建議盡量使用最新的版本,根據(jù)我們的調(diào)試經(jīng)驗(yàn),越新的版本性能越好。

最后,上圖是一個CPU和GPU加速的對比圖,其中一列是OpenCL的加速,其中另一列是C++的加速。CPU是i7-6770、8核、2.6G,GPU是IrisProGraphics580的,這種CPU和GPU都算是比較強(qiáng)勁的配置。我們可以看到,OpenCL加速之后的運(yùn)算時間比CPU會短很多,但也不是所有的情況都是這樣的。對于不同的CPU,這個數(shù)據(jù)有所不同,大家可以通過上面的網(wǎng)站鏈接查看到在其他CPU配置下的CPU和GPU運(yùn)算時間的對比。

五,Vulkan后端

Vulkan后端是由我開發(fā)的一個基于VulkanComputerShade的DNN加速方案,目前已經(jīng)合并到OpenCV的主分支,OpenCV4.0里就包含有Vulkanbackend,感興趣的同學(xué)可以通過上圖的鏈接了解一下技術(shù)細(xì)節(jié)。

如果要使用Vulkanbackend,將backend類型設(shè)置成VKCOM,將target設(shè)置成Vulkan即可。Vulkan后端可以讓DNN模塊在更多的平臺上使用到GPU的加速。例如,安卓系統(tǒng)中是不支持OpenCL的,但是它支持Vulkan,這種情況就可以通過Vulkanbackend來加速。

六,應(yīng)用實(shí)例

最后一部分,這是一個通過DNN開發(fā)的用于對象檢測的端到端的應(yīng)用,下面我會分部分來詳細(xì)講解這些代碼段。

在這里使用的是Python的接口,采用Python語言來開發(fā),模型使用的是MobileNetSSD模型。首先,引入OpenCV的Python包,代碼第2行、第4行、第5行則是指定MobileNetSSD的模型以及它的Graph描述文件。然后,設(shè)置輸入Image的大小為300*300,置信度閾值設(shè)置為0.5,第9行的均值是用來做圖像域處理的一個數(shù)值。第10行是可分類的類別,說明我們的MobileNETSSD是一個可以對20個類別進(jìn)行分類的模型,我們也可以有97或者1000個類別的模型,但是那樣的模型會比較大。第16行則是打開一個Camera設(shè)備采集圖像。

從第19行到第26行就是所有的DNN相關(guān)的代碼段,可以看到使用起來是非常簡單的。第19行是加載網(wǎng)絡(luò)模型,并返回一個網(wǎng)絡(luò)對象。從第20行開始進(jìn)入一個while循環(huán),逐幀處理攝像頭讀入的數(shù)據(jù)。第22行是讀入的數(shù)據(jù),第23行是對這個讀入的Image做Resize,讓它符合網(wǎng)絡(luò)模型對輸入數(shù)據(jù)的大小要求。第24行是調(diào)用DNN模塊的BlobFromImageAPI對輸入的Image做預(yù)處理,這里主要是對輸入數(shù)據(jù)做規(guī)則化處理,即先減均值,再乘以一個Scale。這些都是MobileNETSSD網(wǎng)絡(luò)在訓(xùn)練中引入的均值和Scale,在推理中也需要把它用作輸入Image的預(yù)處理,我們將處理好的數(shù)據(jù)稱為blob。在第25行把這個blob設(shè)置為網(wǎng)絡(luò)的輸入,第26行來調(diào)用網(wǎng)絡(luò)的Forward做推理預(yù)算,然后得到最終的輸出結(jié)果Detections,Detections記錄了在這一幀圖像中檢測出來的所有對象,并且每個對象會以一個Vector的形式來描述。

接下來,在這個循環(huán)中對每一個對象進(jìn)行可視化處理,也就是把檢測出來的對象描繪在原圖像上。在第47行是取出對象的置信值與之前設(shè)置的閾值進(jìn)行比較,如果超過了閾值,我們就判定它是一個可信的對象,將其繪制到原圖上面。接下來的代碼段就是繪制對象的代碼段以及繪制對象類別的代碼段,最后是將繪制好對象方框的原圖顯示出來,隨后整個程序結(jié)束。在OpenCV的代碼庫當(dāng)中有許多基于DNN的示例程序,包括C++、Python,大家感興趣則可以在上面的鏈接中去看一下。

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

    關(guān)注

    8

    文章

    1685

    瀏覽量

    45811
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41089
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5422

    瀏覽量

    120593

原文標(biāo)題:OpenCV中那些深度學(xué)習(xí)模塊

文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測?

    在這篇文章中,我們將學(xué)習(xí)如何在OpenCV中使用基于深度學(xué)習(xí)的邊緣檢測,它比目前流行的canny邊緣檢測器更精確。
    的頭像 發(fā)表于 05-19 09:52 ?1925次閱讀
    如何在<b class='flag-5'>OpenCV</b>中使用基于<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>的邊緣檢測?

    THE opencv tutorials學(xué)習(xí)教程

    THE opencv tutorials學(xué)習(xí)教程。好資料不多說,看下圖就行~想學(xué)習(xí)opencv的可以點(diǎn)擊:http://www.ttokpm.com/soft/72/2014/2
    發(fā)表于 12-23 14:00

    深度學(xué)習(xí)重點(diǎn)內(nèi)容記錄

    筆記一天搞懂深度學(xué)習(xí)
    發(fā)表于 05-27 15:02

    深度學(xué)習(xí)DeepLearning實(shí)戰(zhàn)

    測試)三、主講內(nèi)容1:課程一、強(qiáng)化學(xué)習(xí)簡介課程二、強(qiáng)化學(xué)習(xí)基礎(chǔ)課程三、深度強(qiáng)化學(xué)習(xí)基礎(chǔ)課程四、多智能體
    發(fā)表于 01-09 17:01

    深度強(qiáng)化學(xué)習(xí)實(shí)戰(zhàn)

    測試)三、主講內(nèi)容1:課程一、強(qiáng)化學(xué)習(xí)簡介課程二、強(qiáng)化學(xué)習(xí)基礎(chǔ)課程三、深度強(qiáng)化學(xué)習(xí)基礎(chǔ)課程四、多智能體
    發(fā)表于 01-10 13:42

    【飛凌RK3568開發(fā)板試用體驗(yàn)】使用OpenCV進(jìn)行人臉識別

    DNN模塊OK3568開發(fā)板自帶OpenCV 3.4.12,這個版本雖然有點(diǎn)低,但是已經(jīng)支持DNN進(jìn)行基于深度學(xué)習(xí)的人臉檢測了。廠商提供的OpenC
    發(fā)表于 01-11 22:06

    學(xué)習(xí)OpenCV(中文版)

    電子發(fā)燒友網(wǎng)站提供《學(xué)習(xí)OpenCV(中文版).txt》資料免費(fèi)下載
    發(fā)表于 08-14 11:59 ?0次下載

    opencv動態(tài)識別模塊myblobtrack

    關(guān)于opencv下cvaux的代碼,能夠識別動態(tài)物體,利用庫函數(shù)
    發(fā)表于 12-10 16:53 ?14次下載

    opencv2.4.6學(xué)習(xí)資料

    opencv學(xué)習(xí)資料,內(nèi)容雖然少,但基本的都在里面了
    發(fā)表于 06-15 15:53 ?0次下載

    如何使用OpenCV、Python和深度學(xué)習(xí)在圖像和視頻中實(shí)現(xiàn)面部識別?

    Face ID 的興起帶動了一波面部識別技術(shù)熱潮。本文將介紹如何使用 OpenCV、Python 和深度學(xué)習(xí)在圖像和視頻中實(shí)現(xiàn)面部識別,以基于深度識別的面部嵌入,實(shí)時執(zhí)行且達(dá)到高準(zhǔn)確度
    的頭像 發(fā)表于 07-17 16:20 ?7936次閱讀

    使用Kinect SDK OpenCV顯示彩色和深度與骨骼圖的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用Kinect SDK OpenCV顯示彩色和深度與骨骼圖的程序免費(fèi)下載。
    發(fā)表于 11-19 17:01 ?13次下載
    使用Kinect SDK <b class='flag-5'>OpenCV</b>顯示彩色和<b class='flag-5'>深度</b>與骨骼圖的程序免費(fèi)下載

    關(guān)于FFmpeg深度學(xué)習(xí)相關(guān)內(nèi)容的技術(shù)分享

    首先,為什么需要FFmpeg深度學(xué)習(xí)模塊,F(xiàn)Fmpeg對輸入的碼流,首先進(jìn)行解碼,解碼后得到一個個的視頻幀,以及相應(yīng)的音頻數(shù)據(jù)等。經(jīng)過一系列的Filter之后,最后可以進(jìn)行重新編碼或者直接播放出來。這些filter的功能包括傳統(tǒng)
    的頭像 發(fā)表于 09-04 10:52 ?1784次閱讀
    <b class='flag-5'>關(guān)于</b>FFmpeg<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>相關(guān)<b class='flag-5'>內(nèi)容</b>的技術(shù)分享

    OpenCV使用深度學(xué)習(xí)做邊緣檢測的流程

    導(dǎo)讀 分析了Canny的優(yōu)劣,并給出了OpenCV使用深度學(xué)習(xí)做邊緣檢測的流程。 在這篇文章中,我們將學(xué)習(xí)如何在OpenCV中使用基于
    的頭像 發(fā)表于 05-08 11:05 ?2171次閱讀
    <b class='flag-5'>OpenCV</b>使用<b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b>做邊緣檢測的流程

    如何在OpenCV中實(shí)現(xiàn)CUDA加速

    OpenCV4.x中關(guān)于CUDA加速的內(nèi)容主要有兩個部分,第一部分是之前OpenCV支持的圖像處理與對象檢測傳統(tǒng)算法的CUDA加速;第二部分是Ope
    的頭像 發(fā)表于 09-05 10:03 ?4908次閱讀

    OpenCV庫在圖像處理和深度學(xué)習(xí)中的應(yīng)用

    本文深入淺出地探討了OpenCV庫在圖像處理和深度學(xué)習(xí)中的應(yīng)用。從基本概念和操作,到復(fù)雜的圖像變換和深度學(xué)習(xí)模型的使用,文章以詳盡的代碼和解
    的頭像 發(fā)表于 08-18 11:33 ?748次閱讀