SqueezeNet(스퀴즈넷)과 MobileNet(모바일넷)

SqueezeNet(스퀴즈넷)과 MobileNet(모바일넷)

2019, Jan 10    


  • squeezenet 관련 필자의 다른 블로그 내용 : https://gaussian37.github.io/dl-concept-squeezenet/
  • mobilenet v1 관련 필자의 다른 블로그 내용 : https://gaussian37.github.io/dl-concept-mobilenet/

SqueezNet과 MobileNet 사용 목적

  • 스마트폰이나 저가형 하드웨어에서 이미지 처리를 하고 싶을 때 기존의 무거운 CNN 모델을 업로드 하기 어렵습니다.
  • 제한된 resource를 사용하여 빠른 prediction을 하고 싶을 때, 모델의 사이즈가 중요한 요소 입니다.
  • MobileNetSqueezeNet은 다소 가벼운 모델이지만 AlexNet을 넘나드는 정확도를 보여줍니다.
    • MobileNetSqueezeNet은 정확도를 조금 손해보더라도 모델은 최대한 작고 효율적으로 설계하였습니다.



SqueezeNet과 MobileNet을 통하여 배울점

  • SqueezeNet의 컨셉과 fire modules
  • Fully connected layer의 문제점과 max pooling layer로 해결하는 방법
  • MobileNet의 컨셉과 spatial separable convolution



SqueezeNet에 대하여 알아봅시다.

  • SqueezeNetAlexNet과 비슷한 정확도를 가지지만 weight는 \(\frac{1}{50}\)배 수준으로 상당히 가볍습니다.
  • SqueezeNet은 다음과 같은 컨셉을 가지고 있습니다.
  • 기존의 사용하였던 3 x 3 필터를 일부를 1 x 1 필터로 대체하였습니다.
    • 1 x 1 필터를 사용함으로써 weight의 수를 \(\frac{1}{9}\)로 줄일 수 있습니다.
  • input 채널의 수를 3 x 3 필터를 이용하여 줄였습니다.
    • convolution layer 에서의 파라미터의 수는 filter의 사이즈, 채널의 수 그리고 필터의 수에 따라 달라집니다.
  • downsample을 늦게 적용하여 convolution layer가 큰 activation map을 가질 수 있도록 합니다.
    • 데이터 downsample을 늦게 할수록 (예를 들어 stride를 1보다 크게 하여서 downsample 하는 작업을 늦게 적용함) 더 많은 정보들이 layer에 포함될 수 있습니다.
    • 이 방법을 통하여 모델은 가능한 작게 만들지만, 정확도는 최대한 크게 만들 수 있습니다.



Fire module 이란?

Drawing


  • fire module은 2개의 layer로 이루어져 있습니다. Squeeze layer와 Expansion layer 입니다.
  • Squeeze layer가 먼저 나온 뒤 Expansion layer가 따라서 나옵니다.
  • Squeeze layer
    • Squeeze layer는 1x1 convolution으로 이루어져 있습니다.
    • 1x1 convolution은 input 데이터의 모든 channel을 하나로 합친 뒤 input channel의 수를 줄여서 다음 layer에 전달하는 역할을 합니다.
      • 간단하게 말하면 channel 수를 조절하는 역할을 합니다.
  • expansion layer
    • 1 x 1 convolution이 3 x 3 convolution과 섞인 형태 입니다.
    • 1 x 1 convolution은 spatial structure를 감지하기 어렵지만 이전 layer의 channel들을 다양한 방법으로 결합시킵니다.
    • 3 x 3 convolution은 이미지 내의 structure를 잘 잡아냅니다.
    • 1 x 1 과 3 x 3 필터 사이즈의 convolution을 섞어서 사용함으로써 표현력이 증가하고 파라미터의 숫자도 동시에 줄일 수 있습니다.
    • 이 때 주의할 점은 1 x 1 convolution과 3 x 3 convolution 결과의 크기를 같게 하려면 적당한 padding을 잘 해주어야 합니다. 사이즈가 같아져야만 layer들을 쌓을 수 있습니다.



SqueezeNet Architecture

  • SqueezeNet은 8개의 fire module을 사용하고 input/output 각각에 1개의 convolution layer를 사용합니다. 주목할만한 점은 SqueezeNet에서 Fully Connected Layer는 전혀 사용되지 않았다는 것입니다.
  • Fully connected layer는 상당히 많은 양의 parameter를 가지고 있습니다. convolution layer에 비교하면 상당히 많습니다.
    • 너무 많은 양의 parameter에 맞추다 보면 overfitting이 발생할 확률도 커집니다.
  • 따라서 SqueezeNet에서는 Global Average Pooling을 사용합니다.
    • Global average pooling은 이전의 convolution layer로 부터 각각의 channel을 전달 받은 다음 모든 값에 대하여 average를 취해줍니다.
    • Pooling layer은 weight 값이 없기 때문에 model 사이즈를 더 크게 만들진 않습니다.
    • 또한 parameter를 더 많들어 내지 않기 때문에 Fully connected layer에 비해서 overfitting 문제에 좀 더 자유롭습니다.



  • 출처 : https://aiinpractice.com/squeezenet-mobilenet/