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."""
# ...
Python
복사
데코레이터 덕분에 데이터셋 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."""
# ...
Python
복사
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."""
# ...
Python
복사
이 클래스는 BaseDetDataset 클래스를 상속받는다.
@DATASETS.register_module()
class BaseDetDataset(BaseDataset):
"""Base dataset for detection."""
# ...
Python
복사
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}
Python
복사
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
1.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
3.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
1.
None
참고 : 레퍼런스
1.
None