ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Paper Review] MobileNets: Efficient Convolutional Neural Networks for Mobile VisionApplications (Howard et al., 2017)
    Paper Review/Model Architectures 2026. 2. 6. 00:11

    이 논문이 발표될 당시, 딥러닝 계의 전반적인 흐름은 더 깊고 복잡한 모델을 만들어 높은 정확도를 달성하는 데 집중되어 있었다. 하지만 이런 경향은 모델의 크기를 키우고 연산 속도를 늦추어, 실제 로봇이나 자율주행 자동차, 증강 현실(AR)과 같이 연산 자원이 제한된 모바일 환경에서 실시간으로 작동해야 하는 응용 분야에는 적용하기 어렵다는 큰 문제를 안고 있었다. 이때 이 논문의 저자들은 '정확도와 효율성 사이의 균형'을 어떻게 맞출 것인가에 대한 해답으로 MobileNet을 제시한다.

    MobileNet의 핵심 아이디어는 Deptwise Separable Convolution이라는 독특한 구조에 있다. 기존의 표준 합성곱(Standard Convoltion)은 입력 채널 전체를 훑으며 특징을 추출(Filtering)하고 이를 결합(Combining)하는 과정을 한 번에 수행한다. 반면, MobileNet은 이 과정을 두 단계로 쪼갠다. 먼저 입력 채널마다 하나씩의 필터를 적용해 특징을 추출하는 Depthwise Convolution을 수행하고, 그 다음 $1\times 1$ 크기의 필터를 사용하는 Pointwise Convoltion을 통해 채널 간의 정보를결합하는 방식인 것이다. 이 단순한 분리 작업만으로도 연산량과 모델의 파라미터 수를 획기적으로 줄일 수 있게 되었다.

    또한 논문에서는 단순히 효율적인 아키텍처를 제안하는 데 그치지 않고, 모델 설계자가 자신의 서비스 환경에 맞춰 모델의 크기와 속도를 조절할 수 있는 두 가지 하아퍼파라미터인 Width Multiplier($\alpha$)Resolution Multiplier($\rho$)를 도입했다고 강조한다. $\alpha$는 각 레이어의 채널 수를 일률적으로 줄여주는 역할을 하고, $\rho$는 입력 이미지의 해상도를 낮춰 전체적인 연산 비용을 제어한다. 이를 통해 개발자는 성능(정확도) 손실을 최소화하면서도 타켓 기기에서 허용되는 지연 시간(Latency) 내에 모델이 구동되도록 유연하게 최적화할 수 있게 된 것이다.

    결과적으로 해당 MobileNet은 이미지 분류뿐만 아니라 객체 탐지(Objecct Detection), 얼굴 속성 분석, Geo-localization 등 다양한 분야에서 기존의 무거운 모델들에 필적하는 성능을 내면서도 훨씬 가볍고 빠를 수 있음을 실험적으로 증명해냈다.

    Prior Work

    이때 당시 효율적인 모델을 만들기 위한 노력은 크게 두 가지 흐름으로 나뉘어 있다. 하나는 이미 크게 만들어진 모델을 나중에 압축(Compression)하는 방식이고, 다른 하나는 처음부터 작고 효율적으로 설계하는 '소형 네트워크 설계(Small Network Design)' 방식이다.

    MobileNet은 처음부터 작게 설계하는 흐름에 속할 것이다. 논문에서는 이 흐름 속에서 MobileNet의 핵심 기술인 Depthwise Separable Convolution이 어디서 유래했는지 밝힌다. 해당 기술은 MobileNet이 처음 발명한 것은 아니다. 2014년경 Sifre의 연구에서 처음 소개되었고, 이후 Inception 모델에서도 연산량을 줄이기 위해 일부 도입되었다. 하지만 MobileNet의 진정한 가치는 이 파편화된 기술을 네트워크의 표준 구조로 채택하여 극단적인 효율화를 이루어냈다는 점에 있다.

    또한 이때 당시의 다른 경쟁 모델들과의 차이점도 명확히 한다.

    • SqueezeNet : 이 모델은 주로 파라미터 수(모델의 용량)를 줄이는 데 집중했다. 하지만 MobileNet은 단순한 크기뿐만 아니라 'Latency(지연 시간)', 즉 실제 기기에서 돌아가는 속도를 최적화하는 데 더 큰 방점을 두엇다.
    • Xception & Factorized Networks : 이들 역시 MobileNet과 유사한 분리 합성곱 방식을 제안했지만, MobileNet은 이를 더 간결한 아키텍처로 정립하고 모델의 크기를 자유자재로 조절할 수 있는 하이퍼파라미터까지 제공한다는 점에서 차별화된다.

    추가적으로, 이때 당시부터 지금까지 계속 이어져 오는 모델 압축 기법들에는 Product Quantization & Hashing, Pruning, Distillation 등이 있는데, MobileNet은 모델 자체를 소형으로 설계하다보니 다른 모델 압축 기법들과 상호 보완적인 점이 흥미로운 점이다.

    결론적으로 논문에서는 "기존 연구들이 모델의 용량(Size) 줄이기에만 급급할 때, 우리는 실제 하드웨어에서의 구동 속도(Speed)와 성능 사이의 트레이드오프를 조절할 수 있는 범용적인 프레임워크를 만듣겠다."라는 것을 강조한다.

    MobileNet Architecture

    논문 저자들은 Depthwise Separable Convolution이라는 개념을 통해 기존의 표준 합성곱을 완전히 재정의한다. 핵심은 하나로 뭉쳐있던 연산을 필터링(Filtering)결합(Combining)이라는 두 단계로 쪼개는 것이다.

    1. Depthwise Separable Convoltion

    먼저, 우리가 흔히 아는 표준 합성곱은 입력 데이터에서 공간적인 특징을 추출하는 것과 채널 간의 정보를 섞는 것을 한꺼번에 처리한다.

    논문에서는 표준 합성곱(Standard Convolution) 연산 비용(Computational Cost)을 다음과 같이 정의된다.

    $$D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F$$

    • $D_K$: 커널(필터)의 크기 (예: $3\times3$)
    • $M$: 입력 채널 수
    • $N$: 출력 채널 수
    • $D_F$: 입력 피처맵의 크기

    여기서 중요한 점은 입력 채널($M$)과 출력 채널($N$), 그리고 커널 크기($D_K^2$)가 모두 곱해지는 형태라는 것이다. 즉, 채널이 늘어날수록, 필터가 커질수록 연산량이 기하급수적으로 늘어나는 구조인 것이다.

    여기서 MobileNet은 위 무거운 연산을 두 개의 층으로 분리하여 가볍게 만든다.

    1. Depthwise Convolution(필터링 단계) : 표준 합성곱은 모든 채널을 한꺼번에 훑지만, 여기서는 각 채널마다 딱 하나의 필터($3\times 3$)만 사용한다. 예를 들어 입력이 3채널(RGB)이면 필터도 딱 3개만 써서 각 채널의 공간적 특징만 뽑아낸다. 채널 간의 결합은 하지 않는 것이다.
    2. Pointwise Convolution(결합 단계) : 필터링이 끝났으니 이제 채널끼리 섞어줄 차례이다. 여기서는 $1\times 1$ 크기의 아주 작은 필터를 사용한다. 이 필터는 공간적인 특징은 보지 않고, 오직 여러 채널의 값들을 하나로 합쳐서 새로운 출력 채널($N$)을 만드는 역할을 수행한다.

    그렇다면 왜 이렇게 분리했을까? 분리한 것이 연산 효율을 어떻게 높일까?

    이유는 명확하다. 커널 크기와 출력 채널 수 사이의 곱셈 관계를 끊어버리기 위해서이다. 표준 합성곱에서는 $3\times 3$이라는 필터 크기가 출력 채널 수 ($N$)와 매번 곱해졌지만, MobileNet 구조에서는 $3\times 3$연산은 채널별로 한 번씩만 수행하고(Depthwise), 그 이후에 $1\times 1$ 연산으로 채널 수를 늘리거나 줄인다.(Pointwise)

    좀더 수치적으로 접근을 해보자.

    표준 합성곱 비용이 $D_K^2 \cdot M \cdot N \cdot D_F^2$였다면, 이를 쪼갠 Depthwise Separable Convolution의 총 비용은 다음과 같다.

    • Depthwise($D_K^2 \cdot M \cdot D_F^2$) + Pointwise($M \cdot N \cdot D_F^2$)

    이 두식을 비율로 계산해 보면, 표준 합성곱 대비 연산량이 얼마나 줄어드는지 알 수 있다.
    $$\frac{1}{N} + \frac{1}{D_K^2}$$

    여기서 $N$은 보통 수백에서 수천에 달하는 출력 채널 수이고, $D_K$는 커늘 크기인 3이다. 즉, $1/N$은 거의 0에 가깝기 때문에, 전체 연산량이 약 $1/D_K^2$ 수준으로 감소한다는 결론이 나온다.

    우리가 흔히 사용하는 $3\times 3$ 필터라면? 표준 합성곱보다 약 8~9배 적은 연산량만으로도 거의 동일한 작업을 수행할 수 있다는 의미이다.

    레이어의 구성
    MobileNet은 단순히 연산만 쪼갠 것이 아니다. 각 레이어 뒤에 배치되는 Batch Normalization(BN)ReLU의 구성에도 주목해야 한다.

    표준 합성곱은 한 번의 연산 후에 BN과 ReLU를 거치지만, MobileNet은 Depthwise Convolution 후에도 BN/ReLU를 적용하고, Pointwise Convolution 후에도 다시 한번 BN/ReLU를 적용한다. 쪼개진 두 층이 각각 독립적인 비선형층으로 작동하게 함으로써, 연산량은 줄이되 모델이 학습할 수 있는 복잡성(Non-linearity)은 최대한 유지하려는 의도인 것이다.

    이때 당시 다른 연구들은 $3\times 3$을 $3\times 1$ 과 $1\times 3$으로도 분해를 했다. 이렇게 공간적인 차원을 더 잘게 분해할 수도 있었는데, 왜 MobileNet은 이렇게까진 안했을까?

    논문 저자들은 이미 Depthwise 레이어에서 연산량을 충분히 줄였기 때문에 공간적인 차원을 더 잘게 분해하지 않았다고 말한다. 전체 연산의 대부분은 $1\times 1$ 레이어에서 발생하는데, 더 분해를 해봤자 얻을 수 있는 추가적인 이득은 없다고 판단했기 때문이라고 한다.

    2. Network Structure and Training

    그렇다면, 수학적 이득을 본 Depthwise Separable Convolution이 실제 전체 네트워크에서 어떻게 조립되고, 왜 하드웨어 친화적인지 살펴보자.

    MobileNet은 첫 번째 층만 표준 합성곱(Full Connvolution)을 사용하고, 그 이후부터는 모두 Depthwise Separable Convolution을 차곡차곡 쌓아올린다. 여기서 주목할 점은 층의 개수이다.

    위 그림에서 볼 수 있듯이, 표준 합성곱 레이어 하나가 MobileNet에서는 두 개의 레이어(Depthwise + Pointwise)로 쪼개진다. 각 레이어 직후에는 반드시 Batch NormalizationReLU 비선형 활성화 함수를 붙인다. 결과적으로 MobileNet은 총 28개의 레이어를 갖게 되는데, 그렇게 되면 연산량이 다시 늘어나는 것이 아닌가라는 의문이 든다. 하지만 저자들은 다운샘플링(이미지 크기를 줄이는 작업)은 별도의 Pooling 대신, 첫 번째 층과 Depthwise 층에서 Stride를 조절하는 방식을 택해 구조를 단순화한다.

    그렇다면 "Pooling을 버리고 Stride를 선택한 이유?"가 무엇일까?
    보통 CNN에서는 Feature Map의 크기를 줄이기 위해 Max Pooling 같은 별도의 레이어를 중간중간 끼워 넣는다. 하지만 MobileNet은 Pooling 레이어를 따로 두지 않는다. 대신 Depthwise Convolution 레이어 자체에서 Stride를 2로 설정해버린다.

    • Pooling을 쓸 때: [Conv] -> [BN] -> [ReLU] -> [Pooling] (총 4단계)
    • MobileNet 방식: [Conv(Stride=2)] -> [BN] -> [ReLU] (총 3단계)

    이렇게 하면 별도의 Pooling 레이어를 연산할 필요가 없어지므로 네트워크 구조가 더 간결해진다. 또한, 최근 딥러닝 트렌드는 Pooling처럼 정보를 강제로 버리는 방식보다, Stride를 가진 Convolution을 통해 학습 가능한 방식으로 해상도를 줄이는 것을 선호한다. MobileNet은 이 방식을 통해 연산 단계(Step)를 하나 더 줄이면서도 효과적으로 정보를 압축한 것이다.(아래는 MobileNet의 구조이다.)


    그렇다면 왜 더 빠른 것인가?
    논문은 단순히 '연산 횟수(Multi-Adds)'가 적다고 해서 반드시 빠른 것은 아니라고 꼬집는다. 예를 들어, 행렬의 비어 이씨는 값들을 건너뛰는 'Sparse' 연산은 이론적으로 빠르지만, 실제 하드웨어 가속기에서는 오히려 효율이 떨어지는 경우가 많다.

    하지만 MobileNet은 다르다.위 표를 보면, 전체 연산 시간의 무려 95%를 $1\times 1$ Pointwise Convolution에 할당한다. 이 $1\times 1$ 연산은 메모리 재배치(im2col) 과정 없이도 **GEMM(General Matrix Multiply)이라는 가장 최적화된 수치 선형 대수 알고리즘을 직접 사용할 수 있다.

    결국 MobileNet은 이론적으로도 가볍지만, 컴퓨터가 가장 잘 계산할 수 있는 구조로 설계되었다.는 점이 핵심이다. 파라미터의 75%가 이 $1\times 1$ 레이어에 집중되어 있다는 사실은, 하드웨어 효율성을 극대화하려는 저자들의 치밀한 설게를 보여준다고 할 수 있다.

    Training
    학습 전략(Training)에서도 흥미로운 지점이 발견된다. Inception V3와 같은 거대 모델을 학습시킬 때와는 정반대의 전략을 취한다.

    • 규제 완화 : 작은 모델은 이미 파라미터가 적어 과적합(Overfitting) 위험이 낮다. 따라서 Label Smoothing이나 강한 데이터 증강(Augmentation)을 줄였다.
    • Weight Decay ; 특히 $3\times 3$ Depthwise 필터에는 가중치 감쇠(Weight Decay)를 거의 적용하지 않거나 매우 적게 주었다. 이 필터들은 이미 파라미터 수가 너무 적어서, 굳이 더 억제할 필요가 없었기 때문이다.

    3. Width Multiplier:Thinner Models

    지금까지 Depthwise Separable Convolution이라는 어떤 구조적 혁신을 통해 연산량을 이미 대폭 줄였다. 하지만 실제, 현실 세계의 요구사항은 훨씬 더 다양하다. 어떤 기기는 메모리가 극도로 부족할 수 있고, 어떤 앱은 실시간 처리를 위해 더 빠른 속도가 필요할 수 있다. 저자들은 이를 해결하기 위해 모델을 통째로 새로 설계하는 대신, 기존 구조를 유지하며 '너비'만 조절하는 아이디어를 제안한다.

    Width Multiplier($\alpha$)
    Width Multiplier($\alpha$)의 역할은 아주 단순하면서도 강력하다. 네트워크의 모든 레이어에서 입력 채널($M$)과 출력 채널($N$)의 개수를 일정한 비율($\alpha$)로 줄이는 것이다.

    보통 $\alpha$ 값으로는 1, 0.75, 0.5, 0.25를 사용한다.

    • $\alpha = 1$ : 지금까지 설명한 표준 MobileNet이다.
    • $\alpha < 1$ : 모델의 너비가 줄어든 'Thinner MobileNet'이 된다. 예를 들어 $\alpha$가 0.5라면, 모든 레이어의 채널 수가 절반으로 줄어든다.

    그렇다면, 연산량은 얼마나 줄어들지 확인해보자.
    채널 수를 $\alpha$배만큼 줄였을 때, 전체 연산 비용은 다음과 같이 변한다.
    $$D_K \cdot D_K \cdot \alpha M \cdot D_F \cdot D_F + \alpha M \cdot \alpha N \cdot D_F \cdot D_F$$
    여기서 주목할 점은 $\alpha$가 두 번 곱해지는 항($\alpha M \cdot \alpha N$)이다. 즉, 채널 수를 절반($\alpha = 0.5$)으로 줄이면, 연산량과 파라미터 수는 대략 $\alpha^2$인 0.25배(4분의 1)로 줄어들게 된다.

    선형적으로 줄어드는 것이 아니라 제곱에 비례해서 줄어들기 때문에, $\alpha$값을 조금만 조절해도 모델의 무개를 엄청나게 가볍게 만들 수 있는 것이다.

    4. Resolution Multiplier: Reduced Representation

    앞서 설명한 Width Multiplier($\alpha$)가 모델의 '너비(채널)'를 줄여주었다면, 이번에는 모델이 다루는 데이터의 '크기(해상도)'를 조절한다.

    Resolution Multiplier($\rho$)
    이 파라미터의 개념은 아주 직관적이다. 입력 이미지의 크기를 줄이면, 그 이미지가 네트워크를 통과하면서 만들어지는 모든 중간 단계의 Feature map(Internal Representation) 크기도 정비례해서 줄어든다.

    논문에서는 $\rho$를 1, 0.857, 0.714, 0.571 등으로 설정하여 입력 해성도를 224, 192, 160, 128로 조절하는 예시를 보여준다.($\rho = 1$이 기본 해상도 224이다.) 중요한 점은, $\rho$는 모델의 파라미터 수(무게)에는 영향을 주지 않고 오직 연산량(Computational Cost)만 줄여준다는 것이다.

    아래 식을 봐보자.
    $$D_K \cdot D_K \cdot \alpha M \cdot \rho D_F \cdot \rho D_F + \alpha M \cdot \alpha N \cdot \rho D_F \cdot \rho D_F$$
    여기서 Feature map의 가로, 세로 크기인 $D_F$에 각각 $\rho$가 곱해지면서, 전체 연산량은 $\rho^2$에 비례하여 감소하게 된다. 예를 들어 해상도를 224에서 112로 절반($\rho=0.5$만 줄여도, 연산량은 1/4로 뚝 떨어지게 된다.

    위 테이블을 보면, 표준 합성곱에서 시작해 MobileNet의 기술들이 하나씩 추가될 때마다 연산량이 얼마나 드라마틱하게 변하는지 보여준다. 여기서, 마지막 단계의 해상도 조절($\rho$) 단계에서는 파라미터 수가 전혀 변하지 않는 것을 볼 수 있다. 이는 메모리 용량은 여유가 있지만 연산 속도가 느린 기기에서 성능을 최적화할 때 아주 유용한 전략이 될 것 같다.

    Experiment

    위 테이블을 보면, 표준 합성곱만 쓴 모델과 MobileNet의 Depthwise Separable Convolution을 사용한 모델을 비교한다. 정확도는 단 1.1% 정도만 차이가 나는데, 연산량(Mult-Adds)과 파라미터 수는 약 9배나 줄어들었다.

    또한 Shallow vs Deep, 연산량이 비슷하다면 모델을 얇게 만드는 게 나을까, 아니면 MobileNet처럼 깊게 만드는 게 나을까?를 비교했다. 결과는 깊은 모델(Deep MobileNet)의 승리였다. 연산량이 비슷해도 층을 깊게 쌓는 것이 특징 추출에 훨씬 유리하다는 것을 증명하였다.

    3번째 테이블은, 모델의 너비(채널 수)를 줄였을 때(Width Multiplier)의 변화이다. $\alpha$가 1.0에서 0.25까지 줄어들 수록 연산량과 파라미터는 제곱($\alpha^2$)에 비례하여 급격히 줄어드는 것을 볼 수 있다. 아래 이미지를 보면, 연산량이 줄어듦에 따라 정확도가 완만하게 깎이다가 아주 작아지면 급격히 떨어지는 Elbow 지점을 확인할 수 있다.

    위 테이블의 마지막 테이블은 Resolution Multiplier를 줄이는 실험이다. 입력 해상도를 224에서 128까지 줄여본 실험인데, 아래 이미지를 보면, 위 이미지랑 비교했을 때, 속도를 높여야 할 때는 해상도를 줄이는 것이 너비(채널)를 줄이는 것보다 정확도 방어 측면에서 더 효율적일 수 있다는 인사이트를 제공한다.

    다음은 MobileNet을 당시 업계 표준이었던 무거운 모델들과 직접 비교를 해본다.


    위 표를 보면, MobileNet이 VGG16보다 정확도는 높으면서도 크기는 32배 작고, 연산량은 27배나 적다. 또한, 비슷한 정확도를 가진 GoogoleNet보다 훨씬 가볍다.

    이미지 분류 외에 다른 분야에서도 잘 작동하는지 보여주는 실험들도 있다. Fine-grained, Object Detection, Face & Geo-localization 에서도 강한 경쟁력을 보여준다.

    Conclusion

    이 논문은 Depthwise Separable Convolution이라는 구조를 통해 거대한 연산 성능이 필요했던 딥러닝 모델을 모비일 기기로 가져올 수 있게 한 혁신적인 연구라고 생각한다. 수학적인 분석을 통해 연산량을 거의 9배나 줄이면서도 정보 손실을 최소화한 설계임을 보여준다.

    또한 저자들은 Width-Multiplier와 Resolution Multiplier라는 두 가지 파라미터를 제안하면서, 하드뒈어의 성능과 정확도 사이에서 Trade-off를 정밀하게 맞췄다고 생각한다.

    모델을 경량화하는 입장에서 보면, 설계 자체를 가볍게 만들었다는 것에 큰 감명을 받았다. 또한 MobileNet에 특화된 어떤 경량화 기법을 사용한다고 하면 $1\times 1$ Convolution의 특징을 잘 파고 들어, 정밀하게 공략을 해야될 것 같다는 생각이 들기도 한다.

    추가적으로 논문에서는 GEMM을 말하며, "실제 하드웨어 가속기에서 얼마나 효율적인가"를 설명하는데, 경량화 관점에서 해당 모델이 돌아가야하는 하드웨어를 생각하며, 해당 하드웨어 가속기에서 얼마나 효율적인가를 고민하는 습관을 가져야할 것 같다.

Designed by Tistory.