전체 목차(from1).

들어가며

MMOCR 은 OCR 문제에서 문자 영역을 검출하는 text detection 과 검출된 영역에서 문자를 읽어내는 text recognition 을 각각 다른 모델로 다루는 프레임워크입니다(from1). MMOCR 프레임워크와 소통하기 위해 모든 모델과 모든 데이터는 config 파일을 매개체로 사용합니다(from2). 따라서 config 파일에는 모델과 데이터에 대한 정보가 포함되어 있어야 합니다. MMOCR 프레임워크에게 사용할 모델에 대한 정보를 전달하기 위해 작성된 config 파일은 configs/textdet 디렉토리의 하나의 단어로 이름붙여진 폴더 속에서 _base 로 시작하고 모델에 대한 간단한 정보를 덧붙인 뒤 _fpnc 로 끝나는 이름을 가지고 있음을 알 수 있습니다. MMOCR 프레임워크의 detection 모델을 학습하는 일에 사용할 데이터셋에 대한 정보를 전달하기 위해 작성된 config 파일은 configs/textdet/_base_/datasets 디렉토리에 위치해 있습니다.

이 가이드에서는 커스텀 데이터로 Aihub 에서 제공하는 금융 OCR 데이터셋을 이용합니다. 복잡도를 낮추기 위해 모델은 건드리지 않습니다. 우선 MMOCR 에게 금융 데이터셋을 사용할 수 있도록 도와줘 봅시다. 새롭게 생성할 config 파일은 aihub_finance.py ****파일과 dbnet_resnet18_fpnc_3e_aihub_finance.py 파일입니다.

config 상세정보 config
데이터 config Aihub 금융 데이터셋 configs/textdet/base/datasets/aihub_finance.py
모델 config 문자 검출 모델 DBNet(ResNet18 Backbone) configs/textdet/dbnet/_base_dbnet_resnet18_fpnc.py
데이터 + 모델 config 데이터 config 과 모델 config 를 상속받음 configs/textdet/dbnet/dbnet_resnet18_fpnc_3e_aihub_finance.py

데이터 config 파일 작성

데이터셋에 대한 정보를 MMOCR 프레임워크에 전달하는 방법을 명세한 aihub_finance.py config 파일을 작성할 차례입니다. 앞선 튜토리얼(from2)에서 사용했던 뼈대를 먼저 가져왔습니다. 그런데 각각이 무슨 역할을 하는 것인지 모르기 때문에 채워 넣을 수가 없겠네요.

aihubfinance_det_data_root = ''

aihubfinance_det_train = dict(
    type='',
    data_root=aihubfinance_det_data_root,
    ann_file='',
    data_prefix=dict(img_path=''),
    filter_cfg=dict(filter_empty_gt=True, min_size=32),
    pipeline=None)

aihubfinance_det_test = dict(
    type='',
    data_root=aihubfinance_det_data_root,
    ann_file='',
    data_prefix=dict(img_path=''),
    test_mode=True,
    pipeline=None)

<aside> 💡 aihub_finance… 가 아니라 aihubfinance… 라고 변수명을 붙여준 것은 MMOCR 프레임워크의 이름 컨벤션 때문입니다(참고1).

</aside>

이 config 파일은 detection 모델에 사용되는 데이터를 적절히 포장하기 위한 용도로 사용되므로 이를 이해하려면 어노테이션파일의 형태를 먼저 이해할 필요가 있습니다. MMOCR 은 text detection 과 text recognition 을 분리해서 관리하는 프레임워크라고 했었는데요(from1), 우리는 text detection 모델을 학습하기 위해 고군분투 중이라는 사실을 잊지 말아야 합니다. 그럼 비어있는 필드들을 하나씩 채워 보도록 합시다.

아래는 MMOCR 에서 요구하는 표준 어노테이션 포맷입니다. MMOCR 표준 어노테이션 포맷에서 Text detection 학습을 위한 어노테이션 파일은 dataset_typeTextDetDataset 이고 task_nametextdet 임을 명시하고 있습니다. 튜토리얼에서는 text detection 모델 학습을 위한 MMOCR 표준을 준수한 어노테이션 파일은 아래와 같은 형태로 생겼다고 소개하고 있습니다(참고2).

코드(참고2)

{
  "metainfo":
    {
      "dataset_type": "TextDetDataset",
      "task_name": "textdet",
      "category": [{"id": 0, "name": "text"}]
    },
  "data_list":
    [
      {
        "img_path": "test_img.jpg",
        "height": 640,
        "width": 640,
        "instances":
          [
            {
              "polygon": [0, 0, 0, 10, 10, 20, 20, 0],
              "bbox": [0, 0, 10, 20],
              "bbox_label": 0,
              "ignore": false,
            },
          ],
          //...
      }
    ]
}

모델을 학습시키려면 위와 같은 형태의 어노테이션 파일을 파이썬 객체 모델에 담을 수 있어야 합니다. 위와 같은 형태의 어노테이션 파일을 담아낼 수 있는 파이썬 클래스는 OCRDataset 입니다(from3). 만약 text detection 모델 학습을 위한 MMOCR 의 표준 포맷을 사용하지 않는다면, 당연히 OCRDataset 대신 다른 클래스를 구현해서 사용하면 됩니다.

<aside> 💡 하지만 Aihub 에서 다운로드받은 금융 OCR 데이터의 레이블 포맷은 MMOCR 표준 포맷과 사뭇 다른 모습입니다. 우리는 다른 글에서 이 서드파티 포맷을 MMOCR 표준 포맷으로 변환하는 방법에 대해 다룰 것입니다. 지금은 그 과정들을 모두 거쳐 Aihub 금융 데이터가 MMOCR 표준 detection 포맷에 맞게 만들어졌음을 상정합니다.

aihublogistics_det_train = dict(
    type='OCRDataset')

aihublogistics_det_test = dict(
    type='OCRDataset')

data_root 는 위 어노테이션파일이 위치한 디렉토리의 경로입니다. 제 경우 data/det/aihub_finance 디렉토리에 두 개의 어노테이션 파일(instance_test.json, instance_training.json)을 만들 생각이므로 아래와 같이 설정합니다.

aihubfinance_det_data_root = 'data/det/aihub_finance'

aihubfinance_det_train = dict(
    type='OCRDataset',
    data_root=aihubfinance_det_data_root,
    ann_file='instances_training.json')

aihubfinance_det_test = dict(
    type='OCRDataset'
    data_root=aihubfinance_det_data_root,
    ann_file='instances_test.json')