BLOG

[네이버 부스트캠프 5기] Data Centric 프로젝트 리뷰

[네이버 부스트캠프 5기] Data Centric 프로젝트 리뷰

이번에는 Level 2 팀과 함께하는 Data Centric 프로젝트 후기이다.

이번 프로젝트는 'Data Centric'이라는 주제에 걸맞게 데이터에 기반하여 프로젝트가 진행되었다. 지금까지 부스트캠프를 해보니 성능 향상을 위해서는 크게 두가지의 방법이 있는 것 같다. 하나는 지금까지 해왔던 모델 관련 수정이다. Model을 바꾼다거나, Learning Rate, Batch Size, Optimizer를 바꾼다거나. 나머지는 지금 다루고 있는 데이터 관련 수정이다. 외부 데이터를 가져오거나, Augmentation도 여기 들어가겠지? 그 외에 Ensemble 등의 방법도 있겠지만. Learning Rate, Batch Size, Optimizer 등은 사실 엄청난 차이를 가져오지는 않는다. 물론 조그마한 차이도 중요하지만, 가장 먼저 다뤄야 할 친구들은 아니다. 더 중요한 부분은 어떤 Model을 쓰는지, 그리고 어떤 Data를 사용하는지.

이번 프로젝트는 5월 24일부터 6월 1일까지 진행되었다. 기간도 짧아졌고.. OCR은 Text Detection, Text Recognition, Serializer 3가지 task로 나눌 수 있다. Text Detection은 당연히 글씨의 위치를 탐지하는 것. Text Recognition은 어떤 글씨인지 알아내는 것. Serializer는 처리 가능하게 잘 바꾸는.. 그런 task이다. 이번에는 Text Detection만을 다루었는데, 좋게 말하면 간단한 프로젝트, 나쁘게 말하면 이래저래 신경을 덜 쓴 프로젝트라는 느낌이 들었다.

Baseline Code만 사용해도 성능이 거의 92%? 정도는 나왔다. 높으면 95-96까지 올라갔는데 시드의 차이가 만든 변화인 것 같다. 최고 시드는 21인가 23인가.. 아마 23인 것 같았다. 그리고 Data의 중요성을 보여주는 대회이기에 모델을 바꾸거나 lr을 바꾸는 등 평소에 했던 시도들이 금지되었다. 그래서인지 더 시도할 것이 적기도 했고..

가장 먼저 시도한 것은 외부 데이터 사용해보기. AI Hub에 들어가면 글자 데이터가 많다. Annotation이 다르기에 수정하는 코드도 만들었고.. 저작권 관련 이슈로 상세하게 비교할 수는 없지만 나는 AI Hub의 손글씨 데이터셋을 사용했었는데 우리가 가진 데이터셋과 유사도가 떨어진다고 판단했음에도 불구하고 성능이 향상되어서 신기했다. '또한 연관성이 적어 보이는 데이터를 사용했음에도 불구하고 성능이 오른 이유는 validation 데이터는 원본 train 데이터와 유사한 경우가 많기에 한글에 대한 bounding box를 찾는 과정의 부정적인 영향이 적었고, 또한 숫자에 대한 데이터가 많아졌기 때문이라고 예상하였습니다.' 라고 적어두긴 했지만 잘 이해가 가지는 않는 부분이었다.

그리고 기억에 남는 부분은 배경 사진 추가였다. 이미지를 시각화해보니 배경의 패턴을 글자로 오인식하는 경우가 왕왕 있어서 아예 패턴이 있는 배경을 추가했더니 성능이 올랐다. 재미로 낸 아이디어기도 했고 상당히 어이없게 느껴지기도 했었는데 실제로 성능이 오르는 것을 보니 타당한 근거를 가지고 내린 결론이기에 우스워 보여도 일리 있는 결과였다.

Augmentation은 Rotate나 Flip의 경우에는 적용하면 글자가 달라질 수도 있어(상하반전의 경우에는 용->융 이런 식으로) 적용하지 않았고, Random Brightness나 Color Jitter 등을 사용했는데 전자는 성능이 하락했고 후자는 조금 상승했던 것 같다.

다음과 같이 개인 회고를 작성하였는데..

이번 프로젝트는 지난 프로젝트에 비해 체계적인 실험이 이루어졌고, 팀원들끼리 건설적인 대화를 주고받을 수 있었기에 발전 가능성을 엿볼 수 있던 대회였습니다. 아쉬운 점이 존재하지 않는 것은 아니지만, 이번 대회의 교훈을 바탕으로 다음 프로젝트는 더욱 효과적인 결과를 만들어 낼 수 있을 것이라고 생각합니다.

먼저 Train과 Validation을 초기에 분할하여 WandB를 통해 결과를 확인하고 이를 바탕으로 실험의 유효성을 확보할 수 있었습니다. 또한 Data Centric이라는 대회 주제에 맞추어 적절하다고 판단한 외부 데이터셋을 다루어보고 UFO 포맷으로 변환하는 과정 역시 충분히 의미있는 경험이었다고 생각합니다. 이렇게 바꾼 여러 외부 데이터셋을 추가하여 학습을 진행한 결과, 적절한 외부 데이터는 모델을 강건하게 만들고 학습에 긍정적 영향을 준다는 것을 확인할 수 있었습니다.

다음으로는 모델의 결과를 잘 시각화하여 배경의 패턴을 글자로 인식하는 경우가 있다는 문제를 인식하고, 일정한 패턴을 가진 배경을 데이터에 포함하여 학습을 시키면 성능이 향상될 것이라는 가설을 설정하고, 실제로 배경 데이터에 대한 annotation을 생성하여 실제로 성능이 향상됨을 확인하였고, 가설을 검증할 수 있었습니다. 비록 코드의 수정이 자유롭지 못해 GitHub를 사용할 기회가 적었지만, 이전 프로젝트에서 생각했던 부족한 점을 잘 채울 수 있었습니다.

하지만 이러한 성과에도 불구하고 아쉬운 점 역시 존재했습니다. 먼저 성능이 기존 대회들에 비해 높게 나와 모델이 어떤 데이터에 약점을 가지는지 알아내기 어려웠고, 이에 따라 제시할 수 있는 가설의 수가 적었습니다. 또한, train 시간이 오래 걸려 진행할 수 있는 실험의 수가 적었습니다. 현업에서는 더 복잡한 데이터와 모델로 작업을 수행하므로 실험 과정을 체계적으로 구성하는 것이 얼마나 중요한지 깨달을 수 예상해 볼 수 있었습니다.

최종적으로, 지난 프로젝트까지는 Base Model, Learning Rate, Batch Size 등을 조절하고 Augmentation 기법을 적용하는 과정이 주를 이루었다면 이번 프로젝트는 외부 데이터셋이나 json과 같은 데이터 관점에서 task를 다뤄볼 수 있었고, 머신러닝의 더욱 다양한 과정을 경험할 수 있었습니다. 이를 바탕으로 최종 프로젝트에서 실제로 데이터를 수집하거나 가공하는 등의 활동을 진행해보고 싶습니다.

공지를 잘 읽어보니 이번에는 개인 회고가 없어도 된다고 하더라. 리포트 작성도 간단하게 바뀌었고.. 데이터를 만져볼 수 있어서 흥미롭긴 했지만 너무나도 간략한 프로젝트가 된 것 같아서 아쉬웠다.