Trial and Errors
Ensemble
단일 모델 Ensemble
일반화를 높이기 위해서는 K-fold로 나뉜 valid를 앙상블 하는 방법이 가장 일반적이다. 하지만, 5번의 학습에 너무 많은 시간이 필요하여 다른 방법을 시도했다. 시간을 최소한으로 일반화를 높이기 위해서 먼저, Valid를 나누지 않은 데이터 셋을 이용하여 학습을 진행했다. Validation이 없기 때문에, 학습의 정도를 확인할 수 없고 이를 보완하고자 epoch과 seed를 기준으로도 앙상블을 진행했다. 결과적으로는 기존 성능보다는 근소하게 낮은 점수가 나왔다. 하지만, 실제로 시각화하여 확인한 결과로는 조금 깔끔한 결과를 확인할 수 있었다.
다른 모델과의 Ensemble
최종적으로 높은 성능을 보인 모델이, MMSegmentation과 SMP(Segmentation Models Pytorch)에 각각 존재하여 모델을 불러와 앙상블 하는데 어려움을 겪었다. 또한, SMP의 경우 Baseline에서 사용하고 있으며, 그에 따라서 버전도 상이했다. 각 환경에만 맞춰서 가상 환경을 설정하고 진행한 결과 발생한 문제였다. 이를 해결하고자, MMSegmentation의 환경의 경우 pytorch 1.6을 사용하는데, 이 경우 모델의 기존 외부 pretrain weight을 불러오는 과정에서 오류가 발생한다. 그렇다고 pytorch의 버전을 변경한다면, 그와 관련된 다른 라이브러리와의 호완성에 문제가 발생한다. 이를 해결하기 위해서, 팀원과의 의논 끝에 외부 pretrain weight은 필요 없으니, 생략하고 저장한 weight을 불러 오도록 수정했다. 추가로 prediction을 모두 softmax를 통과한 soft label의 결과로 출력하도록 수정을 통해서 앙상블에 활용할 수 있었다.
Test의 ground truth를 알지 못하기 때문에, 정말 작은 객체도 예측해야 하는지, 객체를 어느정도로 디테일하게 예측하는지 등 기준을 알 수 없다. 이를 바탕으로 최대한 다른 양상의 결과인 단일 모델 ensemble의 결과와 다른 모델과의 ensemble의 결과를 제출했다.
Conclusion
3주간의 대회를 통해서, 다양한 실험을 통한 결과를 종합해서 최종 제출을 진행했다. 오랜기간 1등을 유지 했으나, 마지막 주에 우리 팀의 경우 단순 점수를 올리기 보다는 일반화 성능에 집중을 하여 진행하다보니 최종 Public 기준 6등으로 마무리 했다. Public score는 각 0.779(단일 모델 앙상블), 0.776(다양한 모델 앙상블)을 제출했으며, Private score는 각 0.760(단일 모델 앙상블), 0.756(다양한 모델 앙상블)으로 최종 3등의 결과를 얻었다.
'Project' 카테고리의 다른 글
올바른 손 씻기 교육을 위한 손 씻기 단계 인식 모델 (0) | 2022.01.18 |
---|---|
눈바디 AI Challenge Wrap-up (0) | 2021.12.05 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 Wrap-up (0) | 2021.11.06 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 [2/3] (0) | 2021.10.29 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 [1/3] (0) | 2021.10.22 |