3주간의 Semantic Segmentation 대회가 마무리되었다. 지난번 대회에 비해 리더보드의 순위는 높지 않았지만 개인적으로 이번 대회를 통해 많은 성장을 할 수 있었던 것 같다. 이전에는 순위를 올리기에 급급해 단순히 parameter들을 수정하거나 가장 무겁고 최신에 나온 모델들을 적용하려고 노력했었지만 이번 대회는 모델을 나의 입맛에 맞게 커스터마이징하거나 스스로 고안해낸 기법들을 만들고 적용해보며 더욱 깊은 이해를 할 수 있었던 것 같다.
본 대회 역시 지난번 Object detection 대회와 동일한 쓰레기 dataset을 활용하여 진행되었다. 평가 방법은 Semantic Segmentation에서 가장 보편적으로 사용되는 MIoU(Mean Intersection Union)가 채택되었다.
추가적인 사항으로 대회의 원활한 운영을 위해 제출 csv 파일의 이미지 사이즈를 256 x 256으로 변경하여 채점이 진행되었다. 따라서 본래 입력 이미지 사이즈인 512 x 512에서 출력 값을 도출한 후 추가로 사이즈를 조절하는 추가적인 작업도 요구되었다.
Semantic Segmentation 대회가 처음인만큼 1주차에서 학습, 추론 과정을 한번 경험해 보는 거이 중요했다. 어느정도 흐름을 파악한 뒤 베이스라인 코드 구축을 시작했다. 가장 초기의 베이스라인을 구축하는 데에 있어서 여러 명이 동시에 작접하면 효율성이 좋지 않다고 판다하여, 나 혼자서 구축 작업을 맡았다. 여태 대회를 진행하면서 계속 baseline 구축 작업을 맡았기때문에 크게 어려움을 느끼지는 않았다. 하지만 지난번보다 조금 더 동적이고 더 넓은 확장성을 가질 수 있도록 최대한 노력하였다.
해당 주차에서는 모델 성능 향상에 집중하였다. Kaggle, github 등 외부 사이트를 많이 참고하며 성능이 좋은 모델들을 탐색하였다. 그 후 몇가지 모델을 선정하여 훈련을 진행하였고 object detection 대회 때와 마찬가지로 transformer 게열의 모델이 성능이 가장 좋았다.
이번 대회에서는 모델 탐색 후 훈련에 그치지 않고 직접 모델 커스터마이징을 시도해보았다. Backbone을 transformer 계열로 가져가면서 decode head 부분에 여러가지 모델을 시도해보거나 classifier head를 추가하는 등 모델의 내부적인 구조를 대회 특성에 맞게 수정해가며 조금더 원초적인 작업을 수행하였다.
2주차 주말부터 3주차에는 segmentation의 성능을 향상시켜줄 여러가지 기법을 시도해보았다. 기법 또한 기존에 알려진 코드나 남이 작업해 놓은 결과물을 가져오는 것이 아닌 새로 커스터마이징하며 구축하였다. 첫째로 시도한 기법은 SWA였다. 한 모델의 연속된 epoch 혹은 iteration마다 pth 파일을 가져와 model의 weight를 모두 더한 뒤 더한 개수만큼 나눠주는 방식을 취하였다. 결과적으로 성능에 큰 향상을 가져왔다.
두번째로 시도한 방법은 soft voting이다. soft voting은 2가지 방법으로 나누어서 실행해보았는데 하나는 보편적으로 알려진 모든 softmax 값을 더한 뒤 argmax를 취해주는 방식이고 다른 하나는 softmax 값을 더하지 않고 concat하여 argmax를 취해주는 방식이었다. ensemble에서는 크게 성능향상을 얻어내진 못하였다.
이번 대회에서는 8위라는 낮지는 않지만 크게 만족할 수 없는 등수로 마무리하였다. 하지만 순위가 더욱 높았던 지난번 대회들과는 다르게 본인의 성장 측면에 있어서는 월등히 성장하였음을 느꼈다. 그 이유는 나만의 새로운 것을 시도에 보는 것에 있었다. 남들이 쓰는 모델을 그대로, 기법을 그대로 쓰는 것이 아닌 자신의 입맛에 맞게 커스텀마이징하는 것이 이전 대회들과는 달랐다. 물론 성능 면에 있어서는 불리할 수도 있다. 하지만 이런 경험을 토대로 어떠한 시행착오로 모델이 개선되어 왔음을 이해할 수 있었고 모델의 내부 구조에 대해서도 더욱 깊게 이해할 수 있었다. 모델 뿐만아니라 segmentation 기법에서도 마찬가지로 하나의 개념에서 확장시켜 나의 입맛에 맞게 커스터마이징을 시도하였다.
이번 대회에서 유독 아쉬운 점은 공유문화에 기여하지 못했던 점이다. 항상 내가 시도한 방법은 다른 사람들 역시 시도해보았을 거라고 짐작하여 공유하지 않았지만 실제로 여러 사람들과 대화를 나눠보았더니 생각은 했지만 시도하지 못한 팀이 대다수였다. 공유 문화는 실제로 타인에게만 도움을 주는 것이 아니라 공유를 함으로써 타인의 아이디에 도움을 받을 수도 있고 나의 논리적 오류나 결함을 바로잡을 수도 있기 때문에 상호 이타적인 행위라고 생각한다. 생각해보면 지금 블로그에 글을 적는 것 또한 하나의 공유이고 이 또한 꾸준히 해야겠다고 생각한다.