level2-data-annotation_cv-level2-cv-15 created by GitHub Classroom

Overview

[AI Tech 3기 Level2 P Stage] 글자 검출 대회

image

팀원 소개

김규리_T3016 박정현_T3094 석진혁_T3109 손정균_T3111 이현진_T3174 임종현_T3182

Overview

OCR (Optimal Character Recognition) 기술은 사람이 직접 쓰거나 이미지 속에 있는 문자를 얻은 다음 이를 컴퓨터가 인식할 수 있도록 하는 기술로, 컴퓨터 비전 분야에서 현재 널리 쓰이는 대표적인 기술 중 하나입니다.

OCR task는 글자 검출 (text detection), 글자 인식 (text recognition), 정렬기 (Serializer) 등의 모듈로 이루어져 있는데 본 대회는 글자 검출 (text detection)만을 해결하게 됩니다.

데이터를 구성하고 활용하는 방법에 집중하는 것을 장려하는 취지에서, 제공되는 베이스 코드 중 모델과 관련한 부분을 변경하는 것이 금지되어 있습니다. 데이터 수집과 preprocessing, data augmentation 그리고 optimizer, learning scheduler 등 최적화 방식을 변경할 수 있습니다.

  • Input : 글자가 포함된 전체 이미지
  • Output : bbox 좌표가 포함된 UFO Format

평가방법

  • DetEval

    이미지 레벨에서 정답 박스가 여러개 존재하고, 예측한 박스가 여러개가 있을 경우, 박스끼리의 다중 매칭을 허용하여 점수를 주는 평가방법 중 하나 입니다

    1. 모든 정답/예측박스들에 대해서 Area Recall, Area Precision을 미리 계산해냅니다.

    2. 모든 정답 박스와 예측 박스를 순회하면서, 매칭이 되었는지 판단하여 박스 레벨로 정답 여부를 측정합니다.

    3. 모든 이미지에 대하여 Recall, Precision을 구한 이후, 최종 F1-Score은 모든 이미지 레벨에서 측정 값의 평균으로 측정됩니다.

      image

Final Score  🏅

  • Public : f1 0.6897 → Private f1 : 0.6751
  • Public : 11위/19팀 → Private : 9위/19팀

image

Archive contents

template
├──code
│  ├──augmentation.py
│  ├──convert_mlt.py
│  ├──dataset.py
│  ├──deteval.py
│  ├──east_dataset.py
│  ├──inference.py
│  ├──loss.py
│  ├──model.py
│  └──train.py
└──input
   └──ICDAR2017_Korean
		  └──data
			  	├──images
		      └──ufo
			        ├──train.json
							└──val.json

Dataset

  • ICDAR MLT17 Korean : 536 images ⊆ ICDAR MLT17 : 7,200 images

  • ICDAR MLT19 : 10,000 images

  • ICAR ArT : 5,603 images

Experiment

Results

dataset 데이터 수 LB score (public→private) Recall Precision
01 ICDAR17_Korean 536 0.4469 → 0.4732 0.3580 → 0.3803 0.5944 → 0.6264
02 Camper (폴리곤 수정 전) 1288 0.4543 → 0.5282 0.3627 → 0.4349 0.6077 → 0.6727
03 Camper (폴리곤 수정 후) 1288 0.4644 → 0.5298 0.3491 → 0.4294 0.6936 → 0.6913
04 ICDAR17_Korean + Camper 1824 0.4447 → 0.5155 0.3471 → 0.4129 0.6183 → 0.6858
05 ICDAR17(859) 859 0.5435 → 0.5704 0.4510 → 0.4713 0.6837 → 0.7222
06 ICDAR17_MLT 7200 0.6749 → 0.6751 0.5877 → 0.5887 0.7927 → 0.7912
07 ICDAR19+ArT 약 15000 0.6344 → 0.6404 0.5489 → 0.5607 0.7514 → 0.7465

Requirements

pip install -r requirements.txt

UFO Format으로 변환

python convert_mlt.py

SRC_DATASET_DIR = {변환 전 data 경로}

DST_DATASET_DIR = {변환 된 data 경로}

UFO Format ****

File Name
    ├── img_h
    ├── img_w
    └── words
        ├── points
        ├── transcription
        ├── language
        ├── illegibillity
        ├── orientation
        └── word_tags

Train.py

python train.py --data_dir {train data path} --val_data_dir {val data path} --name {wandb run name} --exp_name {model name
Comments
  • [Data Modify] ICDAR19이미지 원본 사이즈 768로 조절

    [Data Modify] ICDAR19이미지 원본 사이즈 768로 조절

    what?

    • 원본 이미지 사이즈 768로 변환

    why?

    • data load 시간 단축으로 학습 속도 향상에 기여할 것으로 기대

    TODO

    • 원본 이미지를 768x768 사이즈로 변환하고,
    • JSON파일의 박스 정보도 크기에 맞추어서 변환
    • 추가로 곁가지이지만, 클래스 정보 하나로 통일한 JSON 버전도 만들기
    Data 
    opened by Lim-JH-Laskaris 2
  • [New Feature] 학습끝난 pth 불러와서 이어서 학습하기

    [New Feature] 학습끝난 pth 불러와서 이어서 학습하기

    what?

    • 학습끝난 pth 불러와서 이어서 학습할 수 있는 기능 추가

    why?

    • 큰 데이터셋으로 학습할 경우 200에폭에 3일 가까운 시간이 걸리기도 하는 바, 이를 활용하지 않고 처음부터 다시 학습하는 것은 시간 및 자원 낭비가 크다.

    TODO

    • train.py에 model load 코드 추가
    • train.py에 aurg로 --load 추가
    New feature 
    opened by Lim-JH-Laskaris 1
  • [New Feature] train.py에 validation기능 추가

    [New Feature] train.py에 validation기능 추가

    what?

    • train.py에서 validation기능 추가

    why?

    • 학습이 올바르게 되었는지 검증을 하기 위해 validation이 필요

    TODO

    • train데이터에서 train, validation데이터로 분할
    • train.py에 Validation Code추가
    • f1 score logging
    New feature 
    opened by Rimo-rimo 1
  • [Feat] validation에서 f1 score 계산 및 early stopping

    [Feat] validation에서 f1 score 계산 및 early stopping

    개요

    • Validation에서 f1 score를 계산
    • early stopping 추가

    작업사항

    • train.py에서 deteval 사용해서 f1 score 계산
    • dataset.py의 ValidSceneTextDataset 추가

    완료된 Task

    • Validation에서 f1 score 계산
    • early stopping 추가

    resolved #13

    New feature 
    opened by seokjin0404 0
  • [Feat] Add model-load reslves #20

    [Feat] Add model-load reslves #20

    개요

    • 학습끝난 pth 불러와서 이어서 학습할 수 있는 기능 추가

    작업사항

    • train.py에 model load 코드 추가
    • train.py에 aurg로 --load 추가
        #to load parameters
        parser.add_argument('--load', type=str, default = "F")
    
        def do_training(~~~, **load**):  
    
        ################################모델 불러오기 코드 #############################################
        if load != "F":
            if   load =="T": #####정균님 0.67 코드 불러오기 ######
                print('load parameter from /baseline_200_(ICDAR17_all).pth')
                model.load_state_dict(torch.load(model_dir+"/baseline_200_(ICDAR17_all).pth"))
    
            elif load =="L": ##### 학습하던 코드 불러오기(exp_name 그대로인 경우)#####
                print('load parameter from latest.pth')
                model.load_state_dict(torch.load(model_dir+f'/{exp_name}_latest.pth'))
            else :           ##### pth 지정하기 (단, 학습하던 모델 디렉터리에 존재해야함) #####
                print(f'load parameter {load}')
                model.load_state_dict(torch.load(model_dir+'/'+load)) 
        ############################################################################################
    

    완료된 Task

    • train.py에 model load 코드 추가
    • train.py에 aurg로 --load 추가

    resolved #20

    New feature 
    opened by Lim-JH-Laskaris 0
  • [Feat] Add Wandb Log

    [Feat] Add Wandb Log

    개요

    • wandb log 기록 추가

    작업사항

    • train.py의 wandb.log에 Mean Cls loss, Mean IoU loss, Mean Angle loss 추가
    wandb.log(
            { 'Mean Cls loss': epoch_Cls / num_batches, 
               'Mean Angle loss': epoch_Angle / num_batches,
               'Mean IoU loss': epoch_IoU / num_batches,
               'Mean_loss': epoch_loss / num_batches
            })
    

    완료된 Task

    • wandb log 추가

    이후 Task

    • 더 적합한 log가 있다면 추가해볼 수 있다.

    resolved #3

    New feature 
    opened by leehyeonjin99 0
  • [Feat] optimizer parser 추가 및 exp_name parser 추가

    [Feat] optimizer parser 추가 및 exp_name parser 추가

    개요

    • optimizer parser 추가
    • latest.pth 파일 이름 구체화

    작업사항

    • train.py에 optimizer parser 추가
    • timm library의 optimizer 외에도 AdamP, MADGRAD도 가능하도록 수정
    pip install madgrad
    pip install adam
    
    • latest.pth 파일 이름을 구체화하기 위해 train.py에 exp_name parser 추가 : latest.pth → {exp_name}_latest.pth

    완료된 Task

    • train.py 실행시 optimizer 입력 가능
    • optimizer parser의 default는 Adam이다.
    python train.py --optimizer MADGRAD
    
    • train.py 실행시 exp_name 입력 가능
    • exp_name parser는 필수 입력값이다.
    python train.py --exp_name baseline_SGD_0.001
    

    이후 Task

    • AdamP와 MADGRAd는 timm library에 구현되어 있다. 하지만, 설치 후 실행해 보았을 때 timm에 optim module이 존재하지 않는다는 이슈가 발생한다. 이를 해결하고자 하며, 이를 통해 더 다양한 optimizer를 실험해볼 수 있다.
    • exp_name parser를 입력하지 않고도 자동적으로 모델 feature에 따라서 입력되도록 해보고자 한다.

    resolved #14 #15

    New feature 
    opened by leehyeonjin99 0
  • [Experiment] Optimizer

    [Experiment] Optimizer

    실험

    실험 목표

    • OCR task에 알맞는 OptimizerLearning rate에 대해서 찾을 수 있다.

    동기

    • 학습 성능에 있어서 가장 큰 구성 요소는 Model + Data + Optimizer + Loss Function + Scheduler + Augmentation 로 볼 수 있다.
    • 이 중 오늘은 최적의 Optimizer를 찾고, 해당 Optimizer에 적합한 Learning Rate를 찾아보고자 한다.

    환경 및 과정

    • optimizer를 설정하기 위해서 torch, adamp, madgrad 라이브러리를 사용하였다.
      • torch 1.7.1 : SGD, ASGD, Adam, AdamW, Adamax
      • adamp : ADAMP
      • madgrad : MADGRAD
    • optimizer 실험을 완료한 후 가장 적은 Mean Loss르 갖는 optimizer를 선정한다.
    • 해당 optimizer에 대하여 다양한 Learning Rate를 적용하여 가장 낮은 Mean Loss르 갖느 Learning Rate를 찾아 앞으로의 실험에서 고정한다.

    📎 성능 평가 지표

    • Mean Loss = epoch_loss / num_batches
      • epoch_loss : 각 epoch마다 모든 batch의 loss를 합한 값

    📎 optimizer 적용 방법

    from importlib import import_module
    import madgrad
    import adamp
    
    if optimizer in dir(torch.optim):
        opt_module = getattr(import_module('torch.optim'), optimizer)
        optimizer = opt_module(model.parameters(), lr=learning_rate)
    elif optimizer == 'MADGRAD':
        optimizer = madgrad.MADGRAD(model.parameters(), lr=learning_rate)
    elif optimizer == 'AdamP':
        optimizer = adamp.AdamP(model.parameters(), lr=learning_rate)
    

    결과

    image Experiment 
    opened by leehyeonjin99 0
  • [Experiment] Fine-Tunning

    [Experiment] Fine-Tunning

    실험1

    • 개요 ICDAR17_train으로 학습된 모델(LBscore : 0.6749)에 polygon으로 annotation된 데이터(ART)를 추가로 fine-tunning시켜 주었다.

    | | LB public | LB private |data(pre-trained)|data(fine-tunning)|additional epoch| |---|-------|-------|-------|-------|-------| |01|0.6270|0.6303|ICDAR_17_train|ART, ICDAR_17_val|42|

    Experiment 
    opened by Rimo-rimo 1
  • [Experiment] augmentation

    [Experiment] augmentation

    실험1

    • 개요 이미지 크기 대비 crop size의 비율에 따른 성능을 확인한다. crop size를 작게 할수록 이미지 크기 대비 글자 크기가 커지기 때문에 모델이 학습하기 편할 것이라 생각했지만, 특정 영역을 편향적으로 crop하는 경향이 있어서 정보 손실이 일어나서 성능이 떨어진 것으로 보인다. 또한 작은 bounding box를 찾아내는 것도 detection에서 challenging한 문제 중 하나일텐데, crop size가 작을수록 이미지 크기 대비 작은 bounding box를 모델에 입력하기 힘들어질 것 같다.

    • 결과

    | |LB score(public->private) |resize size|crop size|데이터셋| |---|-------|-------|-------|---| |01|0.4469->0.4732|1024|512|ICDAR17(538)| |02|0.4888->0.5008|1024|768|(538)| |03|0.5152->0.4991|768|768|(538)|

    실험2

    • 개요 dataset의 언어 분포와 성능의 관계를 알아보고자 했다. 같은 데이터셋에서 같은 이미지 개수로 언어 분포를 다르게 데이터를 샘플링했다. 한글 데이터보다 영어 데이터 확보가 쉽기 때문에, 이 실험에서 두 결과가 비슷하게 나온다면 한글, 영어 상관없이 데이터를 추가해도 될 것이다.

    • 결과

    | |LB score(public->private) |language|bbox ratio|데이터셋| |---|-------|-------|-------|---| |01|0.5435->0.5704|ko:en|7:1|ICDAR17(859)| |02|0.5420->0.5522|ko:en|1:7|ICDAR17(859)|

    실험3

    • 개요 ComposedTransformation 추가 후 성능을 관찰했다. composedTransformation에는 flip, crop, rotate, random translation 등 geometric augmentation이 포함돼있는데, crop과 rotate angle 바꿔가며 실험했다.

    • 결과

    | |LB score(public->private) |composed|crop|rotate|데이터셋| |---|-------|-------|-------|-------|---| |01|0.5435->0.5704|x|768|10|ICDAR17(859)| |02|0.3386->0.4033|o|(0.5,1.0)|10|ICDAR17(859)| |03|0.3507->0.3809|o|(0.2,0.8)|30|ICDAR17(859)| |04|0.4206->0.3783|o|(0.4,0.6)|30|ICDAR17(859)|

    Experiment 
    opened by seokjin0404 0
  • [Data] ICDAR ART 추가 사용하기

    [Data] ICDAR ART 추가 사용하기

    what?

    • ICDAR19에 ICDAR ART 추가한 데이터로 실험해보기

    why?

    • ICDAR ART polygon 형태의 bbox를 포함하며, test dataset과 비슷한 느낌의 일상생활에서 찍은 듯한 사진을 포함하고 있어 성능 향상에 도움이 되고자 추가하였다.

    TODO

    • ufo type의 json 파일로 변환
    • polygon style bbox 수정
    Data 
    opened by leehyeonjin99 0
  • [문제] 캠퍼분들과 함께 만든 dataset annotation수정, 디버깅

    [문제] 캠퍼분들과 함께 만든 dataset annotation수정, 디버깅

    우리가 직접 만들었던 dataset은 사각형 형태가 아닌 폴리곤 형태의 박스도 있어서 그대로 돌리면 오류가 난다.

    그래서 아래의 코드를 이용해서 폴리곤을 사각형으로 나누어 주었다.

    https://github.com/boostcampaitech2/data-annotation-cv-level3-cv-19/blob/main/code_t2045/board2_make_train_json.ipynb

    Discussion 
    opened by abc1246 1
  • [규칙] Commit 규칙

    [규칙] Commit 규칙

    Commit 규칙

    1. Commit을 작성할 때 상황에 맞는 Head를 맨 앞에 붙인다

    • [Feat] 새로운 기능을 추가하기 위해 코드를 업로드하거나 수정할 시 사용
    • [Refactor] 기능의 변화는 없이 코드들의 위치가 바뀔 때
    • [Docs] README.md 등의 문서 수정
    • [Fix] 버그 수정
    • [Chore] 잡무(Package list 작성 등)

    2. 코드의 기능이 변할 수 있는 수정(Feature, Fix 등)사항을 commit 할 경우 새로운 분기 branch를 생성하여 Pull Request를 통해서 아래의 주 Branch에 업로드 한다

    • main
    • develope
    • feature

    3. 제목은 한눈에 알아 볼 수 있도록 간결하게 작성한다

    • [Feat] Upload [filename] (코드 업로드시)

    4. (선택) 자세한 사항이 필요할 경우 추가적으로 description을 작성한다

    계속 수정 예정

    규칙 
    opened by leehyeonjin99 0
Owner
null
In this Github repository I will share my freqtrade files with you. I want to help people with this repository who don't know Freqtrade so much yet.

My Freqtrade stuff In this Github repository I will share my freqtrade files with you. I want to help people with this repository who don't know Freqt

Simon Kebekus 104 Dec 31, 2022
Documentation for GitHub Copilot

NOTE: GitHub Copilot discussions have moved to the Copilot Feedback forum. GitHub Copilot Welcome to the GitHub Copilot user community! In this reposi

GitHub 21.3k Dec 28, 2022
SCTYMN is a GitHub repository that includes some simple scripts(currently only python scripts) that can be useful.

Simple Codes That You Might Need SCTYMN is a GitHub repository that includes some simple scripts(currently only python scripts) that can be useful. In

CodeWriter21 2 Jan 21, 2022
A `:github:` role for Sphinx

sphinx-github-role A github role for Sphinx. Usage Basic usage MyST: :caption: index.md See {github}`astrojuanlu/sphinx-github-role#1`. reStructuredT

Juan Luis Cano Rodríguez 4 Nov 22, 2022
Template repo to quickly make a tested and documented GitHub action in Python with Poetry

Python + Poetry GitHub Action Template Getting started from the template Rename the src/action_python_poetry package. Globally replace instances of ac

Kevin Duff 89 Dec 25, 2022
Fully reproducible, Dockerized, step-by-step, tutorial on how to mock a "real-time" Kafka data stream from a timestamped csv file. Detailed blog post published on Towards Data Science.

time-series-kafka-demo Mock stream producer for time series data using Kafka. I walk through this tutorial and others here on GitHub and on my Medium

Maria Patterson 26 Nov 15, 2022
Data-Scrapping SEO - the project uses various data scrapping and Google autocompletes API tools to provide relevant points of different keywords so that search engines can be optimized

Data-Scrapping SEO - the project uses various data scrapping and Google autocompletes API tools to provide relevant points of different keywords so that search engines can be optimized; as this information is gathered, the marketing team can target the top keywords to get your company’s website higher on a results page.

Vibhav Kumar Dixit 2 Jul 18, 2022
A tutorial for people to run synthetic data replica's from source healthcare datasets

Synthetic-Data-Replica-for-Healthcare Description What is this? A tailored hands-on tutorial showing how to use Python to create synthetic data replic

null 11 Mar 22, 2022
advance python series: Data Classes, OOPs, python

Working With Pydantic - Built-in Data Process ========================== Normal way to process data (reading json file): the normal princiople, it's f

Phung Hưng Binh 1 Nov 8, 2021
A Python library for setting up projects using tabular data.

A Python library for setting up projects using tabular data. It can create project folders, standardize delimiters, and convert files to CSV from either individual files or a directory.

null 0 Dec 13, 2022
An open source utility for creating publication quality LaTex figures generated from OpenFOAM data files.

foamTEX An open source utility for creating publication quality LaTex figures generated from OpenFOAM data files. Explore the docs » Report Bug · Requ

null 1 Dec 19, 2021
Python code for working with NFL play by play data.

nfl_data_py nfl_data_py is a Python library for interacting with NFL data sourced from nflfastR, nfldata, dynastyprocess, and Draft Scout. Includes im

null 82 Jan 5, 2023
This contains timezone mapping information for when preprocessed from the geonames data

when-data This contains timezone mapping information for when preprocessed from the geonames data. It exists in a separate repository so that one does

Armin Ronacher 2 Dec 7, 2021
Quick tutorial on orchest.io that shows how to build multiple deep learning models on your data with a single line of code using python

Deep AutoViML Pipeline for orchest.io Quickstart Build Deep Learning models with a single line of code: deep_autoviml Deep AutoViML helps you build te

Ram Seshadri 6 Oct 2, 2022
Generates, filters, parses, and cleans data regarding the financial disclosures of judges in the American Judicial System

This repository contains code that gets data regarding financial disclosures from the Court Listener API main.py: contains driver code that interacts

Ali Rastegar 2 Aug 6, 2022
Soccerdata - Efficiently scrape soccer data from various sources

SoccerData is a collection of wrappers over soccer data from Club Elo, ESPN, FBr

Pieter Robberechts 195 Jan 4, 2023
DataAnalysis: Some data analysis projects in charles_pikachu

DataAnalysis DataAnalysis: Some data analysis projects in charles_pikachu You can star this repository to keep track of the project if it's helpful fo

null 9 Nov 4, 2022
Final-project-robokeeper created by GitHub Classroom

RoboKeeper! Jonny Bosnich, Joshua Cho, Lio Liang, Marco Morales, Cody Nichoson Demonstration Videos Grabbing the paddle: https://youtu.be/N0HPvFNHrTw

Cody Nichoson 1 Dec 12, 2021
stories-matiasucker created by GitHub Classroom

Stories do Instagram Este projeto tem como objetivo desenvolver uma pequena aplicação que simule os efeitos e funcionalidades ao estilo Instagram. A a

null 1 Dec 20, 2021
204-python-string-21BCA90 created by GitHub Classroom

204-Python This repository is created for subject "204 Programming Skill" Python Programming. This Repository contain list of programs of python progr

VIDYABHARTI TRUST COLLEGE OF BCA 6 Mar 31, 2022