# Ultralytics YOLO 🚀, AGPL-3.0 license import collections from copy import deepcopy from .augment import LetterBox class MixAndRectDataset: """A wrapper of multiple images mixed dataset. Args: dataset (:obj:`BaseDataset`): The dataset to be mixed. transforms (Sequence[dict]): config dict to be composed. """ def __init__(self, dataset): self.dataset = dataset self.imgsz = dataset.imgsz def __len__(self): return len(self.dataset) def __getitem__(self, index): labels = deepcopy(self.dataset[index]) for transform in self.dataset.transforms.tolist(): # mosaic and mixup if hasattr(transform, 'get_indexes'): indexes = transform.get_indexes(self.dataset) if not isinstance(indexes, collections.abc.Sequence): indexes = [indexes] mix_labels = [deepcopy(self.dataset[index]) for index in indexes] labels['mix_labels'] = mix_labels if self.dataset.rect and isinstance(transform, LetterBox): transform.new_shape = self.dataset.batch_shapes[self.dataset.batch[index]] labels = transform(labels) if 'mix_labels' in labels: labels.pop('mix_labels') return labels