Trial and Errors
Model
SOTA 모델 사용하기
Semantic Segmentation 모델의 구조는 크게 FCN, Multi-scale, Encoder-Decoder, R-CNN, Attention, GAN 등으로 나뉜다. 이 중에서 나는 high-level API인 MMSegmentation를 활용해 최근의 SOTA 모델 위주로 실험을 진행했다. 이번 대회에서는 DeepLabv3+, HRNetV2+OCR, UperNet+Swin-B, Danet, DEiT, DNL 등 최대한 다양한 모델을 사용해서 이후 앙상블에 사용하고자 했다.
좋은 앙상블을 위해서는 어느정도 우수한 성능을 갖는 모델을 다양하게 가질 필요가 있다. 특히, Atrous Spatial Pyramid Pooling을 사용하는 DeepLabv3+와 OCR을 사용하는 HRNet의 경우 모델의 구조가 확연히 달라서, 다양성을 주기에 좋을 것이라고 판단했다. 참고로 대부분의 ViT 계열의 SOTA의 경우 모델이 학습이 굉장히 느리고 학습 이후에도 리더보드 성적이 충분히 나오지 않아서 ViT 계열은 대부분 생략하고 모델 실험을 진행했다. 하지만, 지난 대회와 마찬가지로 Swin Transformer의 성능이 가장 월등하게 나왔다. 다른 모델이 많이 부족한 모습을 보여, 최대한 마지막까지 다른 모델의 성능도 높일 필요가 있어 보인다.
Swin-L 구현하기
MMSegmentation에는 Swin-B까지만 구현이 되어있어, SOTA 모델인 Swin-L을 추가로 적용했다.
대부분의 구조는 동일하며, 파라미터의 경우 공식 Repo와 논문을 참고하여 수정했다.
결과적으로 동일 조건에서는 Swin-L의 경우가 근소한 차이로 높은 성능을 보였다. 성능에는 큰 차이가 없기 때문에, 추가적인 실험을 통해서 Swin-B와 Swin-L의 차이를 비교할 필요가 있다.
Augment
발견된 문제점
모델이 학습한 결과를 시각화 하면서, 다양한 문제점을 발견했다.
- 객체는 잘 잡으나 라벨링 오류
- 색으로 인한 오류
- 배경을 객체로 잡는 오류
- 그림자에 의한 오류
- 빛 번짐에 의한 오류
1번 문제의 경우 건전지를 일반 쓰레기로 구분한 문제였다. 확인해 본 결과, Test Dataset에는 9V 건전지가 발견되었는데, Train Dataset을 검수해 본 결과 AA 건전지만 존재했다. 이 경우 모델이 한 번도 확인하지 못한 객체라 모델은 계속해서 다른 class로 추측했다. 이를 해결하기 위해 다양한 방법을 적용해 볼 수 있지만, 그 경우에는 너무 overfitting이 될 것이라고 판단했다. 팀원과 논의를 통해서 해당 사진은 넘어가고 다른 문제점을 해결하기 위해서 다양한 augment 실험을 진행했다.
대부분의 오류는 Flip, Bright 통해서 많이 개선했다. 추가적으로 Blur를 사용했을 경우에는 이전에 구분하지 못하던 객체를 구분하거나, 더 명확하게 객체를 예측할 수 있게 되었지만 Classification 부분에서는 역효과가 발생했다. 이를 활용해서, 이후에 앙상블에 사용하면 유용할 것 같다. 다양한 augment를 실험하면서도 그림자가 심하게 있는 객체는 일부만 구분했는데, 이는 멘토님이 알려준 CLAHE를 통해서 개선해 볼 수 있을 것 같다. 아직 모델에 따라서도 augment가 다른 효과를 보이는 것 같아서 지속적인 실험이 필요한 상황이다.
CRF
최종 출력물인 CSV 파일에 DenseCRF를 적용해봤다. 해당 캐글의 글을 참고해서 적용했다. (https://www.kaggle.com/meaninglesslives/apply-crf)
CRF는 마스크의 좌표를 주변과 고려하는 것과, 주변의 이미지 색상을 고려해서 적용할 수 있다. 덕분에, 조금 더 명확한 high resolution의 결과를 얻을 수 있다고 한다. 하지만, 이번 task에서는 마냥 좋다고 사용할 수는 없다. 객체 안에 다른 객체를 예측하는 경우는 올바르게 예측하지 않은 경우가 많다. CRF를 통해서 그런 예측을 고치고 좀 더 명확한 경계를 얻을 수 있다.
하지만, 이번 대회에서의 결과물들은 봉투위에 다른 객체가 잡히는 경우와 상자에 붙어 있는 테이프 등 서로 다른 클래스의 객체가 섞여있다. 따라서 CRF를 통해서 해당 test 이미지의 경우 성능이 하락하게 된다. 또한, 그림자가 있거나 색상이 다채로운 경우가 많아 올바르게 예측한 객체를 틀리게 변환하는 경우도 많았다. 이번 대회의 특성상 CRF를 활용하기는 어려울 것으로 보인다.
다양한 파라미터로 실험을 통해서 리더보드 점수를 올릴 수는 있지만, 그 경우에는 public dataset에 overfitting 될 가능성이 높기 때문에 위험부담을 줄이기 위해서라도 활용하지 않는 편이 좋아 보인다.
Conclusion
지금까지의 실험결과, 다양한 모델을 더 실험하기보다는 지금의 모델(DeepLabv3+, HRNet+OCR, UperNet+Swin)로 가능한 성능을 높이고 앙상블 하는 것을 우선으로 진행하고자 한다. 먼저, 추가적인 augment 실험을 마치고 ensemble을 적용하기 위한 준비를 마치고, 이후에는 그동안의 실험을 바탕으로 효과 있었던 방법을 종합하여 학습을 진행할 것이다. 모든 데이터를 사용해 모델을 학습시키고, K-fold 앙상블도 적용할 예정인데, 모델 학습시간을 고려하여 빠르게 진행해야 할 것이다.
'Project' 카테고리의 다른 글
올바른 손 씻기 교육을 위한 손 씻기 단계 인식 모델 (0) | 2022.01.18 |
---|---|
눈바디 AI Challenge Wrap-up (0) | 2021.12.05 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 Wrap-up (0) | 2021.11.06 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 [3/3] (0) | 2021.11.04 |
재활용 품목 분류를 위한 Semantic Segmentation 대회 [1/3] (0) | 2021.10.22 |