Segmentation models
디버깅 모드
실험 환경이 잘 되어있는지 체크 : 데이터셋 수를 작게, epoch을 작게해서 코드가 잘 돌아가는지 확인 후 train
시드 고정
모델 성능 비교시 실험마다 성능이 달라지는 것 방지 : torch외 numpy ,os 관련 시드 고정
validation 검증셋의 시드 고정
실험 기록
Network 종류, Augmentation 방법, Hyperparameter 등 성능에 영향을 주는 조건을 바꿔가며 실험을 진행한 후, 그 결과를 기록
실험은 한번에 하나씩
예를 들어 이전 실험 조건에서 Network 종류와 Augmentation 방법을 모두 변경하여 실험할 경우, 두 조건 중 어떤 조건이 성능 향상/하락에 영향을 주었는지 알기 어려움
팀원마다 역할 분배
베이스라인 코드 성능 업데이트->여러사람이 나눠서 실험진행 시 같은 코드에 실험을 서로 중복되지 않게 진행!
솔루션 조사/디스커션 조사 - 한명이 맡아서
제출없이 모델 성능 평가할 수 있음 / Public 리더보드의 성능에 오버피팅 되지 않도록 도와줌
torchvision, Albumentation 등의 library 사용
무조건 많이 적용한다고 성능 오르지 않음 / 도메인 상황, 데이터 셋에 맞는 augmentation 적용
kaggler 들이 많이 사용하는 기법
인코더, 디코더 포함 많은 실험 해보기
segmentation 에서는 현재 HRNet이 SOTA
하이퍼파리미터 찾기 -> learning rate
CosineAnnealingLR
Learning rate의 최대값과 최소값을 정해, 그 범위의 학습율을 Cosine 함수를 이용해 스케줄링하는 방법
• 최대값과 최소값 사이에서 learning rate를 급격히 증가시켰다가, 감소시키기 때문에 saddle point, 정체 구간을 빠르게 벗어나게 함
ReduceLROnPlateau
metric의 성능이 향상되지 않을 때 learning rate를 조절하는 방법
• Local minima에 빠졌을 때 learning rate를 조절하여 , 효과적으로 빠져나옴
Gradual Warmup
학습을 시작할 때 매우 작은 learning rate로 출발해서 특정 값에 도달할 때까지 learning rate를 서서히
증가시키는 방법
• 이 방식을 사용하면 weight가 불안정한 초반에도 비교적 안정적으로 학습을 수행할 수 있음
• backbone 네트워크 사용시에 weight가 망가지는 것을 방지
Batch Size
모델의 weight를 매 step 마다 업데이트하지 않고, 일정 step 동안 gradient를 누적한 다음 누적된
gradient를 사용해 weight를 업데이트하는 방법
• 배치 사이즈를 키우는 장점이 있음
// 배치사이즈가 크다고 무조건 좋은게 아님
Optimizer
Adam, AdamW, AdamP 등
Loss
Compound Loss 계열은 imblanced segmentation task에 강인한 모습
k-fold ensemble
Epoch Ensemble
학습을 완료한 후, 마지막부터 N개의 Weight를 이용해 예측한 후 결과를 Ensemble하는 방법
SWA(Stochastic Weight Averaging)
각 step마다 weight를 업데이트 시키는 SGD와 달리 일정 주기마다 weight를 평균 내는 방법
마지막 25%의 epoch에서 SWA진행(비율 사용자 결정)
Seed Ensemble
Random한 요소를 결정짓는 Seed만 바꿔가며 여러 모델을 학습시킨 후 Ensemble하는 방법
Resize Ensemble
input image size를 다르게 해 Ensemble하는 방법
TTA(Test Time Augmentation)
Test set으로 모델의 성능을 테스트할 때, augmentation을 수행하는 방법 / 원본 이미지와 함께 augmentation을 거친 N장의 이미지를 모델에 입력하고, 각각의 결과를 평균 / 모델은 같은 모델 / segmentation 같은 경우 좌표가 원본에 맞게 나오기 때문에 transform된 사진 다시 돌려줘야 됨
1) 모델 학습을 진행
2) 성능이 가장 좋은 모델에 대해 Test 데이터셋에 대한 예측을 진행
• 이 때 Softmax를 취한 확률값이나 Softmax를 취하기 전의 값, torch.max를 취하기 전의 값을 예측
3) 2단계에서 예측한 Test 데이터셋과 Train 데이터셋을 결합해 새롭게 학습을 진행
4) 3단계에서 학습한 모델로 Test 데이터셋을 예측
외부 데이터 활용
classification 결과 활용
Encoder Head 마지막 단에 Classification Head를 달아서 같이 활용 (UNet3+ 에서 활용)
Classification 결과도 같이 학습해서 모델의 수렴을 도와주는 경우
FP16 : 속도를 높이기 위한 FP16연산과 정확도를 유지하기 위한 FP32 연산을 섞어서 학습하는 방법
실험 간소화
단, LB 와 Validation Score 간의 어느 정도 상관관계가 있어야함
DownConv UNet
가벼운 모델로 실험
efficient b0 과 같이 파라미터가 적고 가벼운 모델로 실험
기존 평가 방식인 Accuracy, mIoU 이외에 다양한 평가 방식을 추가
학습 시간의 제한이 있는 경우
epoch ensemble 과 SWA같은 경우 사용하는 모델이 같기 때문에 학습 시간에는 영향을 끼치지 않고 추론 시간에만 영향이 있음
추론 시간의 제한이 있는 경우
속도 평가를 하는 경우
tensor RT 등 의 사용
지난 일주일간 각자 한 feature 공유
아침에 일찍 일어나서 공부를 해야겠다.
자소서 코테 면접과 겹치니 잠을 줄여서 공부하는 수 밖에 없겠다. 체력관리를 하자!