今天我們要介紹一個很強的技術,CapsNet。
在傳統的CNN中,在許多種情況已經能得到很好的辨識率,例如辨識一群生物裡面哪個是一隻狗,但這需要大量的資料做訓練,且太過擁擠的圖片辨識率也可能會較差。另外CNN會採用池化層來降低維度,但這在某些需要細節來辨識的情況下是個問題,當我們輸入產生一點點的變化時,因為池化層會丟失些許特徵,因此輸出可能會保持不變。而膠囊網路(Capsule Network)只需要少量資料做訓練,並能夠保留細部的特徵,且能分辨物件的相對位置,達到較高的辨識率。
CapsNet具有以下特點
可以看到再輸入後面,有一個Convolutional layer,接著就進入PrimaryCaps層。
再來透過動態路由與PrimaryCaps的傳播後轉換成DigitCaps層,接著就是輸出。
輸出為$6×6×8×32$
可以想像成一個$20×20×256$在stride為2做一般的卷積,並做了8次不同權重的卷積。
ps (20-9+1)/2=6
透過CapsNet可以知道元素的位置與意義,就不會出現嘴巴在眼睛的位置,機器還會把它當成人了XD
Dynamic Routing Between Capsules
先讀懂CapsNet架構然後用TensorFlow實現:全面解析Hinton提出的Capsule