[DACON 공모전] Dinov2_large 모델 분석 및 학습 진행 상황 스터디

2026. 3. 12. 14:14·4. [팀] 프로젝트 및 공모전/4-4 구조물 안정성 물리 추론 AI 경진대회(DACON)

오늘은 현재 진행중인 DACON 공모전에 대해 진행 상황 및 모델 분석에 대해서 정리해본다.

 

이번 dinov2_large pretrain은 이전 붕괴 구간과 달리 정상적으로 학습되고 있다고 판단할 수 있다.

  • val logloss가 0.6852 -> 0.4227 -> 0.3529 -> 0.3165 -> 0.3091 -> ... -> 0.1606으로 전반적으로 하락
  • val acc가 0.6219 -> 0.7910 -> 0.8365 -> 0.8565 -> 0.8668 -> ... -> 0.9422로 상승
  • warmup이 끝난 뒤 즉시 붕괴하지 않고, 오히려 지속적으로 개선됨
  • train acc와 val acc가 함께 상승하고 있어 현재 시점에서는 학습이 깨진 것이 아니라 표현 학습이 안정적으로 진행 중임

1. 학습 진행 상황

1-1 초반 구간

  • Epoch 1:
    • lr=2.08e-06
    • val logloss=0.6852
    • 거의 랜덤에 가까운 시작점
  • Epoch 2~5:
    • learning rate가 warmup으로 점진 상승
    • val logloss=0.4227 -> 0.3529 -> 0.3165 -> 0.3091
    • 모델이 빠르게 안정화

이 구간은 이전 실험과 비교해 매우 중요하다. 이전에는 learning rate가 커지면서 feature가 무너졌지만, 이번에는 warmup과 낮아진 pretrain LR 덕분에 안정적으로 적응하고 있다.

1-2 중반 구간

Epoch 6~13 사이에는 개선과 소폭 흔들림이 같이 나타남

Epoch 8: 0.2918
Epoch 9: 0.2764
Epoch 10: 0.2756
Epoch 11: 0.2716
Epoch 12: 0.2492
Epoch 13: 0.2645

이 패턴은 이상하지 않다. 강한 증강, Mixup, CutMix, 작은 per-device batch, gradient accumulation이 동시에 들어가면 epoch 단위 metric이 약간 진동할 수 있다.

1-3 후반 구간

Epoch 18: val logloss=0.1966
Epoch 20: val logloss=0.1606
Epoch 21: val logloss=0.1784

이 구간은 전형적인 잘 되는 학습 후반부에 가깝다. 최저점을 갱신한 뒤, 그 주변에서 출렁이는 건 정상이다. 중요한 것은 전체 추세가 하방이라는 점이다.

1-4 분석

  • learning rate 증가 과정에서 collapse 없음
  • validation loss가 장기적으로 감소
  • validation accuracy도 함께 증가
  • best checkpoint가 반복적으로 갱신됨

2. 이번 안정화의 핵심

2-1 더 낮아진 pretrain learning rate

현재 models.py의 설정:

  • pretrain batch size: 2
  • finetune lr: 5e-5
  • pretrain lr: 1e-5
  • grad accumulation: 16

즉 effective batch size는

$$
2 \times 16 = 32
$$

이전 실험보다 learning rate는 더 낮고 effective batch size는 더 커져서 update variance가 줄었다.

2-2 warmup + cosine scheduler

warmup_ep = min(5, max(args.pretrain_epochs // 4, 2))
warmup = LinearLR(... total_iters=warmup_ep)
cosine = CosineAnnealingLR(...)
sched = SequentialLR(...)

 

  • 초반에는 작은 learning rate에서 시작
  • 몇 epoch 동안 선형적으로 올림
  • 이후 cosine annealing으로 부드럽게 내림

이 구조는 pretrained ViT를 다룰 때 feature 파괴를 막는 데 매우 중요하다.


3. 모델 구조 분석: Dual-View Attention 기반 Stable/Unstable 분류

데이터를 다각도에서 분석하여 객체의 안정성(Stability)을 판단하는 Dual-View Fusion 모델의 구조를 정리합니다. 이 모델은 정적인 이미지의 공간적 정보와 동적인 비디오의 시계열 정보를 효율적으로 결합합니다.

3-1 입력 데이터 (Input Modality)

모델은 판단의 정확도를 높이기 위해 서로 다른 관점의 데이터를 입력받습니다.

  • Front View (front.png): 정면에서 바라본 모습 (높이와 너비 중심의 정보).
  • Top View (top.png): 위에서 내려다본 모습 (깊이와 평면 배치를 파악하기 용이).
  • Video Frames (simulation.mp4): (선택적) 시뮬레이션 과정에서의 움직임 변화를 포함하는 프레임 시퀀스.

3-2 전체 프로세스 흐름 (Pipeline)

  1. Backbone Encoding: 각 이미지(Front, Top)는 사전 학습된 Backbone(예: ResNet, ViT)을 통과하여 고차원 특징 벡터(Feature Vector)로 변환됩니다.
  2. Attention Gating: 두 뷰에서 추출된 특징을 단순히 합치는 것이 아니라, 상황에 따라 어떤 뷰가 더 중요한지 모델이 스스로 판단(Weighting)하게 합니다.
  3. Video Feature Fusion: 비디오 프레임들이 있다면 이를 평균화(Temporal Pooling)하여 추가적인 컨텍스트 정보를 더합니다.
  4. Final Classification: 융합된 최종 벡터가 MLP(Multi-Layer Perceptron) Head를 거쳐 Stable 혹은 Unstable로 분류됩니다.

3-3 핵심 메커니즘: Attention Gate (수식 중심)

이 모델의 핵심은 "어떤 뷰를 더 신뢰할 것인가?"를 학습하는 과정에 있습니다.

① 특징 결합 (Concatenation)

먼저 두 뷰의 특징 벡터 $f$와 $t$를 하나로 이어 붙입니다.

$$[f, t] \in \mathbb{R}^{2d}$$

② 가중치 산출 (Gate Network)

결합된 벡터를 소형 신경망에 통과시켜 두 뷰에 대한 가중치 $g = (g_1, g_2)$를 구합니다. 이때 활성화 함수로 GELU를 사용하여 비선형성을 부여하고, Softmax를 통해 가중치의 합이 1이 되도록 합니다.

$$g = \text{Softmax}(W_2 \cdot \text{GELU}(W_1 [f;t]))$$

③ 가중합 (Weighted Sum)

구해진 가중치를 각 특징에 곱해 더함으로써, 더 중요한 정보에 집중된 융합 특징 $\tilde{h}$를 얻습니다.

$$\tilde{h} = g_1 f + g_2 t$$

Insight: 예를 들어 정면 사진이 가려져(Occlusion) 정보가 부정확하다면, 모델은 학습을 통해 자동으로 Top 뷰의 가중치 $g_2$를 높이게 됩니다.


3-4 비디오 데이터의 활용 및 최종 융합

비디오 데이터는 시간의 흐름에 따른 정보를 담고 있습니다.

  • Temporal Averaging: $T$개의 프레임 각각에서 특징을 추출한 뒤 산술 평균을 구하여 하나의 고정된 벡터 $v$로 만듭니다.
  • $$v = \frac{1}{T} \sum_{i=1}^{T} \text{Backbone}(x_i^{video})$$
  • Late Fusion: 현재 구현에서는 이미지 융합 특징($\tilde{h}$)과 비디오 특징($v$)을 7:3의 고정 비율로 결합합니다. 이는 시각적 구도(Image)를 기본으로 하되, 움직임(Video)을 보조 지표로 활용하려는 전략입니다.
  • $$h = 0.7\tilde{h} + 0.3v$$

 

3-5 요약

이 구조는 "정보의 중요도에 따른 동적 가중치 할당"을 구현했다는 점에서 강력합니다.

  • 장점: 단일 뷰에서 발생할 수 있는 정보 손실(사각지대 등)을 다른 뷰가 보완할 수 있습니다.
  • 향후 개선 방향: 현재 0.7 vs 0.3으로 고정된 비디오 융합 비율 또한 Attention 메커니즘을 적용하여 데이터에 따라 유동적으로 변하게 만든다면 더 높은 성능을 기대할 수 있을 것입니다.

4. 모델 성능 최적화를 위한 8가지 핵심 학습 기법

모델의 구조만큼 중요한 것이 바로 *"어떻게 학습시키는가"입니다. 본 프로젝트에서는 대형 Vision Transformer(ViT) 모델을 안정적으로 학습시키기 위해 최신 라이브러리와 고도화된 파이프라인을 구축했습니다.

4-1 DINOv2 Backbone

단순한 ImageNet 사전 학습 모델이 아닌, DINOv2-Large를 선택했습니다.

  • 특징: 자기지도학습(Self-supervised) 기반의 ViT-Large 모델입니다.
  • 강점: 객체의 경계선(Shape)과 공간적 구조를 이해하는 능력이 매우 뛰어납니다. Dual-View 이미지에서 물체의 배치를 파악해야 하는 본 작업에 최적의 선택입니다.

4-2 데이터 강건성(Robustness)을 위한 Augmentation

단순한 리사이징을 넘어, 모델이 "억까(어려운 상황)"에서도 잘 버틸 수 있도록 강력한 증강 기법을 적용했습니다.

  • 기하학적 변형: RandomResizedCrop, Affine, Perspective 등을 통해 다양한 각도와 거리에서의 대응력을 높였습니다.
  • 환경 노이즈: Shadow/Fog, MotionBlur, ISONoise 등을 추가하여 실제 카메라 환경에서 발생할 수 있는 저품질 이미지에 대비했습니다.
  • 규제화(Regularization): CoarseDropout을 통해 이미지 일부가 가려져도(Occlusion) 핵심 특징을 찾아내도록 유도했습니다.

4-3 데이터 믹싱 전략: Mixup & CutMix

학습 시 매 스텝마다 확률적으로 데이터를 섞어 모델의 일반화 성능을 높입니다.

  • Mixup (30%): 두 이미지를 투명하게 겹쳐 경계선을 모호하게 학습시킵니다.
  • CutMix (30%): 이미지의 일부를 잘라내어 다른 이미지로 대체합니다.
  • Clean (40%): 원본 데이터의 특징도 놓치지 않도록 일정 비율을 유지합니다.

4-4 하이브리드 손실 함수 (Hybrid Loss)

단일 Cross Entropy의 한계를 극복하기 위해 두 가지 Loss를 조합하여 사용합니다.

$$L = 0.7 L_{focal} + 0.3 L_{smooth}$$
  • Focal Loss: "어려운 숙제에 집중하기"
    • 잘 맞추는 샘플보다 틀리기 쉬운(Hard negative) 샘플에 더 큰 가중치를 부여합니다.
    • $$L_{focal} = \alpha (1-p_t)^\gamma \cdot CE$$
  • Label Smoothing: "너무 확신하지 않기"
    • 정답을 1.0이 아닌 0.9 정도로 낮추어, 모델이 특정 데이터에 과적합(Overfitting)되어 과도한 확신을 갖는 것을 방지합니다.

4-5 대형 모델 학습을 위한 최적화 (Efficiency & Stability)

기법 설명 효과
AMP (Automatic Mixed Precision) FP32 대신 FP16 연산을 혼합 사용 연산 속도 향상 및 메모리 30~50% 절약
Gradient Accumulation 16 step마다 가중치 업데이트 (Effective BS=32) GPU 메모리 한계를 넘어 큰 배치 사이즈 효과 구현
Gradient Clipping Gradient의 Norm이 1.0을 넘지 않도록 제한 ViT 학습 시 흔히 발생하는 수치적 폭주(Explosion) 방지
Gradient Checkpointing 중간 연산값을 저장하지 않고 재계산 12GB 등 적은 VRAM에서도 대형 모델(ViT-L) 학습 가능

 


5. 핵심 로직 요약

한 epoch 학습

for batch in loader:
    front, top, video, mask, labels = unpack_batch(...)

    if random() < 0.3:
        mixup
    elif random() < 0.6:
        cutmix
    else:
        clean

    logits = model(front, top, video, mask)
    loss = combined_loss(...)

    scaler.scale(loss / grad_accum).backward()

    if step % grad_accum == 0:
        scaler.unscale_(optimizer)
        clip_grad_norm_(model.parameters(), 1.0)
        scaler.step(optimizer)
        scaler.update()
        optimizer.zero_grad()

pretrain 흐름

1. ShapeStacks h=6 + Dacon(train + dev oversample) 결합
2. CombinedDataset 구성
3. backbone + fusion head 모델 생성
4. warmup + cosine scheduler 세팅
5. train / validate 반복
6. val logloss 개선 시 pretrained.pth 저장
7. 매 epoch ckpt 저장

finetune 흐름

1. Dacon train 샘플 로드
2. optional dev holdout 구성
3. StratifiedKFold로 5-fold split
4. fold별 학습
5. differential learning rate 적용
6. best fold weight 저장
7. ckpt 저장 및 patience 기반 early stopping

6. 앞으로의 실험 아이디어

  1. pretrain 30 epoch 완주 후 best pretrained weight 저장
  2. 같은 backbone으로 finetune 시 pretrain 유무 비교
  3. image-only vs video 사용 비교
  4. dev holdout 유지 vs include_dev 실험
  5. inference 단계 temperature scaling 조정
  6. 단일 backbone vs 멀티 backbone 앙상블 비교

7. 최종 요약

현재 dinov2_large pretrain은 이전 붕괴 패턴을 벗어나 안정적으로 수렴 중이다.

이 pretrain의 목표는 곧바로 대회 점수를 만드는 것이 아니라, 이후 finetune 단계에서 더 좋은 초기 가중치를 제공하는 것이다.

따라서 현재 실험은 충분히 의미가 있으며, 완주 후 finetune과 연결해 보는 가치가 높다.

'4. [팀] 프로젝트 및 공모전 > 4-4 구조물 안정성 물리 추론 AI 경진대회(DACON)' 카테고리의 다른 글

[공모전] Vision AI 최종 실험 개인 "연구" 블로그 (2)  (0) 2026.03.30
[공모전] Vision 시각화 검증 상세 분석 "개인 연구용" 블로그  (0) 2026.03.24
[DACON 공모전] 구조물 안정성 예측 대회: EVA-Giant Dual-View 모델과 Center Crop 추론 스터디 (2)  (0) 2026.03.21
'4. [팀] 프로젝트 및 공모전/4-4 구조물 안정성 물리 추론 AI 경진대회(DACON)' 카테고리의 다른 글
  • [공모전] Vision AI 최종 실험 개인 "연구" 블로그 (2)
  • [공모전] Vision 시각화 검증 상세 분석 "개인 연구용" 블로그
  • [DACON 공모전] 구조물 안정성 예측 대회: EVA-Giant Dual-View 모델과 Center Crop 추론 스터디 (2)
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (176)
      • 1. AI 논문 + 모델 분석 (19)
        • AI 논문 분석 (13)
        • AI 모델 분석 (6)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (56)
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    EfficientNet
    프로젝트
    알고리즘
    javascript
    bottleneck
    html
    귀칼
    파인튜닝
    공모전
    파이썬
    Vision
    Grad-CAM
    Ai
    강화 학습
    논문 리뷰
    구현
    Python
    OCR학습
    pandas
    transformer
    Attention Is All You Need
    github
    강화학습
    학습
    ViT
    자바스크립트
    OCR
    paddleocr
    데이터분석
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[DACON 공모전] Dinov2_large 모델 분석 및 학습 진행 상황 스터디
상단으로

티스토리툴바