1.2 边缘检测示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 1.1 計(jì)算機(jī)視覺 | 回到目錄 | 1.3 更多邊緣檢測(cè)內(nèi)容 |
邊緣檢測(cè)示例 (Edge Detection Example)
卷積運(yùn)算是卷積神經(jīng)網(wǎng)絡(luò)最基本的組成部分,使用邊緣檢測(cè)作為入門樣例。在這個(gè)視頻中,你會(huì)看到卷積是如何進(jìn)行運(yùn)算的。
在之前的視頻中,我說過神經(jīng)網(wǎng)絡(luò)的前幾層是如何檢測(cè)邊緣的,然后,后面的層有可能檢測(cè)到物體的部分區(qū)域,更靠后的一些層可能檢測(cè)到完整的物體,這個(gè)例子中就是人臉。在這個(gè)視頻中,你會(huì)看到如何在一張圖片中進(jìn)行邊緣檢測(cè)。
讓我們舉個(gè)例子,給了這樣一張圖片,讓電腦去搞清楚這張照片里有什么物體,你可能做的第一件事是檢測(cè)圖片中的垂直邊緣。比如說,在這張圖片中的欄桿就對(duì)應(yīng)垂直線,與此同時(shí),這些行人的輪廓線某種程度上也是垂線,這些線是垂直邊緣檢測(cè)器的輸出。同樣,你可能也想檢測(cè)水平邊緣,比如說這些欄桿就是很明顯的水平線,它們也能被檢測(cè)到,結(jié)果在這。所以如何在圖像中檢測(cè)這些邊緣?
看一個(gè)例子,這是一個(gè)6×6的灰度圖像。因?yàn)槭腔叶葓D像,所以它是6×6×1的矩陣,而不是6×6×3的,因?yàn)闆]有RGB三通道。為了檢測(cè)圖像中的垂直邊緣,你可以構(gòu)造一個(gè)3×3矩陣。在共用習(xí)慣中,在卷積神經(jīng)網(wǎng)絡(luò)的術(shù)語中,它被稱為過濾器。我要構(gòu)造一個(gè)3×3的過濾器,像這樣 [10?110?110?1]\left[\begin{matrix} 1 & 0 & -1\\ 1 & 0 & -1 \\ 1 & 0 & -1\end{matrix}\right]???111?000??1?1?1???? 。在論文它有時(shí)候會(huì)被稱為核,而不是過濾器,但在這個(gè)視頻中,我將使用過濾器這個(gè)術(shù)語。對(duì)這個(gè)6×6的圖像進(jìn)行卷積運(yùn)算,卷積運(yùn)算用“?*?”來表示,用3×3的過濾器對(duì)其進(jìn)行卷積。
關(guān)于符號(hào)表示,有一些問題,在數(shù)學(xué)中“?*?”就是卷積的標(biāo)準(zhǔn)標(biāo)志,但是在Python中,這個(gè)標(biāo)識(shí)常常被用來表示乘法或者元素乘法。所以這個(gè)“?*?”有多層含義,它是一個(gè)重載符號(hào),在這個(gè)視頻中,當(dāng)“?*?”表示卷積的時(shí)候我會(huì)特別說明。
這個(gè)卷積運(yùn)算的輸出將會(huì)是一個(gè)4×4的矩陣,你可以將它看成一個(gè)4×4的圖像。下面來說明是如何計(jì)算得到這個(gè)4×4矩陣的。為了計(jì)算第一個(gè)元素,在4×4左上角的那個(gè)元素,使用3×3的過濾器,將其覆蓋在輸入圖像,如下圖所示。然后進(jìn)行元素乘法(element-wise products)運(yùn)算,所以 [3?10?01?(1)1?15?08?(?1)2?17?02?(?1)]=[30?110?820?2]\left[\begin{matrix} 3*1 & 0*0 & 1*(1) \\ 1*1 & 5*0 & 8*(-1) \\ 2*1 & 7*0 & 2*(-1)\end{matrix}\right]=\left[\begin{matrix} 3 & 0 & -1\\ 1 & 0 & -8 \\ 2 & 0 & -2 \end{matrix}\right]???3?11?12?1?0?05?07?0?1?(1)8?(?1)2?(?1)????=???312?000??1?8?2???? ,然后將該矩陣每個(gè)元素相加得到最左上角的元素,即 3+1+2+0+0+0+(?1)+(?8)+(?2)=?53+1+2+0+0+0+(-1)+(-8)+(-2)=-53+1+2+0+0+0+(?1)+(?8)+(?2)=?5 。
把這9個(gè)數(shù)加起來得到-5,當(dāng)然,你可以把這9個(gè)數(shù)按任何順序相加,我只是先寫了第一列,然后第二列,第三列。
接下來,為了弄明白第二個(gè)元素是什么,你要把藍(lán)色的方塊,向右移動(dòng)一步,像這樣,把這些綠色的標(biāo)記去掉:
繼續(xù)做同樣的元素乘法,然后加起來,所以是 0?1+5?1+7?1+1?0+8?0+2?0+2?(?1)+9?(?1)+5?(?1)=?40*1+5*1+7*1+1*0+8*0+2*0+2*(-1)+9*(-1)+5*(-1)=-40?1+5?1+7?1+1?0+8?0+2?0+2?(?1)+9?(?1)+5?(?1)=?4 。
接下來也是一樣,繼續(xù)右移一步,把9個(gè)數(shù)的點(diǎn)積加起來得到0。
繼續(xù)移得到8,驗(yàn)證一下: 2?1+9?1+5?1+7?0+3?0+1?0+4?(?1)+1?(?1)+3?(?1)=82*1+9*1+5*1+7*0+3*0+1*0+4*(-1)+1*(-1)+3*(-1)=82?1+9?1+5?1+7?0+3?0+1?0+4?(?1)+1?(?1)+3?(?1)=8 。
接下來為了得到下一行的元素,現(xiàn)在把藍(lán)色塊下移,現(xiàn)在藍(lán)色塊在這個(gè)位置:
重復(fù)進(jìn)行元素乘法,然后加起來。通過這樣做得到-10。再將其右移得到-2,接著是2,3。以此類推,這樣計(jì)算完矩陣中的其他元素。
為了說得更清楚一點(diǎn),這個(gè)-16是通過底部右下角的3×3區(qū)域得到的。
因此6×6矩陣和3×3矩陣進(jìn)行卷積運(yùn)算得到4×4矩陣。這些圖片和過濾器是不同維度的矩陣,但左邊矩陣容易被理解為一張圖片,中間的這個(gè)被理解為過濾器,右邊的圖片我們可以理解為另一張圖片。這個(gè)就是垂直邊緣檢測(cè)器,下一頁(yè)中你就會(huì)明白。
在往下講之前,多說一句,如果你要使用編程語言實(shí)現(xiàn)這個(gè)運(yùn)算,不同的編程語言有不同的函數(shù),而不是用“?*?”來表示卷積。所以在編程練習(xí)中,你會(huì)使用一個(gè)叫conv_forward的函數(shù)。如果在tensorflow下,這個(gè)函數(shù)叫tf.conv2d。在其他深度學(xué)習(xí)框架中,在后面的課程中,你將會(huì)看到Keras這個(gè)框架,在這個(gè)框架下用Conv2D實(shí)現(xiàn)卷積運(yùn)算。所有的編程框架都有一些函數(shù)來實(shí)現(xiàn)卷積運(yùn)算。
為什么這個(gè)可以做垂直邊緣檢測(cè)呢?讓我們來看另外一個(gè)例子。為了講清楚,我會(huì)用一個(gè)簡(jiǎn)單的例子。這是一個(gè)簡(jiǎn)單的6×6圖像,左邊的一半是10,右邊一般是0。如果你把它當(dāng)成一個(gè)圖片,左邊那部分看起來是白色的,像素值10是比較亮的像素值,右邊像素值比較暗,我使用灰色來表示0,盡管它也可以被畫成黑的。圖片里,有一個(gè)特別明顯的垂直邊緣在圖像中間,這條垂直線是從黑到白的過渡線,或者從白色到深色。
所以,當(dāng)你用一個(gè)3×3過濾器進(jìn)行卷積運(yùn)算的時(shí)候,這個(gè)3×3的過濾器可視化為下面這個(gè)樣子,在左邊有明亮的像素,然后有一個(gè)過渡,0在中間,然后右邊是深色的。卷積運(yùn)算后,你得到的是右邊的矩陣。如果你愿意,可以通過數(shù)學(xué)運(yùn)算去驗(yàn)證。舉例來說,最左上角的元素0,就是由這個(gè)3×3塊(綠色方框標(biāo)記)經(jīng)過元素乘積運(yùn)算再求和得到的,
10?1+10?1+10?1+10?0+10?0+10?0+10?(?1)+10?(?1)+10?(?1)=010*1+10*1+10*1+10*0+10*0+10*0+10*(-1)+10*(-1)+10*(-1)=010?1+10?1+10?1+10?0+10?0+10?0+10?(?1)+10?(?1)+10?(?1)=0 。相反這個(gè)30是由這個(gè)(紅色方框標(biāo)記)得到的, 10?1+10?1+10?1+10?0+10?0+10?0+0?(?1)+0?(?1)+0?(?1)=3010*1+10*1+10*1+10*0+10*0+10*0+0*(-1)+0*(-1)+0*(-1)=3010?1+10?1+10?1+10?0+10?0+10?0+0?(?1)+0?(?1)+0?(?1)=30 。
如果把最右邊的矩陣當(dāng)成圖像,它是這個(gè)樣子。在中間有段亮一點(diǎn)的區(qū)域,對(duì)應(yīng)檢查到這個(gè)6×6圖像中間的垂直邊緣。這里的維數(shù)似乎有點(diǎn)不正確,檢測(cè)到的邊緣太粗了。因?yàn)樵谶@個(gè)例子中,圖片太小了。如果你用一個(gè)1000×1000的圖像,而不是6×6的圖片,你會(huì)發(fā)現(xiàn)其會(huì)很好地檢測(cè)出圖像中的垂直邊緣。在這個(gè)例子中,在輸出圖像中間的亮處,表示在圖像中間有一個(gè)特別明顯的垂直邊緣。從垂直邊緣檢測(cè)中可以得到的啟發(fā)是,因?yàn)槲覀兪褂?×3的矩陣(過濾器),所以垂直邊緣是一個(gè)3×3的區(qū)域,左邊是明亮的像素,中間的并不需要考慮,右邊是深色像素。在這個(gè)6×6圖像的中間部分,明亮的像素在左邊,深色的像素在右邊,就被視為一個(gè)垂直邊緣,卷積運(yùn)算提供了一個(gè)方便的方法來發(fā)現(xiàn)圖像中的垂直邊緣。
所以你已經(jīng)了解卷積是怎么工作的,在下一個(gè)視頻中,你將會(huì)看到如何使用卷積運(yùn)算作為卷積神經(jīng)網(wǎng)絡(luò)的基本模塊的。
課程板書
| 1.1 計(jì)算機(jī)視覺 | 回到目錄 | 1.3 更多邊緣檢測(cè)內(nèi)容 |
總結(jié)
以上是生活随笔為你收集整理的1.2 边缘检测示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.1 计算机视觉-深度学习第四课《卷积
- 下一篇: 1.3 更多边缘检测内容-深度学习第四课