민프

[AI] MobileNets 에 대해서 알아보자 (MobileNets - Efficient Convolutional Neural Networks for Mobile Vision Applications 리뷰) 본문

[AI | ML]

[AI] MobileNets 에 대해서 알아보자 (MobileNets - Efficient Convolutional Neural Networks for Mobile Vision Applications 리뷰)

민프야 2023. 10. 13. 14:22

이번 포스팅에서는 MobileNets에 대해서 알아보겠습니다.

 

소개 및 등장배경
  • 2017년 Google에서 발표한 논문 입니다.

 

  • 모델 경량화
    • 딥러닝 모델에 대해서 요즘에는 스마트폰, 자동차, 드론 등등 여러 분야에 사용되고 있는데 중요한 부분이
      Low power is must-have
      Real-time is required
      입니다.
      즉, 실시간으로 인식을 할 수 있어야하고, 저전력이어야 합니다. 

      저전력으로 동작을 하면서 정확도도 높아지게 하려면 그에 맞는 작은 사이즈의 모델이 필요하겠죠

      그럼 작은 사이즈의 모델이 주는 이점은 무엇일까요?
      • 작게 만들면 작은 리소스만 사용해서 빠르게 학습할 수 있습니다.
      • 임베디드 프로세서에 들어가기에도 더 적합합니다.
      • OTA가 더 쉽게 진행될 수 있습니다. (사이즈가 작을수록 업데이트가 빨라질 수 있음)
    • 모델 경량화를 하기 위한 방법들은 어떤 것들이 있을까요?
      여러 방법들이 있겠지만 해당 논문에서 적용 된 부분 몇가지만 적어보겠습니다. 
      • Depthwise Separable Convolutions
        • 이 방법이 MobileNets에서 적극적으로 적용한 방법입니다.
      • Distllation
        • 큰 모델(teacher model)의 지식작은 모델(student model)로 전달하는 과정입니다. 
          이 방법은 작은 모델이 큰 모델의 성능을 모방하도록 학습시키며, 이를 통해 작은 모델의 성능을 향상시킬 수 있습니다.
      • Compression
        • 모델의 크기를 줄이고 계산 효율성을 향상시키기 위한 방법입니다. 여러 가지 모델 압축 기술이 있는데, 자세한건 나중에 설명드리도록 하겠습니다. 
Depthwise Separable Convolutions 이란

이번 논문의 Key Point인 Depthwise Separable Convolutions에 대해서 알아보겠습니다.

 

알아보기전에 먼저 영상 or 3D이미지에서 사용되는
3D CNN - Standard Convolution Filtter에 대해서 알아야하는데요.

간단하게 알아보겠습니다.

 

3D CNN - Standard Convolution Filtter

먼저 3D Convolution Layer는 3D 필터를 사용하여 
데이터의 너비높이, 그리고 깊이(Channel) 방향으로 2D CNN과 동일한 방법으로 슬라이딩하면서 합성곱 연산을 수행합니다.

 

이때 
Input Channel, Filters, Output Channel로 아래와 구분될 수 있습니다.

 

간단하게 말씀드려보자면

  • Input Channel = 3 (RGB 이미지)
    각 채널은 이미지의 특정 색상 또는 특성 정보를 포함하고 있어,
    필터가 이러한 정보를 활용하여 특정 특성을 감지할 수 있게 합니다.
  • Filters = 10개의 3x3 크기 필터 (필터의 채널 수 = 입력 이미지의 채널 수, VGG에서는 3x3을 여러번 사용했음)
    필터는 각 input channel에 대해 합성곱 연산을 수행하여 특정 특성을 감지합니다. 
    여러 필터를 사용하면 다양한 특성을 동시에 감지할 수 있습니다.
  • Output Channel = 10 (각 필터에 의해 생성된 10개의 특성 맵, Filter의 개수)
    각 output channel은 특정 필터에 의해 감지된 특성을 나타내며, 
    이러한 특성 맵은 다음 레이어로 전달되어 더 복잡한 특성을 학습하는 데 사용됩니다.

 

https://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

Standard Convolution Filtter 같은 경우에는 

Channel 3개를 동시에(왼쪽 사진에서는 27개) 숫자쌍을 다 곱해서 더한 하나의 숫자값을 표현하게 됩니다.

 

논문에 있는 오른쪽 사진을 보면

Dk : Filter의 width, height

M : Filter의 Input Feature Map의 Channel 개수
N : Filter의 개수 (Output Channel 개수)

를 의미합니다. 

 

그럼 이제 Depthwise Separable Convolution을 알아보면서 비교해보겠습니다.

Depthwise Separable Convolution

논문에 의하면 아래와 같이 depthwise convolution + pointwise convolution으로 이루어져있다고 하는데요

"a depthwise convolution and a 1×1 convolution called a pointwise convolution."

 

먼저 depthwise convolution을 보자면 아래 그림과 같습니다. 

depthwise convolution - https://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

일반 컨볼루션과 달리 입력 채널을 결합하지 않고 각 채널에 대해 개별적으로 컨볼루션을 수행합니다. 
즉, 3개 채널이 있는 이미지의 경우 깊이별 컨볼루션을 통해 역시 3개 채널이 있는 출력 이미지가 생성되게 됩니다.
각 채널이 독립적으로 학습되기 때문에 피처의 표현 능력이 향상될 수 있습니다.

논문에 있는 오른쪽 사진을 보면

Dk : Filter의 width, height

1 : Filter의 Input Feature Map의 Channel 개수
M : Filter의 개수 (Output Channel 개수)

를 의미합니다. 

 

즉, 가로 세로는 똑같고, Channel이 1인 필터 M개를 가지고 와서 각각의 Depthwise로 Convolution을 진행하고

결과값을 가지고 pointwise convolution(1x1 Convolution)로 이어집니다.

pointwise convolution(1x1 Convolution)

Pointwise Convolution은 일반적인 1x1 합성곱을 의미합니다. 
이 연산은 주로 채널 수를 조절하는 데 사용됩니다.

 

 

동작 방식으로는

Depthwise의 Convolution 결과값을 1x1 크기의 필터를 사용하여 합성곱 연산을 수행합니다. 

이 연산은 공간적 차원 (너비와 높이)에는 영향을 미치지 않고 채널 수만을 변화시킵니다. 

예를 들어, 1x1xC 크기의 필터를 사용하면 출력 특징 맵의 채널 수를 C로 변경할 수 있습니다.

 

위 과정을 통하여 파라미터의 개수를 효과적으로 줄일 수 있게 되었습니다.

 

그럼 Body 아키텍쳐에 대해서 알아보겠습니다.

 

MobileNet Body Architecture

위 표에서 s는 Stride 값을 의미합니다.

dw는 depthwise 컨볼루션을 사용하는 것을 의미합니다.

 

표에서 확인 할 수 있듯
처음에는 일반적인 Conv을 진행하다가
depthwise 컨볼루션과 포인트와이즈 컨볼루션을 번갈아 가며 적용합니다.
depthwise 컨볼루션은 입력 특성 맵의 각 채널에 독립적으로 적용되며,
포인트와이즈 컨볼루션은 이러한 출력을 결합하여 더 높은 차원의 특성 맵을 생성함으로써

파라미터의 수를 줄이고 계산 효율성을 높이며, 여러 스트라이드와 필터 크기를 사용하여 다양한 특성을 추출합니다.

 

Result - Object Detection

Faster-RCNN에서 확실히 VGG 모델보다는 인식률이 떨어지긴하지만 
다른 모델들에 비해서 경량화가 잘 되어졌다는 것을 확인할 수 있었고,
모바일에 적합한 모델이라는 것을 확인할 수 있었습니다. 

 

 

 


참고 링크

https://arxiv.org/abs/1704.04861

https://www.youtube.com/watch?v=7UoOFKcyIvM

https://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

 

 

Comments