警告1:0%| | 0/1451 [00:00
results = model.train(data=data_yaml_path,
File “D:\Project\BuildingDamageDetection_v10\ultralytics\engine\model.py”, line 650, in train
self.trainer.train()
File “D:\Project\BuildingDamageDetection_v10\ultralytics\engine\trainer.py”, line 204, in train
self._do_train(world_size)
File “D:\Project\BuildingDamageDetection_v10\ultralytics\engine\trainer.py”, line 379, in _do_train
with torch.amp.autocast(‘cuda’, self.amp):
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\site-packages\torch\amp\autocast_mode.py”, line 344, in __enter__
torch.set_autocast_dtype(self.device, self.fast_dtype) # type: ignore[arg-type]
TypeError: set_autocast_dtype(): argument ‘dtype’ (position 2) must be torch.dtype, not bool
Exception in thread Thread-4:
Traceback (most recent call last):
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\threading.py”, line 950, in _bootstrap_inner
self.run()
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\threading.py”, line 888, in run
self._target(*self._args, **self._kwargs)
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\site-packages\torch\utils\data\_utils\pin_memory.py”, line 55, in _pin_memory_loop
do_one_step()
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\site-packages\torch\utils\data\_utils\pin_memory.py”, line 32, in do_one_step
r = in_queue.get(timeout=MP_STATUS_CHECK_INTERVAL)
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\multiprocessing\queues.py”, line 122, in get
return _ForkingPickler.loads(res)
File “C:\Users\z7dev\.conda\envs\YOLOv10-GPU\lib\site-packages\torch\multiprocessing\reductions.py”, line 515, in rebuild_storage_filename
storage = torch.UntypedStorage._new_shared_filename_cpu(manager, handle, size)
RuntimeError: Couldn’t open shared file mapping: , error code: <2>

这段错误信息包括两个主要问题:TypeError 与 RuntimeError,它们分别与 AMP(自动混合精度)设置和多进程数据加载有关。以下是逐步的解决方案:

1. TypeError: set_autocast_dtype requires a torch.dtype argument
问题原因:
self.amp 被传递为布尔值,而不是 torch.dtype。AMP的设置需要明确指定数据类型(例如 torch.float16 或 torch.bfloat16)。

解决方案:
在 trainer.py 的代码中找到:

with torch.amp.autocast(‘cuda’, self.amp):

将其替换为以下内容:
with torch.amp.autocast(device_type=’cuda’, dtype=torch.float16 if self.amp else torch.float32):

原理:
如果 self.amp 为 True,则使用 torch.float16(混合精度训练)。
如果 self.amp 为 False,则使用默认精度 torch.float32。

声明:本站所有项目资源都可以正常运行,亲测无错!而且我们录制了演示视频,在我们注明的环境版本下,项目运行效果完全和演示视频一致。客服QQ:下载须知