這篇文章主要是提供一個CV domain的overview,帶領大家快速回顧CNN的發展及應用
Convolution in CNN
傳統影像處理的技術會使用Image filter的技術來處理圖像,透過不同的濾波器可以對圖片進行convolution而得到不同的結果:
- low pass filter
- high pass filter
在以往這些filter的權重是透過研究而得出的,也就是一堆人都在研究各式各樣不同的filter。但是有沒有辦法讓電腦自己學習什麼樣的filter對我們的task最好呢?
這就是Convolutional Neural Network, CNN在做的事情。
CNN in Computer Vision domain
常見的CV領域應用如下,接下來會快速go through一遍每個領域,最後聚焦在Object Classification的各種模型。
- Object Classification
- Object Detection and Localization
- Object Segmentation
- Object Identification
- Object tracking + ActionRecognition
Object Detection and Localization
除了判斷物體類別外,還要知道物體的bounding box
Issue探討:
- 是先找到物體在去框box,還是先找box在來判斷物體?
- 當透過模型得出一個物體有多個可能符合的box,如何找到最佳的box?
- 找box跟classification看似是兩個不同的task,是否可以一起做(end-to-end)?
Related research:
R-CNN, SPPnet, Fast R-CNN, Faster R-CNN, YOLO, SSD, YOLOv2, YOLO9000, FPN, YOLOv3
Object Segmentation
Segmentation可以說是 pixel-wise的classification,能夠提供更有效的語意資訊
Issue探討:
- 核心概念: patch + sliding window
- 將圖片分成許多小patch,針對每個patch去預測center pixel的label
- Issue1: high computational cost?
- Issue2: accuracy/localization trade off?
- Unsampling(deConvolution)如何對應回原本的點?
- Pooling具有平移不變性(translation invariance),對於classification較robust,但對於segmentation則不好,如何解決?
- Semantic Segmentation (category-wise) v.s. Instance Segmentation (object-aware)
Related research:
FCN, DeepLab, SegNet, Enet, ICNet, DeepMask, SharpMask, InstanceFCN, R-FCN, MNC, Mask R-CNN
Object Identification
Issue探討:
- 臉部辨識技術?
- 如何有有效率的用一個向量來表達一張圖片?
- 應用在圖像檢索(image retrieval)
- Binary descriptor + Hamming distance
Related research:
Deepface, FaceNet, Binary Hashing Code, DeepBit
Object tracking + ActionRecognition
Conv有1d, 2d, 那Conv3d到底用在什麼地方? 就是這裡了!
辨識影片中某時刻的動作:
追蹤影片中的物體:
Object Classification
ImageNet Large Scale Visual Recognition Challenge(ILSVRC)
- ImageNet dataset
- 最後一屆2017年,Why?
- 已經比人眼辨識率還低了你還想怎樣QQ
LeNet
- for MNIST digit recognition
- 2 Conv(Convolution layer) + 2 FC(Fully Connected layer)
AlexNet
- 2 GPU to train
- 2012 ILSVRC Winner(top 5 error rate: 16.4%)
- 8 layers architecture
- first use “ReLU” as activation function
- use data augumentation for training
從此之後開始,正式進入大調參時代
ZFNet
- 2013 ILSVRC Winner(top 5 error rate: 11.7%)
- Same to AlexNet, but use smaller kernel size & increase kernel numbers
VGG
- 2014 ILSVRC 2nd place(top 5 error rate:7.3%)
- more deeper! 19 layers
- use 3x3 Conv & 2x2 Maxpooling only: 目的是用多層的較小的filter達到一個大的filter包含的資訊。舉例來說2個3×3的Conv可以和1個5×5的Conv涵蓋一樣的資訊量,但參數量卻比較少。
- do pooling after mutli-time Conv: 相較於以前一個Conv後面就接一個Pooling,VGG做了很多次Conv才接Pooling,因為這樣可以透過activation function使data有更多non-linear的變化。
GoogLeNet
- 2014 ILSVRC Winner(top 5 error rate: 6.7% )
- Let’s keep go deeper!!
- 22 layers
- inception model
- use 1x1 Conv to reduction dimension
- 1D-CNN? NIN!
- 人在江湖飄,不能不知道。走CV你不能不知道的牛逼論文: Network In Network
ResNet
- 2015 ILSVRC Winner(top 5 error rate: 3.6% )
- more!!give me more depper!!!!!
- 152 layers
- residual block
- 層數越多時,其實效果不一定會越好,因為information在高層中會很難進行傳播
- 層數越多時,其實效果不一定會越好,因為information在高層中會很難進行傳播
SENet
- 2017 ILSVRC Winner(top 5 error rate: 2.251% )
- ResNet + SE block
- learn weights for different kernel
- 可以想成是對feature map做attention
- Global Average Pooling
- GAP? NIN!
- 再說一次,人在江湖飄,不能不知道。走CV你不能不知道的牛逼論文: Network In Network
Issue探討
CNN越來越大到底GPU怎麼吃 ( •́ _ •̀)?
DenseNet
- Dense Block
- 每一層的輸入都包含了前一層的資訊(concat),降低了在層數過大時不容易propagation的問題
- 每一層的輸入雖然很多,但參數量其實很少(Densnet的每一層的kernel數不用像其他model那麼多)
- 因為特徵共用,大部分輸入來自其它層
- 越深層,concat的input還是會越來越多,怎麼辦?
- GAP
- GAP? NIN!
- 再說一遍,走CV你不能不知道的牛逼論文: Network In Network
- GAP
MobileNet
- Depthwise separable convolution: 透過不同的計算方式,在減少參數計算量下達到和一般convolution等價的結果
- Depthwise convolution
- pointwise convolution
- Conv1d -> NIN!
- 最後一遍,走CV你不能不知道的牛逼論文: Network In Network
- 也就是說,任何CNN model都可以透過Depthwise separable convolution得到計算量跟參數量更小的等價model