농업 환경 변화에 따른 작물 병해 진단 AI 경진대회

몇가지 팁들

2022.01.23 21:26 3,289 Views

개인적인 이유로 인해 대회를 포기하게 되어 대회를 진행하면서 알게된 몇가지 팁들을 공유하려고 합니다. 한 3일 정도 진행해본 결과인데요, 앞으로 시도할 수 있는것들이 매우 많아서 개인적으로 아쉽네요 :(  

  • Extra data
  • Plant-doc: 3000장 규모의 plant disease dataset. 이번 대회의 데이터셋과 가장 유사한 domain입니다.
  • Plant-village: 50000장 규모의 plant disease dataset. 이번 대회의 데이터셋과 달리 배경이 단조로운 실험실 환경의 domain입니다.
  • Data augmentation
  • RandAugment / Autoaugment는 저의 경우 잘 작동하지 않았고 albumentation으로 조합한 몇가지 augmentation이 잘 작동했습니다.
  • 개인적으로 추천드리는 것은, single image transformation은 최소화 하고, Cutmix를 쓰는 것이 가장 큰 improvement가 있을 것 같습니다.
  • Model
  • CNN-based: Effcientnet v2 small
  • Vision transformer: Deit 16 small @224/ PS-Vit (Progressive sampling vit)
  • PS-ViT의 경우 중요한 부분의 offset을 계산해주는 progressive sampling module을 거친후 ViT를 태우는 것인데, 이번 대회에 잘맞을 것 같아 사용해 보았습니다. Imagenet pretrained model이 잘 공유되어 있지않아, Deit에 비해 유용성이 떨어지는 것 같아 사용하지 않았습니다.
  • CNN 모델의 경우 pretraining에서 좋은 결과를 얻었지만, finetuning할 때 큰 성능향상 없이 overfitting현상이 심해 Vision-transformer를 기반으로 구현했습니다. 반면 Deit의 경우 finetuning할 때 성능향상이 크더라고요. 별도의 inductive bias가 없는 MLP-based 모델의 특징인 것 같습니다.
  • How to apply environment variable into Vision Transformer model.
  • Vision transformer에서는 단순하게 시계열 변수 (BxTx9)에 time postional embedding (fourier embedding)을 더해준 값을 모델 입력으로 넣어줘서 구현할 수 있습니다. 이 경우, Local기준으로 1%p 정도 성능향상이 있더군요. 많이 튜닝한 것은 아니라 최대 2%p까지도 더 올라갈 것 같습니다.
  • 저의 경우 배치마다 시계열 길이가 다른 경우를 핸들링하기위해 기존 timm의 implementation에 masked attention을 별도로 구현했습니다.
  • Further improvement (중요)
  • Plant-village에 잎 부분만 segmented image로 만들수 있습니다. 그 mask를 활용해서, Plant-village --> (Plant-doc and 이번대회 데이터 셋) 으로 잎을 유지한채 배경만 삽입해주는 GAN모델을 학습 후 Data augmentation에 이용할 수 있을 것 같습니다.  데이터수가 적어서 DiffAugment 기법 적용했을 때 훨씬 큰 향상이 있었습니다.저도 학습을 해봤지만 GAN은 많이 학습해본 경험이 없어서 mode collapse가 일어나더군요. 학습을 잘 시키면 충분히 잘 나올 수 있을 것 같습니다.
  • Multi task learning
  • DETR이라는 transformer-based detection모델을 보면 이 역시 별도의 anchor token을 뒀습니다.  
  • 단순히 테스트만 해보고 싶으면 잎 영역에 대한 bbox를 regression하는 bbox token을 하나 추가해서 테스트 해보면 될 것 같습니다.
  • Advanced model
  • Cait과 같은 모델도 활용할 수 있습니다.
  • Extra dataset으로 Semi/Self-supervised training을 하는 것도 큰 도움이 될 것 같군요.

저 같은 경우는 전체적인 파이프라인으로 Extra data (Plant-doc + Plant village) 으로 모델을 Pretraining후, 대회 데이터셋에 Cutmix를 활용해서 모델 1차 finetuning. 이후 cutmix없이 환경 변수를 이용해서 2차 Finetuning 하였습니다. 특히 optimizer의 경우 linear-warmup scheduling을 적용하는 것이 학습 안정성에 크게 도움이 되었고, finetuning시에는 lr을 0.1배 낮춰야 훨씬 좋은 결과를 얻었습니다. Efficientnet finetuning시에 Batchnorm freeze하는 trick도 사용해 봤지만 성능향상은 없었고 오히려 성능하락이 있었네요.  Multi task learning의 경우 1차 / 2차 finetuning 혹은 1차 finetuning에 적용시키면 될 것 같습니다.

환경 변수까지 활용한 single model이 Local 94까지 나온걸 확인한 걸로 보아, TTA를 쓰면 최대 0.93정도까지는 나올 것 같습니다. 5 fold 앙상블 까지하면 적당한 순위에 들것이라 예상합니다. 저는 3~4일정도 시도한 결과이고 다들 필요한 아이디어 가져가셔서 모델 업그레이드 시키기 바랍니다.


다들 좋은 결과 있으시길 바랍니다.


로그인이 필요합니다
0 / 1000
siwooyong
2022.01.23 21:39

감사합니다.

Barcelona
2022.01.23 22:28

감사합니다!

비회원
2022.01.23 23:32

감사합니다 !!

백남진
2022.01.24 22:53

정성스런 Discussion이네요! 추후에 활용해보겠습니다 :)

joniekwon
2022.01.24 23:41

모르던 방식들 많이 배워갑니다. 하나하나 검색해봐야겠네요 감사합니다!!

솔라나
2022.01.25 10:12

감사합니다

ispark
2022.01.26 20:09

삭제된 댓글입니다

서정정
2022.01.26 15:36

감사합니다 !!

ispark
2022.01.26 20:09

좋은 정보 감사합니다.
혹시 Vision Transformer 작성하신 코드 공유해주실수 있나요?

DongjunHwang
2022.01.28 15:11

좋은 정보 감사합니다~!!

비회원
2022.01.28 23:07

감사합니다!
혹시 cutmix나 mixup등을 사용해서 성능이 향상된걸 보신 분이 계신가요?
제 경험에는 둘다 성능을 오히려 떨어뜨리는 것 같아서요..