boostcampaitech4lv23cv1 / level2_dataannotation_cv-level2-cv-01

Data Annotation Competition - λΆ€μŠ€νŠΈμΊ ν”„ AI Tech 4κΈ°
1 stars 2 forks source link
deep-learning ocr python

MemberπŸ”₯

κΉ€λ²”μ€€ λ°±μš°μ—΄ 쑰용재 쑰윀재 졜λͺ…ν—Œ

Index

Project Summary

λŒ€νšŒ 주제 및 κ°œμš”

OCR (Optimal Character Recognition) κΈ°μˆ μ€ μ‚¬λžŒμ΄ 직접 μ“°κ±°λ‚˜ 이미지 속에 μžˆλŠ” 문자λ₯Ό 얻은 λ‹€μŒ 이λ₯Ό 컴퓨터가 인식할 수 μžˆλ„λ‘ ν•˜λŠ” 기술둜, 컴퓨터 λΉ„μ „ λΆ„μ•Όμ—μ„œ ν˜„μž¬ 널리 μ“°μ΄λŠ” λŒ€ν‘œμ μΈ 기술 쀑 ν•˜λ‚˜μ΄λ‹€.

OCR taskλŠ” κΈ€μž κ²€μΆœ (text detection), κΈ€μž 인식 (text recognition), μ •λ ¬κΈ° (Serializer) λ“±μ˜ λͺ¨λ“ˆλ‘œ 이루어져 있고 λ³Έ λŒ€νšŒμ—μ„  'κΈ€μž κ²€μΆœ' task λ§Œμ„ ν•΄κ²°ν•œλ‹€.

단, 평가 방식이 예츑 CSV 파일 제좜 (Evaluation) 방식이 μ•„λ‹Œ Model Checkpoint 와 inference.py λ₯Ό μ œμΆœν•˜μ—¬ μ±„μ ν•˜λŠ” 방식이닀.

λ°μ΄ν„°μ…‹μ˜ ꡬ쑰

ν•™μŠ΅ λ°μ΄ν„°λŠ” 기본적으둜 536개의 μƒ˜ν”Œλ‘œ 이루어진 "ICDAR17_Korean"μ΄λΌλŠ” μ΄λ¦„μ˜ 데이터셋이 μ œκ³΅λλ‹€.

μ΄λŠ” ICDAR17-MLT λ°μ΄ν„°μ…‹μ—μ„œ μ–Έμ–΄κ°€ ν•œκΈ€μΈ μƒ˜ν”Œλ“€λ§Œ λͺ¨μ•„μ„œ μž¬κ΅¬μ„±ν•œ κ²ƒμœΌλ‘œ 원본 MLT λ°μ΄ν„°μ…‹μ˜ 뢀뢄집합이닀.

λ³Έ λŒ€νšŒλŠ” 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³  ν™œμš©ν•˜λŠ” 방법이 μ£Όμš” λ‚΄μš©μ΄κΈ° λ•Œλ¬Έμ—, μ„±λŠ₯ ν–₯상을 μœ„ν•΄ 곡곡 데이터셋 ν˜Ήμ€ 직접 μˆ˜μ§‘ν•œ 데이터셋을 μΆ”κ°€μ μœΌλ‘œ μ΄μš©ν•˜λŠ” 것을 μ œν•œν•˜μ§€ μ•Šμ•˜λ‹€.

평가 λ°μ΄ν„°λŠ” 크둀링된 λ‹€μ–‘ν•œ 이미지 (손글씨, κ°„νŒ, μ±…ν‘œμ§€ λ“±) 총 300μž₯으둜 κ΅¬μ„±λ˜μ–΄ 있고 μ–Έμ–΄λŠ” 주둜 ν•œκ΅­μ–΄μ΄κ³ , μ˜μ–΄, κ·Έ μ™Έ λ‹€λ₯Έ 언어도 μžˆμ§€λ§Œ ν•œκ΅­μ–΄, μ˜μ–΄κ°€ μ•„λ‹Œ λ‹€λ₯Έ μ–Έμ–΄λŠ” don't care μ²˜λ¦¬ν•˜λ―€λ‘œ κ²€μΆœν•˜μ§€ μ•Šμ•„λ„ 됐닀.

Public ν…ŒμŠ€νŠΈμ…‹μœΌλ‘œλŠ” 50%인 150μž₯이 곡개되고, λ‚˜λ¨Έμ§€ 데이터 150μž₯은 Private ν…ŒμŠ€νŠΈμ…‹μœΌλ‘œ ν™œμš©λλ‹€.


Procedures

Test 데이터에 λŒ€ν•œ 정보λ₯Ό μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ—, Test setκ³Ό μœ μ‚¬ν•  것이라 μƒκ°λ˜λŠ”, μ΅œλŒ€ν•œ λ§Žμ€ 데이터λ₯Ό λͺ¨μ•„ Public Leaderboard점수λ₯Ό ν–₯μƒμ‹œν‚€λŠ” 것을 λͺ©ν‘œλ‘œ ν–ˆλ‹€.

주어진 데이터셋 외에 ICDAR15(μ•½ 1000μž₯)(https://rrc.cvc.uab.es/?ch=4&com=downloads), ICDAR17(μ•½ 9000μž₯)(https://rrc.cvc.uab.es/?ch=8&com=downloads), ICDAR19(μ•½ 10000μž₯)(https://rrc.cvc.uab.es/?ch=15&com=downloads) 데이터셋을 μ‚¬μš©ν–ˆλŠ”λ°, μ²˜μŒμ—” 각각의 데이터셋을 μ‚¬μš© μ‹œ μ μˆ˜κ°€ μ–΄λŠ μˆ˜μ€€μΈμ§€ νŒŒμ•…ν•΄ 더 쒋은 데이터셋을 선택해 μ‚¬μš©ν•˜λ € ν–ˆμ§€λ§Œ, ν•΄λ‹Ή λ°μ΄ν„°μ…‹μ˜ ν’ˆμ§ˆμ΄ λ³΄μ¦λ˜μ–΄ 있고 또 κ·ΈλŸ¬ν•œ λ°μ΄ν„°μ˜ μˆ˜κ°€ 많으면 λ§Žμ„μˆ˜λ‘ μ’‹λ‹€κ³  생각해 두 데이터셋을 ν•©μ³μ„œ μ‚¬μš©ν–ˆλ‹€.

이 λ•Œ, ν•œκ΅­μ–΄, μ˜μ–΄ μ™Έμ˜ λ‹€λ₯Έ μ–Έμ–΄λŠ” λͺ¨λ‘ Don’t Care 처리λ₯Ό ν•˜μ§€λ§Œ, μ—¬λŸ¬ λ‚˜λΌμ˜ λ‹€μ–‘ν•œ μ–Έμ–΄λ₯Ό ν•™μŠ΅μ‹œν‚¨λ‹€λ©΄ λͺ¨λΈμ΄ κΈ€μžλ₯Ό κ²€μΆœν•˜λŠ” 데에 λ”μš± 도움이 될 κ²ƒμ΄λΌλŠ” κ°€μ •μœΌλ‘œ μΆœλ°œν•˜μ—¬ Hindi, Bangla, Arabic λ“± λ‹€μ–‘ν•œ μ–Έμ–΄ 데이터λ₯Ό ν•™μŠ΅μ‹œν‚€λŠ”λ° μ‚¬μš©ν–ˆλ‹€.

좔후에 주졜 μΈ‘μ—μ„œ μΆ”κ°€μ μœΌλ‘œ Upstage 데이터셋(κ΅μœ‘μƒλ“€μ΄ 직접 Annotation을 μˆ˜ν–‰ν•œ μ•½ 900개의 데이터)을 μ œκ³΅ν•΄ μ€¬λŠ”λ° 이 데이터셋은 λ‹€λ₯Έ λ°μ΄ν„°μ…‹μ˜ Annotation 양식과 달리 bounding boxκ°€ Rectangle이 μ•„λ‹Œ Polygon ν˜•νƒœλ‘œ μž‘μ„±λœ 것이 μžˆμ—ˆλ‹€. 이λ₯Ό 닀루기 μœ„ν•œ λ°©λ²•μœΌλ‘œ 첫 λ²ˆμ§ΈλŠ” Polygon에 μ™Έμ ‘ν•˜λŠ” μ‚¬κ°ν˜•μ„ bounding box둜 μ‚¬μš©ν•˜λŠ” κ²ƒμ΄μ—ˆκ³ , 두 λ²ˆμ§ΈλŠ” polygon을 μͺΌκ°œμ–΄ μ—¬λŸ¬ 개의 rectangle λͺ¨μ–‘μ˜ bounding box둜 λ§Œλ“œλŠ” 것이닀. 두 방법 λͺ¨λ‘ μ‚¬μš©ν•΄λ³΄λ©° μ‹€ν—˜μ„ μ§„ν–‰ν–ˆκ³  μ μˆ˜μ—” 큰 차이가 μ—†μ—ˆλ‹€.

μš°λ¦¬λŠ” λ°μ΄ν„°μ˜ μˆ˜κ°€ μΆ©λΆ„ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν•΄μ„œ μ‹€μ œ 데이터 외에 Synthetic Dataset을 μ΄μš©ν•΄ ν•™μŠ΅μ— μ‚¬μš©λ˜λŠ” λ°μ΄ν„°μ…‹μ˜ 크기λ₯Ό ν‚€μ› λ‹€. Synthetic Dataset으둜 Pretrain ν›„ Target Dataset으둜 ICDAR ν˜Ήμ€ Upstage 데이터셋을 μ‚¬μš©ν•΄ Finetuning을 μ§„ν–‰ν–ˆκ³ , 이 λ•Œ Synthetic Dataset으둠 ICDAR19에 Synthetic Textλ₯Ό ν•©μ„±ν•œ 데이터셋과 Carnegie Mellon University의 UnrealText(https://github.com/Jyouhou/UnrealText)λ₯Ό μ‚¬μš©ν•˜μ—¬ Pretrainν•œ λͺ¨λΈμ„ μ‚¬μš©ν–ˆλ‹€. Public μ μˆ˜λŠ” 큰 λ³€ν™”κ°€ μ—†μ—ˆμ§€λ§Œ, Private μ μˆ˜κ°€ μœ μ˜λ―Έν•˜κ²Œ μƒμŠΉν•œ κ²ƒμœΌλ‘œ 보아 Generalization μ„±λŠ₯이 μ’‹μ•˜λ‹€κ³  μΆ”μΈ‘ν•  수 μžˆλ‹€.


Result

Publicκ³Ό Private 점수 차이가 μƒλ‹Ήν–ˆλ‹€. Generalization μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 것이 private μ μˆ˜μ— 큰 영ν–₯을 쀬을 것이라 μΆ”μΈ‘ν•  수 μžˆλ‹€.

λ˜ν•œ λ°μ΄ν„°μ…‹μ˜ 규λͺ¨κ°€ 컀질수둝 ν•™μŠ΅μ‹œκ°„λ„ λΉ„λ‘€ν•΄μ„œ κΈΈμ–΄μ Έμ•Ό ν•˜λŠ”λ° λ‹€μ–‘ν•œ 쑰건으둜 λ§Žμ€ μ‹€ν—˜μ„ μ§„ν–‰ν•˜λŠλΌ 일정 μ‹œκ°„ μ΄μƒμœΌλ‘œ ν•™μŠ΅μ„ μ‹œν‚€μ§€ λͺ»ν•΄ 높은 점수λ₯Ό 받지 λͺ»ν•œ 것 κ°™λ‹€.


How to Run

train

python train.py --max_epoch 200 --image_size 1024 --input_size 512 --train_batch_size 32

inference

python inference.py 

evaluation

python evaluation.py

Folder Directory

πŸ“‚ level2_dataannotation_cv-level2-cv-01  
β”‚      
β”œβ”€β”€ πŸ“‚ utils  
β”‚      β”‚  
β”‚      β”œβ”€β”€ πŸ“‚ CV_strategy
β”‚      β”‚        β”‚
β”‚      β”‚        └── πŸ“‘ word_box.ipynb    
β”‚      β”‚        
β”‚      β”œβ”€β”€ πŸ“‘ rare.ipynb  
β”‚      └── πŸ“‘ txt2json.ipynb  
β”‚
β”œβ”€β”€ πŸ“‘ convert_mlt.py
β”‚
β”œβ”€β”€ πŸ“‘ dataset.py
β”‚  
β”œβ”€β”€ πŸ“‘ detect.py  
β”‚
β”œβ”€β”€ πŸ“‘ deteval.py  
β”‚
β”œβ”€β”€ πŸ“‘ east_dataset.py
β”‚
β”œβ”€β”€ πŸ“‘ evaluation.py
β”‚
β”œβ”€β”€ πŸ“‘ inference.py
β”‚
β”œβ”€β”€ πŸ“‘ loss.py
β”‚
β”œβ”€β”€ πŸ“‘ model.py
β”‚
β”œβ”€β”€ πŸ“‘ OCR_EDA.ipynb
β”‚
└── πŸ“‘ train.py