chullhwan-song/Reading-Paper

Going Deeper with Convolutions

chullhwan-song opened this issue · 1 comments

특징

  • 2014년 vgg 와 함께 등장

  • cnn은 depth가 깊어지고 넓어질수록 overfiting 문제가 빠질 가능성이 높다. 그동안 hyper-paramenter와 초기값 설정을 통해 극복. 하지만, 연산량의 증가등의 문제로 고가의 좋은 시스템에서만 작동.

    • 이런 단점을 어느정도 해결, 즉, 다양한 실험을 통해 깊어지고 넓어지지만, 연산량을 유지.
    • GoogleNet 핵심
      • inception module
        image
        • 파란색 부분를 통해 scale feature 효과적 추출
        • 1x1 convolution :
          • 이 부분에서 연산량을 줄임으로써, depth width들을 높일수 있는 계기
          • 연산량을 줄일수 있다는 말은 channel수를 줄인다는 의미 > NIN 논문 참조
    • 22개의 layer
    • 총 9개의 inception 모듈 (밑의 빨간색 동그라미 - 숫자는 feature-map 수)
      image
      • 빨간색 - max pooling
      • 노란색 - softmax
    • detail 구조
      image
      • 첫번째줄은 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이 쓰이는 경우는 거의 보지 못함 왜일까?
  • inception module 참조(위의 첫번째 그림과 같은 의미)
    image