欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

[UltraLytics YOLOv8]是Ultralytics出品的最新YOLO实现。这个版本和前面的几个版本代码是不一样的,是重写的。 github Repo首页有YOLOv8和前几个版本的性能对比(COCO mAP, Mean Average Precision), 可以看出V8速度更快,精读更高。

YOLOv8官方文档非常完善,入门直接用它的官方文档就够了。

YOLOv8包含以下功能:

  1. Detection, 目标检测, 检测目标类型。
  2. Segmentation, 图像分割,生成掩码,把目标对象标的范围记出来。
  3. Pose estimation,手势预测。
  4. Tracking, 移动目标跟踪.
  5. Classification,分类.

YOLOv8能做推理,还能自己训练自定义数据模型。

我想做的是路面缺陷检测(坑洼), 属于目标检测范畴.用私有数据训练模型,然后做检测。

我自己没有准备数据,所以找了网上的一个教程,那个教程有提供一套数据:

  1. 教程: https://learnopencv.com/train-yolov8-on-custom-dataset/
  2. 自定义数据集: https://www.dropbox.com/s/qvglw8pqo16769f/pothole_dataset_v8.zip
  3. 环境: ubuntu 2022.04, anaconda 2023.09

Ultralytics官方文档里面有提到YOLOv6由美团出品,这个倒是有点意外。

步骤

  1. 下载数据集: wget https://www.dropbox.com/s/qvglw8pqo16769f/pothole_dataset_v8.zip?dl=1 -O pothole_dataset_v8.zip
  2. 解压数据集: unzip pothole_dataset_v8.zip
  3. 下载anaconda: wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
  4. 安装anaconda: chmod +x Anaconda3-2023.09-0-Linux-x86_64.sh && ./Anaconda3-2023.09-0-Linux-x86_64.sh
  5. 安装完anaconda后退出shell, 重新进入.
  6. 安装yolov8: pip install ultralytics
    1. 如果遇到ImportError: libGL.so.1: cannot open shared object file: No such file or directory错误,请运行下面指令:
         RUN apt-get update && apt-get install -y python3-opencv
         RUN pip install opencv-python
      
  7. 安装clearml.
       pip install ultralytics
       pip install clearml
       clearml-init
    
  8. 先训练nano模型, 我跑在CPU上,所以会比较慢:
    1. 配置参数pothole_v8.yaml:
        path: pothole_dataset_v8/
        train: 'train/images'
        val: 'valid/images'
              
        # class names
        names: 
        0: 'pothole'
      
    2. 运行命令行: yolo task=detect mode=train model=yolov8n.pt imgsz=1280 data=pothole_v8.yaml epochs=50 batch=8 name=yolov8n_v8_50e
      1. 参数详解:
    3. AMD EPYC 7763, 8核心
    4. 32GB内存, 512GB SSD
    5. 跑nano,一个晚上, 10个小时左右,跑了7个epoch。24小时跑了13个epoch,跑完50个epoch看来需要4天了。

性能数据

workstation: ubuntu(wsl), 32G Mem, NVIDIA T600, 4G mem, GPU nano training start at 10:41, finished first epoch at around 11:38, takes near 1 hour to finish the first epoch. it takes 49.081 hours to finish 50 epoch.

In CPC, nearly 2 hours/epoch(nano), in dev box(8 core, 64GB), it takes 60 hours to finish 50 epoch nano model.

Aliyun Tesla V100 16GB, 8C32GB, takes 1.8h to finish nano, takes 5GB graphic mem, be sure use latest ubuntu image to avoid nvidia driver issue For small, it takes 8GB graphic mem, 70% CPU, 25% mem, 90% GPU, 2.147 hours Infer with nano: Speed: 7.0ms preprocess, 7.8ms inference, 1.0ms postprocess per image at shape (1, 3, 736, 1280)

For medium one, Aliyun Tesla V100 16GB, usage, GPU 90%, GPU Mem 90%, 3.5h to complete.

Trained models: https://visiondeal.hk/yolov8m_v8_50e_best.pt https://visiondeal.hk/nano_best.pt

参考

  1. https://www.dropbox.com/s/qvglw8pqo16769f/pothole_dataset_v8.zip
  2. https://learnopencv.com/train-yolov8-on-custom-dataset/
  3. https://www.anaconda.com/download#downloads , download anaconda command line installer
  4. The worst potholes in Metro Detroit - YouTube
  5. https://mp.weixin.qq.com/s/Pjo0IT2mxOaexU2AM-7I9w ,用自己的数据集训练YOLOv8实例分割模型, 以简单的几何通行为例子讲的.
  6. https://towardsdatascience.com/trian-yolov8-instance-segmentation-on-your-data-6ffa04b2debd,原文
  7. https://blog.roboflow.com/whats-new-in-yolov8/, history of yolo, also, many tutorial links
  8. SOTA model:state-of-the-art model,并不是特指某个具体的模型,而是指在该项研究任务中,目前最好/最先进的模型。
  9. IoU intersect over union,中文:交并比。指目标预测框和真实框的交集和并集的比例。
  10. 强烈推荐读这篇文章,使用 OpenCV 将卷积实现为图像过滤器, 这篇文章把卷积和图像过滤器整合成一个概念,让我豁然开朗,一下子明白了CNN的意义, 简单理解CNN就是一个过滤器,过滤器就是特征提取器,过滤后的内容就是提取后的特征。