• 基于Yolov8网络进行目标检测(三)-训练自己的数据集


    前一篇文章详细了讲解了如何构造自己的数据集,以及如何修改模型配置文件和数据集配置文件,本篇主要是如何训练自己的数据集,并且如何验证。

    VOC2012数据集下载地址:

    http://host.robots.ox.ac.uk/pascal/VOC/voc2012/

    coco全量数据集下载地址:

    http://images.cocodtaset.org/annotations/annotations_trainval2017.zip

    本篇以以下图片为预测对象。

    23ecb336a3a7c57f87981be4fd6e2841.png

    一、对coco128数据集进行训练,coco128.yaml中已包括下载脚本,选择yolov8n轻量模型,开始训练

    yolo detect train data=coco128.yaml model=model\yolov8n.pt epochs=100 imgsz=640

    训练的相关截图,第一部分是展开后的命令行执行参数和网络结构

    583621897c984173178f0a6af76d5ad6.png

    第二部分是每轮训练过程

    863bc98cb1f0cf75713d440f8a470092.png

    第三部分是对各类标签的验证情况

    7def8a66be66c9a412079ece89bfe787.png

    二、对VOC2012数据集进行训练,使用我们定义的两个yaml配置文件,选择yolov8n轻量模型,开始训练

    yolo detect train data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\datasets\VOC2012.yaml model=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml  pretrained=model\yolov8n.pt epochs=10 imgsz=640

    以下为运行日志,和上述一样

    1. (venv) PS E:\JetBrains\PycharmProject\Yolov8Project> yolo detect train data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\datasets\VOC2012.yaml model=E:\JetBrains\PycharmProject\Yolov8Project\venv\
    2. Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml pretrained=model\yolov8n.pt epochs=10 imgsz=640
    3. WARNING no model scale passed. Assuming scale='n'.
    4. from n params module arguments
    5. 0-11464 ultralytics.nn.modules.conv.Conv[3, 16, 3, 2]
    6. 1-114672 ultralytics.nn.modules.conv.Conv[16, 32, 3, 2]
    7. 2-117360 ultralytics.nn.modules.block.C2f [32, 32, 1, True]
    8. 3-1118560 ultralytics.nn.modules.conv.Conv[32, 64, 3, 2]
    9. 4-1249664 ultralytics.nn.modules.block.C2f [64, 64, 2, True]
    10. 5-1173984 ultralytics.nn.modules.conv.Conv[64, 128, 3, 2]
    11. 6-12197632 ultralytics.nn.modules.block.C2f [128, 128, 2, True]
    12. 7-11295424 ultralytics.nn.modules.conv.Conv[128, 256, 3, 2]
    13. 8-11460288 ultralytics.nn.modules.block.C2f [256, 256, 1, True]
    14. 9-11164608 ultralytics.nn.modules.block.SPPF [256, 256, 5]
    15. 10-110 torch.nn.modules.upsampling.Upsample[None, 2, 'nearest']
    16. 11[-1, 6] 10 ultralytics.nn.modules.conv.Concat[1]
    17. 12-11148224 ultralytics.nn.modules.block.C2f [384, 128, 1]
    18. 13-110 torch.nn.modules.upsampling.Upsample[None, 2, 'nearest']
    19. 14[-1, 4] 10 ultralytics.nn.modules.conv.Concat[1]
    20. 15-1137248 ultralytics.nn.modules.block.C2f [192, 64, 1]
    21. 16-1136992 ultralytics.nn.modules.conv.Conv[64, 64, 3, 2]
    22. 17[-1, 12] 10 ultralytics.nn.modules.conv.Concat[1]
    23. 18-11123648 ultralytics.nn.modules.block.C2f [192, 128, 1]
    24. 19-11147712 ultralytics.nn.modules.conv.Conv[128, 128, 3, 2]
    25. 20[-1, 9] 10 ultralytics.nn.modules.conv.Concat[1]
    26. 21-11493056 ultralytics.nn.modules.block.C2f [384, 256, 1]
    27. 22[15, 18, 21] 1755212 ultralytics.nn.modules.head.Detect[20, [64, 128, 256]]
    28. VOC2012 summary: 225 layers, 3014748 parameters, 3014732 gradients
    29. Transferred319/355 items from pretrained weights
    30. UltralyticsYOLOv8.0.178Python-3.10.11 torch-2.0.1+cu118 CUDA:0(Quadro P2200, 5120MiB)
    31. engine\trainer: task=detect, mode=train, model=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytics\cfg\models\v8\VOC2012.yaml, data=E:\JetBrains\PycharmProject\Yolov8Project\venv\Lib\site-packages\ultralytic
    32. s\cfg\datasets\VOC2012.yaml, epochs=10, patience=50, batch=16, imgsz=640, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=None, exist_ok=False, pretrained=model\yolov8n.pt, optimizer=auto, verbose=
    33. 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, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save
    34. _json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, show=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, vid_stride=1, stream_bu
    35. ffer=False, line_width=None, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, boxes=True, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, w
    36. orkspace=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, hs
    37. v_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, cfg=None, tracker=botsort.yaml, save_dir=runs\detect\train8
    38. WARNING no model scale passed. Assuming scale='n'.
    39. from n params module arguments
    40. 0-11464 ultralytics.nn.modules.conv.Conv[3, 16, 3, 2]
    41. 1-114672 ultralytics.nn.modules.conv.Conv[16, 32, 3, 2]
    42. 2-117360 ultralytics.nn.modules.block.C2f [32, 32, 1, True]
    43. train: Scanning E:\JetBrains\PyCharm Project\ObjectDetectionProject\datasets\VOC2012\labels\train.cache... 17125 images, 195 backgrounds, 0 corrupt: 100%|██████████| 17125/17125[00:00
    44. val: Scanning E:\JetBrains\PyCharm Project\ObjectDetectionProject\datasets\VOC2012\labels\train.cache... 17125 images, 195 backgrounds, 0 corrupt: 100%|██████████| 17125/17125[00:00
    45. Plotting labels to runs\detect\train8\labels.jpg...
    46. optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically...
    47. optimizer: AdamW(lr=0.000417, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0)
    48. Image sizes 640 train, 640 val
    49. Using8 dataloader workers
    50. Logging results to runs\detect\train8
    51. Starting training for10 epochs...
    52. Closing dataloader mosaic
    53. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    54. 1/102.41G0.91562.5721.24410640: 100%|██████████| 1071/1071[07:06<00:00, 2.51it/s]
    55. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:44<00:00, 3.26it/s]
    56. all 17125349130.6210.5720.6050.436
    57. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    58. 2/102.53G1.0061.8691.31110640: 100%|██████████| 1071/1071[07:06<00:00, 2.51it/s]
    59. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:40<00:00, 3.35it/s]
    60. all 17125349130.6440.540.5920.414
    61. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    62. 3/102.49G1.0381.6611.3449640: 100%|██████████| 1071/1071[07:02<00:00, 2.54it/s]
    63. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:44<00:00, 3.25it/s]
    64. all 17125349130.6160.5620.5940.419
    65. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    66. 4/102.47G1.0211.4931.33112640: 100%|██████████| 1071/1071[07:00<00:00, 2.55it/s]
    67. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:42<00:00, 3.29it/s]
    68. all 17125349130.6510.5880.6380.457
    69. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    70. 5/102.48G1.0051.4031.3184640: 100%|██████████| 1071/1071[07:00<00:00, 2.54it/s]
    71. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:41<00:00, 3.31it/s]
    72. all 17125349130.6730.5920.650.467
    73. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    74. 6/102.46G0.96821.2991.299640: 100%|██████████| 1071/1071[06:55<00:00, 2.58it/s]
    75. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:29<00:00, 3.58it/s]
    76. all 17125349130.7090.6230.6930.511
    77. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    78. 7/102.48G0.9321.2091.2618640: 100%|██████████| 1071/1071[06:57<00:00, 2.56it/s]
    79. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:39<00:00, 3.37it/s]
    80. all 17125349130.7210.6610.7220.542
    81. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    82. 8/102.49G0.89611.1271.2329640: 100%|██████████| 1071/1071[07:00<00:00, 2.55it/s]
    83. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:40<00:00, 3.35it/s]
    84. all 17125349130.7350.670.7460.567
    85. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    86. 9/102.47G0.85651.0581.2028640: 100%|██████████| 1071/1071[06:58<00:00, 2.56it/s]
    87. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:29<00:00, 3.59it/s]
    88. all 17125349130.7660.6960.7730.597
    89. Epoch GPU_mem box_loss cls_loss dfl_loss InstancesSize
    90. 10/102.45G0.82780.98891.17911640: 100%|██████████| 1071/1071[06:55<00:00, 2.58it/s]
    91. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:28<00:00, 3.61it/s]
    92. all 17125349130.7770.7180.7950.621
    93. 10 epochs completed in 1.620 hours.
    94. Optimizer stripped from runs\detect\train8\weights\last.pt, 6.2MB
    95. Optimizer stripped from runs\detect\train8\weights\best.pt, 6.2MB
    96. Validating runs\detect\train8\weights\best.pt...
    97. UltralyticsYOLOv8.0.178Python-3.10.11 torch-2.0.1+cu118 CUDA:0(Quadro P2200, 5120MiB)
    98. VOC2012 summary (fused): 168 layers, 3009548 parameters, 0 gradients
    99. ClassImagesInstancesBox(P R mAP50 mAP50-95): 100%|██████████| 536/536[02:31<00:00, 3.54it/s]
    100. all 17125349130.7770.7180.7950.621
    101. aeroplane 171259110.9240.8130.9020.731
    102. bicycle 171257530.7650.5780.7370.582
    103. bird 1712511690.8940.7570.8620.651
    104. boat 171259020.7560.6410.7260.506
    105. bottle 1712513290.7230.5940.6790.489
    106. bus 171256380.8930.8180.8940.775
    107. car 1712521050.7860.690.7990.618
    108. cat 1712512660.8520.880.9210.763
    109. chair 1712524430.7060.5610.660.482
    110. cow 171256420.7820.8040.8580.673
    111. diningtable 171256350.5910.7180.690.517
    112. dog 1712515710.8460.7950.8830.727
    113. horse 171257600.6730.6340.740.61
    114. person 17125157530.790.8390.8750.691
    115. pottedplant 1712510550.7010.5250.6140.404
    116. sheep 171258780.7750.8230.8580.665
    117. sofa 171255920.7030.6440.730.592
    118. train 171256720.8820.8440.9140.735
    119. tvmonitor 171258390.730.6770.7650.595
    120. Speed: 0.2ms preprocess, 3.9ms inference, 0.0ms loss, 0.7ms postprocess per image
    121. Results saved to runs\detect\train8
    122. Learn more at https://docs.ultralytics.com/modes/train
    123. (venv) PS E:\JetBrains\PycharmProject\Yolov8Project>

    三、将run\detect\trainx\best.pt拷贝到model目录下,并改为相关可辨识的模型名称

    四、执行测试代码,验证一下几个训练模型的预测结果

    1. from ultralytics import YOLO
    2. from PIL importImage
    3. filepath='test\eat.png'
    4. # 直接加载预训练模型
    5. model = YOLO('model\yolov8x.pt')
    6. # Run inference on 'bus.jpg'
    7. results = model(filepath) # results list
    8. # Show the results
    9. for r in results:
    10. im_array = r.plot() # plot a BGR numpy array of predictions
    11. im = Image.fromarray(im_array[..., ::-1]) # RGB PIL image
    12. im.show() # show image
    13. im.save('yolov8x.jpg') # save image
    14. # 直接加载预训练模型
    15. model = YOLO('model\yolov8n.pt')
    16. # Run inference on 'bus.jpg'
    17. results = model(filepath) # results list
    18. # Show the results
    19. for r in results:
    20. im_array = r.plot() # plot a BGR numpy array of predictions
    21. im = Image.fromarray(im_array[..., ::-1]) # RGB PIL image
    22. im.show() # show image
    23. im.save('yolov8n.jpg') # save image
    24. # 直接加载预训练模型
    25. model = YOLO('model\coco128.pt')
    26. # Run inference on 'bus.jpg'
    27. results = model(filepath) # results list
    28. # Show the results
    29. for r in results:
    30. im_array = r.plot() # plot a BGR numpy array of predictions
    31. im = Image.fromarray(im_array[..., ::-1]) # RGB PIL image
    32. im.show() # show image
    33. im.save('coco128.jpg') # save image
    34. # 直接加载预训练模型
    35. model = YOLO('model\VOC2012.pt')
    36. # Run inference on 'bus.jpg'
    37. results = model(filepath) # results list
    38. # Show the results
    39. for r in results:
    40. im_array = r.plot() # plot a BGR numpy array of predictions
    41. im = Image.fromarray(im_array[..., ::-1]) # RGB PIL image
    42. im.show() # show image
    43. im.save('VOC2012.jpg') # save image

    基于yolov8x.pt预训练模型预测情况如下:

    1355189e51ea01045b281c0ce229ee2f.png

    基于yolov8n.pt预训练模型预测情况如下:

    8dc01c40742a46063699c165076ca20c.png

    基于coco128数据集训练的模型预测情况如下:

    fb62c6a7e263170fa33a10654d5f8533.png

    基于VOC2012数据集训练的模型预测情况如下:

    ef0e876cc7436ee2662f2413127de64b.png

    结论:

    1、基于yolov8x.pt预训练模型预测的最全最准,但也最慢。

    2、基于yolov8n.pt预训练模型预测和yolov8x在概率上有些不一致,80类中的极少数类别识别不出来,毕竟网络模型参数相差太多。

    3、基于coco128数据集训练的模型预测类别比yolov8n少,毕竟只有128张训练样本,估计会缺失一些标签。

    4、基于VOC2012数据集训练的模型预测类别最少,毕竟只有20种类别,和coco数据集有交叉也有不同,VOC2012数据集没有水果样本,所以无法识别出水果。

    基本上后边就可以愉快的训练各种目标检测了,但是数据集和标注数据才是比较耗人的。

    最后欢迎关注公众号:python与大数据分析

    638402d7b0e4a36fee4183d77e2bb290.jpeg

  • 相关阅读:
    Linux系统编程
    nuxt ssr时如何在component组件中进行异步数据获取
    Tensorflow Lite移动平台编译
    养殖自动化管理系统:开启智慧养殖新篇章
    数组去重复(偶然遇到这个问题,以此记录)
    关于大模型对未来影响的一点看法
    手写内存泄漏检测组件
    Kubernetes(k8s) 资源限制:resources,LimitRange,ResourceQuota
    【从零开始学习 SystemVerilog】11.1、SystemVerilog 断言—— Assertions Introduction(断言概述)
    【TypeScript】深入学习TypeScript枚举
  • 原文地址:https://blog.csdn.net/baoqiangwang/article/details/132913829