我正在尝试训练 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
完整输出可以在这里找到
不同的命令会产生更好的结果 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.
我的自定义数据集遇到了同样的错误。没有检测到任何训练集文件。
在火车代码中,我尝试了
model = YOLO("yolov8s.yaml")
,而不是model = YOLO("yolov8s.pt")
。在代码更改之前,我的火车图也有缺陷。然后,他们进行了改进,预测代码很好地进行了检测。
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 包冲突引起的。