본 프로젝트는 컴퓨터 비전 분야에서 현재 널리 쓰이는 대표적인 기술 중 하나인 OCR (Optical Character Recognition) 기술에 사용된 모델의 성능 개선을 목표로 한다. 데이터 분석을 통해 평가 데이터에 적용된 노이즈를 발견하였다. 이를 해결하고자 데이터 증강, 초해상도, 디노이징, 배경 제거 및 앙상블 등의 전략 수립 후 실험을 수행하였다. 이들 중 가장 유의미한 결과를 얻은 초해상도, 앙상블 전략을 적용하여 2위의 성적을 거두었다.
- 학습 시 필요한 정보를 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
- Images & Size : Train: 100, Test: 100, (600
2500) * (6003500)
- OCR 은 글자 검출, 글자 인식, 정렬기 등의 모듈로 이루어져 있음. 본 대회에서는 글자 검출 task 만을 해결함. 검출 성능 평가를 위한 지표로 Precision, Recall, F1 Score를 사용함.
김민윤 |
김채아 |
배종욱 |
박찬종 |
조명현 |
최시현 |
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 |
- 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
- 학습 데이터셋 분석에서 세로 이미지, 가로 이미지, 구겨진 이미지 총 세가지 특성을 파악함.
- 또한, 노이즈가 거의 없는 클린한 데이터임을 파악함.
- 평가 데이터셋 분석 과정에서 학습 데이터셋과는 대조적으로 이미지 내에 다양한 노이즈가 존재하는 것을 확인함.
- UFO 포맷은 Albumentation과 같은 라이브러리에서 포맷을 지원하지 않아 Vertice를 변경하는 Transformation에 대해서 Numpy를 이용하며, 이는 학습 시 CPU 연산을 이유로 병목현상이 발생하여 학습 시간이 오래걸린다는 단점을 확인함.
- 학습 데이터를 Pickle 파일로 변환
python ./code/to_pickle.py
- Pickle 파일로 학습 데이터를 생성하여 학습 시간을 기존 1에폭 당 15분 걸리던 학습 시간을 10초 이내로 단축함.
- 평가 데이터셋과 유사한 노이즈라고 생각되는 다양한 Augmentation 기법을 적용하여 실험 진행함.
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 |
- 평가 데이터셋 내의 노이즈는 모델의 성능에 부정적인 영향을 미칠 가능성이 높다고 판단함.
- Cycle GAN을 활용하여 이미지 내의 상당수의 노이즈를 제거함.
- 평가 데이터셋 추론 결과 문서 외부 배경 부분에서 다수의 노이즈 검출 확인함.
- 모델의 배경 노이즈 검출이 줄어들 것을 가정하여 배경 제거 후 평가 데이터셋에 대한 추론 수행함.
Dataset | F1 score | Recall | Precision |
---|---|---|---|
Original | 0.9106 | 0.915 | 0.9061 |
Background removed | 0.8608 | 0.8758 | 0.8463 |
- 제공된 데이터셋의 경우 글자들의 크기가 대부분은 작은 것을 확인하여 초해상도 기법을 적용하여 원본 이미지 대비 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 |
- 이미지의 우측 상단에 QR code 옆 세로 글씨에 대한 검출 성능이 부족하여 의도적으로 Coner 부분을 포함시켜 학습을 진행함
- 문자 검출 시에 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 |
No | Ensemble | Dataset | Image Size | F1 score | Recall | Precision |
---|---|---|---|---|---|---|
0 | Single | Original | 0.9106 | 0.915 | 0.9061 | |
1 | Single | Original | 0.9303 | 0.9312 | 0.9294 | |
2 | Single | SR x2 | 0.9381 | 0.9392 | 0.9369 | |
3 | Single | SR x4 | 0.9410 | 0.9369 | 0.9451 | |
4 | Single | SR x4 |
|
0.9389 | 0.9355 | 0.9424 |
- | - |
본 대회의 목표는 병원 영수증에 포함된 글자를 정확히 검출하는 것이 목표이다. EDA를 통해 학습 데이터셋과 달리 평가 데이터셋에 많은 노이즈가 포함된 것을 확인하였다. 이를 해결하고자 배경 제거, 노이즈 제거, 초해상도 기법, 데이터 증강을 적용하였다. 특히 초해상도 기법을 통해 Recall과 Precision 모두 큰 폭의 성능 향상을 확인할 수 있었다. 이후 결과 데이터 분석을 통해 앙상블을 적용하여 좋은 성적을 낼 수 있었다.
지난 대회에서 훈련 데이터셋과 평가 데이터셋의 레이블링에 대한 비슷한 양상의 오류가 존재하였다. 본 대회도 비슷한 양상으로 판단하여 클렌징 작업과 리레이블링 작업을 생략하였다.
대회 진행 중 평가 데이터셋 전처리 가이드라인 변경으로 평가 데이터셋에 대한 다양한 전처리 기법을 최대한 활용하지 못했다.
학습 데이터셋과 달리 많은 노이즈가 포함된 평가 데이터셋이 주어졌다. 따라서 평가 데이터셋과 경향성이 유사한 검증 데이터셋을 찾기 어려웠다.
bbox별 confidence score가 존재하지 않아 모델의 voting이 이루어질 수 없다. 따라서 일반적인 앙상블 방식과는 다르게 필터링 조건들을 직접 구현하였다.