[논문리뷰] A ConvNet for the 2020s

hyo._.op·2026년 7월 22일

논문리뷰

목록 보기
3/16

Overview

논문명: A ConvNet for the 2020s
학회(출판연도): CVPR(2022)
연구분야: 컴퓨터 비전 백본 네트워크


Abstract

✓ 의미론적 분할

  • 이미지를 픽셀 단위로 분류하는 작업

  • 사진 속 픽셀에 대해 “이 픽셀은 사람”, “이 픽셀은 도로” 와 같이 클래스 레이블 부여

    → 원본 이미지와 크기가 같은 “클래스맵(class map)” 만들어지고, 각 픽셀은 그 픽셀의 의미적 범주를 지님

    ⇒ 장면의 이해(자율주행, 의료 영상 분석, 위성 이미지 분석 등)에 많이 쓰임

✓ 범용 비전 백본(General-purpose Vision Backbone)

백본(backbone)

  • 이미지에서 특징(feature)을 추출하는 기본 골격 네트워크

    • 백본: 이미지 → 특성(feature) 추출을 담당하는 신경망 구조
    • 특성맵: 백본이 이미지를 통과시켜 얻어낸 결과물

    ex. ResNet, Swin-T

범용 백본

  • 특정 작업에만 특화되지 않고, 분류·탐지·분할 등 다양한 비전 작업에 공통적으로 사용할 수 있는 구조

    ⇒ 한 번 학습된 백본을 가져다가(전이 학습) 다른 작업용 네트워크 입력으로 연결할 수 있도록

현재는 Transformer가 우수하다는 인식이 강하지만, 순수 ConvNet 역시 뒤지지 않는 성능을 낼 수 있다!

: 본 논문의 저자는 ConvNeXt를 제안하며, 정확도와 확장성에서 Transformer와 견줄 뿐 아니라, 단순성과 효율성까지 유지함을 보여주려 한다.


1. Introduction

<2010s> CNN이 CV에서 왜 지배적이었는가? (AlexNet → VGG → ResNet)

→ 슬라이딩 윈도우(sliding window), 귀납적 편향(inductive bias), 이동 등변성(translation equivariance)

✓ 슬라이딩 윈도우(sliding window)

  • 작은 크기의 필터(커널)를 입력 데이터(이미지)에 겹치면서 조금씩 이동시키며 연산하는 방식

  • CNN에서는 이 슬라이딩 과정에서 합성곱 연산이 이루어져 featuremap 만듦

    → 이미지 전체를 한 번에 보는 것이 아니라 “지역적 특징(local feature)”을 잡을 수 있음

    필터 가중치를 공유하므로 파라미터 수가 줄어듦

✓ 왜 파라미터 수가 줄어들까?

CNN의 합성곱층에서는

  • 작은 필터(커널) 하나를 학습하고, 이걸 이미지의 모든 위치에 “공유(weight sharing)”해서 적용

    ex. 3 x 3 크기, 채널 3개짜리 필터 → 가중치 개수는 3x3x3=27개 뿐

  • 이 필터를 왼쪽 위, 오른쪽 아래 등 모든 위치에 같은 값으로 사용

    ⇒ 전체 픽셀 위치마다 다른 가중치(필터의 숫자)를 둘 필요가 없음(파라미터수 감소)

✓ 이렇게 해도 괜찮은가?

→ 이미지 특징은 위치에 상관없이 동일한 패턴으로 나타난다는 가정 때문

✓ 귀납적 편향(inductive bias)

  • 모델이 학습할 때 데이터의 일반적인 규칙을 추론하기 위해 가지는 사전 가정

  • CNN의 경우

    1️⃣ 지역성(locality): 중요한 특징은 국소 영역에서 나타난다

    2️⃣ 가중치 공유(weight sharing): 같은 특징은 이미지 어디서는 동일하게 나타날 수 있다

    3️⃣ 이동 등변성(Translation Equivariance): 물체가 위치를 옮겨도 그 특징은 그대로

    ⇒ 이러한 편향 덕분에 CNN은 이미지 인식에서 데이터가 적어도 잘 학습하고 연산량도 효율적

<2020s> ViT의 등장

  1. ViT의 주요 목표: 스케일링

    → 작은 데이터셋에서는 CNN이 더 우수하지만,

    모델과 데이터셋이 충분히 크다면, ResNet보다도 뛰어난 성능을 낼 수 있음을 보여줌

    ✓ ViT의 주요 목표가 스케일링인 이유

    • CNN은 모델 크기를 무작정 키우면 성능이 일정 수준에서 멈추는 경향이 있음

    • ViT는 데이터와 파라미터를 계속 키워도 성능이 거의 선형적으로 증가

      큰 데이터+큰 모델 = 성능↑ 이 뚜렷하게 보이는 구조라, 대규모 학습에서 특히 강력!

  2. 한계 → CV에는 이미지 분류만 있는 것이 아니다!

  • 귀납적 편향(inductive bias)가 없는 기본형 ViT

    • ViT는 CNN의 귀납적 편향(지역성, 가중치 공유, 이동 등변성)없이 완전히 데이터 기반으로 학습

      → 데이터가 적으면 성능이 떨어지고, 과적합이 쉬움

  • 전역 self-attention의 이차적 복잡도

    • ViT의 핵심 연산인 self-attention은 모든 패치가 모든 다른 패치와 상호작용

      • 패치수 = N 이면, 연산량은 N^2

        → 이미지가 커질수록 패치수 급증 → 계산량 폭발

[정리]

  • ViT는 데이터와 모델이 클수록 CNN을 능가할 수 있다.
  • 하지만 CNN처럼 범용 백본(backbone)으로 쓰이기엔 연산량과 구조상의 한계 존재
  • 특히, 고해상도 입력에서 self-attention의 연산량이 너무 커짐

<2020s> 계층형 Transformer, Swin-T의 등장

→ ViT의 한계(self-attenton, 귀납적편향X)를 해결하고자 등장

ConvNet 차용

  • 지역 윈도우 내에서의 attention
  • 슬라이딩 윈도우 전략

[ImageNet-1K 분류 정확도와 연산량 비교]

✓ ImageNet-1K

  • 1000개의 카테고리(classs)로 분류된 데이터셋
  • 총 이미지 수: 120만 장

✓ ImageNet-22K

  • 약 22,000개의 카테고리로 분류된 훨씬 더 큰 버전
  • 총 이미지 수: 1,400만 장(훨씬 더 세분화된 분류; 개 → 품종 별 100종 이상)

✓ 파인 튜닝(fine-tuning)

  • 이미 학습된 모델로 가져와서, 내가 원하는 데이터나 목적에 맞게 “마무리 학습”하는 과정

  • 가로축
    • 왼: ImageNet-1K로만 학습한 모델
    • 오: ImageNet-22K로 사전학습 후, ImageNet-1K로 파인튜닝한 모델
  • 세로축
    • ImageNet-1K에서 Top-1 Accuracy(%)
  • 버블크기
    • 해당 모델의 연산량
  • 색상
    • 주황색: ViT, Swin-T
    • 보라색: ConvNet 계열

기존 ResNet-50(큰 원)

→ 정확도는 낮지만, 효율성은 나쁘지 않다

Swin-T

→ Transformer 기반으로 정확도 향상

→ 다양한 CV 작업에 활용 가능

ConvNeXt

→ ResNet-50을 현대식으로 개량하여 Swin-T

보다 높은 정확도 달성

→ FLOPs 수준은 동일하지만, 구조가 단순하고

효율적

→ ConvNet도 여전히 최신 Transformer와 경쟁

가능하다는 것을 입증

✓ 많은 데이터로 학습하면 좋은 거 아닌가? 왜 22K에서 끝내지 않고 1K로 파인튜닝할까?

  • 데이터가 많으면 일반적인 표현력은 좋아진다. 하지만, 모델의 “최종목적”이 중요한 것!

  • 보통, 새로운 모델 성능을 비교할 때 “ImageNet-1K에서의 정확도” 사용

    → 목표가 1K 기준 평가라면 22K로 학습한 그대로 쓰면 라벨 체계가 맞지 않기 때문에, 라벨 매핑과 모델 조정이 필요하다

    ex. 22K에서는 “비글 vs 포메” 라면, 1K에서는 “개” 로 분류해야 함


2. Modernizing a ConvNet: a Roadmap

→ ResNet을 출발점으로 Transformer와 유사한 형태의 ConvNet으로 발전시켜보자!

  • Macro Design (큰 틀 설계)
  • ResNeXt 스타일 도입
  • Inverted Bottleneck 구조
  • 대형 커널 사용
  • 레이어 단위 세부 설계(Micro Design)

2.1 Training Techniques(학습방법)

→ 모델의 구조뿐만 아니라 학습방식도 성능에 큰 영향!

[1단계] ViT의 학습 절차를 적용하여 ResNet-50/200 학습 시킴

→ 둘 다 쓰는 이유는 50은 소형 비교군, 200은 대형 비교군

✓ ResNet-50 → 50개의 층(layer)

  • 대략 50층의 연산 경로를 갖도록 설계
  • 블록 구성(3,4,6,3)
    • stage1: 3개 블록
    • stage2: 4개 블록
    • stage3: 6개 블록
    • stage4: 3개 블록

✓ stage

CNN이나 ViT에서 해상도(특징맵 크기)가 일정하게 유지되는 구간

  • 1x1, 3x3 같은 Conv 층을 합산해서 개수 계산

✓ 3x3 Conv → 공간적 특징 추출

  • 3x3 필터는 주변 픽셀과의 관계(엣지, 패턴)을 잘 잡아냄
  • 커널이 작아서 연산 효율이 좋고, 여러 층을 쌓으면 큰 수용영역 확보 가능

✓ 왜 커널이 작으면 연산 효율이 좋을까?

연산량 ∝ 커널 크기 ^2 × 출력 채널 수 × 출력 feature map 크기

→ 커널 크기를 키우면 연산량이 제곱으로 늘어남

→ 작은 커널이 계산량이 훨씬 적음

✓ 왜 여러 층을 쌓으면 큰 수용영역을 확보할 수 있을까?

수용영역 = 한 출력 픽셀이 참조하는 입력 이미지 영역 크기

  • 한 층의 3×3 커널 수용영역 = 3×3

  • 두 층을 연달아 쌓으면?

    • 첫 번째 층이 만든 3×3 특징맵 위에서 또 3×3을 봄
    • 입력 이미지 기준으로 보면 → 5×5 영역을 커버
  • 세 층 쌓으면 → 7×7 영역

    → 층이 늘어날수록 수용영역이 커짐

⇒ 작은 커널: 계산량이 적고, 더 많은 층을 쌓아 복잡한 패턴 학습 가능

⇒ 여러 층: 수용영역이 커져서 더 넓은 문맥 정보 반영 가능

✓ 1x1 Conv → 채널(feature map) 조정

  • 채널수 축소/확장에 사용(차원 변화)

  • 공간의 크기는 유지하면서 “채널 간의 결합(정보 혼합)”을 수행

  • 연산량이 매우 적어서 네트워크 폭을 유연하게 조절 가능

    ⇒ 1x1 Conv는 한 픽셀 위치에서 모든 채널 값을 가중합에 새로운 채널 만들어냄

✓ 정보혼합

서로 다른 특징을 합치고 조합하는 과정

→ (수평선+수직선+ 색상패턴,,,)

<참고> https://ffighting.net/deep-learning-basic/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90/1x1-convolution/

✓ ResNet-200 → 200개의 층(layer)

  • 훨씬 깊은 버전, 더 많은 파라미터와 연산량

  • 블록 구성(3,24,36,3)

    • stage3의 블록 수가 매우 많아짐

    → 더 깊어서 성능은 높지만, 연산량(FLOPs)과 메모리 사용량도 큼

[2단계] ResNet 기본 학습 epoch수 90 → 300으로 학습 기간 연장

⇒ 강력한 데이터 증강 및 정규화 조합 + 대규모 모델을 사용하기 때문

⇒ 짧게 돌리면 잠재력을 다 못 끌어내고, 길게 돌려도 과적합 위험이 낮으므로 늘림

  • 옵티마이저 : AdamW

  • 데이터 증강 : Mixup, Cutmix, RandAugment, Random Erasing

  • 정규화 : Stochastic Depth, Label Smoothing

✓ epoch

  • 전체 학습 데이터셋을 한 번 모두 사용해 학습하는 주기

✓ 옵티마이저 → 가중치를 어떻게 조정할지 결정하는 “규칙” 또는 “알고리즘

  • AdamW = Adam + Weight Decay(가중치 감쇠; 과적합 방지)

✓ 데이터 증강(입력 쪽 변화)

  • 훈련 데이터를 인위적으로 변형 및 추가해서 데이터의 양과 다양성을 늘리는 기법

✓ 정규화(모델 쪽 변화)

  • 모델이 과적합하지 않도록 학습과정이나 구조를 제약하는 기법

2.2 Macro Design(매크로 설계)

→ Swin-T의 매크로 네트워크 설계 분석

ㄴ ⭐ 1️⃣ 스테이지 연산 비율 + 2️⃣ 스템셀(stem cell) 구조

✓ 매크로 설계란? → 모델을 만들 때, 큰 틀을 먼저 잡는 것을 의미

  • 모델 전반의 골격과 계층 구조를 설계하는 단계

    ex. stage가 몇 개일지, 각 stage의 해상도와 채널 수, 어디서 다운 샘플링할 지 등

    ↔ 마이크로 설계(Micro)

✓ 스템셀(stem cell) 구조

  • 이미지를 처음 받아서 특징 추출이 잘 되게 전처리하는 첫 레이어 집합
  1. 스테이지 연산 비율

    • ResNet: [Stage별 블록 개수] 3:4:6:3

      초반 Stage(고해상도)에도 블록이 많아 연산량이 큼

    • ConvNeXt: [Stage별 블록 개수] 1:1:3:1(→Swin Transformer 스타일)

      → 초반 Stage는 얕게, 중간 Stage(특히 Stage3)에 연산 집중

      ⇒ 연산의 효율성을 높이고, 중요한 중·후반부 특징 학습 강화!

  2. 스템셀 구조

    • ResNet Stem: 7x7 Conv(Stride=2) + 3x3 MaxPool(stride=2)

      2번의 다운샘플링으로 해상도 1/4로 축소

    ✓ Vision Transformer(ViT)의 패치화(Patchify)

    • 입력 이미지를 일정 크기 “패치(조각)”으로 잘라서 Transformer에 넣음

      → 이때, 패치 생성은 비중첩(non-overlapping) 합성곱으로 구현 가능

      ex. 16x16 커널, stride=16 → 이미지가 바로 16x16 크기 토큰들로 변환

    ✓ Swin Transformer의 Patchify

    • ViT처럼 단일 패치 크기가 16이 아니라 작은 패치(4x4)로 시작

      → Swin은 다단계 구조라서 초반에 해상도를 너무 줄이면 정보 손실이 커서, 처음에는 조금만

      줄임

      → Stage를 거치며 점진적으로 다운 샘플링

    • ConvNeXt Stem(Patchify Stem): 4x4 Conv(stride=4) 한 번으로도 해상도 1/4 축소

      → Swin Transformer의 patch embedding과 유사

      ⇒ 초기 연산량을 감소하여, 이후 stage에 더 많은 연산 자원 배분 가능

      ⇒ 처음부터, 4x4 비중첩 패치화

      ⇒ ResNet에서도 복잡한 Stem 대신에 ViT, Swin 스타일의 Patchify Stem을 써도 성능 유지

[정리]

  • ConvNeXt 는
    1️⃣ Stage 연산 비율을 Swin 스타일로 조정하고 2️⃣ Stem을 Patchify 방식으로 단순화하여
    CNN을 현대화!

    ⇒ ConvNeXt는 ResNet의 초반 구조(Stem)을 없애고, Swin처럼 4x4 (stride=4) patchify레이어로 시작해도 성능이 거의 떨어지지 않으니, 구조를 단순화하고 효율을 높였다는 뜻!

2.3 ResNeXt-fiy

→ Depthwise Convolution(채널별 공간연산) 도입함으로써 FLOPs 절감

ResNeXt 아이디어 → 그룹 수를 늘리고, 채널 수(너비)를 확장하라

  • Grouped Convolution 사용

    • 합성곱 필터를 여러 그룹으로 나눠서 각 그룹별로 합성곱을 수행 → 연산량(FLOPs) 감소

      ex. 입력 채널이 64개, 그룹 수가 4개이면 그룹당 16 채널만 처리

      ‼️FLOPs가 줄어든 만큼 채널수를 늘려 모델의 표현력 손실 보완

  • Depthwise Convolution → Grouped Conv의 극단적인 경우

    • 그룹 수 = 입력 채널 수

      → 채널마다 자기 채널만 따로 합성곱

    • 공간적인 특징만 추출하고, 채널 간 결합은 없음 + 채널 결합은 1x1 Conv로 처리

[Grouped Conv vs. Depthwise Conv]

Grouped ConvDepthwise Conv
그룹수지정 가능 (1~채널수)채널 수와 동일
채널 처리 방식그룹 내 채널끼리만 처리각 채널 독립 처리
채널 결합가능(같은 그룹 내)없음 → 1x1 Conv 필요
연산량 절감O(1/그룹수)O(1/채널수) → 가장 많이 절감

ConvNeXt의 선택

  • ResNeXt → 그룹 수를 여러 개로 나누는 Grouped Conv
  • ConvNeXt → Depthwise Conv로 변경
    : ViT의 MSA처럼 공간 정보 처리와 채널 정보 처리 분리

2.4 Inverted Bottleneck(역병목구조)

Inverted Bottleneck이란?

  • Bottleneck (ResNet/ResNeXt 스타일)
    • 채널 축소 → 연산 → 확장
    • 연산량 절감 목적
  • Inverted Bottleneck(MobileNetV2·Transformer 스타일)
    • 채널 먼저 확장 → 연산 → 다시 축소
    • Transformer에서 MLP 은닉 차원이 입력의 4배
    • ConvNeXt에서도 확장 비율 4를 채택

[ConvNeXt 설계]

: (a) → (b) → (c) 변화가 모두 순차적으로 적용됨

  • (a) ResNeXt Block → (b) Inverted Bottleneck
    • 채널 확장 → 공간 연산 → 채널 축소로 변경하여, 더 많은 채널 상태에서 공간 특징 학습
  • (b) Inverted Bottleneck → (c) Depthwise Conv 위치 이동
    • 블록 시작 시 공간 특징부터 추출 → 이후 채널 확장/축소로 더 복합적인 특징 학습

FLOPs와 성능 변화

  • Depthwise Conv 연산량은 증가 → 채널 확장 때문

    BUT! 다운샘플링 residual 블록의 shortcut 1x1 Conv 연산량이 크게 감소

[정리]

  • ConvNeXt는 MobileNet V2:Transformer에서 차용한 Inverted Bottleneck을 활용하여
    • 표현력 강화: 더 많은 채널에서 공간 정보 처리
    • 효율성 유지: FLOPs 감소
  • 공간 채널 분리 처리 + inverted bottleneck 구조 공유

2.5 Large Kernel Sizes (큰 커널 크기)

ConvNet에서도 커널의 크기를 키우면 성능이 좋아질까?

  • ConvNeXt는 “Transfromer가 전역 시야를 갖는 이유”ConvNet 방식으로 흉내낸 것
  • 블록 앞쪽의 대형 커널의 Depthwise Conv를 넣어, 적은 채널로 넓은 영역의 공간 정보를 보고,
    이후에
    1x1 Conv에서 채널을 넓혀 세부처리를 하는데,,

7x7에서 성능이 가장 잘 나오더라~

2.6 Micro Design (마이크로 설계)

→ ConvNeXt가 블록 내부 세부 설계(layer 수준)를 Transformer 스타일에 맞게 수정하면서 성능 높이자!

ReLU → GELU (성능변화X)

  • ReLU: 단순하고 빠르지만 값이 0 이하일 때 완전히 끊김

  • GELU: 부드러운 곡선형 활성화

⇒ 부드러운 비선형성을 가져오지만 성능 차이는 미미

활성화 함수 개수 줄이기 (+0.7%)

  • ResNet: 거의 모든 Conv layer 뒤에 활성화 함수 붙임
  • Transformer: MLP 블록에 활성화 함수 1개만 사용
  • ConvNeXt
    • Residual block에서 1x1 Conv 2개 사이에 GELU 1개만 남김 → 나머지 GELU 제거

정규화 계층 줄이기 (+0.1%)

  • Transformer: 정규화 계층 수 적음
  • ConvNeXt
    • 블록 내의 BN(Batch Norm) 2개 제거 → 1x1 Conv 앞에 BN 1개만 유지

BN(Batch Norm) → LN(Layer Norm) (+0.1%)

  • BN: ConvNet에서 표준, BUT 배치 크기에 민감하고 복잡

  • LN: Transformer에서 주로 사용, 배치 크기 무관, 더 단순

    ⇒ 배치 크기에 덜 민감하고 Transformer와 일관성 있는 구조로 만들기 위함

    ✔️ 기존의 ResNet에서 BN → LN 직접 교체 시 성능 저하

    ✔️ ConvNeXt는 앞선 구조 변경과 학습 기법 덕분에 LN 사용 가능!

BN (Batch Normalization)LN (Layer Normalization
정규화 기준배치 내 채널 별 평균/분산샘플 내 전체 피처 평균/분
배치 크기 영향있음(작아지면 성능 저하)없음
주 사용 분야CNN(이미지), 대규모 배치 학습RNN, Transformer, NLP
계산 위치채널별전체 피처별

✓ 샘플

  • 데이터 1개 의미

✓ 배치

  • 여러 샘플을 묶어서 한 번에 학습시키는 단위
    • 배치크기: 한번에 처리하는 샘플 개수

비유하자면, BN은 반 전체 평균 / LN은 각 학생 자기 점수 평균

다운샘플링 구조 변경 (+0.5%)

  • ResNet: 스테이지 시작 블록에서 stride =2 Conv로 다운샘플링
  • Swin Transformer: 스테이지 사이에 별도의 다운샘플링 레이어 존재
  • ConvNeXt
    • 스테이지 사이에 2x2 Conv(stride=2)로 다운 샘플링 분리
    • 해상도 변경 구간마다 LN 추가 (안정화 목적)

[정리]

  • 큰 구조가 아닌
    블록 내부의 연산 순서 및 종류를 Transformer와 비슷하게 바꿔서 성능을 올림

0개의 댓글