A DataParser is an abstraction used to convert various dataset formats into a standardized DataparserOutputs format. This standardization allows InputDataset and DataManager components to be plug-and-play regardless of the original data source.
To implement a new DataParser, you must subclass DataParser and implement the private method _generate_dataparser_outputs(split: str). This method should return a DataparserOutputs object containing lightweight metadata (like filenames) rather than heavy tensors, which are later processed by PyTorch Datasets and Dataloaders.
Key components of DataparserOutputs include:
image_filenames: List[Path] for the images.cameras: Cameras object storing camera information.scene_box: SceneBox used for bounding or scaling the scene.mask_filenames: Optional[List[Path]] for required masks.metadata: Dict[str, Any] for additional experiment-specific metadata.dataparser_transform: TensorType[3, 4] transform applied by the parser.dataparser_scale: float scale applied by the parser.
@dataclass
class DataparserOutputs:
image_filenames: List[Path]
cameras: Cameras
alpha_color: Optional[TensorType[3]] = None
scene_box: SceneBox = SceneBox()
mask_filenames: Optional[List[Path]] = None
metadata: Dict[str, Any] = to_immutable_dict({})
dataparser_transform: TensorType[3, 4] = torch.eye(4)[:3, :]
dataparser_scale: float = 1.0
@dataclass
class DataParser:
@abstractmethod
def _generate_dataparser_outputs(self, split: str = "train") -> DataparserOutputs:
pass