1. 训练报错
Ultralytics YOLO 训练报错:AttributeError: 'InfiniteDataLoader' object has no attribute 'iterator'
albumentations: Blur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01, num_output_channels=3, method='weighted_average'), CLAHE(p=0.01, clip_limit=(1.0, 4.0), tile_grid_size=(8, 8))
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 122, in spawn_main
exitcode = _main(fd, parent_sentinel)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 131, in _main
prepare(preparation_data)
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 246, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 297, in _fixup_main_from_path
main_content = runpy.run_path(main_path,
^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen runpy>", line 291, in run_path
File "<frozen runpy>", line 98, in _run_module_code
File "<frozen runpy>", line 88, in _run_code
File "E:\project\YOLOv12\yolov12\train.py", line 6, in <module>
results = model.train(
^^^^^^^^^^^^
File "E:\project\YOLOv12\yolov12\ultralytics\engine\model.py", line 806, in train
self.trainer.train()
File "E:\project\YOLOv12\yolov12\ultralytics\engine\trainer.py", line 207, in train
self._do_train(world_size)
File "E:\project\YOLOv12\yolov12\ultralytics\engine\trainer.py", line 323, in _do_train
self._setup_train(world_size)
File "E:\project\YOLOv12\yolov12\ultralytics\engine\trainer.py", line 287, in _setup_train
self.train_loader = self.get_dataloader(self.trainset, batch_size=batch_size, rank=LOCAL_RANK, mode="train")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\project\YOLOv12\yolov12\ultralytics\models\yolo\detect\train.py", line 55, in get_dataloader
return build_dataloader(dataset, batch_size, workers, shuffle, rank) # return dataloader
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\project\YOLOv12\yolov12\ultralytics\data\build.py", line 143, in build_dataloader
return InfiniteDataLoader(
^^^^^^^^^^^^^^^^^^^
File "E:\project\YOLOv12\yolov12\ultralytics\data\build.py", line 39, in __init__
self.iterator = super().__iter__()
^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\site-packages\torch\utils\data\dataloader.py", line 491, in __iter__
return self._get_iterator()
^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\site-packages\torch\utils\data\dataloader.py", line 422, in _get_iterator
return _MultiProcessingDataLoaderIter(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\site-packages\torch\utils\data\dataloader.py", line 1146, in __init__
w.start()
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\process.py", line 121, in start
self._popen = self._Popen(self)
^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\context.py", line 336, in _Popen
return Popen(process_obj)
^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\popen_spawn_win32.py", line 46, in __init__
prep_data = spawn.get_preparation_data(process_obj._name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 164, in get_preparation_data
_check_not_importing_main()
File "D:\Anaconda\envs\yolov12\Lib\multiprocessing\spawn.py", line 140, in _check_not_importing_main
raise RuntimeError('''
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce an executable.
To fix this issue, refer to the "Safe importing of main module"
section in https://docs.python.org/3/library/multiprocessing.html
Exception ignored in: <function InfiniteDataLoader.__del__ at 0x0000024196F74B80>
Traceback (most recent call last):
File "E:\project\YOLOv12\yolov12\ultralytics\data\build.py", line 52, in __del__
if hasattr(self.iterator, "_workers"):
^^^^^^^^^^^^^
AttributeError: 'InfiniteDataLoader' object has no attribute 'iterator'
2. 原因
workers默认为8,是为服务器设置的,对于非服务器的PC端来说太大。
3. 解决方法
将workers设置为零即可,workers=0
。
results = model.train(
data='ultralytics/cfg/datasets/PCB.yaml',
epochs=300,
batch=4,
imgsz=640,
scale=0.5, # S:0.9; M:0.9; L:0.9; X:0.9
mosaic=1.0,
mixup=0.0, # S:0.05; M:0.15; L:0.15; X:0.2
copy_paste=0.1, # S:0.15; M:0.4; L:0.5; X:0.6
device="0",
workers=0, # AttributeError: 'InfiniteDataLoader' object has no attribute 'iterator'
)