-
[Segmenation] Semantic Segmentation의 다양한 기법들CS 공부/AI 2023. 7. 2. 16:51
기존 Augmentation
- Horizontal flip
- Vertical flip
- Rotation
- etc...
최신 Augmentation
- Cutout (Albumentation.CoarseDropout)
- random하게 박스를 생성하기 때문에 사진마다 성능의 편차가 존재
- Gridmask (Albumentation.GridDropout)
- cutout이 객체의 중요 부분 혹은 context 정보를 삭제할 수 있다는 단점을 해결하기 위해 규칙성 있는 박스를 통해 cutout하는 방안을 제시
- Mixup
- Cutmix
- from cutmix.cutmix import Cutmix
- from cutmix.utils import CutmixCrossEntropyLoss
- SnapMix
- CAM을 이용해 이미지 및 라벨을 mixing하는 방법
- 영역 크기만을 고려해 라벨을 생성했던 cutmix와 달리 영역의 의미적 중요도를 고려해 라벨 생성
- CropNonEmptyMaskIfExists
- object가 존재하는 부분을 중심으로 crop
Scheduler
- Learning rate가 너무 작으면 학습시간이 오래 소요되고 local minima에 빠질 위험이 있음
- Learning rate가 너무 크면 loss가 발산하는 문제가 있음
- CosineAnnealingLR
- lr의 최대값과 최소값을 정해 그 범위의 학습율을 cosine 함수를 이용해 스케쥴링
- 최대/최소값 사이에서 lr을 급격하게 증가시켰다가 감소시키기 때문에 saddle point 정체 구간을 빠르게 벗어나게함
- lr의 최대값과 최소값을 정해 그 범위의 학습율을 cosine 함수를 이용해 스케쥴링
- ReduceLROnPlateau
- metric 성능이 향상되지 않을 때 lr 조절
- Gradual Warmup
- 학습을 시작할 때 매우 작은 lr로 시작해서 특정 값에 도달할 때까지 서서히 lr 증가시키는 방법
- weight가 불안정한 초반에도 비교적 안정적인 학습 수행 가능 (Pretrained weight)
- backbone 네트워크 사용시에 weight 망가지는 것 방지
Gradient Accumulation
- 모델의 weight를 매 step마다 업데이트하지 않고, 일정 step 동안 gradient를 누적한 다음 누적된 gradient를 사용해 weight를 업데이트하는 방법
- 배치 사이즈를 키우는 장점이 있음 (성능이 항상 오르는 것은 아님)
Look Ahead optimizer
- Adam이나 SGD를 통해 K번 업데이트 후, 처음 시작했던 point 방향으로 1 step back 후, 그 지점에서 다시 k번 업데이트를 시작하는 방법
- Adam이나 SGD로는 빠져나오기 힘든 local minima를 빠져나올 수 있게 한다는 장점이 있음
Ensemble
- 5-Fold Ensemble (cross validation)
- Epoch ensemble: 학습 완료한 후, 마지막부터 N개의 weight ensemble
- SWA: 각 step마다 weight를 업데이트하는 SGD와 달리 일정 주기마다 weight 평균 내는 방법
- Seed ensemble: seed만 바꿔가며 모델을 학습시킨 후 ensemble
- Resize ensemble: input 이미지의 size를 다르게 학습해 ensemble
- TTA: 모델의 성능을 테스트할 때 augmentation 수행, augmentation 거친 n장의 이미지를 모델에 입력하고 각각의 결과를 평균
- ttach library: SegmentationTTAWrapper object는 모델과 Compose의 결과물을 입력으로 받아 한 이미지에 대해 12가지의 TTA를 적용하고 결과물을 평균 내어 return
Pseudo Labeling
- 모델 학습을 진행
- 성능이 가장 좋은 모델에 대해 test 데이터셋에 대한 예측을 진행
- softmax를 취한 확률값이나 softmax를 취하기 전의 값, torch.max를 취하기 전의 값을 예측
- 2번에서 예측한 test 데이터셋과 train 데이터셋을 결합해 새롭게 학습을 진행
- test 데이터셋을 예측한 값을 다시 train 데이터로 활용
'CS 공부 > AI' 카테고리의 다른 글
Github Action을 사용한 CI/CD (0) 2023.07.04 [Serving] Cloud (0) 2023.07.02 [Segmentation] DeepLab v2~v3+, PSPNet (4) 2023.06.08 [Segmentation] DeconvNet, SegNet, FC DenseNet, Unet, DeepLab, DilatedNet (0) 2023.06.06 [Segmentation] 딥러닝을 이용한 Segmentation FCN (0) 2023.06.06