Computer Vision
-
受益于深度學習 計算機視覺是目前快速發展的領域之一
image.png -
如果你用一個標準的或者全連接的網絡 這個矩陣將會是一個一千乘以三百萬維的矩陣 x現在的維度是三百萬 我用3m來表示3百萬 這表示在這里這個矩陣會有 三百萬個參數 這是非常非常大的 有這么多的參數 很難獲得足夠的數據以避免神經網絡過擬合 同時 訓練一個有三百萬個參數的神經網絡 對計算量和內存的需求是不太可行的 但對于計算機視覺應用 你不會想要被限制于使用一個小圖像 你想要用大圖像 為了做到這點 你需要更好地運用卷積運算 它是卷積神經網絡的基礎之一
image.png
Edge Detection Example
-
卷積運算是卷積神經網絡的 基礎組成單元之一 我們用邊緣檢測作為引發興趣的例子 你將了解卷積運算是如何進行的
image.png -
建立一個3x3的過濾器 或者說是3x3的矩陣 像這樣 111 000 -1 -1 -1的 有時候科研論文中會將它稱為核(kernel)而不是過濾器 但是在這個視頻中我將會用過濾器這個術語 你需要做的是獲得6x6的圖像并求其卷積 卷積運算用這個星號代替 用這個3x3的過濾器去求它的卷積
image.png
為什么這是在進行垂直邊緣檢測呢 讓我們看看另一個例子。
- 在圖像的中間 垂直邊緣檢測里也許能得到一個直觀的理解 一個垂直邊緣是一個3x3的區域 因為我們用的是3x3的過濾器 左邊有亮像素 你并不在意中間有什么 然后在右邊是暗像素 在這個6x6的圖像的中間 可能會有亮像素在左邊 暗像素在右邊 這就是為什么它認為那里有一個垂直邊緣 卷積運算提供了一個方便的方法去弄清楚 如何在圖像中找到這些垂直邊緣 所以現在你知道卷積運算是怎么發揮作用的 在下一個視頻中 你會看到如何運用它 作為卷積神經網絡中的一個基本構成
More Edge Detection
-
如果將顏色翻轉 即左邊是暗的部分 右邊是亮的部分 因此 10現在在右半部分0現在在左半部分。 如果將它與相同的邊緣檢測器做卷積 你將會在中間部分得到-30而不是30 你可以將結果畫出來可能看起來是這樣 因為亮暗變化是反的 這些30現在也反了 變為-30 表示由暗變亮而不是由亮變暗的轉換 如果你不在乎這兩個的區別 你可以取輸出矩陣的絕對值 但是這個過濾器確實能夠區分亮到暗的邊界 和暗到亮的邊界
image.png
-
隨著深度學習的發展 我們發現 如果你想要檢測一些復雜圖片的邊界 可能并不需要計算機視覺的研究人員挑選出這9個矩陣元素 你可以把矩陣里的這9個元素當做參數 通過反向傳播來學習得到他們的數值 目標是要獲得這9個參數使得對6乘6的圖片 用這個3乘3的過濾器進行卷積 能得到一個優良的邊界檢測器
image.png
Padding
-
為了構建深層神經網絡 一個你非常需要使用的對基本的卷積操作的改進是填充(padding)
image.png
Strided Convolutions
- Strided(帶步長的)卷積是在卷積神經網絡中 組成基礎卷積模塊的另一部分
- 我們在本視頻中定義的卷積操作 將翻轉操作省略了。 技術層面來說,實際上 我們在之前的視頻中進行的操作 應該是叫交叉相關,而不是卷積。 但是在深度學習文獻中,由于約定 我們只不過將其稱為卷積。
- 總結一下,在機器學習的約定中, 我們通常忽略掉翻轉的操作。 技術上,我們進行的操作最好稱之為交叉相關。 但是,大多數深度學習的文獻都叫它卷積操作。 所以,在本課程的視頻中,我將延續這一約定。 如果你讀過許多機器學習的相關文獻 你就會發現 大多數人叫這個卷積,并不需要做翻轉
- 事實上,在信號處理或其他數學分支領域 對卷積核進行翻轉 會使卷積核保持 (A卷積B)卷積C等于A卷積(B卷積C) 這一性質在數學上叫結合率(associativity) 這一性質在信號處理領域很有用 但對深度神經網絡而言,它并不重要 所以元素間相乘并求和簡化了代碼 而且這一改變后,神經網絡照常工作 為了方便,我們大部分人叫這個卷積 即使有時數學家更喜歡管它叫交叉相關
Convolutions Over Volume
已經了解了卷積在二維圖像上是如何工作的 現在,讓我們看看如何實現這個卷積算法 但不是對二維圖像 而是對三維圖像
如果我們不僅僅想要檢測垂直邊緣呢? 如果我們想同時檢測垂直邊緣和水平邊緣, 又或者是45度邊緣或者70度邊緣, 換句話來說,如果你想要同時應用多個過濾器呢?
One Layer of a Convolutional Network
-
這里的過濾器 作用和w[1]類似 之前我們在卷積計算中 我們有27個輸入 或者確切的說 是兩組27個輸入 因為我們有兩個過濾器 我們需要把上面這些數字相乘 這其實就是通過一個線性方程計算得到一個4x4的矩陣 這里通過卷積計算得出4x4矩陣 這個過程和 w[1] x a[0] 類似 輸出也是一個4x4的矩陣 另外就是添加偏差值 因此方框里的這些 作用和z類似 最后 應用非線性方程
image.png -
現在想象一下 前面我們的圖中是兩個過濾器 現在這里我們有10個過濾器 1, 2, ... 10個 加起來是28x10 也就是280個參數 注意這里. 一個很好的特性是. 不管輸入的圖像有多大 比方1000 x 1000 或者5000 x 5000, 這里的參數個數不變. 依然是280個 因此 用這10個過濾器來檢測一個圖片的不同的特征,比方垂直邊緣線, 水平邊緣線 或者其他不同的特征 不管圖片多大 所用的參數個數都是一樣的 這個特征使得卷積神經網絡 不太容易過擬合(overfitting) 因此,比方你訓練學習得到10個特征檢測器(函數) 你可以把它們應用到非常大的圖像(特征檢測)中 所用的參數數目還是不變的,比方這個例子中的280 相對(圖片大小)來說非常小
image.png
Simple Convolutional Network Example
-
隨著你建的神經網絡越來越深, 通常你開始的時候, 圖像都是比較大的,例如39乘39 高度和寬度在保持不變一陣子后 隨著你在神經網絡中的深入, 逐漸變小 在我們的這個例子里,它從39到37到17到14。 不好意思,是39到37到17到7 而頻道的數目一般會增加。 它已經從3到10到20到40, 而你會在許多其他卷積神經網絡中 看到這樣的一種常見的趨勢
image.png -
事實證明, 在一個典型的 ConvNet, 通常有三種類型的層。 一個是卷積層, 通常我們會將其表示為一個Conv層 這就是我們在前面的網絡中使用的。 事實證明, 還有兩種常見的層類型, 一個稱為 "池" 層, 通常我會直接稱為池。 最后是一個完全連通的層稱為 FC。 雖然我們可能只是使用 卷積層來設計一個相當好的神經網絡, 大多數神經網絡架構也將有幾個池層 和幾個完全連接層。
image.png
Pooling Layers
除卷積層之外 ConvNets通常還使用池化層來減少展示量 以此來提高計算速度 并使一些特征的檢測功能更強大
-
因 max pooling的一個有趣的特性是 它有一套超參 但是它沒有任何參數需要學習 實際上 沒有任何需要梯度相加算法學習的東西 一旦確定了 f 和 s 就確定了計算 而且梯度下降算法不會對其有任何改變
image.png -
截至目前,演示了在二維輸入上的max pooling 如果有一個三維輸入 則輸出會具有同樣的維數
image.png -
目前,最大值采樣的使用 通常比均值采樣多得多,唯一的例外 是有時候在深度非常大的神經網絡 你也許可以使用均值采樣來合并表示 例如從7x7x1000 將它們整體取一個均值 得到1x1x1000 在神經網絡中最大值采樣比均值采樣用的更多
image.png 總結一下 采樣的超參是濾波器的大小 f 以及步長 s 或許常見的參數選擇可能是 f 等于2,s 等于2 這個相當常用并且其效果是 近似得把高度和寬度縮小了兩倍以上 并且一個被普遍選用的超參可能是 f 等于2,s 等于2 它的效果是將表示的 高度和寬度縮小了兩倍 我還見過 f 等于3,s 等于2 而其它的超參就像一個二進制位元 指示你是使用最大值采樣還是均值采樣
-
如果你愿意,你可以增加一個額外的補位超參 盡管這個是極其罕見被使用的 當你做最大值采樣時,通常情況下 不會做任何補位 盡管有一個例外,這個我們下周會看到 但是,對于最大值采樣的絕大多數部分 通常情況下,是不進行任何的補位 所以,截至目前 p 最為常用的取值是 p 等于零
image.png
CNN Example
14 * 14 * 6 我們把這層稱之為池1輸出 事實上在卷積網文檔中中有二種關于層的說法 二者有細微的差別 一種說法是這稱為一層 那么這二個單元一起成為神經網絡的第一層 另一種說法是卷積層稱為一層,池化層單獨稱為一層 神經網絡中當人們說到網絡層數的時候,通常指 那些有權重,有參數的網絡層數量 因為池化層沒有權重,沒有參數 只有一些超參數,我會使用 卷積層1和池化層1為一體的說法 把他們作為層一,盡管有時候 當你看在線文章或讀研究論文時,你會聽到卷積層 和池化層被稱為兩個獨立層 但這不過是二種細微不一致的表示術語 這里當我計算層數,我只會算那些有權重的層 所以我視這二個一起為層一 并且Conv1和Pool1名字末尾是1 也表明了我認為二者都是神經網絡層一的組成部分 因為池化層1沒有自己的權重,所以被并入層一
-
通常隨著神經網絡的深入 高度nh和寬度nw會減小 如之前所示,從3232減到2020,1414 再到1010,最終減到5*5 因此當你深入下去通常高度和寬度將會減小 然而通道數量會增加 這里從3到6再到16,最后是全連通網絡層 另一類常見的神經網絡模型是 一個或多個卷積層接著一層池化層 再接著一個或多個卷積層疊加一層池化層 然后疊加幾層全連接層 也許最后還疊加一個Softmax層
image.png
Why Convolutions?
-
卷積層和 只用完全連接的神經層比起來有兩個優勢 參數共享和連接的稀疏性
image.png