이번 프로젝트에서의 목표
지난 object detection 프로젝트를 진행하면서 체계적으로 가설을 세우고 실험을 진행하지 못해 아쉬웠기 때문에 이번 프로젝트에서는 해당 부분을 고쳐보고 싶었습니다. 뿐만 아니라 저번 대회 때 pseudo labeling을 적용해보지 못한 것이 아쉬워 효과적으로 pseudo labeling을 적용하는 것을 목표로 삼았습니다.
목표를 달성하기 위한 노력
- 체계적인 실험을 진행하기 위해 비교적 학습 시간이 짧은 모델을 활용해 한 번에 한가지 변화만 적용 해 실험을 진행했습니다.
- Test data를 활용 해 pseudo labeling을 적용하기 위해 여러 실험들을 진행했습니다.
모델 개선 방법
- 학습 시간이 짧은 모델을 활용 해 효과적인 augmentation 기법들을 찾을 수 있었습니다.
- 실험 결과 Random Grid Shuffle과 Color Jitter 기법이 가장 효과적이었습니다.
그림 1: pseudo labeling v0
그림 2: pseudo labeling v1
- Pseudo labeling을 적용했습니다.
- Test data를 그대로 입력으로 활용했을 땐 성능 개선이 전혀 없었습니다.
- 모델이 탐지하지 못한 물체에 대한 이미지가 그대로 학습에 활용 되면서 noise로 작용 했다고 판단했습니다.
- 이를 해결하기 위해 pasting 기법을 고려했습니다.
- 탐지 된 물체에 한해서 mask를 활용해 object를 짤라와 일반 train image에 붙여 넣는 augmentation을 구현했습니다.
- 위의 pasting 기법을 적용한 pseudo labeling을 적용하니 LB 기준 약 0.006정도의 향상이 있었습니다.
- 하지만 pasting 된 결과를 확인 해 보니 train data와 test data 둘다 대부분의 object들이 중앙에 위치해 pasting 되는 object가 기존의 object를 많이 가리는 문제가 있었습니다.
- 이를 해결하기 위해 pasting 하기 전에 shift scale rotate 기법을 통해 중앙에만 pasting 되는 것을 방지 했습니다.
- 더 나아가 보다 일반화 된 모델을 만들기 위해 pasting 전에 flip과 resize 등의 augmentation 들을 적용 해 줬습니다.
- 해당 수정사항들을 모두 적용해 단순한 pasting 보다 LB 기준 약 0.002 정도의 향상을 얻을 수 있었습니다.
- 일반화에 더 신경 쓴 수정사항들이 많았기 때문에 private LB에서는 보다 큰 0.006 정도의 차이를 확인했습니다.
- multi-scale 학습을 진행했습니다.
- 더 일반화가 잘 된 모델을 만들고 이후 TTA에서의 multi-scale inference의 성능을 향상시키기 위한 목적으로 multi-scale training을 진행했습니다.
- 학습 시간을 고려해서 multi-scale resize 이후 일정한 크기로 random crop을 적용 했습니다.
- 결과는 비슷한 학습 시간을 유지하며 LB 기준 약 0.02 성능 향상이 있었습니다.
Fully-Connected CRF
Convolutional CRF
- CRF 후처리를 적용했습니다.
- 처음 pydensecrf 라이브러리를 활용한 dense CRF를 적용했습니다.
- 하지만 하이퍼 파라미터들을 최적화하기 어려움이 많았고 경계선에 취약한 부분을 보여줬습니다.
- 개선 방법을 찾다가 Convolutional CRF를 적용하게 되었습니다.
- 해당 논문에서도 소개되었듯이 경계선에서 훨씬 강한 모습을 보여줬고 실제로 성능 개선도 있었습니다.
결과 및 깨달음
- object detection 프로젝트에 비해 시도 한 개선 방법들이 훨씬 효과적이었습니다.
- 전에 비해 체계적으로 가설을 세우고 세부적으로 실험하고 결과 분석을 꼼꼼히 했기 때문인 것 같습니다.
- 팀원분들이 k-fold 앙상블이 거의 점수 개선이 없었다는 내용을 공유해주셔서 시간이 매우 오래걸리는 k-fold 보다 pseudo label을 여러번 반복 했습니다.
- 결과적으로 pseudo label을 적용 할 때마다 성능 개선이 있었고 private LB 기준으로 총 3번의 pseudo labeling을 통해 0.717→ 0.732 → 0.739 → 0.751 점수 변화를 볼 수 있었습니다.
한계/교훈을 바탕으로 다음 P-Stage에서 새롭게 시도해볼 것
모델을 한번 학습시키기 위해 11시간이 걸렸습니다. 하지만 스페셜 피어세션과 다른 조의 발표를 통해 훨씬 적은 epoch을 통해 비슷한 결과를 도출 해 낼 수 있었다는 것을 알 수 있었습니다. 시간이 더 주어졌으면 시도해보고 싶은 실험들이 많았던 만큼 많이 아쉬운 것 같습니다. 시간이 더 주어졌다면 부족하거나 취약한 클래스만 pasting 하는 augmentation을 활용한 training, pseudo labeling 중 pasting 되는 object들의 class 별로 다른 선택 확률 등을 시도 해 봤을 것 같습니다.