공부/Deep Learning : 네부캠 AI Tech

부스트캠프 12,13주차 #3 - Data Centric 대회 회고

도리언 옐로우 2024. 2. 7. 00:49

 

 

1. 서

부스트캠프 3번째 대회인 Data Centric : 글자 검출 프로젝트의 회고이다. Data Centric 대회는 모델을 건드리지 않고 진행했다는 점에서 꽤 많이 이질적인 대회였던 것 같다. 이번 대회는 내가 주체적으로 주도하여 진행해보려고 노력했고, 개인적으로도 많은 공을 들였다. 다음 대회는 파이널 프로젝트 직전이기 때문에, 이번 대회가 '5등안에 들기'라는 목표를 달성할 마지막 기회일 것 같았기 때문이다. 또한 이번 대회에서만큼은 타당한 근거에 기반한 가설을 세우고 이를 통해 성능개선을 이끌어내보고 싶었다. 그리고 아쉬운점은 있었지만 그 결과는 나쁘지 않았다.

 

2. Data Centric : 글자 검출 프로젝트 회고

(1) Project Outline

OCR (Optimal Character Recognition)은 이미지 속의 문자를 컴퓨터가 인식 할 수 있도록 하는 컴퓨터 비전 분야의 대표적인 기술로, 글자 검출(text detection), 글자 인식(text recognition), 정렬기(Serializer)등의 모듈로 구성된다.

 

본 프로젝트에서 다루는 것은 글자 검출 task이다. 즉, 진료비 영수증 이미지 파일로 구성된 데이터셋에 대하여 글자의 영역을 정확하게 탐지할 수 있는 모델을 구성하는 것을 목표로 한다. 다만 Data Centric이라는 주제의 취지에 따라 베이스라인 코드에서 주어진 모델을 그대로 활용해야 한다는 제약이 있다.

 

이번 대회에서는 구성한 모델로부터 생성된 UFO 형식의 output.csv 파일을 제출하여 평가를 받게 된다. 해당 파일에는 글자 영역으로 감지된 부분인 bounding box의 좌표정보가 포함되어 있으며, DetEval 방식으로 평가가 이루어진다.

(2) 문제점 분석

이번 대회에서 활용된 베이스라인 모델은 EAST 모델인데, 대회의 규정에 따라 우선 주어진 베이스라인 코드와 train dataset을 그대로 활용하여 모델을 학습시켰다. 학습된 모델로 test data를 inference하여 얻은 output은 다음의 성능을 보였다.

F1 Score Recall Precision
0.8815 0.8881 0.8751

 

성능개선을 위해 학습된 모델에서 얻은 output을 시각화를 통해 분석하였고, 크게 네 가지의 문제점을 발견할 수 있었다.

  • 문제점① : 약 16%의 이미지에서 얼룩과 같은 노이즈를 글씨로 잘못 인식
  • 문제점② :  약 33%의 이미지에서 상단 제목 부분을 글씨로 제대로 인식하지 못함
  • 문제점③ :  약 20%의 이미지에서 QR코드의 일부를 글씨로 잘못 인식
  • 문제점④ :  약 19%의 이미지에서 QR코드 옆의 세로방향 글씨를 제대로 인식하지 못함

네 가지 유형의 문제점

 

(3) 가설 설정 및 데이터셋 제작

1) 문제점① 관련

 

얼룩과 같은 노이즈를 글씨로 인식하는 문제점과 관련하여, train dataset은 test dataset과 달리 이미지에 특별한 노이즈가 없었기 때문에 모델이 노이즈와 관련된 학습을 제대로 하지 못하였다고 가설을 세웠다.

 

Test dataset에서 글씨로 잘못 인식하는 노이즈와 최대한 유사한 노이즈를 가하기 위하여 원본 데이터셋 100장의 이미지 중 절반인 50장에 노이즈를 추가하여 데이터셋을 제작하였다. 이렇게 제작된 dataset A는 노이즈가 추가된 이미지 50장과 노이즈가 없는 이미지 50장으로 총 100장으로 구성되어 있다.

 

2) 문제점②,③,④ 관련

 

문서의 상단 제목, QR코드, QR코드 옆 세로방향의 글씨에서 발견되는 문제점과 관련하여, 진료비 영수증 데이터에서 대부분의 annotation은 표 안에 쓰여진 작은 글씨들에 대한 것이라는 점에 착안하였다. 즉, 문서의 상단 제목과 QR코드 및 QR코드 옆 세로방향 글씨는 문서에서 차지하는 비중이 매우 적고, annotation의 대부분을 차지하는 유형의 특징(표 안에 있다는 점, 글씨 크기)을 갖고 있지 않아 모델이 제대로 학습하지 못하였다고 가설을 세웠다.

 

가설이 맞다면, 문제점 ②,③,④를 해결하려면 문서 상단 제목과 QR코드 부분의 비중을 늘린 데이터셋을 제작하여 모델을 학습시켜야 한다. 이를 위해 원본 train dataset 중에서 12장의 이미지를 선별한 뒤, 해당 이미지의 상단 제목부분과 QR코드 부분을 원본이미지 여러부분에 합성하였다. 이렇게 합성된 이미지들은 당연히 labeling을 새로 해주어야 하기 때문에, LabelMe 툴을 활용하여 labeling을 진행하였다.

LabelMe를 통한 labeling 작업 (매우 빡세다)

 

12장의 이미지만으로는 부족한것 같아, 다시 4가지 서로 다른 방법으로 augmentation하여 총 60장의 이미지를 생성하였다. 다만 다시 labeling을 하지 않도록 rotate 등 좌표값이 변경될 수 있는 augmentation은 피했다. 마지막으로, 이렇게 생성된 이미지 들에 dataset A를 비율을 조정하여 추가시키면서 5가지 하위 dataset으로 구성된 dataset B를 제작하였다.

Dataset B(a) 60장의 이미지
Dataset B(b) 60장의 이미지 + dataset A 중 40장 (1~20, 51~70)
Dataset B(c) 60장의 이미지 + dataset A 중 60장 (1~30, 51~80)
Dataset B(d) 60장의 이미지 + dataset A 중 80장 (1~40, 51~90)
Dataset B(e) 60장의 이미지 + dataset A 전체 100장

 

(4) 실험 수행 결과

1) 실험① - 문제점① 개선

 

원본 dataset으로 학습시킨 모델에 대하여 dataset A를 활용해 추가 에폭을 학습시켜 모델을 구성하였다. 그 결과, Baseline model에서 recall 0.0316, precision 0.0511만큼 개선됨에 따라 F1 score가 0.0464 개선된 0.9279의 결과를 얻을 수 있었다.

F1 Score Recall Precision
0.9279 0.9197 0.9362

 

2) 실험② - 문제점②,③,④ 개선

 

실험 ①에서 학습된 모델에 대하여 dataset B의 5가지 dataset을 활용해 추가 에폭을 학습을 시켜 모델을 구성하였다. 그 결과 실험 ①의 모델과 비교할 때 이미지 60장으로만 구성된 Dataset B(a)에서는 성능이 하락하였으나, 이를 제외한 모든 dataset에서 성능개선을 확인할 수 있었고, 특히 dataset B(d)에서 recall 0.0105, precision 0.01이 개선되어 F1 score가 0.0102 개선된 0.9381의 결과를 얻을 수 있었다. dataset B에서 데이터셋의 크기가 커질수록 성능이 향상되었는데, dataset B(e)보다 dataset B(d)에서 더 높은 성능을 보인 점이 특이했다.

Dataset F1 Score Recall Precision
Dataset B(a) 0.9113 0.9003 0.9226
Dataset B(b) 0.9307 0.9211 0.9404
Dataset B(c) 0.9328 0.9242 0.9414
Dataset B(d) 0.9381 0.9302 0.9462
Dataset B(e) 0.9317 0.9255 0.9380

 

3. 대회결과 및 느낀점

4위 달성

 

대회결과는 4등이었고, 처음으로 목표했던 5등안에 들 수 있었다. 많은 공을 들였던 만큼 뿌듯했었는데, 다만 그만큼 아쉬운 면도 있었다. 사실 대회중반까지는 1등과 2등사이에서 왔다갔다하고 있었으나, 최종 프로젝트 기간이 얼마남지 않아 최종 프로젝트에 좀더 집중하자는 쪽으로 팀내 의견이 모아졌기 때문이다. 데이터셋 별 실험 결과를 모아 2차적으로 문제분석 및 새로운 가설을 세워 실험을 진행했더라면 1등도 충분히 가능했을 것 같아 아쉬움이 남는다. 

 

그렇지만 AI 프로젝트를 진행하면서 '가설을 세우고 이를 검증한다'라는 단순하지만 가장 근본적인 방식을 통해 성능개선을 이루었다는 점과, 내가 주도적으로 진행한 프로젝트에서 성과를 올렸다는 점에서 굉장히 큰 보람을 느꼈다. 또한 대회의 취지에 맞게 오직 데이터셋만을 컨트롤하였는데, 직접 라벨링 해보는 경험 또한 소중한 자산이 되지 않았을까 생각하고 있다. 마지막으로 여담이지만 라벨링 작업은 굉장히 힘들고 고달픈 작업임을 절실히 알 수 있었다.