mmocr/datasets/ocr_dataset.py 이 분석의 시작점이다.

@DATASETS.register_module()
class OCRDataset(BaseDataset):
		r"""OCRDataset for text detection and text recognition.

		The annotation format is shown as follows."""

		# ...

데코레이터 덕분에 데이터셋 config 파일에서 ‘OCRDataset’ 문자열을 이용해 간편하게 해당 클래스를 불러올 수 있을 것이라고 추측해볼 수 있다(from2). 이 클래스는 BaseDataset 을 상속받았다.

BaseDataset 은 고수준 프레임워크인 MMOCR 이 의존하는 MMEngine 패키지에 정의되어 있다. 해당 클래스가 정의된 파일의 경로는 mmengine/dataset/base_dataset.py 이다. 굉장히 직관적이다.

class BaseDataset(Dataset):
    r"""BaseDataset for open source projects in OpenMMLab.

    The annotation format is shown as follows."""
		
		# ...

BaseDataset 은 다시 Dataset 을 상속받았는데, 이 Dataset 클래스는 pytorch 에서 데이터셋을 정의할 때 흔히 사용되는 베이스클래스이다. __getitem__ 이나 __len__ 과 같은 메서드들을 구현하고 있을 뿐이다. MMOCR 이 제시하는 데이터셋 객체 모델의 상속 구조를 알아보고자 했을 뿐이기 때문에 더이상의 상위 클래스 분석은 큰 의미가 없다.

그렇다면 우리에게 잘 알려진 COCO 데이터셋 포맷에 대한 파이썬 객체 모델은 없을까? MMOCR 이 의존하는 또다른 패키지인 MMDet 에 CocoDataset 라는 이름으로 존재한다. CocoDataset 클래스는 mmdet/datasets/coco.py 에 정의되어 있다.

@DATASETS.register_module()
class CocoDataset(BaseDetDataset):
		"""Dataset for COCO."""

		# ...

이 클래스는 BaseDetDataset 클래스를 상속받는다.

@DATASETS.register_module()
class BaseDetDataset(BaseDataset):
    """Base dataset for detection."""

		# ...

BaseDataset 클래스를 상속받는 클래스는 BaseDetDataset 클래스이다. BaseDataset 클래스는 MM 프레임워크에서 사용하는 모든 데이터셋 클래스의 공통부모인 셈이다.

MMDet MMOCR
Pytorch Dataset Dataset
MMEngine BaseDataset BaseDataset
BaseDetDataset OCRDataset
CocoDataset

만약 내가 MMOCR 프레임워크에 COCO 포맷의 데이터를 이해시키고 싶다면 어떻게 해야 할까? CocoDataset 클래스를 mmdet 패키지로부터 끌어와서 사용하는 방법은 어떤 부수효과가 있을지 모르기 때문에 위험하다. OCRDataset 클래스의 주석이 설명하듯, 이 클래스를 상속받아 사용하거나, BaseDataset 을 상속받아 사용해야 한다.

# Examples:
# Assume the annotation file is given above.
>>> class CustomDataset(OCRDataset):
>>>     METAINFO: dict = dict(task_name='custom_task',
>>>                           dataset_type='custom_type')
>>> metainfo=dict(task_name='custom_task_name')
>>> custom_dataset = CustomDataset(
>>>                      'path/to/ann_file',
>>>                      metainfo=metainfo)
>>> # meta information of annotation file will be overwritten by
>>> # `CustomDataset.METAINFO`. The merged meta information will
>>> # further be overwritten by argument `metainfo`.
>>> custom_dataset.metainfo
{'task_name': custom_task_name, dataset_type: custom_type}

parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.

  1. None

from : 과거의 어떤 생각이 이 생각을 만들었는가?

  1. bc3__1_1. title: MMOCR 은 OCR 어노테이션 표준 양식을 제시한다. OCRDataset 클래스는 MMOCR 표준 어노테이션 포맷으로 작성된 파일을 파이썬 변수에 담을 수 있는 객체 모델이다.