코딩하는 해맑은 거북이

[부스트캠프 AI Tech 5기] LV2 - Data Centric (OCR) 본문

AI/부스트캠프 AI Tech

[부스트캠프 AI Tech 5기] LV2 - Data Centric (OCR)

#CJE 2023. 6. 5.
본 게시물의 내용은 '부스트캠프 AI Tech lv2' Data Centric (OCR) 대회를 마치고 작성하였다.

Data Centric 대회를 마치며...

해당 대회는 기존의 많이 진행하는 대회와는 달리,

모델의 구조는 건들지 않고, 데이터만으로 기존 모델의 성능을 개선시키는데 초점을 둔 OCR 대회이다.

OCR Task 중 글자 검출(Text Detection) 만으로 해결하는 문제이다.

진료비 영수증 형태의 총 200장의 데이터셋을 제공해주었고, 전체 데이터셋 중 100장씩 train, test dataset으로 활용된다.

이후 캠퍼들이 실습을 통해 각 3장씩 라벨링 작업을 한 201장의 train 데이터셋의 추가적으로 제공되었다.

평가방법은 DetEval 방식으로 진행되고, GT 박스 중 ['masked', 'maintable', 'excluded-region', 'stamp'] tag 중 하나의 항목이라도 포함하고있는 박스에 대해서는 평가가 진행되지 않는다.

 

- 프로젝트 전체 기간 : 23년 5월 22일 (월) 10:00 ~ 6월 1일 (목) 19:00

- 랩업 리포트 제출 : 23년 6월 5일 (월) 14:00 까지 (동료피드백X)

 

약 2주간의 짧은 프로젝트로,

팀원들과 3일간 강의를 모두 들어오기로 하고, 이후 대회를 위한 계획을 짜기 시작했다.

이번 대회는 데이터만으로 성능을 개선시켜야 했으므로, 해당 취지에 맞게 팀의 목표는 Data를 중점적으로 직접 만져보면서 협업하기로 했다.

 

먼저 총 301장의 train dataset이 많지 않으므로 팀원들과 나눠 직접 확인해봤을 때,

다양한 형태의 이미지들이 존재하였지만, 가장 큰 문제는 Annotation이 일관성이 없는 점이었다.

기존의 100장의 train 데이터셋은 글자의 밀도가 높은 부분인 '항목별 설명', '일반사항 안내'가 blur 처리되어있고 bbox가 존재하지않았다.

하지만, 캠퍼가 직접 라벨링한 201장의 train 데이터셋은 해당 부분이 blur 처리되어있지 않고, bbox가 존재한다는 점이 달랐고 Labeling Guide에 맞게 되지 않은 부분이 존재하였다. 

(해당 밀도가 높은 부분은 100장의 test dataset에서도 blur 처리되어있고 평가가 되지 않는다.) 

 

즉, Annotation이 학습하기에 양질의 일관성있는 데이터가 아니므로 해당 부분의 Relabeling 작업이 불가피하다고 느꼈고, 이를 중점적으로 대회를 진행했었다.

 

먼저 라벨링 실습할 때 부스트캠프 자체에서 제공했던 Labeling Space 툴은 대회를 진행할 땐 사용할 수 없었어서 다른 툴을 찾아봐야했다.

우리팀은 CVAT 라는 툴을 사용해서 Relabeling을 진행하였다.

해당 툴을 쓰면서 가장 불편했던 점은 한 번에 bbox를 드래그하여 여러개 선택할 수 없었던 점이다.

팀원 중 한 명이 test 데이터셋에는 blur 처리 되어있는 밀도가 높은 '항목별 설명', '일반사항 안내' 등에 존재하는 bbox를 지우기 위해 bbox를 하나하나 지운다고 고생했었다...

 

Relabeling을 하기위해, 어떤 부분을 중점적으로 볼 지 Annotation Guide를 작성하여 팀원 모두 숙지하였고,

총 301장의 데이터를 60장씩 나누어(1명은 61장) Relabeling을 진행하였다.

Relabeling을 진행하다가 애매하거나 헷갈리는 부분은 단톡방으로 물어보며 추가적인 Guide를 작성했었다.

그리고, 사람인지라 어쩔 수 없는 놓치는 부분이 존재하므로 1명이 전체적인 라벨링 검수를 진행하고,

추가적인 깊게 볼 케이스에 대해 팀원과 토의 후 가이드라인을 재작성하여 해당 Relabeling 작업을 반복하였다.

 

 

그리고 대회 종료 이틀전에 WBF Ensemble을 구현하여 진행하였는데,

2개를 Ensemble 했을 땐, f1 Score가 올랐지만

그 이상의 여러 개의 모델들을 앙상블했을 땐, 성능이 떨어지는 문제가 있었다.

 

해당 문제를 파악하기 위해, Inference를 분석해본 결과!

다른 모델에서 잘못예측한 문제점과 또 다른 모델에서 잘못예측한 문제점들이 합쳐져서 오히려 성능이 떨어진 것으로 예상되었다.

그래서, 한 모델에서만 예측한 어느 위치의 bbox는 잘못예측한 것으로 파악하여 제거하는 기능을 추가하여 Ensemble을 진행하였더니 1등 순위를 달성할 정도로 성능이 매우 개선되었다.

기존 Ensemble의 성능이 떨어졌음에도 포기하지않고 문제점을 파악해서 Ensemble을 개선시켜 1등을 한 점이 뿌듯하게 느껴졌다.

 

 

나의 역할

이번 대회에선 팀원 모두가 labeling을 중점적으로 나눠서 진행하였고, 그 외에 내가 했던 역할들은 아래와 같다.

 

- 기존 연구 Search

- Dataset Split과 Validation 구현

- optimizer, scheduler 실험 (기존이 젤 좋았다는..)

- train dataset 분석 (100장)

- test dataset 분석 (100장)

- 캠퍼 데이터셋의 밀도가 높은 부분에 대한 이미지 모자이크 처리 (200장)

- Ensemble

(Ensemble은 기존에 내가 구현했던 부분에서 팀원이 문제점을 수정하여 사용되었다.)

 

배웠던 키워드들

- CVAT

- DetEval

- pickle

- EAST

 

Github

 

GitHub - boostcampaitech5/level2_cv_datacentric-cv-03

Contribute to boostcampaitech5/level2_cv_datacentric-cv-03 development by creating an account on GitHub.

github.com

 

Notion

 

OCR Project (2023.05.22 ~ 2023.06.01)

목표

www.notion.so

 

Comments