Skip to main content

timm 모델 Zoo — 분류 백본 선택 가이드

timm(PyTorch Image Models)은 1,000개 이상의 사전학습 이미지 모델을 제공하는 라이브러리입니다. 이 문서에서는 실무에서 자주 사용되는 대표 모델들의 특징을 비교하고, 프로젝트에 맞는 모델을 선택하는 가이드를 제공합니다.

핵심 아이디어

모든 분류 모델은 백본(Backbone) + 분류 헤드(Head) 구조로 이루어져 있습니다. 백본이 이미지에서 특징을 추출하고, 분류 헤드가 해당 특징을 기반으로 클래스를 예측합니다. timm은 다양한 백본을 통일된 인터페이스로 제공하여 모델 교체를 쉽게 만듭니다.
import timm

# 사용 가능한 모델 목록 검색
models = timm.list_models('resnet*', pretrained=True)
print(f"ResNet 계열: {len(models)}개")

# 모델 생성 (ImageNet 사전학습)
model = timm.create_model('resnet50', pretrained=True, num_classes=10)

대표 모델 비교

모델연도파라미터ImageNet Top-1추론 속도특징
ResNet-50201525M80.4%빠름잔차 연결, 안정적 학습
EfficientNet-B020195.3M77.7%빠름효율적 스케일링, 경량
EfficientNet-B4201919M83.4%보통높은 성능/효율 균형
EfficientNetV2-S202121M84.2%빠름속도 + 성능 균형 (추천)
ViT-B/16202086M84.5%보통Transformer 기반, 대규모 데이터
ConvNeXt-T202228M82.1%빠름CNN의 현대화, ViT 수준 성능
ConvNeXt-B202289M83.8%보통대형 CNN, 안정적 학습
Swin-T202128M81.3%보통윈도우 기반 ViT, 계층 구조

동작 방식

ResNet (Residual Network)

잔차 연결(Skip Connection)로 그래디언트 소실 문제를 해결하여 깊은 네트워크 학습이 가능합니다. 구현이 간단하고 안정적이어서 백본 기본 선택지로 자주 사용됩니다.

EfficientNet

Compound Scaling 기법으로 네트워크의 깊이(depth), 너비(width), 해상도(resolution)를 동시에 최적화합니다. 같은 연산량 대비 높은 성능을 달성합니다.

ConvNeXt

Swin Transformer의 설계 원칙을 CNN에 적용한 모델입니다. 큰 커널 사이즈, LayerNorm, GELU 활성화 함수 등 현대적 기법을 사용하면서도 CNN의 단순함을 유지합니다.

구현

모델 선택과 생성

import timm
import torch

# 모델 생성 (커스텀 클래스 수)
model = timm.create_model(
    'efficientnet_b0',
    pretrained=True,
    num_classes=5,  # 커스텀 클래스 수
)

# 입력 크기 확인
data_config = timm.data.resolve_data_config(model.pretrained_cfg)
print(f"입력 크기: {data_config['input_size']}")  # (3, 224, 224)
print(f"평균: {data_config['mean']}")
print(f"표준편차: {data_config['std']}")

# 추론 테스트
model.eval()
dummy = torch.randn(1, 3, 224, 224)
output = model(dummy)
print(f"출력 형태: {output.shape}")  # [1, 5]

모델별 특징 추출기 사용

# 특징 벡터만 추출 (분류 헤드 제외)
model = timm.create_model('resnet50', pretrained=True, num_classes=0)
features = model(dummy)
print(f"특징 벡터: {features.shape}")  # [1, 2048]

# 중간 특징맵 추출 (탐지/세그멘테이션 백본으로 활용)
model = timm.create_model(
    'resnet50', pretrained=True,
    features_only=True,
    out_indices=(1, 2, 3, 4),
)
features = model(dummy)
for i, f in enumerate(features):
    print(f"Stage {i+1}: {f.shape}")

모델 선택 가이드

관련 기술 비교

특성CNN 계열ViT 계열
귀납적 편향강함 (지역성, 이동 불변성)약함
소규모 데이터유리불리 (사전학습 필수)
대규모 데이터성능 포화 경향스케일링 유리
추론 속도빠름상대적으로 느림
해석 가능성특징맵 시각화Attention Map 시각화
실무에서는 EfficientNetV2-S 또는 ConvNeXt-T로 시작하는 것을 추천합니다. 기본 성능을 확인한 뒤, 성능이 부족하면 더 큰 모델로, 속도가 부족하면 더 작은 모델로 조정하세요.
아닙니다. ViT는 대규모 데이터에서 강점을 보이지만, 소규모 데이터(수천 장)에서는 CNN이 더 나은 성능을 보이는 경우가 많습니다. 데이터 규모와 GPU 자원을 고려하여 선택하세요.

참고 논문

논문학회/연도링크
Deep Residual Learning (ResNet)CVPR 2016arXiv:1512.03385
EfficientNet: Rethinking Model ScalingICML 2019arXiv:1905.11946
EfficientNetV2: Smaller Models and Faster TrainingICML 2021arXiv:2104.00298
A ConvNet for the 2020s (ConvNeXt)CVPR 2022arXiv:2201.03545
An Image is Worth 16x16 Words (ViT)ICLR 2021arXiv:2010.11929