انتقل إلى المحتوى

مرجع ل ultralytics/data/build.py

ملاحظه

هذا الملف متاح في https://github.com/ultralytics/ultralytics/ نقطة / الرئيسية /ultralytics/ البيانات / البناء .py. إذا اكتشفت مشكلة ، فيرجى المساعدة في إصلاحها من خلال المساهمة في طلب 🛠️ سحب. شكرا لك 🙏!



ultralytics.data.build.InfiniteDataLoader

قواعد: DataLoader

أداة تحميل البيانات التي تعيد استخدام العمال.

يستخدم نفس بناء الجملة مثل الفانيليا DataLoader.

شفرة المصدر في ultralytics/data/build.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 4445 46 474849 5051525354 5556 57
class InfiniteDataLoader(dataloader.DataLoader):
    """
    Dataloader that reuses workers.

    Uses same syntax as vanilla DataLoader.
    """

    def __init__(self, *args, **kwargs):
        """Dataloader that infinitely recycles workers, inherits from DataLoader."""
        super().__init__(*args, **kwargs)
        object.__setattr__(self, "batch_sampler", _RepeatSampler(self.batch_sampler))
        self.iterator = super().__iter__()

    def __len__(self):
        """Returns the length of the batch sampler's sampler."""
        return len(self.batch_sampler.sampler)

    def __iter__(self):
        """Creates a sampler that repeats indefinitely."""
        for _ in range(len(self)):
            yield next(self.iterator)

    def reset(self):
        """
        Reset iterator.

        This is useful when we want to modify settings of dataset while training.
        """
        self.iterator = self._get_iterator()

__init__(*args, **kwargs)

Dataloader الذي يعيد تدوير العمال بلا حدود ، يرث من DataLoader.

شفرة المصدر في ultralytics/data/build.py
def __init__(self, *args, **kwargs):
    """Dataloader that infinitely recycles workers, inherits from DataLoader."""
    super().__init__(*args, **kwargs)
    object.__setattr__(self, "batch_sampler", _RepeatSampler(self.batch_sampler))
    self.iterator = super().__iter__()

__iter__()

ينشئ عينة تتكرر إلى أجل غير مسمى.

شفرة المصدر في ultralytics/data/build.py
def __iter__(self):
    """Creates a sampler that repeats indefinitely."""
    for _ in range(len(self)):
        yield next(self.iterator)

__len__()

ترجع هذه الدالة طول أخذ عينات العينات الدفعية.

شفرة المصدر في ultralytics/data/build.py
def __len__(self):
    """Returns the length of the batch sampler's sampler."""
    return len(self.batch_sampler.sampler)

reset()

إعادة تعيين المكرر.

هذا مفيد عندما نريد تعديل إعدادات مجموعة البيانات أثناء التدريب.

شفرة المصدر في ultralytics/data/build.py
def reset(self):
    """
    Reset iterator.

    This is useful when we want to modify settings of dataset while training.
    """
    self.iterator = self._get_iterator()



ultralytics.data.build._RepeatSampler

أخذ العينات التي تتكرر إلى الأبد.

البارامترات:

اسم نوع وصف افتراضي
sampler sampler

أخذ العينات لتكرار.

مطلوب
شفرة المصدر في ultralytics/data/build.py
60 61 62 63 64 65 66676869 7071727374 75
class _RepeatSampler:
    """
    Sampler that repeats forever.

    Args:
        sampler (Dataset.sampler): The sampler to repeat.
    """

    def __init__(self, sampler):
        """Initializes an object that repeats a given sampler indefinitely."""
        self.sampler = sampler

    def __iter__(self):
        """Iterates over the 'sampler' and yields its contents."""
        while True:
            yield from iter(self.sampler)

__init__(sampler)

تهيئة كائن يكرر نموذج معين إلى أجل غير مسمى.

شفرة المصدر في ultralytics/data/build.py
def __init__(self, sampler):
    """Initializes an object that repeats a given sampler indefinitely."""
    self.sampler = sampler

__iter__()

يكرر على "أخذ العينات" وينتج محتوياته.

شفرة المصدر في ultralytics/data/build.py
def __iter__(self):
    """Iterates over the 'sampler' and yields its contents."""
    while True:
        yield from iter(self.sampler)



ultralytics.data.build.seed_worker(worker_id)

تعيين https:// البذور لعامل أداة تحميل البياناتpytorch.org/docs/stable/notes/randomness.html#dataloader.

شفرة المصدر في ultralytics/data/build.py
def seed_worker(worker_id):  # noqa
    """Set dataloader worker seed https://pytorch.org/docs/stable/notes/randomness.html#dataloader."""
    worker_seed = torch.initial_seed() % 2**32
    np.random.seed(worker_seed)
    random.seed(worker_seed)



ultralytics.data.build.build_yolo_dataset(cfg, img_path, batch, data, mode='train', rect=False, stride=32)

بنى YOLO مجموعة البيانات.

شفرة المصدر في ultralytics/data/build.py
def build_yolo_dataset(cfg, img_path, batch, data, mode="train", rect=False, stride=32):
    """Build YOLO Dataset."""
    return YOLODataset(
        img_path=img_path,
        imgsz=cfg.imgsz,
        batch_size=batch,
        augment=mode == "train",  # augmentation
        hyp=cfg,  # TODO: probably add a get_hyps_from_cfg function
        rect=cfg.rect or rect,  # rectangular batches
        cache=cfg.cache or None,
        single_cls=cfg.single_cls or False,
        stride=int(stride),
        pad=0.0 if mode == "train" else 0.5,
        prefix=colorstr(f"{mode}: "),
        task=cfg.task,
        classes=cfg.classes,
        data=data,
        fraction=cfg.fraction if mode == "train" else 1.0,
    )



ultralytics.data.build.build_dataloader(dataset, batch, workers, shuffle=True, rank=-1)

إرجاع إنفينيتيداتولودر أو داتا لودر للتدريب أو مجموعة التحقق من الصحة.

شفرة المصدر في ultralytics/data/build.py
 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120121 122123124
def build_dataloader(dataset, batch, workers, shuffle=True, rank=-1):
    """Return an InfiniteDataLoader or DataLoader for training or validation set."""
    batch = min(batch, len(dataset))
    nd = torch.cuda.device_count()  # number of CUDA devices
    nw = min([os.cpu_count() // max(nd, 1), workers])  # number of workers
    sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle)
    generator = torch.Generator()
    generator.manual_seed(6148914691236517205 + RANK)
    return InfiniteDataLoader(
        dataset=dataset,
        batch_size=batch,
        shuffle=shuffle and sampler is None,
        num_workers=nw,
        sampler=sampler,
        pin_memory=PIN_MEMORY,
        collate_fn=getattr(dataset, "collate_fn", None),
        worker_init_fn=seed_worker,
        generator=generator,
    )



ultralytics.data.build.check_source(source)

تحقق من نوع المصدر وقم بإرجاع قيم العلم المقابلة.

شفرة المصدر في ultralytics/data/build.py
127 128 129 130 131 132 133 134 135 136 137 138139 140 141 142 143 144 145 146 147148 149150
def check_source(source):
    """Check source type and return corresponding flag values."""
    webcam, screenshot, from_img, in_memory, tensor = False, False, False, False, False
    if isinstance(source, (str, int, Path)):  # int for local usb camera
        source = str(source)
        is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS)
        is_url = source.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://"))
        webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file)
        screenshot = source.lower() == "screen"
        if is_url and is_file:
            source = check_file(source)  # download
    elif isinstance(source, LOADERS):
        in_memory = True
    elif isinstance(source, (list, tuple)):
        source = autocast_list(source)  # convert all list elements to PIL or np arrays
        from_img = True
    elif isinstance(source, (Image.Image, np.ndarray)):
        from_img = True
    elif isinstance(source, torch.Tensor):
        tensor = True
    else:
        raise TypeError("Unsupported image type. For supported types see https://docs.ultralytics.com/modes/predict")

    return source, webcam, screenshot, from_img, in_memory, tensor



ultralytics.data.build.load_inference_source(source=None, vid_stride=1, buffer=False)

يقوم بتحميل مصدر استدلال لاكتشاف الكائن ويطبق التحويلات الضرورية.

البارامترات:

اسم نوع وصف افتراضي
source (str, Path, Tensor, Image, ndarray)

مصدر الإدخال للاستدلال.

None
vid_stride int

الفاصل الزمني للإطار لمصادر الفيديو. الافتراضي هو 1.

1
buffer bool

تحديد ما إذا كان سيتم تخزين إطارات الدفق مؤقتا. الافتراضي هو خطأ.

False

ارجاع:

اسم نوع وصف
dataset Dataset

كائن مجموعة بيانات لمصدر الإدخال المحدد.

شفرة المصدر في ultralytics/data/build.py
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176177178179 180 181 182 183 184 185
def load_inference_source(source=None, vid_stride=1, buffer=False):
    """
    Loads an inference source for object detection and applies necessary transformations.

    Args:
        source (str, Path, Tensor, PIL.Image, np.ndarray): The input source for inference.
        vid_stride (int, optional): The frame interval for video sources. Default is 1.
        buffer (bool, optional): Determined whether stream frames will be buffered. Default is False.

    Returns:
        dataset (Dataset): A dataset object for the specified input source.
    """
    source, webcam, screenshot, from_img, in_memory, tensor = check_source(source)
    source_type = source.source_type if in_memory else SourceTypes(webcam, screenshot, from_img, tensor)

    # Dataloader
    if tensor:
        dataset = LoadTensor(source)
    elif in_memory:
        dataset = source
    elif webcam:
        dataset = LoadStreams(source, vid_stride=vid_stride, buffer=buffer)
    elif screenshot:
        dataset = LoadScreenshots(source)
    elif from_img:
        dataset = LoadPilAndNumpy(source)
    else:
        dataset = LoadImages(source, vid_stride=vid_stride)

    # Attach source types to the dataset
    setattr(dataset, "source_type", source_type)

    return dataset





تم إنشاء 2023-11-12, اخر تحديث 2023-11-25
المؤلفون: جلين جوشر (3) ، يضحك س (1)