YOLOv8已至,精度大涨!教你如何在自定义数据集上训练它

  丰色发自凹非寺

  量子位公众号 QbitAI

  很快啊——

  目标检测经典模型 YOLO 的第八个版本就已经发布了。

  这次升级不少,包括命令行界面、Python API、backbone 结构等,精度相比 YOLOv5 高了一大截(速度官方还没公布)。

  下面是网友实测,几个不同规模的变体在目标检测、实例分割和图像分类三项任务上的涨点最高达到了33. 21%

  不知道 YOLOv8 这一出,v5 版本还会“苟”多久?

  oh 我们还发现已经有人用它在自定义数据集上完成了一波训练,效果是这样滴:

  这精准度和稳定性,让网友狠狠夸赞了一波。

  具体怎么玩?我们把教程也搬来了。

  在自定义数据集上训练 YOLOv8

  正式教程开始之前,我们还是先来认识一下这个新版本。

  它的出品公司还是Ultralytics,也就是发布 YOLOv5 的那家。

  本次的升级主要包括:

  • 用户友好的 API(命令行 +Python)
  • 更快更准确(由于正式的论文还没发表,它和 SOTA 模型的具体对比数据现在还没有)
  • 同时支持目标检测、实例分割和图像分类三种任务
  • 可扩展到以前所有的版本
  • 新的 backbone 网络(CSP 结构不变,但 C2f 模块替换了 C3 模块,每个 stage 的 blocks 数改为[3,6,6,3]等)
  • 新的Anchor-Freehead
  • 新的损失函数

  其中重点说一下第一条。

  首先,YOLOv8 的开发者脱离了标准 YOLO 项目的设计,将 train.py、detect.py、val.py 和 export.py 这四个脚本进行了分离。

  短期来看,这种改变可能会引起混乱,因为它从 YOLOv3 就一直没有变过;但原来这种看起来就好理解的模式在实时处理和跟踪场景中进行部署实在是比较麻烦。

  所以还是改用了更加灵活的新设计,让 YOLOv8 可以通过终端独立使用。

  其次,这次新增的 CLI 可以让你在各种任务和版本上进行更加方便的模型训练、验证或推理。

  在终端的操作方式与我们熟悉的脚本非常相似,比如利用 CLI 检测给定图像中的对象,这样就行:

  yolo task=detect \mode=predict \model=yolov8n.pt \conf=0.25 \source='https://media.roboflow.com/notebooks/examples/dog.jpeg'

  最后,Ultralytics YOLO 这次配备的 Pythonic 模型和训练接口,让我们用 6 行代码就能在自定义 Python 脚本中用上 YOLO 模型,操作方式就像这样:

  from ultralytics import YOLOmodel = YOLO ('yolov8n.pt') model.predict ( source='https://media.roboflow.com/notebooks/examples/dog.jpeg', conf=0.25)

  是不是很简单,再也不用像以前那样改一堆了。

  那么接下来,我们就正式开始教程部分了——

  在自定义数据集上训练 YOLOv8。

  1、首先,安装上我们的新 YOLOv8,“pip”或者“git clone”一下。

  >pip install ultralytics(推荐)

  or

  >git clone https://github.com/ultralytics/ultralytics>cd ultralytics>pip install -e ultralytics

  2、然后开始构建自定义数据集。

  为了不让这个过程那么痛苦和耗时,我们可以用上 Roboflow 这个工具(本教程也是由它提供的)。

  操作步骤如下:

  (1)创建账户,新建项目,项目类型选择“目标检测(Object Detection)”。

  (2)上传图片将数据集导入到项目之中。如果你没有准备数据集,可以用它们官方提供的(从 Roboflow Universe 中下载)。

  如果你的图片已经带标注,系统可以自动读取;如果没有,可以用它提供的这个非常快捷的标注工具现标。

  (3)然后就能生成数据集了。“预处理”和“数据增强”两个选项可以勾上,让你的模型鲁棒性更强。

  (4)现在我们就拥有了自己的一个托管数据集,将它导出就能直接加载到电脑中进行训练了。

  记住从 Roboflow Universe 中下载数据集时选择“YOLO v5 PyTorch”格式,然后在弹出的窗口中看到一段代码,简单修改各个参数即可。

  from roboflow import Roboflowrf = Roboflow (api_key='YOUR_API_KEY') project = rf.workspace ('WORKSPACE') .project ('PROJECT') dataset = project.version (1) .download ('yolov8')

  3、开始训练

  使用下面的命令将数据集下载片段(snippet)粘贴到你的 YOLOv8 Colab notebook 中,开始训练。

  yolo task=detect \mode=train \model=yolov8s.pt \data={dataset.location}/data.yaml \epochs=100 \imgsz=640

  取决于数据集大小和训练方法,过程将持续几分钟或几小时。

  以下是上述足球数据集的训练结果:

  (1)返回的混淆矩阵;

  (2)跟踪的关键指标;

  (3)验证 batch 上的推理示例。

  是不是还不错?

  4、用测试集验证模型

  训练好后开始验证。创建数据集时分成三部分,其中一部分用来当测试集:

  yolo task=detect \mode=val \model={HOME}/runs/detect/train/weights/best.pt \data={dataset.location}/data.yaml

  评估结果如下:

  5、使用自定义模型进行预测

  命令如下:

  yolo task=detect \mode=predict \model={HOME}/runs/detect/train/weights/best.pt \conf=0.25 \source={dataset.location}/test/images

  结果示例:

  6、最后一步:导出和上传权重

  现在我们拥有了一组训练好的权重,可用于托管 API 端点,就在项目的“/runs/detect/train/weights/best.pt”文件夹中。

  当然,也可以使用 Roboflow pip 包中的 Deploy()函数将它上传到 Roboflow Deploy 中,方便自己和他人共享。

  单击 Roboflow 仪表板侧栏中的“部署(Deploy)”,查看可用的选项,然后就能直接在浏览器中测试你的模型了。要共享给他人,发送一个 URL 就行。

  测试素材可以直接用你测试集里的图片,也可以上传新的图片或视频,或者粘贴 YouTube 链接、直接用摄像头。

  全部结束!是不是还不麻烦?

  赶紧去检验一番 YOLOv8 的真本事吧~

  需要的链接都在下面,Have fun!

  YOLOv8 官方仓库:

  https://github.com/ultralytics/ultralytics

  教程原文:

  https://blog.roboflow.com/how-to-train-yolov8-on-a-custom-dataset/

  参考链接:

[1]https://www.reddit.com/r/computervision/comments/108616o/train_yolov8_objectdetection_on_custom_dataset/

[2]https://learnopencv.com/ultralytics-yolov8/