Skip to content

boostcampaitech6/level2-cv-datacentric-cv-01

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📖 Overview

본 프로젝트는 컴퓨터 비전 분야에서 현재 널리 쓰이는 대표적인 기술 중 하나인 OCR (Optical Character Recognition) 기술에 사용된 모델의 성능 개선을 목표로 한다. 데이터 분석을 통해 평가 데이터에 적용된 노이즈를 발견하였다. 이를 해결하고자 데이터 증강, 초해상도, 디노이징, 배경 제거 및 앙상블 등의 전략 수립 후 실험을 수행하였다. 이들 중 가장 유의미한 결과를 얻은 초해상도, 앙상블 전략을 적용하여 2위의 성적을 거두었다.

🏆 Rank

Test dataset(Public)
Test dataset(Private)

🪄 How to run

  • 학습 시 필요한 정보를 tools 폴더 내 코드를 활용해서 prepocessing 후 코드 실행
python ./code/train.py --train_dataset_dir /path/to/dataset --model_dir ...
python ./code/inference.py --model_dir /path/to/model --data_dir /path/to/data

🗂 Dataset

1 2
  • Images & Size : Train: 100, Test: 100, (6002500) * (6003500)

📃 Metric

  • OCR 은 글자 검출, 글자 인식, 정렬기 등의 모듈로 이루어져 있음. 본 대회에서는 글자 검출 task 만을 해결함. 검출 성능 평가를 위한 지표로 Precision, Recall, F1 Score를 사용함.
0

Team CV-01

👬🏼 Members


김민윤

김채아

배종욱

박찬종

조명현

최시현

👩‍💻 Roles

Name Common Role
김민윤 EDA,
모델 학습 결과 분석
Image Background Remove
김채아 WandB 세팅, 학습 속도 최적화 실험
배종욱 Data Augmentation, Super Resolution, Denoise
박찬종 Pickle Data Generation, Data Augmentation, Corner Crop
조명현 Denoise, Text sharpening
최시현 Annotation 시각화, Box Filtering & Ensemble

💻 Enviroments

  • Language: Python 3.10.13
  • Hardwares: Intel(R) Xeon(R) Gold 5120, Tesla V100-SXM2 32GB × 6
  • Framework: Pytorch, Numpy
  • Cowork Tools: Github, Weight and Bias, Notion, Discord, Zoom, Google calendar

📊 Project

🔎 EDA

2

Train Dataset

  • 학습 데이터셋 분석에서 세로 이미지, 가로 이미지, 구겨진 이미지 총 세가지 특성을 파악함.
  • 또한, 노이즈가 거의 없는 클린한 데이터임을 파악함.

Test Dataset

  • 평가 데이터셋 분석 과정에서 학습 데이터셋과는 대조적으로 이미지 내에 다양한 노이즈가 존재하는 것을 확인함.

Limitation in UFO Format

  • UFO 포맷은 Albumentation과 같은 라이브러리에서 포맷을 지원하지 않아 Vertice를 변경하는 Transformation에 대해서 Numpy를 이용하며, 이는 학습 시 CPU 연산을 이유로 병목현상이 발생하여 학습 시간이 오래걸린다는 단점을 확인함.
3

🔬 Methods

Pickle Data Generation

  • 학습 데이터를 Pickle 파일로 변환
python ./code/to_pickle.py
4
  • Pickle 파일로 학습 데이터를 생성하여 학습 시간을 기존 1에폭 당 15분 걸리던 학습 시간을 10초 이내로 단축함.

Augmentation

  • 평가 데이터셋과 유사한 노이즈라고 생각되는 다양한 Augmentation 기법을 적용하여 실험 진행함.
5
Augmentation F1 score Recall Precision
Default_CJ, Default_N 0.9119 0.8647 0.9645
Default_CJ, Default_N, S&P 0.9024 0.8493 0.9627
Default_CJ, Default_N, GB, B 0.8967 0.849 0.9501
Augmentation F1 score Recall Precision
Default_CJ, Default_N 0.8779 0.9214 0.8383
CJ, N 0.8532 0.8692 0.8377
GN, N 0.7978 0.7755 0.8214
CJ, GB, B, N 0.8843 0.8735 0.8954
CJ, GB, B, GN, N 0.8634 0.8618 0.8651
CJ, GB, B, HSV, N 0.8807 0.9019 0.8604
CJ, GB, HSV, N 0.9124 0.8665 0.9651

Denoise

6
  • 평가 데이터셋 내의 노이즈는 모델의 성능에 부정적인 영향을 미칠 가능성이 높다고 판단함.
  • Cycle GAN을 활용하여 이미지 내의 상당수의 노이즈를 제거함.

Background Remove

7 8
  • 평가 데이터셋 추론 결과 문서 외부 배경 부분에서 다수의 노이즈 검출 확인함.
  • 모델의 배경 노이즈 검출이 줄어들 것을 가정하여 배경 제거 후 평가 데이터셋에 대한 추론 수행함.
Dataset F1 score Recall Precision
Original 0.9106 0.915 0.9061
Background removed 0.8608 0.8758 0.8463

Super Resolution

9 10
  • 제공된 데이터셋의 경우 글자들의 크기가 대부분은 작은 것을 확인하여 초해상도 기법을 적용하여 원본 이미지 대비 2배, 4배 해상도의 이미지를 생성함.
  • 서버 GPU 메모리 한계로 원본 이미지에 직접 SR을 적용하기 어려워서 이미지를 8등분으로 자른 뒤 SR을 적용함.
Dataset F1 score Recall Precision
Original 0.9106 0.915 0.9061
SR x2 0.9381 0.9392 0.9369
SR x4 0.941 0.9369 0.9451

Corner Crop

12
  • 이미지의 우측 상단에 QR code 옆 세로 글씨에 대한 검출 성능이 부족하여 의도적으로 Coner 부분을 포함시켜 학습을 진행함

Ensemble

13
  • 문자 검출 시에 Confidence Score를 산출하지 않기 때문에 노이즈라고 간주되는 낮은 신뢰도 영역을 식별하는데 어려움이 있음.
  • Noise Filtering : 설정한 임계값보다 적은 수 의 모델이 예측한 영역의 경우 노이즈라고 간주
  • Small box Filtering : 작은 박스들 중 IoU 값이 낮아 앙상블을 통해 합쳐지지 않는 경우 제거
Ensemble F1 score Recall Precision
Model Average 0.9364 0.9357 0.9371
Noise Filtering 0.9485 0.9479 0.9491
Noise Filtering & Small box filtering 0.9503 0.9479 0.9526

📈 Experimental Result

No Ensemble Dataset Image Size F1 score Recall Precision
0 Single Original $[1024,1536,2048]$ 0.9106 0.915 0.9061
1 Single Original $[1024,1536,2048,4096]$ 0.9303 0.9312 0.9294
2 Single SR x2 $[1024,1536,2048,4096]$ 0.9381 0.9392 0.9369
3 Single SR x4 $[1024,1536,2048,4096,8192]$ 0.9410 0.9369 0.9451
4 Single SR x4 $[1024,1536,2048,4096$,
$8192,12288,16384]$
0.9389 0.9355 0.9424
$\mathbf{5}$ $\mathbf{1}+\mathbf{2}+\mathbf{3}$ - - $\mathbf{0 . 9 5 0 6}$ $\mathbf{0 . 9 5 0 3}$ $\mathbf{0 . 9 5 0 8}$

Conclusion & Discussion

Conclusion

본 대회의 목표는 병원 영수증에 포함된 글자를 정확히 검출하는 것이 목표이다. EDA를 통해 학습 데이터셋과 달리 평가 데이터셋에 많은 노이즈가 포함된 것을 확인하였다. 이를 해결하고자 배경 제거, 노이즈 제거, 초해상도 기법, 데이터 증강을 적용하였다. 특히 초해상도 기법을 통해 Recall과 Precision 모두 큰 폭의 성능 향상을 확인할 수 있었다. 이후 결과 데이터 분석을 통해 앙상블을 적용하여 좋은 성적을 낼 수 있었다.

Discussion

데이터 클렌징 & 리레이블링

지난 대회에서 훈련 데이터셋과 평가 데이터셋의 레이블링에 대한 비슷한 양상의 오류가 존재하였다. 본 대회도 비슷한 양상으로 판단하여 클렌징 작업과 리레이블링 작업을 생략하였다.

대회 가이드라인 변경

대회 진행 중 평가 데이터셋 전처리 가이드라인 변경으로 평가 데이터셋에 대한 다양한 전처리 기법을 최대한 활용하지 못했다.

평가 데이터와 유사한 검증 데이터셋 구축

학습 데이터셋과 달리 많은 노이즈가 포함된 평가 데이터셋이 주어졌다. 따라서 평가 데이터셋과 경향성이 유사한 검증 데이터셋을 찾기 어려웠다.

K-fold

bbox별 confidence score가 존재하지 않아 모델의 voting이 이루어질 수 없다. 따라서 일반적인 앙상블 방식과는 다르게 필터링 조건들을 직접 구현하였다.

About

level2-cv-datacentric-cv-01 created by GitHub Classroom

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages