Ultralytics Yolov8 无法训练检测物体

问题描述 投票:0回答:2

我正在尝试训练 Yolov8 来检测人体皮肤上的黑点。下面显示了皮肤和标记的示例。我将图像裁剪为 256x256 像素,选择了至少具有一个标签的裁剪,并获得了训练、测试和验证数据集(分别为 4000、2000 和 2000 个图像)。

segmentation_models_pytorch
的分割模型预测 IoU=0.15 的黑点。这是不错的,因为标记是矩形的(而在图像旋转增强之后,最好的猜测是圆形)并且该对象没有明确的边界(与汽车或椅子不同)。

我尝试过用命令训练 Yolov8

yolo检测训练数据=D:\workspace\ultralytics\my_coco.yaml model=yolov8n.yaml epochs=100 imgsz=256workers=2 close_mosaic=100project='bd'flipud=0.5马赛克=0.0 每个纪元都有报道

  Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
 19/100      1.44G        nan        nan        nan        372        256: 100%|██████████| 267/267 [00:44<00:00,  5.96it/s]
             Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 44/44 [00:06<00:00,  7.06it/s]
               all       1391      26278          0          0          0          0

完整输出可以在这里找到

https://pastebin.com/TLz32ZRv

不同的命令会产生更好的结果 yolo 检测训练数据=D:\workspace\ultralytics\my_coco.yaml 模型=yolov8n.pt epochs=100 imgsz=256 工人=2 close_mosaic=0 项目='bd' Flipud=0.5 马赛克=0.5

  Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
  1/100      1.56G        nan        nan        nan        389        256: 100%|██████████| 267/267 [00:44<00:00,  5.96it/s]
             Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 44/44 [00:05<00:00,  8.08it/s]
               all       1391      26278     0.0118    0.00202    0.00747    0.00278
....

  Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
  4/100      1.54G        nan        nan        nan        165        256: 100%|██████████| 267/267 [00:43<00:00,  6.12it/s]
             Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 44/44 [00:05<00:00,  7.65it/s]
               all       1391      26278     0.0118    0.00202    0.00747    0.00278

在纪元之后我仍然得到 nan 进行训练,并在纪元期间得到一些值。例如: 6/100 1.05G 3.279 2.164 0.937 565 256:47%|████▋ | 126/267 [00:20<00:22, 6.22it/s] Also, note that validation gets stuck at values from the first epoch.

object-detection yolov8
2个回答
0
投票

我的自定义数据集遇到了同样的错误。没有检测到任何训练集文件。

在火车代码中,我尝试了

model = YOLO("yolov8s.yaml")
,而不是
model = YOLO("yolov8s.pt")
。在代码更改之前,我的火车图也有缺陷。然后,他们进行了改进,预测代码很好地进行了检测。


-1
投票

nan
问题和缺乏学习是由环境问题造成的。 我了解到您需要创建一个新环境并仅运行
pip install ultralytics
。在第一次训练期间,它显示
running on CPU
。您可能会想从 nvidia 安装 pytorch cuda。不要这样做。相反,重新启动计算机并重新运行训练。它将显示
running on GPU
(假设您有 Nvidia 显卡并安装了 Nvidia 工具包)。

接下来。您必须使用

if __name__ == "__main__":
,如下所示。

from ultralytics import YOLO

if __name__ == "__main__":  # this is crucial
    model = YOLO('yolov8n.pt')
    model.train(data='my.yaml', epochs=1000, imgsz=256, workers=1)

否则你就会启动叉子炸弹。

接下来。从预训练的模型开始并尝试他们的

coco8.yaml
。在训练过程中,预测准确率会稳步下降。这是正常的:coco8 是一个非常小的数据集,所以你会遇到 CNN 的灾难性遗忘。 然后下载Pascal VOC 2007。解析它。 Ultralytics 使用 json,而 Pascal VOC 使用 xml(它们对坐标框使用不同的表示法)。训练您的预训练模型以仅检测人员。再次,性能会出现最初的下降。但经过大约 20 个 epoch 后,您会得到稳定的改进(虽然没有完全达到原始模型的指标,但也很接近了。 现在您可以调整default.yaml中的参数

一旦您可以在数据集上训练 yolov8。

附注还有十个小问题(其中一些需要几个小时才能谷歌),但我不确定其中有多少是由 pytorch 包冲突引起的。

© www.soinside.com 2019 - 2024. All rights reserved.