DLCV - Convolutional Neural Networks & Image Segmentation
Convolutional Neural Networks, CNN
只要看 local 的區域就好,不需要看整張照片
- Property I of CNN: Local Connectivity
- Each neuron takes info only from a neighborhood of pixels.
曾原本的 NN 換到 CNN 上,可以學到多少 ?
3 維的 input,7 維的 output
Global connectivity: 7 x 3 = 21 種特徵
Local connectivity: 3 x 3 = 9 種特徵
透過 local connectivity 使原本需要學習 21 種特徵下降到 9 個特徵
What is a Convolution?
線性的運算機制,使原圖由 filter 過濾後看哪裡有此 pattern
Feature Activation Map #2-> output 出的 feature map,就是 conv output (response)
inner product
讓紅色的 filter 和灰色的 signal 做內積,產生藍色的 output
紅色的 filter 反轉
fliter: 例如眼睛的特徵,透過反過來乘 origin input img,使眼睛這個特徵凸顯出來,就可以過濾出這張圖片中是否有眼睛
藍色寬度為 6,因為 filter 有 6 個
filter 的第三個維度 是 輸入圖的寬度
filter 的個數 是 輸出圖的寬度
cnn 長寬會因為 filter 越來越小
為了 cnn 深度可以有很多層,會透過 padding 來增加,雖然會影響你辨識的特徵,但是實際上在過濾的時候,譬如眼睛的輪廓邊,你也不會那麼介意那個編是不是模糊或差一點點啦
橘色在學有沒有車窗,藍色在看有沒有車子的整個車門,綠色在看有沒有整台車子的形狀,如果有車子的存在,綠色的值就會很大
Dilated Convolution
等價上用比較少的 learnable 的特徵,去學到比較大的範圍的特徵,但也因為許多細節被丟失,所以都是有所取捨
使用情境: 在 input 很大張,解析度很高的時候,節省計算時間
最後拉成一條一維的 Vector 後再去 MLP 做處理ReLU (Rectified Linear Unit)
因為只 care 正值,只凸顯正值Max Pooling
每兩個人,會留下比較強的人,若有多出來的第三個人,那他就是幸運地種子選手,會直接晉級
適者生存,肉弱強食!
透過 Monlinearity 把負的特徵 cut 掉,既然是負的,就不是我們要找的,沒必要紀錄
conv、ReLU、Pooling 可以調換順序,根據需求 MLP 大部分時候放在最後,因為要做分類有 64 個 filter,output size 第三個維度 C 就是 64
用以計算需要多少 Hyperparameter 存放於記憶體
Number of output elements = C * H’ * W’ = 64 * 56 * 56 = 200704
Bytes per element = 4 (for 32-bit floating point)
KB = (number of elements) * (bytes per elem) / 1024 = 200704 * 4 / 1024 = 784
Weight shape = C_out x C_in x L x L = 64 x 3 x 11 x 11
Bias shape = C_out = 64
Number of weights = 64 * 3 * 11 * 11 + 64 = 23296
Number of floating point operations (multiply + add)
= (number of output elements) * (ops per output element)
= (C_out x H’ x W’) * (C_in x K x K)
= (64 * 56 * 56) * (3 * 11 * 11)
= 200,704 * 363
= 72,855,552
fully connect 的 MLP 要求的參數才是最多的
ResNet
- How can we train very deep network?
- Residual learning
- 就是有捷徑,一個 skip 的 residual connect 的 bypass 的路徑,可以避免 gradient vanish
深的 model 不見得好
1x1 Conv
雖然是 1x1 但第三維寬度還是會和 origin input 的長寬相同
也就是在做 learnable 的 Dimension reduction
Example 2 可以只做一千萬個乘法
EXample 1 要將近十億
Dropout
把學好的神經元丟掉,使其成為較小的神經網路,但 drop out 後的神經元再也回不來
Data Augmentation
不能真正的解決 overfitting 問題
JigSaw
作業一
SimCLR
從不同張照片抓出來的特徵越不像越好
BYOL (Bootstrap Your Own Latent)
為了避免 model collapse,為了避免學到同樣的東西
同一個 entry 要越像越好,
Cosegmentation
把共同出現的物體 segment 出來
Unsupervised -> 沒有 label,自己學習哪個是共同物體
就不用人工一張張去框出譬如,椅子,的輪廓
Instance Segmentation
不只把車子認出來,還認出是哪一台車
supervised
Sliding Window
中心點
但沒效率,要問超多點,這個方法沒有很聰明
Fully Convolutional Nets
U-Net 原理 ?
把原圖變小,再放大,找出不同的區塊間
upsampling-> nearest neighbor
Transpose Convolution
會拿 downsampling 的資訊給 upsampling,為了不要丟失資訊