데이터
- 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 |