Search
🔵

bc3__1_1.1. title: 상속을 이용해서 정의한 객체 모델 OCRDataset 은 커스텀 OCR 데이터셋의 베이스 클래스이다. CocoDataset 과 동일한 추상화 레이어가 아니다.

생성
🚀 prev note
🚀 next note
♻️ next note
14 more properties
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