Skip to content

Dacon-contest/dual-view-stability-classifier

Repository files navigation

🏗️ 구조물 안정성 물리 추론 AI

데이콘(Dacon) 경진대회 — 이미지 기반 구조물 안정성 예측
평가 지표: LogLoss (낮을수록 좋음)


📌 프로젝트 개요

구조물의 정면(front)상면(top) 이미지를 입력받아, 해당 구조물이 안정(stable) 인지 불안정(unstable) 인지를 예측하는 이진 분류 모델입니다.

핵심 특징

항목 내용
아키텍처 Dual-View Classifier (정면 + 상면 공유 백본)
백본 모델 EVA-02 Large, ConvNeXtV2 Large, CAFormer B36
학습 전략 5-Fold CV, AMP, EMA, Mixup/CutMix, Cosine + Warmup
추론 전략 Fold 앙상블 + TTA(5종) + 멀티 아키텍처 앙상블
프레임워크 PyTorch 2.x + timm

📁 프로젝트 구조

📦 데이컨 공모전/
├── 📄 README.md              ← 이 파일
├── 📄 guide.md               ← 신입 개발자용 상세 가이드
│
├── 📂 src/                   ← 핵심 소스 패키지
│   ├── __init__.py
│   ├── config.py             ← 설정(Config dataclass, 모델 프리셋)
│   ├── utils.py              ← 유틸리티(시드, 메트릭, EMA, Mixup 등)
│   ├── augmentation.py       ← 이미지 증강(학습/검증/TTA)
│   ├── dataset.py            ← 데이터셋 & 데이터 로딩
│   ├── model.py              ← DualViewClassifier 모델 정의
│   ├── trainer.py            ← K-Fold 학습 엔진
│   └── inference.py          ← 앙상블 추론 & 제출 파일 생성
│
├── 📄 train.py               ← 학습 CLI 스크립트
├── 📄 predict.py             ← 추론 CLI 스크립트
├── 📄 run_all.py             ← 전체 파이프라인 (학습→추론)
│
├── 📂 train/                 ← 학습 데이터 (1000개)
│   ├── TRAIN_001/
│   │   ├── front.png
│   │   ├── top.png
│   │   └── simulation.mp4
│   └── ...
├── 📂 dev/                   ← 개발 데이터 (100개, 라벨 있음)
│   ├── DEV_001/
│   │   ├── front.png
│   │   └── top.png
│   └── ...
├── 📂 test/                  ← 테스트 데이터 (라벨 없음)
│   ├── TEST_0001/
│   │   ├── front.png
│   │   └── top.png
│   └── ...
│
├── 📄 train.csv              ← 학습 라벨
├── 📄 dev.csv                ← 개발 라벨
└── 📄 sample_submission.csv  ← 제출 양식

⚙️ 환경 설정

요구 사항

  • Python ≥ 3.10
  • CUDA 지원 GPU (VRAM ≥ 12GB 권장, RTX 4080 Super 테스트 완료)

1. 가상환경 생성 및 활성화

# 가상환경 생성
python -m venv venv

# 활성화 (Windows)
venv\Scripts\activate

# 활성화 (Linux / macOS)
source venv/bin/activate

이후 모든 명령어는 가상환경이 활성화된 상태에서 실행합니다.
터미널 프롬프트 앞에 (venv) 가 붙으면 정상적으로 활성화된 것입니다.

2. 패키지 설치

# PyTorch (CUDA 12.6 기준)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126

# 나머지 패키지
pip install timm albumentations opencv-python scikit-learn pandas numpy

CUDA 버전이 다르다면 PyTorch 공식 사이트에서 맞는 설치 명령어를 확인하세요.

주요 라이브러리 버전 (테스트 환경)

라이브러리 버전
PyTorch 2.9.1+cu126
torchvision 0.24.1+cu126
timm 1.0.25
albumentations 2.0.8
OpenCV 4.12.0.88
scikit-learn 1.8.0
pandas 2.3.2
numpy 2.2.6

🚀 사용법

1. 단일 아키텍처 학습

# 기본: EVA-02 Large, 5-Fold
python train.py

# 특정 프리셋
python train.py --preset convnextv2_large

# 커스텀 하이퍼파라미터
python train.py --preset eva02_large --epochs 40 --batch_size 6 --lr 3e-5

# 특정 폴드만 학습
python train.py --preset eva02_large --folds 0,1,2

2. 추론 및 제출 파일 생성

# 단일 아키텍처 (폴드 앙상블 + TTA)
python predict.py --preset eva02_large

# 멀티 아키텍처 앙상블
python predict.py --multi_arch

# TTA 비활성화
python predict.py --preset eva02_large --no_tta

3. 전체 파이프라인 (학습 → 추론)

# 3 아키텍처 학습 + 앙상블 추론
python run_all.py

# 특정 아키텍처만
python run_all.py --presets eva02_large convnextv2_large

# 학습 스킵, 추론만
python run_all.py --skip_train

🏛️ 모델 아키텍처

Dual-View Classifier

  front.png ──→ ┌──────────────┐ ──→ front_feat (1024d)
                │  Shared       │                         ┌──────────┐
                │  Backbone     │                    ──→  │ MLP Head │ ──→ logits (2d)
                │  (EVA-02 등)  │                         └──────────┘
  top.png   ──→ └──────────────┘ ──→ top_feat  (1024d)
                                         concat (2048d)
  • 공유 백본: 같은 가중치로 정면·상면을 각각 인코딩 → 파라미터 효율
  • MLP Head: Linear(2048→512) → LN → GELU → Dropout → Linear(512→256) → LN → GELU → Dropout → Linear(256→2)

지원 프리셋

프리셋 모델 이미지 크기 파라미터
eva02_large EVA-02 Large Patch14 448×448 ~305M
eva02_clip EVA-02 Large CLIP 336×336 ~305M
convnextv2_large ConvNeXtV2 Large 384×384 ~198M
caformer_b36 CAFormer B36 384×384 ~99M

📊 학습 전략 요약

전략 설정
Cross Validation StratifiedKFold, 5-Fold
옵티마이저 AdamW (weight_decay=0.05)
학습률 Backbone: 2e-5, Head: 2e-4 (10배)
스케줄러 Linear Warmup (3 epochs) → Cosine Annealing
정밀도 AMP (FP16 혼합 정밀도)
정규화 Label Smoothing(0.05), Dropout(0.3), Drop Path(0.2)
데이터 증강 Resize(+32) → RandomCrop, Mixup(α=0.3) / CutMix(α=1.0), 강한 공간·색상 변환
EMA Exponential Moving Average (decay=0.9998)
Early Stopping patience=7
Gradient Accumulation steps=4 (effective batch=16)

📂 출력 구조

outputs/
├── eva02_large/
│   ├── best_fold0.pt
│   ├── best_fold1.pt
│   ├── ...
│   └── train.log
├── convnextv2_large/
│   └── ...
├── submission.csv             ← 단일 아키텍처 제출 파일
└── submission_ensemble.csv    ← 멀티 아키텍처 제출 파일

📝 라이선스

이 프로젝트는 데이콘 경진대회 용도로 작성되었습니다.


🙏 참고

About

정면 + 상면 공유 백본을 활용한 분류모델입니다.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages