Going Deeper with Convolutions
chullhwan-song opened this issue · 1 comments
chullhwan-song commented
특징
-
2014년 vgg 와 함께 등장
-
cnn은 depth가 깊어지고 넓어질수록 overfiting 문제가 빠질 가능성이 높다. 그동안 hyper-paramenter와 초기값 설정을 통해 극복. 하지만, 연산량의 증가등의 문제로 고가의 좋은 시스템에서만 작동.
- 이런 단점을 어느정도 해결, 즉, 다양한 실험을 통해 깊어지고 넓어지지만, 연산량을 유지.
- GoogleNet 핵심
- 22개의 layer
- 총 9개의 inception 모듈 (밑의 빨간색 동그라미 - 숫자는 feature-map 수)
- 빨간색 - max pooling
- 노란색 - softmax
- detail 구조
- 첫번째줄은 convolution(conv) 연산이 의미 즉, 7x7 kernel(receptive field) 의 2 stride 연산이고, output 즉, feature map에 대해 112x112 크기의 64개의 개수을 얻었다는 의미가 된다. depth는 1이면 단독으로 conv 있다는 의미(inception module이 아니라는 뜻)
- depth가 = 2인뜻은, conv가 연속적으로 두번 있다는 의미이며, inception module연관이 깊다는 의미가 된다.
- depth가 2개 나오는 첫번째만 제외하고 inception module이다.
- 위의 첫번째 그림의 구조 참조해라
- 1x1 kernel : 위의 그림 3(a) 에서, 64의 의미는 이전 layer에서, 192개를 input 으로 받아서 64개 feature map을 얻었다는 의미 이며, 곧 reduction(192->64)했다는의미가 된다.
- 위의 링크로부터 설명이 되어 있지만, 3x3 kernel 이전에 1x1 kernel를 사용한다.
- 3x3 reduce : 그니까, 3x3 kernel 앞쪽에 있는 1x1 kernel
- 3x3: 1x1뒤에 있는 3x3 kernel
- 이후도 이런식으로 이해하면 됨.
- param : parameter의 수
- ops : 연산수
- 이는 V1 구조를 설명이며, 이후, V2, V3구조가 나온다(시간되면~)
- 구조가 일반 cnn(vgg, alexnet..)과 다르게 구조가 복잡하며, 이로 인해 다양한 응용분야에 적용하기 어려운 구조, 실제적으로 localization등의 응용 구조에서 googlenet이 쓰이는 경우는 거의 보지 못함 왜일까?