TT Lab
요금제

한국어

시작하기
블로그

블로그

작은 모델 만들기: 깊이별 분리 합성곱·가지치기·증류, 그리고 EfficientTAM

상태: 초안 (2026-10-16), 일부 실측. 직접 해 본 것은 노트북 CPU 예제(code/04_small_models.py, 1초 안팎)와 실험용 GPU 의 EfficientTAM 측정입니다(6절, 집 랩의 8GB급 노트북용 GPU 한 장, 1회용 파드). 논문 수치는 원문을 열어 조건과 함께 옮겼고, 하드웨어는 등급으로 적었습니다. 시리즈 「비전 모델 읽기 3」 4편. 증류의 학습 원리는 비전 모델 읽기 2 의 4편, EfficientTAM 의 구조는 비전 모델 읽기 1 의 10편에 있습니다.

목차

1. 무엇을 줄이나: 계산·파라미터·메모리 접근

모델을 「작게」 만든다는 말에는 세 가지가 섞여 있습니다.

셋은 같이 움직이지 않습니다. 이 글의 실측 대부분이 그 어긋남을 보여 줍니다.

2. 구조를 바꾸기: 깊이별 분리 합성곱(MobileNet)

작게 만드는 세 가지 길 ① 구조: 깊이별 분리 합성곱(MobileNet) 보통 3×3 채널을 섞으며 공간을 본다 K²·M·N 깊이별 3×3 채널마다 따로 K²·M + 1×1 채널 섞기 M·N 곱셈-덧셈 8.4배↓, 그러나 이 노트북 CPU 시간은 1.6배↓ (채널 128 — 4편 code/04 실측) ② 가지치기: 어디를 0 으로 만드나 비구조적 구조적(행 통째) 모양은 그대로 밀집 곱은 0 도 곱한다 작은 밀집 행렬이 된다 → 바로 빠름 ③ 증류: 큰 교사의 출력을 작은 학생이 따라 배운다 교사 크고 느림 학생 작고 빠름 부드러운 정답
그림: 보통 3×3 합성곱을 깊이별 3×3 과 1×1 로 쪼개는 MobileNet 의 생각, 비구조적·구조적 가지치기의 모양 차이, 교사에서 학생으로 가는 증류

보통 3×3 합성곱은 출력 채널 하나를 만들 때마다 입력 채널 전부의 3×3 이웃을 봅니다. 「공간을 보는 일」 과 「채널을 섞는 일」 을 한꺼번에 하는 셈입니다. Howard 외의 MobileNet(2017)은 이 둘을 나눕니다.

  1. 깊이별(depthwise) 3×3: 채널마다 따로 3×3 필터 하나. 공간만 봅니다.
  2. 점별(pointwise) 1×1: 같은 자리의 채널들을 섞습니다.

입력 채널 M, 출력 채널 N, 필터 한 변 K, 특징 지도 크기 H×W 이면

보통 합성곱        H·W·M·N·K²
깊이별 분리        H·W·M·K²  +  H·W·M·N
비율(분리 ÷ 보통)  1/N + 1/K²

입니다. K=3 이고 N 이 크면 대략 9분의 1 입니다. 논문은 3×3 에서 8–9배 적은 계산이라고 적었습니다(3.1절).

모델(ImageNet, 224 입력) top-1 곱셈-덧셈 파라미터
같은 구조, 보통 합성곱 71.7% 4,866M 29.3M
MobileNet(깊이별 분리) 70.6% 569M 4.2M

(MobileNet 논문 표 4.) 정확도 1%p 를 내주고 계산을 약 8.6배 줄였습니다. 계산의 95% 가 1×1 에 몰린다는 점(표 2)도 설계 의도입니다. 1×1 합성곱은 그냥 행렬곱이라 어느 기계에서나 빠르게 돌기 때문입니다.

MobileNet 은 크기를 고르는 손잡이 둘을 줍니다. 폭 배수 α(채널 수에 곱함)는 계산과 파라미터를 대략 α² 로, 해상도 배수 ρ 는 계산만 대략 ρ² 로 줄입니다(파라미터는 그대로). 논문 표 6·7 에서 α=0.5 는 70.6% → 63.7%(곱셈-덧셈 149M), 입력 128 은 64.4%(186M)였습니다. 5편에서 보겠지만 해상도를 줄이는 쪽은 「작은 물체가 사라진다」 는 다른 대가를 냅니다.

MobileNetV2(Sandler 외 2018)는 좁은 병목을 1×1 로 6배 넓힌 뒤 깊이별 3×3 을 하고 다시 좁히는 역 잔차를 씁니다. 다시 좁히는 마지막 1×1 에는 ReLU 를 걸지 않습니다(좁은 차원에서 ReLU 를 걸면 정보가 뭉개진다는 관찰). 휴대폰 CPU 큰 코어 하나에서 V1 113ms → V2 75ms, top-1 70.6% → 72.0% 였습니다(표 4).

직접 재 보기: 계산이 8.4배 줄면 시간도 8.4배 줄까

채널 128, 특징 지도 72×128(512×288 입력의 4분의 1 크기)에서 보통 3×3 과 깊이별 분리를 노트북 CPU 스레드 하나로 쟀습니다(9회 중앙값, code/04_small_models.out.txt).

파라미터 곱셈-덧셈 CPU 시간 초당 곱셈-덧셈
보통 3×3 147,456 1,359.0M 4.23ms 321G/s
깊이별 3×3 + 1×1 17,536 161.6M 2.62ms(깊이별 2.06 + 1×1 0.28) —
그중 깊이별 3×3 만 1,152 10.6M 2.06ms 5.2G/s
그중 1×1 만 16,384 151.0M 0.28ms 548G/s

계산은 8.4배 줄었는데 시간은 1.6배만 줄었습니다. 범인은 깊이별 3×3 입니다. 계산은 전체의 7% 인데 시간의 79% 를 썼습니다. 깊이별 합성곱은 채널을 섞지 않으니 읽어 온 값 하나로 하는 계산이 아주 적습니다(산술 강도가 낮다). 행렬곱 전용 장치는 「한 번 읽은 값으로 많이 계산하는」 일에서만 빠르기 때문에, 깊이별 합성곱은 그 장치를 거의 놀립니다. 이 노트북 CPU 는 행렬 가속기가 있어 밀집 합성곱이 유난히 빠르므로 격차가 더 크게 보였을 수 있습니다(다른 CPU·GPU 는 미실측).

이 현상을 정면으로 다룬 논문이 Ma 외의 ShuffleNet V2(2018)입니다. 계산량이 비슷한 구조들이 GPU 와 휴대폰 CPU 에서 서로 다른 순서로 빨랐고, 그래서 「계산량은 속도의 대리 지표일 뿐, 목표 기기에서 직접 재라」 고 정리했습니다. 거기서 나온 네 가지 지침 가운데 둘이 위 결과와 닿습니다. 그룹 합성곱을 지나치게 쓰지 말 것(계산량을 고정하고 그룹 수를 1 → 8 로 늘리면 데스크톱급 GPU 처리량이 2,451 → 634), 원소별 연산(ReLU·덧셈)을 무시하지 말 것(ResNet 블록에서 둘을 빼면 GPU·휴대폰 CPU 모두 약 20% 빨라짐)입니다(표 2·4).

3. 고르게 키우기: EfficientNet

Tan·Le 의 EfficientNet(2019)은 반대 방향의 질문을 합니다. 작은 기준망이 있을 때 깊이·폭·해상도 중 무엇을 키울까. 하나만 키우면 금방 포화되니, 셋을 정해진 비율로 함께 키웁니다.

깊이 d = α^φ,  폭 w = β^φ,  해상도 r = γ^φ,   조건 α·β²·γ² ≈ 2   (α, β, γ ≥ 1)

합성곱의 계산량은 깊이에 비례하고 폭과 해상도에는 제곱으로 비례하므로, φ 를 1 올릴 때마다 계산이 약 2배가 됩니다. 기준망 B0 는 신경망 구조 탐색으로 찾았고 α=1.2, β=1.1, γ=1.15 입니다.

모델 top-1 파라미터 계산(FLOPs)
EfficientNet-B0(224 입력) 77.1% 5.3M 0.39B
EfficientNet-B7 84.3% 66M 37B

(논문 표 2.) 초록의 「당시 최고 모델보다 8.4배 작고 6.1배 빠르다」 에서 「빠르다」 는 서버 CPU 코어 하나·배치 1 의 지연입니다(19.0초 대 3.1초, 표 4). GPU 처리량 이야기가 아니라는 조건이 요약에서는 잘 빠집니다.

4. 덜어 내기: 가지치기

학습이 끝난 망에서 작은 가중치를 0 으로 만들고, 다시 조금 학습해 정확도를 되찾는 방법입니다. Han 외의 Deep Compression(2016)은 가지치기 → 가중치 군집화(합성곱 8비트, 완전연결 5비트) → 허프만 부호화로 AlexNet 을 240MB → 6.9MB(35배), VGG-16 을 552MB → 11.3MB(49배)로 줄이면서 정확도를 지켰습니다(표 1). 가지치기만으로 연결 수가 AlexNet 9배, VGG-16 13배 줄었습니다.

여기서 「작아졌다」 와 「빨라졌다」 를 나눠야 합니다. 이 논문이 보고한 3–4배 속도 이득은 완전연결 층만, 배치 1 에서 잰 것이고, 큰 배치에서는 이점이 사라진다고 논문 스스로 적었습니다(6.3절, 부록 A).

직접 재 보기: 0 이 90% 면 10배 빠를까

2048×2048 완전연결 층에 입력 64개를 곱하는 시간을 쟀습니다(노트북 CPU, 스레드 하나, 9회 중앙값).

가중치 시간
밀집(가지치기 전) 0.59ms
90% 를 아무 칸이나 0(비구조적), 밀집 곱 0.59ms
같은 행렬을 희소 형식(CSR)으로 바꿔 곱 6.83ms
출력 행을 90% 통째로 지움(구조적), 밀집 곱 0.06ms

비구조적 가지치기는 모양이 그대로라 밀집 곱이 0 도 곱합니다. 희소 형식으로 바꾸면 0 을 건너뛰지만, 이 크기와 이 희소도에서는 불규칙한 접근 비용 때문에 11.6배 느렸습니다. 행을 통째로 지운 구조적 가지치기만 그대로 작은 밀집 곱이 되어 약 10배 빨라졌습니다. Li 외(2017)가 합성곱의 필터를 통째로 지우는 방법을 낸 이유가 이것입니다. CIFAR-10 의 VGG-16 에서 계산량 34% 를 줄였고, 데스크톱급 GPU(배치 128)에서 시험 시간이 1.23초 → 0.73초로 줄었습니다(표 1·3). 비구조적 희소성도 전용 커널이나 하드웨어가 있으면 빨라질 수 있지만, 그 측정은 하지 않았습니다(미실측).

5. 배운 것을 옮기기: 증류

작은 구조로 처음부터 학습하면 큰 모델만큼 배우지 못하는 경우가 많습니다. 지식 증류는 큰 모델(교사)의 부드러운 출력을 작은 모델(학생)의 정답으로 함께 씁니다. 원리와 수치는 비전 모델 읽기 2 의 4편에 자세히 있습니다. 실시간 관점에서 기억할 점은 하나입니다. 증류는 구조를 바꾸지 않습니다. 학생의 속도는 학생의 구조(2–4절)가 정하고, 증류는 그 구조가 낼 수 있는 정확도에 더 가까이 가게 해 줄 뿐입니다.

6. 예: SAM 2 를 줄인 EfficientTAM

Xiong 외의 EfficientTAM(2024)은 위 방법들을 영상 분할 모델에 함께 적용한 예입니다. 비전 모델 읽기 1 의 10편에 구조가 있으니 줄인 자리만 다시 적습니다.

모델(논문 표 1) 파라미터 데이터센터 GPU FPS 휴대폰 지연 SA-V 시험 J&F
SAM 2(비교 대상) 81M 43.8 — 74.7
EfficientTAM-S 34M 85.0 1,010.8ms 74.5
EfficientTAM-Ti/2 18M 109.4 261.4ms 70.8

(1024×1024 입력, GPU 는 배치 1. 휴대폰은 2023년 상위 기종이고 측정 정밀도·입력 크기는 논문에 적혀 있지 않습니다.) 입력을 512×512 로 줄인 표 5 에서는 휴대폰 80.6ms·SA-V 71.5 였습니다. 초록의 「휴대폰 약 10 FPS」 에 가까운 숫자는 이 512 입력 쪽뿐이라는 점은 비전 모델 읽기 1 의 10편에서 짚은 그대로입니다.

우리 실측: EfficientTAM-S 를 실험용 GPU 에서

TT Lab 의 탁구대 찾기는 EfficientTAM-S 를 씁니다. 같은 가중치(sha256 대조)를 집 랩의 8GB급 노트북용 GPU 한 장에서 쟀습니다. 1회용 파드, 다른 GPU 작업 없음, 예열 5회 뒤 10회 × 3묶음의 중앙값입니다.

무엇을 FP32 FP16 BF16
이미지 인코더, 1024×1024, 배치 1 58.8ms 18.7ms 18.7ms
같은 것, 배치 4(그림당) 60.9ms 20.4ms 20.5ms
찾기 한 번(512×288 화면 → 인코딩 + 점 하나로 마스크) 69.4ms — 29.9ms
그중 마스크 디코더만(인코딩 뒤 점 하나) 3.9ms — —
인코더 입력을 512×512 로 바꿔 만든 판, 배치 1 12.8ms — 5.9ms

7. 한계

8. 우리 프로젝트와의 연결

다음 글은 모델을 그대로 두고 덜 자주, 덜 넓게 돌리는 방법입니다.

티티 한마디. 곱셈을 8배 줄였는데 시간은 1.6배만 줄었어요. 계산보다 읽어 오는 게 더 느릴 때가 있거든요. 저울(계산량)보다 시계(실측)를 믿어요!

참고 문헌

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다