프로젝트 3 - Semantic segmentation 대회 팁
- 주의사항
- Validation
재현 가능성
torch, numpy, os 시드를 고정해서 같은 모델을 재현할 수 있도록 한다.
실험 기록
네트워크, augmentation, 하이퍼파라미터 등 성능에 영향을 주는 조건을 바꿔 가며 실험한 뒤 결과를 기록한다.
실험 결과를 팀원과 끊임없이 공유할 것!
실험은 한 번에 하나씩
한 번에 여러 개의 방법을 적용하면 어떤 방법이 성능 향상에 영향을 끼쳤는지 알 수 없다.
팀원 간 역할 분배
공통 베이스라인 코드를 기반으로 가장 좋은 솔루션을 찾을 것인가? 독립적으로 베이스라인 코드를 만들어서 마지막에 앙상블할 것인가?
EDA/코드 작성/솔루션 조사/디스커션 조사 등으로 역할을 나눌 수도 있다.
옵티마이저나 augmentation 등이 모든 모델에 공통적으로 효과가 있다고 볼 수는 없다. 따라서 공통 베이스라인으로는 2~3개 정도 모델을 두고 발전시킨 다음 마지막에 앙상블하는 것이 효과적이다.
Hold out
학습/검증 셋을 일정 비율로 나누고 학습 결과를 검증하는 방법.
빠르게 검증할 수 있지만 검증셋은 학습에 참여할 수 없어서 잘 쓰이지 않는다.
k-fold
데이터를 k쌍(학습/검증)으로 분리해서 k개의 모델을 만들고 k개 모델의 결과를 앙상블하는 방법. 시간이 길고 k값을 적절하게 선택해야 한다.
Stratified k-fold
그냥 k-fold는 class distribution을 고려하지 못하기 때문에 fold마다 클래스 분포가 동일하도록 나누는 방법.
Group k-fold
스케줄러 - stepLR, cosine
모델 - DeepLabV3+, HRNet, swin > smp에 있는 기타 모델 시도해보고 좋은 거 있으면 공유, 없으면 HRNet 파보기
aug - cutmix, flip, rotate,
앙상블 - 모델 성능을 가중치로 줘서 투표
stratified k-fold 할 수 있도록 데이터 나누기
backbone은 lr 낮게, 분류기는 lr 높게
pretrained 가중치 안 갖고 왔더니 성능 형편없음