loading

About light weight CNNs(MobileNet 시리즈들)


Light weight convolutional neural networks

Published on December 08, 2022 by JunYoung

AI deep learning CNN light weight

7 min READ


경량화 네트워크

Deep learning의 발전은 하드웨어와 함께 시작되었고, 충분히 좋은 성능을 가지는 CPU 혹은 GPU 없이는 뛰어난 추론 능력을 가진 네트워크를 fully 활용할 수 없는 것이 사실이다.
그러나 언제까지나 무거운 서버컴에서 딥러닝을 돌릴 순 없기 때문에 딥러닝 네트워크의 경량화, 간소화가 필수적이다.

따라서 경량화 네트워크의 목적은 두 가지로 나눌 수 있다.

  1. CNN을 applicable하게 만들고, 이를 모바일 device나 embedding system에 적용이 가능하게끔 한다.
  2. 경량화 과정에서 accuracy나 performance를 적어도 유지, 가능하다면 improve하고 싶다.

경량화 자체는 어렵진 않다고 생각할 수 있다. 그러나 Deep neural network의 구조를 좀 더 간결하게 구성한다던지 filter kernel의 채널 수를 줄여 가용 파라미터 수를 줄인다는 식의 접근이 있지만, 함부로 구조나 파라미터를 축약하게 되면 학습 가능한 representation이 제한되기 때문에 이마저 그리 간단하지 않다.
따라서 이러한 네트워크 구조를 제안한 여러 논문들을 살펴보고, 어떤 식으로 파라미터 수를 줄일 수 있었는지 확인해보도록 하자.


MobileNet

유명한 논문 중 하나인 MobileNet은 google로부터 제안된 방법이다.

바로 depthwise seperable convolution인데, 이는 depth-wise convolution과 point-wise convolution을 서로 연결한 구조가 된다.
이름에서 알 수 있듯 depthwise convolution과 pointwise convolution은 콘볼루션이 적용되는 영역에 대한 내용인데, 흔히 우리가 처리하고자 하는 image tensor는 각 레이어를 통과하며 하나의 batch 당 $C \times H \times W$로, 각각 채널, 높이, 너비를 가지는 3차원의 데이터로 구성된다. 그리고 이러한 이미지 텐서에 적용되는 필터의 크기는 $C \times D_K \times D_K$로, 각각 채널, 커널의 높이, 커널의 너비를 가지는 3차원의 weight로 구성된다.

따라서 위의 그림을 참고하게 되면(실제 mobilenet 논문에 첨부된 사진을 인용하였다), $D_K$로 표시된 dimension이 커널의 높이와 너비에 대해 $M$은 필터가 적용될 데이터의 채널 수가 되고, $N$은 필터의 개수가 된다. notation에 일부 혼란이 있을 수 있어 미리 말하자면 그림에서의 $M$이 내가 언급한 $C$와 같은 값이라고 생각해주면 된다.
연산 후에는 데이터가 $N \times H’ \times W’$이 된다.
이런 식으로 convolution이 진행되는데, 각 커널 필터의 파라미터 수를 확인해보면, [ {D_K}^2 \times M \times N ] 이 되고, 이러한 커널이 각 레이어의 convolution마다 존재하기 때문에 parameter 수가 dimension value $D_K$에 따라 급격히 증가하는 구조가 된다. 심지어 segmentation과 같이 high level computer vision에서는 이러한 부분이 네트워크 경량화에 큰 bottleneck으로 작용한다.

따라서 이를 위와 같이 두 개로 분리하자는 것이 mobilenet에서 제시한 방법이다. 좌측에 보이는 $D_K \times D_K \times 1$ 크기의 커널을 $M$개 만듦으로써 각 데이터의 채널 별로 연산을 진행하고자 하는 것이 depthwise convolution이고, 우측에 보이는 $1 \times 1 \times M$ 크기의 커널을 $N$개 만듦으로써 각 데이터의 픽셀 별로 연산을 진행하고자 하는 것이 pointwise convolution이다. Depthwise convolution을 제시한 논문에서는, feature map(데이터)에서의 채널 간의 상관관계와 spatial(같은 채널에서의 픽셀 간) 상관관계가 완전히 분리될 수 있다고 가설을 세웠다.
따라서 depthwise convolution은 computational complexity를 줄일 수 있지만 channel 사이의 correlation을 관장할 수는 없고, 이러한 문제를 pointwise convolution을 통해 채널 간 상관관계를 채워주는 느낌이다. 이러한 가설을 토대로 분리한 두 convolution step에 대한 parameter수는, [ ({D_K}^2 \times M) + (M \times N) < {D_K}^2 \times M \times N ] 위와 같이 감소할 수 있는 것이다.
MobileNet 구조는 신기하게도 pooling layer를 전혀 적용하지 않았는데, 그 대신 depth-wise seperable convolution을 stride 2를 적용해서 sub-sampling하는 방식을 채택하였고, 전체 layer 수는 28개다.


ReLU6

기존 CNN 구조를 보면 각 convolution block에서의 activation function으로 대부분 ReLU()를 사용한다. 물론 현재는 ReLU()도 이런 저런 문제들 때문에 잘 안쓰이긴 하지만 그래도 조상격인 스테디셀러나 마찬가지다.

그러나 ReLU의 경우 value가 양수라면 모든 값을 내보낼 수 있기 때문에 상한선이 없다는 문제점이 생긴다. 이게 왜 큰 문제가 될 수 있냐면, 값의 상한선이 없다면 이를 표현할 메모리를 한정적으로 사용할 수 없다는 것이다. 이러한 문제에서 제시된 것이 바로 fixed point 관점, training 관점에서 모두 좋은 평가를 받은 ReLU6 activation function이다.

딥러닝 모델 최적화에 있어 fixed point로 변환해야 하는 경우가 생기는데, 6으로 상한선을 두게 되면 3개의 bit만 가지고 모든 가짓수를 표현 가능하기 때문에 최적화 관점에서 큰 도움이 된다. 또한 상한선을 두게 되면 딥러닝 모델이 학습할 때 퍼져있는 feature들을 더 일찍 학습할 수 있다는 분석도 존재한다. 여러 테스트를 통해 상한선을 결정할 때, 6이 가장 성능이 좋았다는 결과를 토대로 ReLU6를 제안했다고 한다.


MobileNet v2

유명한 논문의 다음 논문인 MobileNet-v2도 보도록 하자.

가장 왼쪽에 보이는 그림이 MobileNetv1의 framework이고, 중앙과 우측의 두 구조가 바로 MobileNetv2의 framework다.
핵심부터 미리 말하자면 MobileNetv2에서는 inverted residual 구조를 사용했다. MobileNetv2의 좌/우 block은 모두 pointwise($1 \times 1$) + Convolution + ReLU6로 시작한다. 그리고 depthwise convolution을 수행할 때 왼쪽 block은 stride 1을 적용하여 spatial dimension을 그대로 가져가고, 오른쪽 block은 stride 2를 적용하여 downsampling한다. 세번째에 다시 pointwise convolution을 적용하는데, 이때는 activation function을 적용하지 않는다. Downsizing이 될 경우 skip connection이 이루어질 수 없기 때문에 skip connection(residual connection)이 없고 왼쪽 block에는 residual connection이 있는 것을 확인할 수 있다.
대강 구조를 확인해보았는데, 이를 좀 더 풀어서 설명하자면 expansion convolution으로 채널 수를 뻥튀기 시키고, 거기에 depthwise convolution을 적용한 뒤에 이를 pointwise convolution으로 production하는 구조와 같다. 즉 맨 앞단의 $1 \times 1$ convolution은 expanding 역할, 뒷단의 $1 \times 1$ convolution이 projection 역할을 한다. 또한 projection 뒤에는 activation function을 적용하지 않은 이유는 ReLU를 통한 feature 왜곡을 최소화하기 위함이라고 한다.

그림을 참고하면 우측이 inverted residual 구조를 나타낸 것이고 좌측이 원래의 residual 구조를 나타낸 것이다. 채널 수가 확장되는 차이가 있다. 좌측에 보이는 구조가 곧 ResNet 구조라 보면 되고, 우측이 MobileNetv2에서 사용한 구조라 보면 된다.


MobileNet v3

유명한 논문의 다음 논문의 다음 논문인.. MobileNet-v3도 보도록 하자.
우선 심플하게 해당 논문은 inverted residual 구조를 고대로 사용했고, MobileNet v1에서의 pointwise, depthwise 개념이랑 MobileNet v2의 inverted residual은 유용하다고 판단하여 계속 사용한다.
다만 조금 달라진 점이라면 새로운 activation function을 제시했다는 점 그리고 SE(Squeeze and Excitation network) 모듈을 사용했다는 점이 될 수 있겠다. 각각 순서대로 설명하면,

h-swish

h-swish는 swish function의 개량된 버전인데, 솔직히 본인은 swish도 잘 몰라서 찾아봤다. 다들 그렇다고 답해주길 바라고 있다. [ \text{swish}(x) = \frac{x}{1+e^{-x}} ] 그래서 찾아봤는데 오잉? 그냥 시그모이드에다가 $x$ 곱한 녀석이더라. 생각보다 별볼일 없는 친구라 생각이 들었다. 암튼 sigmoid를 요즘은 잘 안쓰니까, 어찌 보면 sigmoid를 조금 바꿔놓은 swish라는 애를 ReLU 식에도 적용이 가능하지 않을까? 라는 생각이다. 는 바로 적용. [ \text{h-swish}(x) = x\frac{\text{ReLU6}(x+3)}{6}
]

pytorch에서는 hardswish란 이름으로 모듈이 있는 듯하다. 참고해보실 분들은 참고!

SE(Squeeze and Excitation)

사실 이 친구는 굉장히 유명하기도 하고 그래서 읽어보는 걸 추천한다. 내용도 엄청 복잡복잡하지 않고 간단명료하게 딱 그림, 설명 이 정도면 대강 어떤 목적으로 구현된 모듈인지 이해할 수 있다.

STN 논문을 읽어보신 분들은 아실 수도 있는데, 얘도 궁극적으로 추구하고자 하는 것은 모듈을 사용함으로써 자동적으로 layer 별로 attention이 최적화가 되는 걸 바라는 것이다. 보통 우리가 어떠한 feature map을 쓸 때 해당 feature map의 어느 채널이 유용한 정보를 담고 있는지 신경 쓰지 않기 때문에 효율적인 학습이 어렵다는 관점에서 나온 모듈인데, MobileNet에서 pointwise convolution이 채널 간의 연관성을 되살려주는 역할을 하고 있다는 가정 하에 요런 보조적인 장치 하나가 성능에 큰 효과를 줄 수 있다는 것이다.
심지어 그림을 보면 알 수 있지만 weight를 도출하는 방식은 단순히 squeeze(spatially average)한 다음에 함수를 통과시키는 구조다. 매우 간단쓰

딥러닝 네트워크를 만들 때 네트워크 구조 짜는 거나, 하이퍼 파라미터 튜닝하는 거나 이 모든게 자동화가 완전히 되지 못한다. AutoML은 이러한 디자인/경험적인 문제를 해결하고자 하는 process라 보면 된다.

  • Search space : 시도할 아키텍쳐의 집합
  • Search algorithm : search space를 어떤 식으로 explore할 것인지. Randomly하게 할 수도 있고 Bayesian optimization 관점으로 접근할 수도 있고 아니면 강화 학습 등등…
  • Evaluation strategy : NAS 알고리즘을 어떤 방식으로 학습할 것인지. 흔히 하는 Training/Validation 작업을 할 것인지 혹은 fully-supervision, few-shot 등등…

대표적인 용어에 대해 설명하자면 위와 같다.

NAS 방법이 엄청 다양하고, 이거에 대해서 한나절 설명하자니 lightweight 모델에 대한 내용이 부수적이게 될 것 같아 여기서 멈추도록 하겠다.. 암튼 NetAdapt 알고리즘을 통해 network 구조를 최적화했다고 한다. 그래서 그런지 MobileNetv3 논문 제목부터가 “Searching for MobileNetV3”.

A n o t h e r p o s t i n c a t e g o r y