Skip to content

boostcampaitech7/level2-cv-datacentric-cv-23

Repository files navigation

📜 Multilingual Receipt OCR


✏️ Introduction

OCR ­(Optical Character Recognition)은 문서 등의 이미지에서 글자를 인식하는 Task 입니다. OCR의 모듈로는 글자 영역을 판단하는 Text Detector, 영역에 포함된 글자를 인식하는 Text Recognizer, 자연어를 유의미한 순서로 정렬하는 Serializer, 기정의된 key들에 대한 value 추출하는 Text Parser가 있습니다. 해당 대회는 영수증 이미지 데이터에서 글자를 검출하는 OCR 대회로 다음 두 가지 규칙이 있습니다.

  1. 영수증 이미지에서 영역을 탐지하는 Text Detection만을 수행합니다.
  2. 모델은 EAST로 고정하고, Data만을 수정하여 성능을 높여야 합니다.

대회는 영역 탐지 성능을 평가하는 DetEval을 통해 평가됩니다.


📅 Schedule

프로젝트 전체 일정

  • 2024.10.30 ~ 2024.11.07

프로젝트 세부일정

  • 2024.10.30 ~ 2024.10.31 : 데이터 EDA 및 시각화, 평가 지표 설정
  • 2024.10.30 ~ 2024.11.03 : Wandb 연동 및 로그 추가
  • 2024.11.01 ~ 2024.11.03 : 외부 데이터 조사 및 Annotation 가이드라인 설정
  • 2024.11.02 ~ 2024.11.05 : 외부 데이터 Annotation
  • 2024.11.02 ~ 2024.11.07 : 모델 실험 및 평가
  • 2024.11.07 ~ 2024.11.08 : 모델 앙상블 실험
  • 2024.11.08 ~ 2024.11.08 : 최종 모델 평가

🕵️ 프로젝트 파이프라인

각 파이프라인에 대한 상세한 내용은 아래 링크를 통해 확인할 수 있습니다.


🥈 Result

Private 리더보드에서 최종적으로 아래와 같은 결과를 얻었습니다.


🗃️ Dataset Structure

data/
├── chinese_receipt
│   ├── img
│   │   ├── test
│   │   │   ├── extractor.zh.in_house...jpg
│   │   │   ├── extractor.zh.in_house...jpg
│   │   │   └── ...
│   │   └── train
│   │       ├── extractor.zh.in_house...jpg
│   │       ├── extractor.zh.in_house...jpg
│   │       └── ...
│   └── ufo
│       ├── test.json
│       └── train.json
├── japanese_receipt
│   ├── img
│   │   ├── test
│   │   │   ├── extractor.ja.in_house...jpg
│   │   │   ├── extractor.ja.in_house...jpg
│   │   │   └── ...
│   │   └── train
│   │       ├── extractor.ja.in_house...jpg
│   │       ├── extractor.ja.in_house...jpg
│   │       └── ...
│   └── ufo
│       ├── test.json
│       └── train.json
├── thai_receipt
│   ├── img
│   │   ├── test
│   │   │   ├── extractor.th.in_house...jpg
│   │   │   ├── extractor.th.in_house...jpg
│   │   │   ├── extractor.th.in_house...jpg
│   │   │   └── ...
│   │   └── train
│   │       ├── extractor.th.in_house...jpg
│   │       ├── extractor.th.in_house...jpg
│   │       └── ...
│   └── ufo
│       ├── test.json
│       └── train.json
└── vietnamese_receipt
    ├── img
    │   ├── test
    │   │   ├── extractor.vi.in_house...jpg
    │   │   ├── extractor.vi.in_house...jpg
    │   │   └── ...
    │   └── train
    │       ├── extractor.vi.in_house...jpg
    │       ├── extractor.vi.in_house...jpg
    │       └── ...
    └── ufo
        ├── test.json
        └── train.json

  • 데이터셋은 다국어(중국어, 일본어, 태국어, 베트남어) 영수증 이미지로 핸드폰 카메라 등으로 찍은 영수증 사진과 스캔된 영수증 사진으로 이뤄지며, train 400개(언어별 100개), test 120개(언어별 30개)로 구성되어 있습니다.

Train & Test json

Train json 파일은 UFO format을 따르며 paragraphs, words, characters, image width & height, image tag, annotation log, license tag 등으로 구성되어 있습니다.

{
    "images": {
        "extractor.ja.in_house.appen_000911_page0001.jpg": {
            "paragraphs": {},
            "words": {
                "0001": {
                    "transcription": "LAWSON",
                    "points": [
                        [
                            728.553329490908,
                            235.436074339687
                        ],
                        [
                            735.9530472990916,
                            428.81846937705836
                        ],
                        [
                            216.57843990309,
                            340.653026763541
                        ],
                        [
                            220.926247854489,
                            246.740375013324
                        ]
                    ]
                },
                "chars": {},
                "img_w": 960,
                "img_h": 1280,
                "num_patches": null,
                "tags": [],
                "relations": {},
                "annotation_log": {
                    "worker": "worker",
                    "timestamp": "2024-06-07",
                    "tool_version": "",
                    "source": null
                },
                "license_tag": {
                    "usability": true,
                    "public": false,
                    "commercial": true,
                    "type": null,
                    "holder": "Upstage"
                }
            }
        },
        ...
    }
  • point는 각 라벨의 위치 좌표이며, 글자를 읽는 방향의 왼쪽 위에서부터 시계 방향으로 x,y 좌표로 총 4개의 (x,y) 좌표로 구성되어 있습니다.

Test JSON 파일은 Train JSON 파일과 동일한 구조를 가지며, 단 point 정보만 빠져 있습니다.


🎉 Project

Structure

project
├── EDA&Viz
│   ├── eda.ipynb
│   ├── result_viz.py
│   └── result_viz.sh
├── inference.py
├── inference.sh
├── preprocessing
│   ├── COCO2UFO.py
│   ├── CORD2UFO.ipynb
│   ├── SROIE2UFO.ipynb
│   └── UFO2COCO.py
├── README.md
├── requirements.txt
├── src
│   ├── dataset_CV2.py
│   ├── dataset.py
│   ├── deteval.py
│   ├── __init__.py
│   └── TIoUeval.py
├── train.py
└── utils
    ├── artifacts_download.py
    ├── bbox_check.py
    ├── create_train_val_tag.py
    └── create_val_data.py

대회 규정에 따라 EAST 모델이 정의된 코드는 제외하였습니다.

EDA&Viz

  • eda.ipynb : 이미지 크기 분포, 단어 개수 분포, Bounding box 크기 분포, Aspect Ratio 분포, 예시 이미지 등을 확인할 수 있습니다.
  • result_viz.py: 최종 모델 평가 결과를 시각화하는 코드입니다. 해당 코드를 위해 다음을 실행해야 합니다.
    bash result_viz.sh

preprocessing

  • COCO2UFO.py : COCO format의 데이터를 UFO format의 데이터로 변환하는 코드입니다.
  • CORD2UFO.ipynb : CORD format의 데이터를 UFO format의 데이터로 변환하는 코드입니다.
  • SROIE2UFO.ipynb : SROIE format의 데이터를 UFO format의 데이터로 변환하는 코드입니다.
  • UFO2COCO.py : UFO format의 데이터를 COCO format의 데이터로 변환하는 코드입니다.

src

  • dataset.py : 데이터 로더를 정의하는 코드입니다. (PIL)
  • dataset_CV2.py : 데이터 로더를 정의하는 코드입니다. (CV2)
  • deteval.py : DetEval을 계산하는 코드입니다.
  • TIoUeval.py : TIoU를 계산하는 코드입니다.

utils

  • artifacts_download.py : Wandb에 저장된 아티팩트를 다운로드하는 코드입니다.
  • bbox_check.py : Bounding box 체크를 위한 코드입니다.
  • create_train_val_tag.py : Train & Validation json 파일에 태그를 생성하는 코드입니다.
  • create_val_data.py : Validation 데이터를 생성하는 코드입니다. (8 : 2 비율)

⚙️ Requirements

env.

이 프로젝트는 Ubuntu 20.04.6 LTS, CUDA Version: 12.2, Tesla v100 32GB의 환경에서 훈련 및 테스트되었습니다.

Installment

또한, 이 프로젝트에는 다앙한 라이브러리가 필요합니다. 다음 단계를 따라 필요한 모든 라이브러리를 설치할 수 있습니다.

  git clone https://github.com/boostcampaitech7/level2-cv-datacentric-cv-23.git
  cd level2-datacentric-cv-23
  pip install -r requirements.txt

🧑‍🤝‍🧑 Contributors

⚡️ Detail

프로젝트에 대한 자세한 내용은 Wrap-Up Report 에서 확인할 수 있습니다.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages