Celenort
Conciencia
게시물 306
오늘 0
주간 0
A site about logging consciousness

[무인판매대] 대회 후기 및 소감

서론

여러가지로 바쁘고 시간에 쫓기며 시간을 짜내어 작업했던 대회이기도 하고, 마지막 발표 직전에 너무 굉장한 일들이 발생해서 기록으로 남겨두고 싶다는 생각이 들었다. 아직 결과가 나오지 않아서 오히려 결과가 좋고 나쁘고에 따른 미화 없이 있는 그대로 쓸 수 있을 것 같다. 여러 가지로 함께 하며 동고동락했던 나의 팀메이트 kow에게 감사의 인사를 전한다.

대회이든 어떠한 일정이든 사건에 대한 경험을 요약해 정리하는 후기를 제대로 적어본 적이 없는 것 같다. 항상 그 당시에는 나의 100%의 최선을 다하고 모든 것을 쏟아부어 마무리하다 보니 대회가 끝나면 더이상 안해도 된다는 해방감과 해야 할 다른 일들에 치여 후기 작성의 시간을 늘 놓치는 듯 하다. 작업마다 기록을 남겨두고 꼼꼼히 정리하는 스타일이었다면 나중에 들추어 보았을 때도 그 때의 기억을 고스란히 가지고 있을 수 있겠지만, 최선을 다하게 되면 어차피 정리라는 게 무의미해진다는 사실을 알고 있으니까 (머릿속에 해야할 것과 생각할 것들이 정리되어 있는데 파일을 정리하고 기록을 남기는 것은 굉장히 시간 효율 측면에서 나쁘다) 정리하지 않았다. 나의 몇날 며칠을 바쳐 노력했던 결과물이자, 후에 돌이켜 생각하면 늘 회자될 만한 재미있는 기억임에도 나의 습관 탓에 기록이 말소되는 일은 참으로 안타깝지 않을 수 없다. 여행을 가면 반 강제적으로, 그리고 강박적으로 사진을 찍으니까 그때의 기록이 남아있는 반면에 이런 챌린지나 대회는 순간순간 기록을 남길 필요가 없어지다 보니 정말 남는 게 없다. 상을 받는다면 그 상장과 시상식 사진 정도. 그래서 써보기로 했다.

대회 설명

여러 시점에서 제공되는 무인 판매대의 영상 데이터로부터, 여러 고객의 이벤트를 정확히 판단하고 재고 변경을 event 단위로 출력하는 프로그램을 제작하는 것이 목표이다.

YOLO 기반의 객체 인식 모델을 코어 탐지 모델로 사용하되, 영상 중 어떤 프레임을 사용할 것인지, 얼마를 기준으로 이벤트를 탐지할 것인지, 5개의 모델로부터 주어지는 inference 데이터를 어떻게 융합할 것인지 등에 관한 전/후처리 전략은 AI 모델이 아닌 직접 파이프라인을 꾸려야 한다.

대회 시작

대회는 아마 5월 중순 즈음에 공지가 올라왔던 것 같다. 온라인 사전 설명회가 올라오고, 본가에 내려가기 위해 광명역으로 가는 길에 그 영상을 하나씩 봤던 기억이 있다.

서버는 서울대학교 전기정보공학부의 서버를 할당해주었으며, A100과 T4 GPU를 할당하여 사용할 수 있었다. 서버를 제공해준다는 사실만으로 감사할 일은 맞지만 서버가 너무 느리고, 자칫하면 터지고, GPU 할당이 안될 때도 있어서 서버에서 무언가를 시도하는 일은 불가능에 가까웠다. 모든 학습은 개인 데스크톱과 연구실 서버 등을 이용해서 진행되었다.

PPT 슬라이드에 서버 ID와 PW를 전부 뿌리는것도 신기했다. 보통 서버 PW는 따로 제공하거나 하지 않나? 악의를 가지고 있다면 남의 서버를 들어가서 헤집어 놓을 수도 있을 것이고 기생해서 학습을 돌릴 수도 있을 것 같은데..

중간 보고서 작성

5월 중순까지만 해도 한창 시험기간은 아니었지만, 중간 보고서 Due는 애석하게도 대학생들의 한창 시험기간인 6월 초순이었다. 여러 가지로 바빴지만 그래도 하루를 할애해서 함께 보고서를 작성하고 제출했다.

우리가 주목했던 문제는 단 하나였다. 데이터셋 자체의 mislabeling 문제에 집중하고 주목했다. 제공된 데이터셋에서 정보를 얻을 수 있는 부분은 크게 3가지로 나뉜다. 먼저 이미지에서는 육안으로 대략 몇개의 상품이 배치되었는지를 확인할 수 있다. 다음으로 레이블을 표시한 txt 파일에서는 해당 데이터셋이 ground truth로 규정한 레이블의 갯수와 종류, 중심 위치와 바운딩 박스를 계산할 수 있었다. 마지막으로 레이블과 이미지 공통으로 적용되는 이름에는 실제 데이터를 제작하면서 배치한 상품의 갯수가 포함되어 있었다.

다음 그림과 같이 얼핏 보아도 10개는 넘게 배치된 이미지에서 실제 레이블로 표시된 상품의 갯수는 단 3개이다. (3줄) 가려짐 현상으로 인해 제대로 인식하지 못하는 경우를 상정하더라도 3개는 너무나도 적은 수치이다. 이에 파일명에 명시된 상품의 수와 실제 레이블에 기록된 상품 수의 차이를 도시해 보았더니 결과는 다음과 같았다.

실제 갯수와 레이블 수가 일치하는 것은 전체 20,000개 데이터 중 약 2700여개밖에 없었고, 이러한 데이터를 후처리 없이 학습할 경우 그래프에서 표시된 이 차이에 해당하는 수 만큼 모델은 실제 물체가 존재함에도 배경으로 인식하는 오류를 범할 가능성이 커진다.

이러한 문제점을 발견하고, 파이프라인도 중요하지만 제대로 된 학습 데이터를 생성하기 위해 ‘신뢰 가능한’ 데이터 생성기를 주어진 배경과 배경 제거된 상품의 이미지로부터 제작하자는 데 생각이 이르렀다.

단순히 Cut & Paste를 이용한 data augmentation 단계를 넘어 조금 더 정교한 학습 데이터를 생성하는 쪽으로 방향성을 잡았다.

중간 보고서 작성 당시 만들었던 파이프라인의 대략적 모식도로 당시 생각하였던 많은 아이디어들을 모두 담아 실제 구현에서는 축약되기도 하였다. 우리가 더 중요하다고 생각하는 부분인 데이터 생성기와 후처리 파이프라인 두개에 메인 포커스를 두고 집중하였다.

중간 보고서 이후

7월의 내 갤러리 사진이다. 그냥 저 상품들이 지긋지긋하게 많이 보여서 좀 그만 보고 싶을 정도였다.

대부분의 코딩과 구현 과정은 코덱스를 이용한 바이브코딩으로 진행했고, 현시점 기준 최신 모델이었던 5.5 Fast 혹은 에서 중간 혹은 높음으로 코딩을 하였다.

2가지 파트로 나누어서 진행하였다. 파이프라인 담당과 모델 관련 담당이었는데, 처음에는 내가 파이프라인을 맡았다. 종강 이후 쉬었음 청년 이슈 + 7월 이후 학회 및 랩인턴 MT를 다녀오느라 부족한 시간을 핑계로 사실 내가 맡았던 파이프라인은 정말 뼈대만 잡은 상태였고 상당 부분은 역할을 스왑하면서 팀메이트가 구현을 해줬다.

이후에 중간 점검 느낌으로 현황을 공유하며 회의를 했었는데, 어쩌다 보니 파이프라인 대신 모델 쪽을 맡게 되었다. 처음에 나는 모델이라고 해서 모델 훈련과 하이퍼파라미터 설정, 최적화 관련에 집중하는 쪽인 줄 알았는데, 앞서 말했듯 기본적으로 주어진 데이터가 너무 학습에 직접 쓰이기에 퀄리티가 좋지 않았기에, 학습에 필요한 새로운 데이터를 만들어나가는 식으로 작업이 이루어졌다.

2.5D Billboard generator

내가 처음 구현했던 아이디어는 이미 만들어져있던 60점 기반의 dot-grid 형태의 billboard 생성기를 이해하고 이로부터 주어진 지식을 이용하여 더욱 현실적인 3D 생성기를 만들어내는 작업이었다.

댓글을 불러오는 중입니다.