這學期修了一門課程叫做視訊串流與追蹤,主要在介紹深度學習在圖像、影像上的各種應用,從學期初至今被摧殘了不少,但也學到了不少,於是想來紀錄一下目前學習到的一些內容。
簡介
首先,深度學習在圖形的相關應用,目前CNN再圖像、影像上的應用上取得了非常突出的成果,基本上有以下這幾種(當然還有更多其他的有趣應用…太多了說不完…不過我不要寫成表格):
- Object Classification:分類一張圖片內的物體是哪一種類別
- Object Detection & Localization:檢測出圖片中的物體類別,還要知道他的位置(Bounding box)
- Object Segmentation(Semantic / Instance):除了知道位置外,更進階的是找出圖片中哪些pixel是屬於這個類別
- Object Identification:確認這個物體是哪個個體
- Object Tracking:在影片中追蹤物體的位置、形變
知乎上有找到一則我覺得很不錯的回答,循序漸進的帶我們了解了深度學習再圖像上的各種應用,推薦大家前去看看(用深度学习玩图像的七重关卡)
今天要來介紹的是在Object Classification上取得了好成績的各種神奇架構,以及它們各自的特色(都只是點出重點,細節部分有興趣請去看原始論文)。
下面會簡介這幾種網路架構,以及他們的特色:
- LeNet
- AlexNet
- ZFNet
- VGG
- GoogLeNet
- ResNet
LeNet
CNN的經典架構,兩層Conv(Convolution Layer)接兩層的FC(Fully Connected Layer),主要被用於手寫辨識上,好像沒啥好介紹的xD
AlexNet
2012年的ILSVRC上,AlexNet憑著更深的CNN打敗了其他的對手,對於使用ML調參調的半死的人想必恨的牙癢癢的,它的特色如下:
- 使用兩張GPU分開訓練(在當時,GPU記憶體還沒有那麼大)
- 使用8層架構
- 第一個使用ReLU作為activation function
- 使用Norm layers: Local Response Norm(LRN)
- Data augmentation: 將圖片平移、旋轉,增加training set的多樣性
ZFNet
ZFNet將AlexNet的架構拿來修改了一下,然後得到了2013年的冠軍!恭喜恭喜
主要修改的部分是縮小filter size和增加filter number
VGG
這應該是大家比較熟悉的一個網路架構,嫌AlexNet 8層不夠深?那我們就來邁向更深網路吧
VGG是ILSVRC 2014年的第二名,第一名則是下面介紹的的GoogLeNet
- 只使用3x3的Conv和2x2的Maxpool:目的是用多層的較小的filter達到一個大的filter包含的資訊。舉例來說2個3x3的Conv可以和1個5x5的Conv涵蓋一樣的資訊量,但參數量卻比較少(3*3*2 < 5*5*2)。
- 相較於以前一個Conv後面就接一個Pooling,VGG做了很多次Conv才接Pooling,因為這樣可以透過activation function使data有更多non-linear的變化。
GoogLeNet
然後這才是正宮,使用了22層達到了ILSVRC 2014年的第一名!恭喜恭喜,那他做了什麼事情呢?
- 不用FC層:有看過[ML]Calculate Parameter Numbers of MLP & CNN這一篇(對,偷偷工商一下)的人就會知道FC由於是全連接會產生大量的weights參數,不使用FC使得參數量大大的降低(~5M,遠小於VGG的138M)。
- 提出了inception model:我們在自己寫CNN時常常會想,Conv的filtersize到底要多大比較好呢?要先做Pooling嗎?…這些問題真的很困難,那何不讓網路幫我們自己決定就好呢?所以就inception model就出現啦
- 1x1 Conv:看一下inception model就會發現GoogLeNet使用了1x1 Conv來做降維的動作,1x1 Conv的output size會跟原圖一樣,如果filter number減少,就是降維了。
ResNet
接下來讓我們介紹2015的冠軍,總共使用了152層…
- 並不是越深越好,該篇論文有指出,僅僅是增加深度不會使得效果比較好,甚至會使得誤差增大。
- residual block:於是他們提出了residual block這個架構,在越深的layer資訊越難往下傳遞,所以透過這個架構使得上層的資訊能夠比較容易被保留
Deformable Convolutional Network
這是2017年提出的,不確定有沒有得到獎,不過想法蠻有意思的,想拿出來說一下:
我們以往在做Convolution的時候都是一個正方形的運算,也就是拿一個filter去對image對應位置做運算。但是這篇提出來的想法是,我不一定要對應到原本的位置,我也可以利用不同的對應去模擬一些情況,比方說我可以模擬縮放跟旋轉,看圖片會比較明白。