Tuesday, April 14, 2020

Test

Test


Wednesday, April 08, 2020

AI 從頭學(二八):Network in Network

AI 從頭學(二八):Network in Network

2017/06/05

前言:
  
在 AlexNet 之後,用 1 x 1 convolution 來降維,是大型網路的趨勢之一。

-----

Summary:

本篇主要介紹 Network in Network (NIN) 中的 1 x 1 convolution [1]。這對於降低大型網路 feature maps 的維度、減少運算量,很有幫助 [2]-[4]。

[5]-[9] 則是關於 1 x 1 convolution 的中英文說明。

-----

Question

Q1: NIN
Q2: GoogLeNet
Q3: VGGNet
Q4: ResNet
Q5: Global Average Pooling

本文提出五個疑問,為 1 x 1 convolution 在 NIN [1]、GoogLeNet [2]、VGGNet [3]、ResNet [4] 的作用為何?以及由 1 x 1 convolution 延伸而來的 global average pooling。 

-----

Q1: NIN 

NIN 的概念是在傳統的 convolutional layers (圖1.1a)中間加上全連接層(圖1.1b)。這個結構稱為 mlpconv layer,好幾個 mlpconv 串起來,稱為 NIN,參考圖1.2。

圖1.1b不容易瞭解,可另外參考圖1.3a。

以圖1.3a來說明,原圖經過 convolution 之後產生 64 個 feature maps,每張的大小是 56 x 56,我們把這64張 feature maps 叫做 channels。假設某張圖上面某點是 xij,每個 channel 上都會有一個  xij (64個 channels 共有64個 xij),連到一個 (1 x 1 x)64 點的全連接層做線性組合,則會產生一個新的 feature map,大小一樣是56 x 56。

Filter 有32個,每個 filter 造一層新的 feature map,則新的 feature maps 大小為 56 x 56 x 32,不再是 56 x 56 x 64,維度就下降了。但作者原來使用 mlpconv layers 的目的是增加網路深度以提高網路的表現力,參考圖1.3b。

1 x 1 convolution 的概念後來被廣泛使用 [2]-[4],一些重要的網路都用它來降維,減少運算量,讓網路可以設計的更深更強大,參考圖1.4。 


Fig. 1.1. Comparison of linear convolution layer and mlpconv layer, p. 2 [1].



Fig. 1.2. The overall structure of Network In Network, p. 4 [1].



Fig. 1.3a. 1 x 1 convolution, p. 45 [8].



Fig. 1.3b. Increasing the depth and representational power, p. 2 [2].



Fig. 1.4. Revolution of depth, p. 78 [8].

-----

圖2.1是傳統的 convolution 加上 ReLU。這邊有個符號會引起混淆,T一般表示為轉置矩陣( Appendix A),不過這邊 xij 表示為 feature maps 上的一個點,wk 是第 k 張 feature maps 上的 convolutional kernel,所以這個公式代表在 xij 為中心的區域與 wk 這個 filter / kernel / matrix 做 bit-wise multiplication。



Fig. 2.1. Feature map, p. 2 [1].
 
-----

圖2.2a是本文的重點,也就是 1 x 1 convolution。

第一行沒問題,上面已經說過了,它是 xij 在不同 channel 上做線性組合產生的第一張新的 feature map。接下來則是把原來 feature maps 裡面第一張丟掉,補上這張新圖。如此反覆進行,直到第 n 張 新的 feature map 產生,參考圖2.2b與2.2c。

圖2.3請自行參考。



Fig. 2.2a. The calculation performed by mlpconv layer, p. 3 [1].



Fig. 2.2b. Cross channel parametric pooling (CCPP), p. 3 [1].




Fig. 2.2c. Multi layer perceptron (MLP), p. 1-2 [1].



Fig. 2.3. The feature maps of maxout layers, p. 4 [1].

-----

Q2: GoogLeNet

不同大小的 filter,可以對應不同的 scale,越到後面,5 x 5會用的越多。

Filter 越小,使用的個數要越多,參考圖3.1a。結果串接起來,再傳到下一層,參考圖3.1b。

什麼時候不需要用 convolution,只要用 max pooling?參考圖3.2,由於只抓到投影片,這裡暫時無法回答這個問題。

總之,這是個「天真」的模型,因為運算量太大,跑不動。

所以多了三個 1 x 1 convolution 來降維,參考圖3.3。

串的部分比較難以理解,網路上有同樣 size 的版本 [*],也有不同 size 的版本 [**], [***]。

但總之,先知道 1 x 1 convolution 如何降維就可以了。



Fig. 3.1a. A heterogeneous set of convolutions, p. 24 [9].



Fig. 3.1b. Filter concatenation, p. 3 [2].



Fig. 3.2. Inception module, na¨ıve version, p. 26 [9].



Fig. 3.3a. Inception module with dimensionality reduction, p. 27 [9].



Fig. 3.3b. Dimension reduction. 2 [2].

-----

Q3: VGGNet

VGGNet [3] 的模型C也用到 1 x 1 convolution,不過不是用來降維,而是 NIN 原本的意圖。

比較B跟C,可以知道多了 1 x 1 convolution,還是有幫助的,參考圖4.1與4.2。

但是比較C跟D,可以知道 1 x 1 不如 3 x 3,在這個例子。



Fig. 4.1. VGGNet, p. 3 [3].



Fig. 4.2. VGGNet, p. 6 [3].

-----

Q4: ResNet

在 ResNet [4] 中,1 x 1 不僅用來降維,也可以用來昇維,參考圖5.1。



Fig. 5.1a. A deeper residual function, p.6 [4], p. 84 [8].



Fig. 5.1b. Deeper bottleneck architectures, p. 6 [4].

-----

Q5: Global Average Pooling

在最後一層的 mlpconv layer,這些 feature maps 不再做 1 x 1 convolution,而是平均後丟到 softmax 的輸出層,參考圖6.1。這個架構也被 GoogLeNet 繼承,參考圖6.2。




Fig. 6.1a. The global average pooling layer, p. 4 [1].



Fig. 6.1b. Global average, p. 4 [1].



Fig. 6.1c. Visualization of the feature maps from the last mlpconv layer, p. 9 [1].



Fig. 6.2. Global average pooling in GoogLeNet, p. 5 [2].

-----

結論:

截至寫作此時,NIN 被引用次數是705,而 GoogLeNet 被引用次數是 3298。

提出 1 x 1 convolution 固然好,拿它來降維才真是厲害吧!

-----

Appendix A.



Fig. 7.1. Transpose of matrix A, p. 33 [10].



Fig. 7.2. Convolution represented as a sparse matrix C, p. 19 [11]

-----

References

[1] 2014_Network in network

[2] 2015_Going deeper with convolutions

[3] 2015_Very deep convolutional networks for large-scale image recognition

[4] 2016_Deep residual learning for image recognition

[5] One by One [ 1 x 1 ] Convolution - counter-intuitively useful – Aaditya Prakash (Adi) – Random musings of a deep learning grad student
http://iamaaditya.github.io/2016/03/one-by-one-convolution/

[6] CNN网络中的 1 x 1 卷积是什么? - zhangjunhit的博客 - 博客频道 - CSDN.NET
http://blog.csdn.net/zhangjunhit/article/details/55101559

[7] 卷积神经网络中用1 1 卷积有什么作用或者好处呢? - 知乎
https://www.zhihu.com/question/56024942

[8] winter1516_lecture.pdf
http://cs231n.stanford.edu/slides/winter1516_lecture7.pdf

[9] Convnets.pdf
http://www.cs.toronto.edu/~guerzhoy/411/lec/W06/convnets.pdf

[10] 2016_Deep Learning

[11] 2016_A guide to convolution arithmetic for deep learning

-----

SENet

SENet

2019/10/09

-----


// Review  SENet — Squeeze-and-Excitation Network, Winner of ILSVRC 2017 (Image Classification)

-----


-----

-----

-----



-----


-----


-----


// 解读Squeeze-and-Excitation Networks(SENet) - 知乎

-----

References

[1] SENet
Hu, Jie, Li Shen, and Gang Sun. "Squeeze-and-excitation networks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
http://openaccess.thecvf.com/content_cvpr_2018/papers/Hu_Squeeze-and-Excitation_Networks_CVPR_2018_paper.pdf 

-----

# 1K claps
Squeeze-and-Excitation Networks - Towards Data Science
https://towardsdatascience.com/squeeze-and-excitation-networks-9ef5e71eacd7

# 88 claps
Review  SENet — Squeeze-and-Excitation Network, Winner of ILSVRC 2017 (Image Classification)
https://towardsdatascience.com/review-senet-squeeze-and-excitation-network-winner-of-ilsvrc-2017-image-classification-a887b98b2883

# 106 claps
Squeeze and Excitation Networks (Hu et al., 2017) - Konpat Ta Preechakul - Medium
https://medium.com/@konpat/squeeze-and-excitation-networks-hu-et-al-2017-48e691d3fe5e 

# 三種不佳的 SENet 設計
解读Squeeze-and-Excitation Networks(SENet) - 知乎
https://zhuanlan.zhihu.com/p/32702350

STNet

STNet

2020/04/08

-----


圖一,仿射變換 [12]。

-----


圖二,STNet [1]。

-----


圖三,仿射變換 [4]。

-----


圖四,仿射變換 [12]。

-----


圖五,仿射矩陣 [12]。

-----


圖六,仿射與線性 [3]。

-----


圖七,雙線性插值 [5]。

-----


圖八,雙線性插值與雙立方插值 [6]。

-----


圖九,次梯度法 [7]。

-----


圖一〇,非凸與凸集合 [8]。

-----


圖一一,非凸與凸函數 [8]。

-----


圖一二,凸函數定義 [8]。

-----


圖一三,梯度與次梯度集合 [8]。

-----


圖一四,貪婪梯度下降法 [8]。

-----


圖一五,次梯度演算法 [8]。

-----


圖一六,次梯度法小結 [7]。

-----


圖一七,STNet 前向傳播 [10]。

-----


圖一八,STNet 反向傳播 [10]。

-----


圖一九,整數取樣核與雙線性取樣核 [12]。

-----


圖二〇,取樣極值公式 [13]。

-----


圖二一,雙向取樣核的反向傳播 [12]。

-----


圖二二,STNet 實作 [14]。

-----

References

[1] STNet 論文
Jaderberg, Max, Karen Simonyan, and Andrew Zisserman. "Spatial transformer networks." Advances in neural information processing systems. 2015.
http://papers.nips.cc/paper/5854-spatial-transformer-networks

[2] 仿射變換 | 線代啟示錄
https://ccjou.wordpress.com/2011/03/24/仿射變換/

[3] Activation function 到底怎麼影響模型? - Dream Maker
https://yuehhua.github.io/2018/07/27/activation-function/

[4] 仿射变换与投影变换 - 侯凯 - 博客园
https://www.cnblogs.com/houkai/p/6660272.html

[5] 图像中的插值 - alifpga - 博客园
https://www.cnblogs.com/alifpga/p/7883451.html

[6] 双线性插值和双三次插值_人工智能_天才樱木-CSDN博客
https://blog.csdn.net/datase/article/details/80576054

[7] 优化中的subgradient方法_人工智能_Hard Working-CSDN博客
https://blog.csdn.net/lansatiankongxxc/article/details/46386341

[8] Gradient, Subgradient and how they may affect your grade(ient) - People
https://people.csail.mit.edu/dsontag/courses/ml16/slides/notes_convexity16.pdf

[9] 理解Spatial Transformer Networks - 知乎
https://zhuanlan.zhihu.com/p/41738716

[10] Spatial Transformer Networks(空间变换神经网络)_网络_brandon2015的博客-CSDN博客
https://blog.csdn.net/brandon2015/article/details/71750768

[11] 基础DL模型-STN-Spatial Transformer Networks-论文笔记 | arleyzhang
https://arleyzhang.github.io/articles/7c7952f0/

[12] Review: STN — Spatial Transformer Network (Image Classification)
https://towardsdatascience.com/review-stn-spatial-transformer-network-image-classification-d3cbd98a70aa

[13] ConvNets Series. Spatial Transformer Networks - Towards Data Science
https://towardsdatascience.com/convnets-series-spatial-transformer-networks-cff47565ae81

[14] Spatial Transformer Networks Tutorial — PyTorch Tutorials 1.4.0 documentation
https://pytorch.org/tutorials/intermediate/spatial_transformer_tutorial.html