boostcampaitech3 / level2-data-annotation_cv-level2-cv-17

[2022.04.14 ~ 2022.04.21] OCR Text Detection Competition - 부스트캠프 AI Tech 3기
1 stars 1 forks source link

[Data] ICDAR17 MLT 전체 데이터 다운로드 및 학습 #12

Closed omocomo closed 2 years ago

omocomo commented 2 years ago

Background

현재 Trainset으로 제공받은 ICDAR17_Korean 데이터는 ICDAR17_MLT 중 한글만 가져온 536장의 데이터이다. 우리가 하고 있는 Task는 Text Detection으로 언어와 상관없이 글자 영역 위치를 인식하는 게 중요하다고 생각해 전체 데이터를 사용해보려고 한다.

Content

Details

ICDAR17 MLT 전체 데이터 다운로드 방법

토론 게시판의 관련글을 참고할 수 있습니다. 하지만 똑같이 실행했는데, unzip에서 오류가 있었습니다. 우선 제가 실행한 방법을 간단히 적겠습니다. image (위 이미지의 파일 구조를 참고해주세요!)

  1. input/data/ICDAR17_MLT 폴더를 만듭니다.
  2. 그 안에 관련글의 download.sh, urls.txt를 넣고 실행시키면 ICDAR17_MLT 폴더 아래 zip이 다운로드 됩니다.
  3. 이후 저는 unzip에서 오류가 나 ICDAR17_MLT/raw 폴더를 만들고 그 안에 위 이미지에서 보이는 ch8_로 시작하는 4개의 폴더를 직접 만들어 하나씩 unzip 했습니다.

convert_mlt.py 실행 시 주의할 점

이후, convert_mlt.py를 이용해 저희가 사용하는 ufo 형식으로 해당 데이터를 변환해 저장할 수 있습니다. 이 때 ICDAR17_MLT에는 7200장의 Training 데이터와 1200장의 Validation 데이터가 있는데 두 데이터의 이미지 이름이 겹칩니다. image convert_mlt.py의 코드에서 train과 valid를 concat해 사용하고 있음을 볼 수 있고 그냥 실행시키면 겹친 이미지가 중복 저장되어 9000장의 이미지가 아닌 약 7200장의 이미지가 저장됩니다. 따라서 rename_valid.ipynb에서 valid의 image와 gt 파일의 이름을 7201부터로 rename 했습니다. 이후 convert_mlt.py를 실행시키면 9000장의 image가 잘 저장됩니다.

omocomo commented 2 years ago

이후, batch_size만 32로 수정하고 실행과정을 이해하기 위해 ICDAR17_ALL 데이터셋으로 학습을 시켰습니다. image 위에서 빨간색이 그 결과이고, 30 Epoch 정도에서 문제 없이 잘 돌아가는 것 같아 학습을 중지시켰습니다.

그리고 이번 대회의 제출 방식이 새로워서 테스트 겸 위 학습의 latest.pth를 제출했습니다. 그 결과 f1 0.6036으로 갑자기 순위가 급상승 했는데 의도하지 않은 결과라 당황스럽습니다..ㅇㅅㅇ 많은 데이터를 사용했을 때의 효과는 확실해 보이지만 이번 실험은 validation set 등 어떤 의미 있는 통제를 하고 진행한 실험이 아니라 참고만 하고 다시 처음부터 실험을 진행하려고 합니다. 특히 학습 결과에서 어떤 데이터를 잘 맞추고, 어떤 데이터를 잘 맞추지 못하는지 파악하고 이를 해결해가는 과정에 집중하려고 합니다.

omocomo commented 2 years ago

ICDAR17 데이터셋과 관련해 의문점은 아래와 같습니다.

  1. 기존 ICDAR17_Korean에서는 convert_mlt.py를 실행할 때 train/val이 겹치는 문제가 발생하진 않았는지
  2. 전체 데이터를 사용한다면 ICDAR17_Korean은 그냥 사용하지 않으면 되는지
  3. 추가적으로 제공받은 약 1300장 데이터는 ICDAR17_MLT 데이터셋과 관련없는 데이터셋인지

이에 대해 현재는 다음과 같이 생각합니다.

  1. 확인해봐야 함
  2. ICDAR17_Korean은 사용하지 않고 ICDAR17_ALL만 사용하면 된다고 생각함
  3. 관련 없는 것 같음
hyoseok1223 commented 2 years ago

ICDAR17_ALL이 그러면 ICDAR_mlt와 동치되는 것일까요? ( annotation 정보외의 detection정보만으로는)

그렇다면 ICDAR17_ALL + (추가 제공받은 1300장) + (AI HUB) + ( ICDAR 다른 연도 버전) 정도를 생각해볼 수 있을까요?

omocomo commented 2 years ago

네 데이터는 동일하고 annotation만 ufo 형식으로 바꾼겁니다! 말씀해주신대로 생각해볼수 있을 것 같아요

Dongwoo-Im commented 2 years ago

현재 directory까지 만들어주는 download.sh 돌려보고 있는데, 결과 확인해보고 여기나 PR로 공유하겠습니다!

Dongwoo-Im commented 2 years ago

valid 이름까지 바꾸고 convert_mlt.py 돌려보니깐 안되더라구요. 아마 경로나 그런걸 수정해야 할 것 같은데 혹시 어떤걸 수정하셨나요?

omocomo commented 2 years ago

image DST_DATASET_DIR 이 부분일까요??

omocomo commented 2 years ago

그리고 전체 데이터를 변환하려면 이 부분은 주석 처리 해주어야 합니다. 그 외의 다른 부분 수정은 없는걸로 확인했는데, 처음에 놓쳐서 죄송합니다..! image

Dongwoo-Im commented 2 years ago

download.sh

#!/usr/bin/env bash

mkdir -p /opt/ml/input/data/ICDAR17_MLT/raw/zip
mkdir -p /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_1.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_1.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_2.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_2.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_3.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_3.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_4.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_4.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_5.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_5.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_6.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_6.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_7.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_7.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
wget https://datasets.cvc.uab.es/rrc/ch8_training_images_8.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_images_8.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_images
mkdir -p /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_gt
wget https://datasets.cvc.uab.es/rrc/ch8_training_localization_transcription_gt_v2.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_training_localization_transcription_gt_v2.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_training_gt
mkdir -p /opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_images
wget https://rrc.cvc.uab.es/downloads/ch8_validation_images.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_validation_images.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_images
mkdir -p /opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_gt
wget https://datasets.cvc.uab.es/rrc/ch8_validation_localization_transcription_gt_v2.zip --no-check-certificate -P /opt/ml/input/data/ICDAR17_MLT/raw/zip
unzip /opt/ml/input/data/ICDAR17_MLT/raw/zip/ch8_validation_localization_transcription_gt_v2.zip -d /opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_gt
Dongwoo-Im commented 2 years ago

rename_valid.py

import os
import os.path as osp
from glob import glob

def main():
    image_path = '/opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_images'
    image_file = glob(osp.join(image_path, '*.jpg')) + glob(osp.join(image_path, '*.png'))
    for img in image_file:
        new_num = 7200 + int(img.split('/')[-1].split('_')[-1].split('.')[0])
        fm = img.split('/')[-1].split('_')[-1].split('.')[1]
        dst = osp.join(image_path, 'img_' + str(new_num) + '.' + fm)
        os.rename(img, dst)

    gt_path = '/opt/ml/input/data/ICDAR17_MLT/raw/ch8_validation_gt'
    gt_file = glob(osp.join(gt_path, '*.txt'))
    for gt in gt_file:
        new_num = 7200 + int(gt.split('/')[-1].split('_')[-1].split('.')[0])
        fm = gt.split('/')[-1].split('_')[-1].split('.')[1]
        dst = osp.join(gt_path, 'gt_img_' + str(new_num) + '.txt')
        os.rename(gt, dst)

if __name__ == '__main__':
    main()
hyoseok1223 commented 2 years ago

@omocomo convert_mlt 과정에서 dataset의 copy가 일어나나요? mlt -> all로 갈 때 image data들도 copy가 되는지 여쭤보고 싶습니다. 데이터 양이 많아서 확인을 해보고 싶습니다!

omocomo commented 2 years ago

@hyoseok1223 네 image data도 copy 됩니다.