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

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

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

CNN如何用于解決邊緣檢測(cè)問題

新機(jī)器視覺 ? 來源:海豚數(shù)據(jù)科學(xué)實(shí)驗(yàn)室 ? 作者:海豚數(shù)據(jù)科學(xué)實(shí)驗(yàn) ? 2022-06-23 11:46 ? 次閱讀

研究人員在研究圖像處理算法時(shí)提出了CNN(卷積神經(jīng)網(wǎng)絡(luò))的概念。傳統(tǒng)的全連接網(wǎng)絡(luò)是一種黑盒子 - 它接收所有輸入并通過每個(gè)值傳遞到一個(gè)dense 網(wǎng)絡(luò),然后再傳遞給一個(gè)熱輸出。這似乎適用于少量的輸入。

當(dāng)我們處理1024x768像素的圖像時(shí),我們輸入3x1024x768 = 2359296個(gè)數(shù)字(每個(gè)像素的RGB值)。使用2359296個(gè)數(shù)字的輸入向量的dense多層神經(jīng)網(wǎng)絡(luò)在第一層中每個(gè)神經(jīng)元至少具有2359296個(gè)權(quán)重 - 第一層的每個(gè)神經(jīng)元具有2MB的權(quán)重。對(duì)于處理器以及RAM,在20世紀(jì)90年代和2000年除,這幾乎是不可能的。

這導(dǎo)致研究人員想知道是否有更好的方法來完成這項(xiàng)工作。任何圖像處理(識(shí)別)中的第一個(gè)也是最重要的任務(wù)通常是檢測(cè)邊緣和紋理。接下來是識(shí)別和處理真實(shí)對(duì)象。很明顯要注意檢測(cè)紋理和邊緣實(shí)際上并不依賴于整個(gè)圖像。人們需要查看給定像素周圍的像素以識(shí)別邊緣或紋理。

此外,用于識(shí)別邊緣或紋理的算法在整個(gè)圖像中應(yīng)該是相同的。我們不能對(duì)圖像的中心或任何角落或側(cè)面使用不同的算法。檢測(cè)邊緣或紋理的概念必須相同。我們不需要為圖像的每個(gè)像素學(xué)習(xí)一組新參數(shù)。

這種理解導(dǎo)致了卷積神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)的第一層由掃描圖像的小塊神經(jīng)元組成 - 一次處理幾個(gè)像素。通常這些是9或16或25像素的正方形。

CNN非常有效地減少了計(jì)算量。小的“filter/kernel”沿著圖像滑動(dòng),一次處理一小塊。整個(gè)圖像所需的處理非常相似,因此非常有效。

雖然它是為圖像處理而引入的,但多年來,CNN已經(jīng)在許多其他領(lǐng)域中得到應(yīng)用。

一個(gè)例子

現(xiàn)在我們已經(jīng)了解了CNN的基本概念,讓我們了解數(shù)字的工作原理。正如我們所看到的,邊緣檢測(cè)是任何圖像處理問題的主要任務(wù)。讓我們看看CNN如何用于解決邊緣檢測(cè)問題。

aae3b098-f22e-11ec-ba43-dac502259ad0.jpg

左邊是16x16單色圖像的位圖。矩陣中的每個(gè)值表示相應(yīng)像素的亮度。我們可以看到,這是一個(gè)簡(jiǎn)單的灰色圖像,中間有一個(gè)方塊。當(dāng)我們嘗試將其用2x2 filter(中圖)進(jìn)行卷積時(shí),我們得到一個(gè)14x14的矩陣(右圖)。

我們選擇的filter 可以突出顯示圖像中的邊緣。我們可以在右邊的矩陣中看到,原始圖像中與邊緣對(duì)應(yīng)的值是高的(正的或負(fù)的)。這是一個(gè)簡(jiǎn)單的邊緣檢測(cè)filter。研究人員已經(jīng)確定了許多不同的filter,可以識(shí)別和突出圖像的各個(gè)不同方面。在典型的卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型開發(fā)中,我們讓網(wǎng)絡(luò)自己學(xué)習(xí)和發(fā)現(xiàn)這些filters

重要概念

以下是我們?cè)谶M(jìn)一步使用CNN之前應(yīng)該了解的一些重要概念。

Padding

卷積filter的一個(gè)明顯問題是每一步都通過減小矩陣大小來減少“信息” - 縮小輸出?;旧?,如果原始矩陣是N×N,并且filter是F×F,則得到的矩陣將是(N-F + 1)×(N-F + 1)。這是因?yàn)檫吘壣系南袼乇葓D像中間的像素少。

如果我們?cè)谒羞吷习矗‵ - 1)/ 2像素填充圖像,則將保留N×N的大小。

因此,我們有兩種類型的卷積,即Valid Convolution和 Same Convolution。Valid 實(shí)質(zhì)上意味著沒有填充。因此每個(gè)卷積都會(huì)導(dǎo)致尺寸減小。Same Convolution使用填充,以便保留矩陣的大小。

計(jì)算機(jī)視覺中,F(xiàn)通常是奇數(shù)。奇數(shù)F有助于保持圖像的對(duì)稱性,也允許一個(gè)中心像素,這有助于在各種算法中應(yīng)用均勻偏差。因此,3x3, 5x5, 7x7 filter是很常見的。我們還有1x1個(gè)filter。

Strided

我們上面討論的卷積是連續(xù)的,因?yàn)樗B續(xù)掃描像素。我們也可以使用strides - 通過在圖像上移動(dòng)卷積filter時(shí)跳過s像素。

因此,如果我們有nxn圖像和fxf filter并且我們用stride s和padding p進(jìn)行卷積,則輸出的大小為:((n + 2p -f)/ s + 1)x((n + 2p -f)/ s + 1)

卷積v / s互相關(guān)

互相關(guān)基本上是在底部對(duì)角線上翻轉(zhuǎn)矩陣的卷積。翻轉(zhuǎn)會(huì)將關(guān)聯(lián)性添加到操作中。但在圖像處理中,我們不會(huì)翻轉(zhuǎn)它。

RGB圖像上的卷積

現(xiàn)在我們有一個(gè)nxnx 3圖像,我們用fxfx 3 filter進(jìn)行卷積。因此,我們?cè)谌魏螆D像及其filter中都有高度,寬度和通道數(shù)。任何時(shí)候,圖像中的通道數(shù)量與filter中的通道數(shù)量相同。這個(gè)卷積的輸出有寬度和高度(n-f + 1)和1通道。

多個(gè)filters

一個(gè)3通道圖像與一個(gè)3通道filter卷積得到一個(gè)單一通道輸出。但我們并不局限于一個(gè)filter。我們可以有多個(gè)filters——每個(gè)filter都會(huì)產(chǎn)生一個(gè)新的輸出層。因此,輸入中的通道數(shù)應(yīng)該與每個(gè)filter中的通道數(shù)相同。filters的數(shù)量和輸出通道的數(shù)量是一樣的。

因此,我們從3個(gè)通道的圖像開始,并在輸出中以多個(gè)通道結(jié)束。這些輸出通道中的每一個(gè)都表示圖像的某些特定方面,這些方面由相應(yīng)的filter拾取。因此,它也被稱為特征而不是通道。在一個(gè)真正的深層網(wǎng)絡(luò)中,我們還添加了一個(gè)偏差和一個(gè)非線性激活函數(shù),如RelU。

池化層

池化基本上是將值組合成一個(gè)值。我們可以有平均池,最大池化,最小化池等。因此,使用fxf池化的nxn輸入將生成(n/f)x(n/f)輸出。它沒有需要學(xué)習(xí)的參數(shù)。

aafdda04-f22e-11ec-ba43-dac502259ad0.png

最大池化

CNN架構(gòu)

典型的中小型CNN模型遵循一些基本原則。

ab0be4aa-f22e-11ec-ba43-dac502259ad0.png

典型的CNN架構(gòu)

  • 交替卷積和池化層

  • 逐漸減小frame 大小并增加frame 數(shù),

  • 朝向末端的Flat 和全連接層

對(duì)所有隱藏層激活RelU,然后為最終層激活softmax

隨著我們轉(zhuǎn)向大型和超大型網(wǎng)絡(luò),事情變得越來越復(fù)雜。研究人員為我們提供了更多可以在這里使用的具體架構(gòu)(如:ImageNet, GoogleNet和VGGNet等)。

Python實(shí)現(xiàn)

通常實(shí)現(xiàn)CNN模型時(shí),先進(jìn)行數(shù)據(jù)分析和清理,然后選擇我們可以開始的網(wǎng)絡(luò)模型。我們根據(jù)網(wǎng)絡(luò)數(shù)量和層大小及其連接性的布局提供架構(gòu) - 然后我們?cè)试S網(wǎng)絡(luò)自己學(xué)習(xí)其余部分。然后我們可以調(diào)整超參數(shù)來生成一個(gè)足以滿足我們目的的模型。

讓我們看一個(gè)卷積網(wǎng)絡(luò)如何工作的簡(jiǎn)單例子。

導(dǎo)入模塊

我們首先導(dǎo)入所需的Python庫(kù)。

import numpy as npimport tensorflow as tffrom tensorflow import kerasfrom keras.layers import Dense, Conv2D, Flatten, MaxPooling2Dfrom keras.models import Sequential
ab37ebae-f22e-11ec-ba43-dac502259ad0.png

獲取數(shù)據(jù)

下一步是獲取數(shù)據(jù)。我們使用構(gòu)建到Keras模塊中的機(jī)器學(xué)習(xí)數(shù)據(jù)集——MNIST數(shù)據(jù)集。在現(xiàn)實(shí)生活中,這需要更多的處理。

我們加載訓(xùn)練和測(cè)試數(shù)據(jù)。我們r(jià)eshape數(shù)據(jù),使其更適合卷積網(wǎng)絡(luò)?;旧希覀儗⑵鋜eshape為具有60000(記錄數(shù))大小為28x28x1的4D數(shù)組(每個(gè)圖像的大小為28x28)。這使得在Keras中構(gòu)建Convolutional層變得容易。

如果我們想要一個(gè)dense 神經(jīng)網(wǎng)絡(luò),我們會(huì)將數(shù)據(jù)reshape為60000x784 - 每個(gè)訓(xùn)練圖像的1D記錄。但CNN是不同的。請(qǐng)記住,卷積的概念是2D - 因此沒有必要將其flattening 為1維數(shù)組。

我們還將標(biāo)簽更改為分類的one-hot數(shù)組,而不是數(shù)字分類。最后,對(duì)圖像數(shù)據(jù)進(jìn)行歸一化處理,以降低梯度消失的可能性。


(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()train_images = train_images.reshape(60000,28,28,1)test_images = test_images.reshape(10000,28,28,1)test_labels = tf.keras.utils.to_categorical(test_labels)train_labels = tf.keras.utils.to_categorical(train_labels)train_images = train_images / 255.0test_images = test_images / 255.0
ab474e5a-f22e-11ec-ba43-dac502259ad0.png

構(gòu)建模型

Keras庫(kù)為我們提供了準(zhǔn)備使用API來構(gòu)建我們想要的模型。我們首先創(chuàng)建Sequential模型的實(shí)例。然后,我們將層添加到模型中。第一層是卷積層,處理28x28的輸入圖像。我們將核大小定義為3并創(chuàng)建32個(gè)這樣的核 - 創(chuàng)建32 frames?的輸出 - 大小為26x26(28-3 + 1 = 26)

接下來是2x2的最大池化層。這將尺寸從26x26減小到13x13。我們使用了最大池化,因?yàn)槲覀冎绬栴}的本質(zhì)是基于邊緣 - 我們知道邊緣在卷積中顯示為高值。

接下來是另一個(gè)核大小為3x3的卷積層,并生成24個(gè)輸出frames。每frame的大小為22x22。接下來是卷積層。最后,我們將這些數(shù)據(jù)flatten 并將其輸入到dense 層,該層具有對(duì)應(yīng)于10個(gè)所需值的輸出。


model = Sequential()model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=(28,28,1)))model.add(MaxPooling2D(pool_size=(3, 3)))model.add(Conv2D(24, kernel_size=3, activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())model.add(Dense(10, activation='softmax'))model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
ab580696-f22e-11ec-ba43-dac502259ad0.png

訓(xùn)練模型

最后,我們用我們擁有的數(shù)據(jù)訓(xùn)練機(jī)器學(xué)習(xí)模型。五個(gè)epochs足以獲得一個(gè)相當(dāng)準(zhǔn)確的模型。


model.fit(train_images, train_labels, validation_data=(test_images, test_labels), epochs=5)
ab613c66-f22e-11ec-ba43-dac502259ad0.jpg

最后

上面的模型只有9*32 + 9*24 = 504個(gè)值需要學(xué)習(xí)。全連接網(wǎng)絡(luò)在第一層本身需要每個(gè)神經(jīng)元784個(gè)權(quán)重!因此,我們大大節(jié)省了處理能力 - 同時(shí)降低了過度擬合的風(fēng)險(xiǎn)。

請(qǐng)注意,我們使用了我們所知道的,然后訓(xùn)練模型來發(fā)現(xiàn)其余部分。使用全連接或隨機(jī)稀疏網(wǎng)絡(luò)的黑盒方法永遠(yuǎn)不會(huì)以這個(gè)成本獲得這樣的準(zhǔn)確性。

審核編輯 :李倩


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

原文標(biāo)題:卷積神經(jīng)網(wǎng)絡(luò)概述及示例教程

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測(cè)模型

    以及邊緣計(jì)算能力的增強(qiáng),越來越多的目標(biāo)檢測(cè)應(yīng)用開始直接在靠近數(shù)據(jù)源的邊緣設(shè)備上運(yùn)行。這不僅減少了數(shù)據(jù)傳輸延遲,保護(hù)了用戶隱私,同時(shí)也減輕了云端服務(wù)器的壓力。然而,在邊緣端部署高效且準(zhǔn)確
    發(fā)表于 12-19 14:33

    基于 DSP5509 進(jìn)行數(shù)字圖像處理中 Sobel 算子邊緣檢測(cè)的硬件連接電路圖

    以下是基于 DSP5509 進(jìn)行數(shù)字圖像處理中 Sobel 算子邊緣檢測(cè)的硬件設(shè)計(jì)方案: 一、總體架構(gòu) 圖像采集:使用合適的圖像傳感器,如 CMOS 傳感器,通過相應(yīng)的接口(如 SPI、I2C 等
    發(fā)表于 09-25 15:25

    DSP國(guó)產(chǎn)教學(xué)實(shí)驗(yàn)箱_實(shí)驗(yàn)案例_操作教程:5-11 邊緣檢測(cè)

    = f ‘(x) dx。 Canny 邊緣檢測(cè) Canny邊緣檢測(cè)是從不同視覺對(duì)象中提取有用的結(jié)構(gòu)信息并大大減少要處理的數(shù)據(jù)量的一種技術(shù),目前已廣泛應(yīng)
    發(fā)表于 07-19 10:38

    圖像邊緣檢測(cè)系統(tǒng)的設(shè)計(jì)流程

    圖像邊緣檢測(cè)系統(tǒng)的設(shè)計(jì)流程是一個(gè)涉及多個(gè)步驟的復(fù)雜過程,它旨在從圖像中提取出重要的結(jié)構(gòu)信息,如邊界、輪廓等。這些邊緣信息對(duì)于圖像分析、機(jī)器視覺、圖像壓縮等領(lǐng)域至關(guān)重要。以下是一個(gè)詳細(xì)的圖像邊緣
    的頭像 發(fā)表于 07-17 16:39 ?380次閱讀

    cnn常用的幾個(gè)模型有哪些

    CNN(卷積神經(jīng)網(wǎng)絡(luò))是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、自然語(yǔ)言處理等領(lǐng)域。以下是一些常用的CNN模型: LeNet-5:LeNet-5是最早的卷積神經(jīng)網(wǎng)絡(luò)之一,由Yann LeCun等人于
    的頭像 發(fā)表于 07-11 14:58 ?947次閱讀

    CNN的定義和優(yōu)勢(shì)

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)作為深度學(xué)習(xí)領(lǐng)域的核心成員,不僅在學(xué)術(shù)界引起了廣泛關(guān)注,更在工業(yè)界尤其是計(jì)算機(jī)視覺領(lǐng)域展現(xiàn)出了巨大的應(yīng)用價(jià)值。關(guān)于
    的頭像 發(fā)表于 07-05 17:37 ?4350次閱讀

    基于CNN的網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)設(shè)計(jì)

    入侵檢測(cè)提供了新的思路和方法。卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)作為深度學(xué)習(xí)的一種重要模型,以其強(qiáng)大的特征提取能力和模式識(shí)別能力,在網(wǎng)絡(luò)入侵檢測(cè)領(lǐng)域展現(xiàn)出巨大的潛力。
    的頭像 發(fā)表于 07-05 17:28 ?1180次閱讀

    如何利用CNN實(shí)現(xiàn)圖像識(shí)別

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是深度學(xué)習(xí)領(lǐng)域中一種特別適用于圖像識(shí)別任務(wù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。它通過模擬人類視覺系統(tǒng)的處理方式,利用卷積、池化等操作,自動(dòng)提取圖像中的特征,進(jìn)而實(shí)現(xiàn)高效的圖像識(shí)別。本文將從CNN的基本原理、構(gòu)建過程、訓(xùn)練策略以
    的頭像 發(fā)表于 07-03 16:16 ?1462次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測(cè)、語(yǔ)義分割等領(lǐng)域。本文將詳細(xì)介紹CNN在分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)、關(guān)鍵技術(shù)、常見網(wǎng)絡(luò)架構(gòu)以及實(shí)際應(yīng)用案例。
    的頭像 發(fā)表于 07-03 09:28 ?670次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)三大特點(diǎn)是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。CNN具有以下三大特點(diǎn): 局部連接
    的頭像 發(fā)表于 07-03 09:26 ?1447次閱讀

    CNN模型的基本原理、結(jié)構(gòu)、訓(xùn)練過程及應(yīng)用領(lǐng)域

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。CNN模型的核心是卷積層
    的頭像 發(fā)表于 07-02 15:26 ?3912次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)cnn模型有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡(jiǎn)稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、視頻分析、自然語(yǔ)言處理等領(lǐng)域。 CNN的基本概念 1.1 卷積層
    的頭像 發(fā)表于 07-02 15:24 ?765次閱讀

    基于FPGA的實(shí)時(shí)邊緣檢測(cè)系統(tǒng)設(shè)計(jì),Sobel圖像邊緣檢測(cè),F(xiàn)PGA圖像處理

    摘要 :本文設(shè)計(jì)了一種 基于 FPGA 的實(shí)時(shí)邊緣檢測(cè)系統(tǒng) ,使用OV5640 攝像頭模塊獲取實(shí)時(shí)的視頻圖像數(shù)據(jù),提取圖像邊緣信息并通過 VGA顯示。FPGA 內(nèi)部使用流水線設(shè)計(jì)和 并行運(yùn)算加速
    發(fā)表于 05-24 07:45

    咳嗽檢測(cè)深度神經(jīng)網(wǎng)絡(luò)算法

    用于咳嗽檢測(cè)的改進(jìn)CNN。據(jù)我們所知,此前沒有任何研究對(duì)遠(yuǎn)程監(jiān)測(cè)和通知咳嗽進(jìn)行過調(diào)查。最近幾年,物聯(lián)網(wǎng)[13]通過提供巨大的好處,徹底改變了人類生活。通過與云計(jì)算[14]、移動(dòng)健康、電子健康服務(wù)相結(jié)合
    發(fā)表于 05-15 19:05

    CNN如何解決邊緣檢測(cè)問題

    這種理解導(dǎo)致了卷積神經(jīng)網(wǎng)絡(luò)。網(wǎng)絡(luò)的第一層由掃描圖像的小塊神經(jīng)元組成 - 一次處理幾個(gè)像素。通常這些是9或16或25像素的正方形。
    發(fā)表于 04-15 14:42 ?584次閱讀
    <b class='flag-5'>CNN</b>如何解決<b class='flag-5'>邊緣</b><b class='flag-5'>檢測(cè)</b>問題