Naver boostcamp -ai tech

Sementic Segmentation 프로젝트 회고(22.12.21 ~ 23.01.05)

끵뀐꿩긘 2023. 1. 6. 07:04

Sementic Segmentation 대회 개인 회고  - 류건 T4070

이번 프로젝트에서 나의 목표는 무엇이었는가?

1.     다양한 방법론 적용하기

2.     근거에 기반한 실험하기

3.     하고 싶은 거 다 해보기

4.     팀원이 올린 PR 무조건 보기

나는 내 학습목표를 달성하기 위해 무엇을 어떻게 했는가?

이번 segmentation 대회에서는 성적이나 결과보다는 이전 대회에서 아쉬웠던 점을 해결하고 조금 더 발전하는 방향으로 가고 싶었다.

이전 Object Detection 대회에서는 데이터에 기반한 실험 설계가 되지 않았으며, 성능이 좋은 모델의 실행에 많은 초점을 맞추어 이 실험을 하고 있는 동기와 결과 분석이 명확하지 못하였다.

데이터 제작 대회에서는 시간이 부족하고 데이터셋 format에 익숙하지 않아 다양한 오픈소스를 직접 적용하지 못한 부분이 아쉬웠다.

이러한 문제들을 해소하기 위해 이번 대회에 들어서며 목표를 세웠고, 최종 프로젝트 사전 준비 기간이 있어 좀 촉박했지만 목표 달성에 있어서 만족할 만한 활동을 해왔다고 생각한다.

1.     실험을 설계할 때 실험 시작의 근거를 확실히 하고, 대조군과 다양한 측면에서 비교하기

2.     실제 데이터를 기반으로 실험의 결과 분석하기

3.     다양한 오픈소스를 접하고 현재 코드에 맞게 개선하기

4.     Git을 최대한 많이 들어가 팀 repository의 최신 코드 숙지하기

나는 어떤 방식으로 모델을 개선했는가?

대회 초반 모델 선택 및 환경 설정은 최대한 가볍고 효율적인 모델인 segformer로 진행하였다.

Segformer를 이용한 실험들을 통해 재현성이나 pipeline 확인과 같이 기본적인 실험 환경을 빠르게 세팅할 수 있었고, augmentation이나 모델 튜닝, 오픈소스 적용 등 여러 인사이트를 얻을 수 있었다.

이후에는 더 큰 모델인 UperNet + ConvNext를 사용하였는데 segformer 실험들 및 팀원이 미리 실험한 기록에서 발견한 부족한 점을 토대로 loss, aug, scheduler 등을 바꾸며 모델의 단점이 개선되었는지 확인하였다.

모델 외적인 부분에서도 모델의 성능을 개선시킬 수 있는 부분들을 찾았으며, 그 결과로 model soup copy & paste 같은 여러 오픈 소스들을 적용하였으며 이러한 실험들이 어떤 동기에서 시작하여 어떤 결과를 내었고, 내가 새롭게 얻은 정보들은 무엇인지 기록하고 분석해두었다.

 

성장한 부분

가장 많이 성장한 부분은 오픈 소스를 다루고 mmseg. 같이 큰 프레임 워크를 다루는 부분이다.

 mmseg.은 편리하지만 그 만큼 크고 이해하기 어려운 프레임 워크여서 mmdet.을 다룰 때는 그 구조를 이해하지 못한 채로 실험을 돌리기만 했었는데, 이번에 직접 몸을 부딪히며 오픈 소스와 연결하고 여러 기능을 구현하는 경험을 통해 자연스럽게 구조를 어느정도 이해할 수 있었다.

그리고 구글과 여러 오픈 소스와 함께라면 내가 원하는 기능을 구현할 수 있겠다는 자신감을 얻을 수 있었다.

마주한 한계는 무엇이며, 아쉬웠던 점은 무엇인가?

가장 많이 성장한 부분임에도 가장 아쉬웠던 부분인데, 오픈 소스를 다루고 원하는 대로 코드를 짜는 실력이 아직 부족한 것 같다.

라이브러리의 모든 것을 알 수는 없지만 다양한 경험을 통해 다양한 코드를 보고 여러 명령어들을 써보는게 너무 중요하다는 게 느껴졌다.

추가적으로, 실험을 근거에 기반에서 하고 결과를 분석했지만 생각보다 성능 개선이 없었다는 점이 좀 아쉬운 부분이다. 아직 데이터와 실험에 대한 분석력, 그리고 실험을 개선하는 실력이 부족한 것 같다. 이것 또한 많은 경험으로 해결할 수 있을 것 같다!

실험이 커지고 팀원들이 하는 작업의 분야가 넓어지자 내가 다른 사람들의 code를 따라잡는 것도 어려웠고, 회의 시간에 작업 내용을 공유하는 것 이상으로 유의미한 방향성을 정하는 게 좀 어려웠다. 이 부분도 개선 방안을 고민해 봐야겠다.

 

한계/교훈을 바탕으로 다음 프로젝트에서 스스로 새롭게 시도해볼 것은 무엇일까?

코드 구현 및 실험에 대한 아쉬움은 오히려 경험을 통해 극복할 수 있다는 자신감이 확실히 생겼다.

하지만, 팀원과 어떻게 협업을 해야하고 일을 분배하고 서로의 코드를 리뷰해야 하는 지, 회의시간을 어떻게 유의미하게 보낼 수 있는지는 아직 잘 모르겠다.

이는 비단 이번 대회만의 문제가 아니라 최종 프로젝트와도 직결된 문제이기 때문에 신속하고 깊게 팀원들과 이야기를 나누고 고민해 봐야겠다. (문제 정의와 세분화가 어느정도 답이 될 수 있을까? 그렇다면 문제 정의와 세분화를 어떻게 해야할까..?)