cnn 초보자가 만드는 초보자 가이드 (vgg 약간 포함)

52
2017.01.23 이이이 A Beginner’s Guide to Understanding CNN Convolutional Neural Network

Upload: lee-seungeun

Post on 21-Feb-2017

2.576 views

Category:

Data & Analytics


11 download

TRANSCRIPT

Page 1: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

2017.01.23

이승은

A Beginner’s Guide to Understanding CNNConvolutional Neural Networks

Page 2: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

언제 쓰는지 ?어떻게 쓰는지 ?….이게 뭔지… .?

모델 자체에 대한 이해 중심으로… .( 용어 + 약간의 수리적 설명 )

Page 3: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

아마도 마지막장에선…

을 설명할 수 있을 것입니다 !

Convolutional Layer, Activation Layer(ReLU), Pooling Layer, Fully Connected Layer, Dropout 에 대한 개념 및 역할

Kernel Size, Stride, Padding 에 대한 개념

Page 4: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Convolutional Neural Nets이미지 분류패턴 인식을 통해 기존 정보를 일반화하여 다른 환경의 이미지에 대해서도 잘 분류함 . Sparse Connectivity 한 특징이 있음 .

http://www.slideshare.net/zukun/p03-neural-networks-cvpr2012-deep-learning-methods-for-vision

내가 발견하고자 하는 대상 (labeled object: 아인슈타인 ) 이 어떨땐 배경에 파묻혀있음 배경과 대상을 잘 분리하여 detect 하려면 절대적인 위치보다 상대적 위치를 고려하는 게 중요함거기다 계산량도 줄어듬 !

Page 5: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

CNN: Input 과 Output

Input

0~255

Depth(R,G,B)Channel

Output

0.8

0.15

0.05

cat

dog

bird

Width

Height

Page 7: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

A Classical CNN Architecture

convolutional layer 를 줄여서 conv layer 로 많이 표현함Convolutional Layer모든 Input 이 거쳐가는 첫번째 Layer

Feature 를 detect 하는 역할을 수행

Low level feature High level feature

Page 8: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Convolution 단어의 뜻… ?

Convolutional Neural NetworkConvolutional Layer

Page 9: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Convolution

http://www.dictionary.com/browse/convolution?s=t

Page 10: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

이미지를 빨간 사각형에서 초록 사각형으로 rolling 하며 detect 하는 것

Convolutional Layer 를 생각하면 떠오르는 느낌을 설명하자면…

Page 11: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Convolutional Layer

32

32

Input image Activation map (Feature map)

28

28

Filter 5 x 5 x 3 (rgb)

x 3 (rgb)

input, output 확인width, height, depth(channel) 확인

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 12: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Filter 와 (Local) Receptive Field

Filter Size = Receptive Field(height, width, depth 모두 똑같음 )

그러나 이 둘은 다른 것 !

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 13: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Filter 는 detect 하고자 하는 feature 에 대한 내용이 담긴 사각형

Receptive Field 는 이미지 위를 filter size 로 rolling 하며 detect 되는 실제 feature

kernel, weights

neuron

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 14: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Activation Map (Feature Map)해당 receptive field 에 fiter 에서 detect 하고자 하는 feature 가 있는지 없는지 알려줌

= 6600

= 0

(50x30)+(20x30)+(50x30)+(50x30)+(50x30)있다 !

없다 !

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 15: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

잠깐 쉬어가는 기호 얘기 , * 와 Element-wise multiplication( 앞장의 계산 ) 을 설명할 때 어디서는 * 이걸 쓰고 어떨 땐 를 씁니다 .수리적으로 굉장히 다른 표현인데… 뭐가 맞는 건가요 ?

http://stats.stackexchange.com/questions/161093/how-exactly-do-convolutional-neural-networks-use-convolution-in-place-of-matrix

Output 이 1 개일 때는 (inner product) 를 쓰시고 Output 이 1 개 이상일 때는 * (convolution) 을 쓰시면 됩니다

드디어 시간이 되었습니다… 싫지만 봐야하는 수리적 표현을 보시죠 ㅠㅠ??? 난희 ??

Element-wise multiplication 은 “ Hadamard Product” 라고 주장하는 분들도 있는데 안타깝게도 이에 대한 수리적인 표현이 없습니다 ㅠㅠ 그래도 통념상 이해하기 쉬운 수식을 써야 소통이 원활할 것 같아서 찾아봤어요 . 물론 아래 말고 이거나 이걸 쓰자고 하는 분들도 있긴 합니다 .

∘ ⊙

Page 16: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

CNN 의 시작은 언제일까 ?

http://yann.lecun.com/exdb/publis/pdf/lecun-99.pdf

CNN 의 시초 (?) 라 불리는 Yann LeCun 의 논문들을 살펴보았다 .

LeNet-5 가 CNN 의 시작이었죠

아래가 시초라 불리는 대표적인 두 논문… 물론 가끔 다른 논문들을 시초로 언급해서 헷갈리지만 ㅠㅠ그리고 Habel and Wiesel(1962), Fukushima(1975), LeCun(1986) 등등 비슷한 개념으로 시초를 얘기하자면… 끝도 없이 다른 걸 찾을 수도 있구용…

Convolution 에 대한 수리적 정의를 정확히 찾기 위해…

Page 17: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

하지만 수리적 Convolution 에 대한 정의는 안보인다…ㅜㅜ

http://yann.lecun.com/exdb/publis/pdf/lecun-99.pdf

두 논문을 보면 , 하기와 같이 동일한 문단이 있다 . 그리고 shift 라는 단어가 보인다 .

관련될 만한 reference 도 눈에 잘 안 보임…

Page 18: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

(Discrete) Convolution 의 수리적 정의

https://en.wikipedia.org/wiki/Convolution

For complex-valued functions f, g defined on the set Z of integers, the discrete convolution of f and g is given by:

The convolution of two finite sequences is defined by extending the sequences to finitely supported functions on the set of integers. When the sequences are the coefficients of two polynomials, then the coefficients of the ordinary product of the two polynomials are the convolution of the original two sequences. This is known as the Cauchy product of the coefficients of the sequences.

Thus when g has finite support in the set{-M,-M+1, … ,M-1,M} (representing, for instance, a finite impulse response), a finite summation may be used:

Cauchy product 의 generalization 은 inner product….

이미지 g (filter) 에 마치 f (receptive field) 가 움직이면서 f 와 곱해서 합하는 맥락상 비슷한 느낌…

사실 Convolution 과 일반적인 수리적 정의의 신호처리 Convolution 과 완전히 다른 거라는 얘기도 있긴 하지만…그래도 일단위키피디아에서 비슷해보이는 정의를 찾아보자 !

( 교환법칙 성립 )

Page 19: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Activation Map(Feature Map) 의 크기는 어떻게 계산할까 ?(output 이 1 개의 scalar 값이라면… .)

32 32-5+1=28 28

Activation Map Size = Input Size - Filter Size + 1

굉장히 먼 길을 헤맸…다시 activation map 으로 돌아오면 !가로 X 세로… ?

https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 20: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

[ 심화과정 ] Activation Map(Feature Map) 의 크기는 어떻게 계산할까 ?Stride: 몇 pixel 씩 filter 가 convolving 하는지 결정하는 값 • Stride 값이 클수록 overlapping 이 덜하고 계산량도 output(activation map) 크기가 작아짐• 정답은 없으나 Karen Simonyan&Andrew Zisserman 논문에선 stride 값을 1 로 설정하여

overlapping 을 통해 feature detection 을 잘할 수 있도록 제안함• 만약 가장 큰 stride 값을 구하고 싶으면 , (input size-filter size) 값을 1 보다 큰 소수 (2,3,5, …) 로 나눠서 떨어지는 경우가 있으면 해당 값 ( 몫 ) 을 stride 값으로 할 수 있음 .

Input: 7 x 7 / Filter: 3 x 3 / Stride: 1

Input: 7 x 7 / Filter: 3 x 3 / Stride: 2

Output(activation map) 크기 : (7-3)/1+1 Output(activation map) 크기 : (7-3)/2+1https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 21: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

[ 심화과정 ] Activation Map(Feature Map) 의 크기는 어떻게 계산할까 ?Zero Padding: activation map 이 input 데이터와 동일한 크기를 유지하기 위해 사용하는 값 • Conv layer 과정에서 output 크기가 줄어드는데 원본 input 데이터에 대한 손실을 방지하는 효과가 있음

Output(activation map) 크기 : (32-5)/1+1 = 28Input: 32 x 32 / Filter: 5 x 5 / Stride: 1 / Zero Padding: 0 일때 ,

Input: 32 x 32 / Filter: 5 x 5 / Stride: 1 / Zero Padding: 2 일때 ,Zero Padding 된 Input 크기 : 32 + 2 x 2 = 36Output(activation map) 크기 : (32-5+2*2)/1+1 = 32

Zero Padding 값은 얼마로 정해야할까 ?Stride 가 1 일때( Filter Size - 1 ) / 2

filter 1 개 만큼 더 움직이려면 filter size -1 만큼이 필요하고 이 0 들을 양쪽에 둬야하니 2 로 나눔https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner's-Guide-To-Understanding-Convolutional-Neural-Networks/

Page 22: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

[ 심화과정 ] Activation Map(Feature Map) 의 크기는 어떻게 계산할까 ?

Output Size = (Input Size+ 2 x Padding - Filter Size) / Stride +1

Padding 이 있을 경우 반영된 Input 크기(Stride 가 1 일때 ) Input 크기에서 Filter 크기를 빼면 , 남을 filter 의 convolving 횟수가 나옴

(Stride 가 1 이 아닐때 ) filter 의 가능한 convolving 횟수를 stride 값으로 나눔Convolving 하기 전 , 첫번째 filter 가 input 과 inner product 를 수행한 횟수

Page 23: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Activation Map(Feature Map) 의 depth 는 얼마일까 ?

R

G

B

정답 :

Filter 의 갯수와 같음 !

http://cs231n.github.io/convolutional-networks/

힌트 1. Input channel 이 여러개인 경우에는 inner product 결과에 대한 partial-sum 을 수행한다 .고로 , RGB 세 종류의 input 이 3 개의 filter 를 적용한 결과는 하나의 scalar 값이다 .

http://linleygroup.com/mpr/article.php?id=11561

힌트 2. Filter 는 여러개를 쓸 수 있다 .

Shared Weights 한 특징파란색 상자 (local receptive fields) 는 convolving 하며 계속 바뀌지만 빨간색 상자 (filter,

weight) 는 변하지 않음어떤 receptive field 에 유용한 feature 라면 다른 receptive field 에도 유용할 것이라는 가정에 근거함

Page 24: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

실제 Conv Layer 에서의 계산 구현 방법은… ?

http://www.rle.mit.edu/eems/wp-content/uploads/2016/11/Tutorial-on-DNN-All-Parts.pdf

Kernel Computation 인 matrix multiplication 을 어떻게 구현할까 ? MIT 의 ‘ Hardware Architecture for DNN’ 자료인데 여기선 convolution 계산으로 간주하고 Toeplitz matrix 에 대한 cross product 로 변환해서 풀었네요 . 하지만 이 부분은 수식을 좀 더 확인해봐야할 것 같아요 . ( 저도 다보기 너무 힘들어서 여기까지만 ㅠㅠ )

Page 25: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Activation Layer• Conv Layer 바로 다음에 사용하는 nonlinear layer

(Conv layer 의 output 을 activation map 이라고 부르는 이유 !)

다시 CNN 의 classical architecture 를 확인하면…

Page 26: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Nonlinear Layer 가 왜 필요한 것인가… ?

만약 Nonlinear Layer 가 없다면 , 만약 Conv Layer 만 있다면 , Only Matrix 연산만 하게 되고…그럼 Linear 한 단순한 문제밖에 못 풀게 됨

universal function approximator. http://www.statistics4u.com/fundstat_eng/cc_linvsnonlin.html

x*x*x*x 는 그냥 x^4 로 한번에 계산해버리는 게 나음

Page 27: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Systematic evaluation of CNN advances on the ImageNet

Nonlinear layer 가 없으면 성능이 나쁨 ( 정확도가 낮아요 ㅠㅠ )안 쓰는 경우

Page 28: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Activation Layer 엔 뭐가 있냐면…

전통적인 (conventional) activation layer: sigmoid, tanh

하지만 요즘 대세는ReLU, Maxout

시간이 없으니 오늘은 제일 기본적인 ReLU 만 할게요…ㅠㅠ Maxout( 두 개의 W 와 b 중에서 큰 값이 나온 것을 사용하는 함수 ),

Leaky-ReLU(ReLU 함수의 변형으로 음수에 대해 1/10 로 값을 줄여서 사용하는 함수 ) 등등은 링크1, 링크2 링크3으로 셀프 공부 추천합니다 !

Leaky-ReLU, P-ReLU, R-ReLU

Page 29: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

전통적인 방법들을 quick 하게 봅시다 !

Sigmoid Hyperbolic tangent

98 년도 , 르쿤 선생님은 ‘ Efficient Backprop’ 에서 말씀하셨습니다 .일반적인 Sigmoid 보다 tanh 를 쓰라고요 . 이유는 tanh 가 평균이 0 에 가깝고 원점에 대해 대칭(symmetric) 하기 때문에 normalized 된 output 을 낼 수 있기 때문이죠 . ( 이 output 은 다음 단계에서 normalized input 으로 들어갈 수 있죠 )

http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf

둘 다 non-linear 하게 값을 특정 범위로 한정할 수 있고 미분 시 계산이 쉬워서 backprop 할 때 좋아요

Page 30: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

ReLURectified Linear Unit

Geoffrey hinton 쌤은 말하셨죠…우리는 wrong type of non-linearity 를 사용해서 NN 이 발전하지 못했다고…

수정된그렇다면 무엇을 수정했는가 ?

1. ( 계산량을 줄이기 위해 노력했지만…그럼에도 불구하고 ) 복잡하고 느린 계산2. Gradient 가 사라지는 현상 . Vanishing Gradient Problem 으로 유명하죠

http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

Page 31: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

ReLURectified Linear Unit

Geoffrey hinton 쌤은 말하셨죠…우리는 wrong type of non-linearity 를 사용해서 NN 이 발전하지 못했다고…

수정된그렇다면 무엇을 수정했는가 ?

1. ( 계산량을 줄이기 위해 노력했지만…그럼에도 불구하고 ) 복잡하고 느린 계산2. Gradient 가 사라지는 현상 . Vanishing Gradient Problem 으로 유명하죠

내가 바로 ReLU…. 누가봐도 쉽죠 ?

max([x,0]) 으로 처리하면 계산량도 엄청 작다… !미분항도 1,0 으로 나온다…ㄷㄷㄷ

https://www.cs.toronto.edu/~hinton/absps/reluICML.pdf

Page 32: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Vanishing Gradient 현상은 무엇인가 ?RNN 에서 많이 나오죠 . 더 자세한 내용은 RNN 시간에 해요 ~

Sigmoid(tanh) 는 미분값이 작기 (0.3 미만 , 1 이하 ) 때문에 계속 곱하다보면 0 에 수렴해버림Ouput 에 대한 초기 layer 의 weight 들은 사라지는 ( 의미가 없어지는 ) 현상 발생

ReLU 는 미분값이 0 혹은 1 이기 때문에 값이 0 이상인 경우 output 까지 초기 layer weight 도 전달될 수 있음

https://nn.readthedocs.io/en/rtd/transfer/

Sigmoid Hyperbolic tangnet ReLU

수리적 해석을 보고싶으시면 여기로

Page 33: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Pooling Layer• 연속적인 Conv layer 사이에

subsampling 을 위한 layer

다시 CNN 의 classical architecture 를 확인하면…

Page 34: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

http://www.slideshare.net/zukun/p03-neural-networks-cvpr2012-deep-learning-methods-for-vision

인접할 수록 겹치는 부분 (stride 1 이라면 겹치는 부분이 엄청 많겠죠 !) 이 많음그러니 그 중에서 (Spatial Sub-sampling 한 특징 ) best match selection 만 가져다 쓰자 .그러면 더 feature detection 에도 robust 해져서 overfitting 도 방지하고 계산량도 줄일 수 있다 .

Pooling Layer

weight 하나 정도 튀는 노이즈가 있어도 묻힘

Page 35: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Max Pooling 제일 많이 쓰이는 Pooling 의 한 종류로 한 subregion 에서 제일 큰 숫자를 선택함 Max 값을 쓰는 이유는 특정 feature 가 존재할 때 큰 activation 값을 가지므로 가장 효과적일 수 있기 때문임 실제로 average pooling 이나 L2-norm pooling 보다 더 좋은 결과를 보여줌2x2 filter, 2 stride(filter 와 같은 크기 ) 가 max pooling 에서 가장 일반적인 subregion 정의 방법임

아래 subregion 에서 가장 큰 수는 ? 6

위 Max Pooling 사용 시 줄일 수 있는 계산 비용은 ?

정답 : 1/4, 75%

Page 36: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Pooling Layer 은 꼭 써야 하나 ?

아니요 . 안 쓰거나 stride 값을 크게하는 방향의 트랜드도 있긴 함그래도 직관적으로 이해할 수 있는 방법이고 실제로 성능이 좋아지는 경우가 많으므로 일단 먼저 써보고 다른 방법을 고려하길 추천함

Graham, Benjamin (2014-12-18). "Fractional Max-Pooling”Springenberg, Jost Tobias; Dosovitskiy, Alexey; Brox, Thomas; Riedmiller, Martin (2014-12-21). "Striving for Simplicity: The All Convolutional Net"

Page 37: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Fully Connected Layer• CNN 의 가장 마지막 layer

로 N 개의 class 로 분류함

CNN 의 classical architecture 의 마지막 단계

뭔지 이미 아시죠 ?

Page 38: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

시각화된 Summary

Convolutional LayerActivation Layer

Non-linearity, ReLu

http://mlss.tuebingen.mpg.de/2015/slides/fergus/Fergus_1.pdf

Pooling

http://cs231n.github.io/convolutional-networks/

Page 39: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

CNN 의 classical architecture 다 배웠다 !!!!!

그러면 이제 성능을 높이긴 위한 기술을 배워봅시다 !Dropout, Batch Normalization(BN), Initialization 기법 중 이번 시간엔 dropout 만 !

Page 40: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

DropoutTraining 중 random 하게 특정 unit 들을 제외하여 overfitting 문제를 개선하는 regularization 기법여러개의 모델을 합칠 경우 성능이 좋아지는 경우가 machine learning(ML) 에 있는데 그게 neural net(NN)에선 계산량 때문에 쉽지 않음 .Dropout 을 통해 마치 서로 다른 네트워크 여러개를 학습한 average model 을 test set 에 적용하는 효과를 얻을 수 있음

Hinton, Geoffrey E. 외 5명 (2012). "Improving neural networks by preventing co-adaptation of feature detectors" Nitish Srivastava; Geoffrey Hinton 외 3명 (2015). "Dropout: A Simple Way to Prevent Neural Networks from Overfitting"

Training 할 땐 p 의 확률로 해당 unit 의 on/off 를 결정하고Test 할 땐 weight 에 p 를 곱해서 합하는 방법을 사용함

Page 41: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Dropout 효과 굉장히 좋음 !

Nitish Srivastava; Geoffrey Hinton 외 3명 (2015). "Dropout: A Simple Way to Prevent Neural Networks from Overfitting"

자매품으로 Random Dropout 기법도 있음각 layer 에서 p 를 random 하게 가져가는 기법

http://www.vision.cs.chubu.ac.jp/MPRG/C_group/C070_fukui2015.pdf

Page 42: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

이제 아래에 대해선 잘 아시겠죠 ?

Convolutional Layer, Activation Layer(ReLU), Pooling Layer, Fully Connected Layer, Dropout 에 대한 개념 및 역할

Kernel Size, Stride, Padding 에 대한 개념

Page 43: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

The neural inspiration in models like convolutional nets is very tenuous. That's why I call them "convolutional nets”, not

"convolutional neural nets", and why we call the nodes "units" and not "neurons".

업계에서 CNN 이란 용어가 일반화되었지만 처음 CNN 으로 문제를 풀어 유명하게 만든 저자는 Convolutional Nets 이란 표현을 선호한다는 이야기가 있습니다 .

Yann LeCun Facebook

마지막으로 , CNN 을 검색하다보면 convolutional nets 도 많이 나오는데너는 진정 CNN 과 동의어이냐… .?

Page 44: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Page 45: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

CNN 에서의 굵직한 논문들은 다음과 같습니다 .주로 ILSVRC 우승작이라 볼 수 있죠 ..

AlexNet(2012)

ZF Net(2013)

GoogLeNet(2014)

VGGNet(2014)

ResNet(2015)

(IMAGENET Large Scale Visual Recognition Challenge)

VGGNet(2014)

VGGNet 을 리뷰해보도록하겠습니다 !

Page 46: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Karen Simonyan; Andrew Zisserman (2015) “Very Deep Convolutional Networks For Large-Scale Image Recognition”

VGG 의 가장 큰 기여는 3 x 3 짜리 작은 convolution filters(stride=1)를 가지고도 깊게 (16-19 weight layers) 만들면 좋은 결과를 얻을 수 있다는 것을 보인 것AlexNet: 11x11 filters, 4 strides / ZF Net: 7x7 filters, 2 stridesVisual Geometry Group의 약자

Page 47: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Motivation

5 X 5 filter 1 개= 3 x 3 filter 2 개 (2 strides)

7 X 7 filter 1 개= 3 x 3 filter 3 개 (2 strides)

3 X 3 filter 를 여러개 쓰면 5 x 5 나 7 x 7 과 비슷한 효과를 내면서 parameter 수를 줄일 수 있다

Input/Ouput 이 channel c 개를 가질 때 , 각각의 parameter 수 :7 x 7 conv 사용 시 3 x 3 보다 parameter 수 81% 증가7 x 7 conv layer: 7^2xc^2 = 49 x c^23 x 3 conv layer: 3x(3^2xc^2) = 27 x c^2

5 x 5 conv 사용 시 3 x 3 보다 parameter 수 39% 증가5 x 5 conv layer: 5^2xc^2 = 25 x c^2 3 x 3 conv layer: 2x(3^2xc^2) = 18 x c^2

Page 48: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

ConvNet configurations 깊어짐

• 표시 설명• conv3-64: filter size: 3,

64 channels• ReLU 는 생략 ( 실제론 사용됨 )

• conv1(C 열 ): 크기 변화없이 non-linearity 를 증가시키기 위해 삽입됨

Karen Simonyan; Andrew Zisserman (2015) “Very Deep Convolutional Networks For Large-Scale Image Recognition”

Page 49: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Training• 초기화 방법 (weight): config A 는 shallow 하므로 random 으로 , 나머지는 config A  로

initialize 함• 초기화 방법 (bias): 0• Input image: 224 x 224 의 고정된 이미지를 얻기 위해 rescale 후 random 으로 짜름

Testing• Fully-convolutional network 를 이미지에 적용해 test time 에 소요되는 sample

multiple crop 시간을 줄임Implementation Detail

• C++ Caffe toolbax 로 구현• 4 개의 NVIDA Titan Black GPU 가 꽂힌 single 시스템 사용• 모델과 데이터의 parallelism 을 활용하여 각 net 의 서로 다른 layer 에 적용함• Training 에 약 2-3 주 소요

Karen Simonyan; Andrew Zisserman (2015) “Very Deep Convolutional Networks For Large-Scale Image Recognition”

Page 50: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Classification Expriment

• A 에 적용한 A-LRN(Local Response Normalisation) 은 효과가 없었고 나머지에는 normalisation 적용 안함

• 깊이가 깊어질수록 classification error 가 낮아지지만 19 이상은 saturation 되었음 ( 단 , 다른 input 데이터에서는 다른 결과가 나올 수 있음 )

• conv1 도 도움이 되었음

Karen Simonyan; Andrew Zisserman (2015) “Very Deep Convolutional Networks For Large-Scale Image Recognition”

Page 51: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)

Comparison with the state-of-the-art

Karen Simonyan; Andrew Zisserman (2015) “Very Deep Convolutional Networks For Large-Scale Image Recognition”

7 개 모델을 ensemble 해서 만들었던 ILSVRC 제출 모델 외에 추가로 만든 VGG 을 통해 가장 좋은 알고리즘보다 낮은 classification error rate 을 만들 수 있었음• soft-max class posterior 을 평균내어 여러 모델의 결과를 합침

Page 52: CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)