Study/머신러닝

CV 모델 성능 높이기

김 도경 2025. 1. 9. 12:50
데이터
  • EDA (Exploratory Data Analysis)
    - EDA (탐색적 데이터 분석)는 데이터를 다양한 각도에서 살펴봄
    - 시각화 및 통계 분석을 통해 데이터 구조, 패턴, 이상치 등을 먼저 파악해보는 과정
    - 이미지 및 object의 분포 파악
    - 이미지의 다양성 확인
    - 이상치 및 noise 종류 파악

    - 다양한 형태의 object가 등장하는지
    - Occlusion이 많은 데이터인지
    - 각 이미지의 noise 정도가 대략 어느정도인지

  • Augmentation
    - EDA를 기반으로 적절한 augmentation 기법 선정 및 학습 과정에 적용
    - 데이터 증가: 샘플 개수 및 다양성을 추가하여 overfitting을 방지하고 generalization 능력 향상 
    - Robustness 향상: 실제 세계에서의 데이터의 다양성에 맞춰 모델의 robustness 향상
    - Imbalance 보정: 데이터셋 특성에 따라 다양한 imbalance 문제를 완화하고 모델의 성능 향상

    - 데이터에 쉽게 augmentation을 적용할 수 있는 library 소개 : Torchvision, Albumentations, Augraphy

    - Torchvision
        - torchvision.transforms에서 이미지의 기본적인 전처리와 augmentation 함수 제공 
        -  transforms.Compose 또는 torch.nn.Sequential을 활용하여 augmentation을 위한 파이프라인 구성
        - Cropping: 이미지의 특정 부분 잘라내기(CenterCrop, RandomCrop, …) 
        - Color: 밝기, 대비, 채도, 색조 변형 (ColorJitter, Grayscale, …) 
        - Matrix Transformation: 기하학적 형태 변형 (RandomHorizontalFlip, RandomRotation, …) 
        - Blur: 흐리게 만들기 (GaussianBlur, …

    - AutoAugment: 미리 정의된 augmentation 레시피
        - AutoAugmentPolicy.IMAGENET: ImageNet 데이터에 대한 최적의 augmentation
        - AutoAugmentPolicy.CIFAR10: cifar-10 데이터에 대한 최적의 augmentation

    - Albumentations
        - Object detection, segmentation, keypoint detection 등 다양한 task에 적용 가능한 multi-task augmentation 지원
        - 여러 타입의 annotation에 일관된 augmentation을 적용 가능한 library
        - Torchvision에 비해 더 다양한 종류의 변환을 제공
        - Numpy 배열을 직접 처리하여 torchvision에 비해 더 빠른 처리 속도
        - Object detection의 annotation에 일관된 augmentation이 적용된 경우

    - Augraphy
        - Document 이미지에 특화된 다양한 augmentation을 제공하는 library
        - Ink와 paper 각각에 대해 별도의 augmentation 적용
        - 분리된 phase를 다시 합쳐서 post phase 생성
        - Post phase에 최종 augmentation을 적용


    Cutout
        - 이미지의 일부분을 특정 값으로 마스킹하는 방법
        - 모델이 이미지의 일부분에만 의존하지 않고, 전체 맥락을 학습하도록 도와 generalization 능력 향상
        - Task에 따라 이미지 내의 object 개수, object scale 등을 고려해야 함


    - Mixup
        - 서로 다른 label을 가지는 두 이미지와 해당하는 label을 선형적으로 결합하여 새로운 데이터를 생성하는 방법
        - 데이터에 다양성을 제공하며, 입력 데이터의 변화 및 noise에 덜 민감하도록 하여 모델의 robustness 향상
        - Label smoothing 효과를 통해 generalization 성능 향상

    - Cutmix
        - 두 이미지에서 임의의 부분을 잘라내고 이를 교차하여 결합함으로써 새로운 데이터를 생성하는 방법
        - label도 같은 비율로 혼합
        - 데이터에 다양성을 제공하며, 입력 데이터의 변화 및 noise에 덜 민감하도록 하여 모델의 robustness 향상
        - Label smoothing 효과를 통해 generalization 성능 향상

    Copy&Paste
        - 한 이미지에서 객체를 잘라내어 다른 이미지에 붙여넣음으로써 새로운 데이터를 생성하는 방법
        - Detection 및 segmentation에서 annotation과 함께 copy&paste
        - 같은 객체에 대한 위치와 형태에 다양성을 제공 
        - 입력 데이터의 변화 및 noise에 덜 민감하도록 하여 모델의 robustness 향상

    - Pseudo Labeling
        - Semi-supervised learning의 한 형태로, label이 없는 데이터에 가짜 label(pseudo label)을 부여하여 학습에 활용하는 방법
        - 부족한 학습 데이터의 양을 늘려 모델 성능 향상
        - 다양한 데이터를 학습에 활용함으로써 모델이 보다 일반화된 특성 학습
        - 주어진 training data로 모델 학습
        - 모델의 prediction이 높은 confidence score를 가지는 sample만 선택하는 방법
        -  모델 재학습
모델
  • Hyperparameter Tuning
    - 모델 구조 및 학습 방법을 결정하여 성능에 큰 영향을 미치는 hyperparameters를 최적화하는 과정

    1. Scheduler
    - 모델 training 과정에서 learning rate를 동적으로 조절하는 역할

    2. Weight decay
    - 모델의 weight의 제곱합을 penalty term으로 추가하여 overfitting을 방지하는 방법
    - 특정 weight가 너무 커질수록 overfitting 발생 가능성이 높아지기 때문에
    - optimizer에 파라미터 추가하여 사용

    3. Batch size
    - Task 나 데이터에 따라 최적의 batch size는 다름
    - Batch size가 클수록: Training data의 전체 분포를 더 잘 근사하며, batch 내의 noise에 덜 민감
    - Batch size가 작을수록: 학습에 필요한 최소 메모리가 적으며, generalization 성능 일부 향상


    4. Epoch
    - Epoch 조절을 통해 모델이 training data를 얼마나 많이 볼 것인지 조절
    - 너무 작은 epoch: 모델이 데이터를 충분히 학습하지 못함
    - 너무 큰 epoch: overfitting 가능성 높아짐

    5. Dropout
    - 학습 과정 중 모델 내의 일부 neuron을 비활성화하는 방법 
    - 학습 중 특정 뉴런이 다른 뉴런에 의존적으로 학습되는 문제 완화 
    - 일부 비활성화를 통해 모델을 간소화하며 overfitting 방지 
    - 매번 다른 형태의 조합으로 학습하여 ensemble 효과로 인한 성능 향상

  • Ensemble
    - 여러 모델의 서로 다른 예측 결과를 모아 최종 결과의 성능을 향상시키는 방법 
    - 다양한 모델이 약점이나 잘못된 예측을 보완하여 성능 향상
    - 다양한 상황과 예측을 고려하여 robustness 향상
    - 다양한 noise를 고려하여 overfitting 완화

    모델 및 데이터 기반 Ensemble
    - Model Ensemble : 서로 다른 다양한 구조의 모델을 사용하여 학습한 후 결과를 앙상블하는 방법
    - Data Ensemble : 서로 다른 데이터 split이나 augmentation에 대해 모델을 학습시킨 후 결과를 앙상블하는 방법
    - Framework Ensemble : 서로 다른 딥러닝 framework를 사용하여 생성된 모델을 학습시킨 후 결과를 앙상블하는 방법

    학습 방법 기반 Ensemble
    - Seed Ensemble " Random한 요소를 결정짓는 seed를 다양하게 바꿔가며 여러 모델을 학습시킨 뒤 결과를 앙상블하는 방법
    - Hyperparameter Ensemble : 서로 다른 hyperparameter 조합으로 학습시킨 뒤 결과를 앙상블하는 방법
    - Snapshot Ensemble : 같은 모델이지만, 학습 과정에서 서로 다른 시점에서의 model weight를 저장 (snapshot)하고 이를 앙상블하는 방법
          - Cyclic learning rate를 사용하면 여러 개의 local optima에 도달 가능
          - 여러 local optima를 탐색하고 앙상블할 수 있게 됨
    - Stochastic Weight Averaging (SWA) 모델이 어느정도 수렴했을 때, 일정 주기마다 모델 weight의 평균을 취하는 방법
    - Model Soup (Weight Fusion) 모델에 대한 inference cost를 줄이기 위해, 같은 모델에 대한 parameter를 평균내어 앙상블하는 방법

    예측 결과 기반 Ensemble
    - Hard Voting & Soft
          - Voting Classification에서, 여러 모델이 예측한 class를 통합하는 방법
          - Hard Voting: Prediction 중 가장 많이 예측된 class로 통합하는 방법
          - Soft Voting: Prediction 확률 맵을 평균 내는 방법

    - Hard Voting & Soft Voting
          -  Segmentation에서, 여러 모델이 예측한 pixel class를 통합하는 방법
          -  Hard voting: 각 pixel의 prediction 중 가장 많이 예측된 class로 통합하는 방법 
          -  Soft voting: Prediction 확률 맵을 평균내는 방법

    - Hard-NMS, Soft-NMS
          - Object detection에서, 여러 모델이 예측한 bounding boxes들 중 NMS를 통해 겹치는 박스를 제거하는 방법
          - Hard-NMS: 겹치는 boxes 중 confidence score가 낮은 boxes 완전히 제거 (confidence score→0)
          - Soft-NMS: 겹치는 boxes에 가중치를 부여하여 confidence score를 낮추는 방법

    - Weighted Box Fusion (WBF)
          - Object detection에서, 여러 모델이 예측한 bounding boxes에 가중치를 부여한 후 융합하여 더 정확한 fusion box를 생성하는 방법
          - NMS는 부정확한 boxes 모두 제거
          - WBF는 모든 boxes 정보 활용
학습, 추론, 평가
  • Validation set을 사용하는 이유
    - 모델의 성능을 평가하여 test accuracy를 가늠하기 위해
    - Validation 성능을 기반으로 모델을 다시 튜닝하여 성능을 높이기 위해

    좋은 Validation Set
    - Test 분포에 generalization이 잘 된 경우
    - Validation 성능이 오를 때 test 성능이 함께 올라야 좋은 validation set
    - 즉, validation score와 test score 사이의 큰 상관관계가 있어야 함

    Validation 전략
    - Random Split
          - 전체 training data를 일정 비율로 random하게 train/val로 분리

    - K-fold Cross Validation
          - Random split의 경우 전체 데이터셋의 크기가 작을 때 validation set의 신뢰도가 떨어짐

          - K-fold cross-validation은 모든 데이터를 validation에 사용하는 방법 
          - 전체 데이터를 K개의 fold로 분할하여, 각각에 대해 모델을 K번 독립적으로 학습하고 검증

    - Stratified K-fold Cross Validation
          - Validation set에 class imbalance가 심할 경우, 신뢰도가 떨어짐
          - 따라서 전체 데이터셋의 class 비율을 유지하며 fold마다의 validation을 나누는 방법

    - Multi-label Stratified K-fold Cross Validation
          - Multi-label을 가지는 데이터셋에 대해 모든 label의 class 비율을 유지하며 fold를 나누는 방법

    - Group K-fold Cross Validation
          - 데이터셋이 group화 되어있는 경우, 특정 group에 대해 학습 성능이 잘 generalization되는지 평가해야 함
          - 따라서 같은 group 데이터가 train/val에 동시에 포함되지 않도록 분할하는 방법

  • Test-Time Augmentation (TTA)
    - Training cost를 증가시키지 않고 test sample에 augmentation을 적용하여 모델 성능을 향상시키는 방법
    - Test sample에 대해 다양한 augmentation 적용 
    - Training data로 사전 학습된 모델을 통해, 변형된 여러 test sample의 prediction 생성
    - Prediction의 확률을 평균내어 최종 prediction 생성
    - 다양하게 변형된 test image를 사용하여 robustness 향상
    - 모델이 편향되어 학습되었을 경우 prediction을 보정해줄 수 있음

  • 모델 결과 분석
    - 학습이 완료된 모델의 validation set에 대한 prediction을 시각화하고 분석하여, 성능이 낮게 나오는 요인을 파악하는 과정
    - Prediction 시각화, 예측된 class 분포 분석, Prediction 상관관계 분석
    - 모델 결과를 시각화하여 에러 케이스에 대한 분석 → Rotation !

    Grad-CAM
    - 학습된 CNN 모델이 이미지의 어떤 부분에 집중하여 prediction을 만드는지 시각적으로 보여주는 알고리즘
    - 특정 class에 대한 예측에서, 마지막 convolution layer의 gradient를 사용하여 활성화 정도를 시각화

    Attention Heatmap
    - 학습된 Transformer의 self-attention을 시각화하여 이미지의 어떤 부분에 집중하는지 분석

'Study > 머신러닝' 카테고리의 다른 글

Generation-생성 모델 평가지표  (0) 2025.01.09
Generation-생성 모델  (0) 2025.01.09
CV 트렌드  (1) 2025.01.09
Segmentation  (0) 2025.01.09
Backbone  (1) 2025.01.06