Обучение yolov8 с MPS на макбуке ⇐ Python

Программы на Python
Anonymous
Обучение yolov8 с MPS на макбуке

Сообщение Anonymous »

Я пытаюсь обучить yolov8 на своем собственном наборе данных с помощью следующего кода:

Код: Выделить всё

model = YOLO('yolov8s.pt')

# train
results = model.train(
data=data,
epochs=epochs,
batch=batch_size,
imgsz=img_size,
project=project_name,
name=model_name,
device=torch.device('mps')
)
Но у меня возникла ошибка:

Код: Выделить всё

engine/trainer:  task=detect, mode=train, model=yolov8s.pt, data=/Users/btp712/Code/Human Monitor/MOT17/mot17_data.yml, epochs=30, time=None, patience=50, batch=-1, imgsz=640, save=True, save_period=-1, cache=False, device=mps, workers=8, project=models/yolo, name=yolov8s_mot17_det10, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=models/yolo/yolov8s_mot17_det10
Overriding model.yaml nc=80 with nc=1

from  n    params  module                                       arguments
0                  -1  1       928  ultralytics.nn.modules.conv.Conv             [3, 32, 3, 2]
1                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]
2                  -1  1     29056  ultralytics.nn.modules.block.C2f             [64, 64, 1, True]
3                  -1  1     73984  ultralytics.nn.modules.conv.Conv             [64, 128, 3, 2]
4                  -1  2    197632  ultralytics.nn.modules.block.C2f             [128, 128, 2, True]
5                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]
6                  -1  2    788480  ultralytics.nn.modules.block.C2f             [256, 256, 2, True]
7                  -1  1   1180672  ultralytics.nn.modules.conv.Conv             [256, 512, 3, 2]
8                  -1  1   1838080  ultralytics.nn.modules.block.C2f             [512, 512, 1, True]
9                  -1  1    656896  ultralytics.nn.modules.block.SPPF            [512, 512, 5]
10                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']
11             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]
12                  -1  1    591360  ultralytics.nn.modules.block.C2f             [768, 256, 1]
13                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']
14             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]
15                  -1  1    148224  ultralytics.nn.modules.block.C2f             [384, 128, 1]
16                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]
17            [-1, 12]  1         0  ultralytics.nn.modules.conv.Concat           [1]
18                  -1  1    493056  ultralytics.nn.modules.block.C2f             [384, 256, 1]
19                  -1  1    590336  ultralytics.nn.modules.conv.Conv             [256, 256, 3, 2]
20             [-1, 9]  1         0  ultralytics.nn.modules.conv.Concat           [1]
21                  -1  1   1969152  ultralytics.nn.modules.block.C2f             [768, 512, 1]
22        [15, 18, 21]  1   2116435  ultralytics.nn.modules.head.Detect           [1, [128, 256, 512]]
Model summary: 225 layers, 11135987 parameters, 11135971 gradients, 28.6 GFLOPs

Transferred 349/355 items from pretrained weights
TensorBoard: Start with 'tensorboard --logdir models/yolo/yolov8s_mot17_det10', view at http://localhost:6006/
Freezing layer 'model.22.dfl.conv.weight'
AutoBatch:  Computing optimal batch size for imgsz=640
Traceback (most recent call last):
File "/Users/btp712/Code/Human Monitor/main.py", line 21, in 
train_yolo(model_name='yolov8s_mot17_det',
File "/Users/btp712/Code/Human Monitor/train_yolo.py", line 8, in train_yolo
results = model.train(
^^^^^^^^^^^^
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/engine/model.py", line 601, in train
self.trainer.train()
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/engine/trainer.py", line 208, in train
self._do_train(world_size)
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/engine/trainer.py", line 322, in _do_train
self._setup_train(world_size)
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/engine/trainer.py", line 282, in _setup_train
self.args.batch = self.batch_size = check_train_batch_size(self.model, self.args.imgsz, self.amp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/utils/autobatch.py", line 27, in check_train_batch_size
return autobatch(deepcopy(model).train(), imgsz)  # compute optimal batch size
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/ultralytics/utils/autobatch.py", line 58, in autobatch
properties = torch.cuda.get_device_properties(device)  # device properties
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/torch/cuda/__init__.py", line 453, in get_device_properties
_lazy_init()  # will define _get_device_properties
^^^^^^^^^^^^
File "/Users/btp712/Code/Human Monitor/.venv/lib/python3.11/site-packages/torch/cuda/__init__.py", line 293, in _lazy_init
raise AssertionError("Torch not compiled with CUDA enabled")
AssertionError: Torch not compiled with CUDA enabled
Я изучил и понял, что эта проблема возникает с MacOS, особенно на моделях без поддержки cuda. Первоначально я обучал модель без передачи «mps» на устройство, и она работала слишком медленно, около 1 часа за эпоху из-за обучения на процессоре. Тогда я понял, что могу тренироваться на графическом процессоре, передав «mps» на устройство, но получив эту ошибку.
Я использую macbook air m2. Насколько мне известно, мой ноутбук не поддерживает CUDA.

Подробнее здесь: https://stackoverflow.com/questions/780 ... on-macbook

Вернуться в «Python»