작물 병해 분류 AI 경진대회

알고리즘 | CV | 객체탐지 | 농산물 | Macro f1 score

  • moneyIcon 상금 : 총 100만원
  • 173명 마감
마감

 

수달이팀, Private 4위(점수:0.99769), EfficientNet 앙상블

2021.10.23 11:23 3,874 조회 language

안녕하세요. Private 4위 수달이 입니다. 대회에 참가하며 값진 경험을 할 수 있었습니다. 감사드립니다.
기본을 BaseLine에서 필요한 영역을 확장시키는 방식으로 진행했습니다.

본 대회에서 제가 주로 고민한 내용은 다음 3가지 입니다.
1. 적합한 모델 
2. 부족한 학습데이터: sample 수 = 250개
3. 데이터의 불균형: 가장 많은 Class와 적은 Class의 격차 → 10배 이상 

  먼저 모델은 Image 분류 문제에서 상위권에 분포된 모델 중 EfficientNet-b7을 기본으로 실험해 나가기로 했습니다. (결과적으로 EfficientNet 이외에 해보지 못함) 모델은 Ref[1]를 통해 ImageNet Dataset으로 Pretrain된 모델을 사용하였습니다.
Ref[1]: https://github.com/lukemelas/EfficientNet-PyTorch

  두번째로 부족한 학습데이터는 Data 증강과 Cross Validation을 적용하였습니다. Data 증강은 pytorch에서 제공하는 transform만으로는 부족하다 생각되어 CutMix를 사용하여 부족한 데이터를 보충했습니다. CutMix Code는 Ref[2]를 수정하여 사용하였습니다.
 또한, 고정된 Valid set을 사용하기에는 data 수가 적으므로 5개 fold로 Stratified K-fold를 통해 5개 모델을 학습시켰고 이것들을 Ensemble 하는 것으로 해결하고자 했습니다.
Ref[2]: https://github.com/ildoonet/cutmix

  마지막으로 학습데이터의 불균형한 문제가 있었습니다.  평가기준(Macro-f1)을 고려할 때 sample 수가 적은 Class에 잘 대응하는 것이 중요하다고 생각했습니다. 따라서 Loss Function에 Class별로 가중치를 주도록 했습니다(Weighted Cross Entropy). 가중치는 train dataset의 각 class별 sample 개수에 반비례하도록 설정하였습니다.

코드