YOLOv8上手——随手录

YOLO8

1.配置环境pytorch环境以及cudn环境就不详解,只需要根据pytorch官网安装后再pip opencv即可正常运行
2.git yolov8(ps: 现在也可以直接通过pip下载yolo8了)

运行起来

可以看官网给出的文档,里面有许多案例以及参数的含义,一下内容都是根据博主个人常用的,不够详细敬请谅解

from ultralytics import YOLO
import os
import torch
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
model = YOLO('yolov8n.pt')
model.train(data="coco128.yaml", epochs=3, workers=0)

ps:本案例是基于windows环境运行的

通过上述代码,即可完成简单的yolo8对coco128张数据进行3次简单的训练测试,完成即表明配置与yolov8都可以正确使用了。

# 进行图片测试
model.predict(data="./assets/img", save=True)
# 视频追踪
model.track("./test.mp4", show=True)

save=True是保存图片到yolov8设置的环境中,在输出中可以查看,show是在运行时展示图片
./指的是当前目录的文件,上一级目录用的是../,上上级目录是../../

代码 and 配置

训练自己的数据

通过在cfg中配置的datasets里面查看文件的配置以及修改成自己的数据
image
train: 训练数据-设置自己的数据集目录
val:验证集数据-设置自己的验证集目录

names: 模型yolov8的配置文件,换成自己的labels

然后cfg的model中选择自己要的模型大小和尺寸

以上配置都完成后,按上面的实例运行代码去训练自己的数据集

文件配置

yolov8默认是用的在cfg目录下的default.yaml对数据的超参数进行定义,如果想修改超参数,那么可以自己定义一个新的yaml文件来对超参数进行调参训练
通过

model.train(data="coco128.yaml", epochs=3, workers=0, cfg='./ultralytics/cfg/my_default.yaml')

来加载自定义的超参数

优化模型的步骤:

  1. 特定于类的优化:您可以查看验证过程后生成的混淆矩阵,以了解每个类的性能。如果一个类的性能不如其他类,则可以考虑为该类收集更多数据,或者在数据不平衡时调整类权重。

  2. 数据增强:在训练过程中应用不同的数据增强技术可以提高鲁棒性并可能提高准确性。

  3. 超参数调整:手动调整超参数,如学习率调度、锚框大小或损失权重,以平衡不同类别的学习。

  4. 焦点损失:如果您的模型由于类别不平衡而难以区分类别,则微调或使用焦点损失会有所帮助。

  5. 目视检查:查看预测以了解错误中的任何共性。这可能会激发特定的数据增强策略或突出数据注释质量的问题。

官方方案:

数据集方面

  1. 每个类别的图像张数大于1500张

  2. 每个类别的实例要大于10000张

  3. 图像多样性。数据集必须展示出部署环境,推荐来自一天中不同时间,不同季节,不同天气,不同光照,不同角度,不同数据源的图像

  4. 背景图像:背景图像是图像里没有感兴趣目标的图像,加到数据集以减少误报 (FP) 。建议约 0-10% 的背景图像,以帮助减少 FP(COCO数据集有1000张背景图像供参考,占总数的 1%)

  5. epochs:从300个epoch开始,如果过早开始拟合,那么减少epochs, 如果300后没有拟合,增加时间。(图片训练在最后10个epoch里面会进行关闭mosaic,提高模型的精度)

  6. 尝试提高batch_size 小的Batch size会产生较差的batchnorm统计,应该避免。

超参数

默认超参数位于hpy.scratch.yaml中。建议先使用默认超参数进行训练,然后再考虑修改任何参数。一般来说,增加augmentation超参数将减少和延迟过度拟合,从而允许更长的训练时间和更高的最终mAP。减少loss component gain 超参数(如hyp['obj'])将有助于减少对特定loss component的过度拟合。

模型结果以及特定的方法

提高密集检测的方案

使用soft nms

参考链接:https://arxiv.org/ftp/arxiv/papers/2308/2308.06452.pdf

改进网络架构

小目标检测

物体宽高是原图宽高的1/10以下的可以视为小目标。
目标边界框面积与图像面积的比值开方小于一定值(较为通用的值为0.03)的可以视为小目标。

官方例子

Ultralytics Docs: Using YOLOv8 with SAHI for Sliced Inference
https://docs.ultralytics.com/guides/sahi-tiled-inference/

WIoU

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10458807/

个人总结方法
  1. 高分辨率图像采集(图像源头)(小目标变大系列)
  2. 高分辨率图像模型输入(模型源头)(小目标变大系列)
  3. 图像分块 类似(sahi)
  4. 标注时添加周边的信息作为辅助训练(即同时增大目标的大小<低于某个值才称为小目标嘛~>,同时把目标的边沿信息也记录下来)
  5. 数据增强,如mosaic那样,把小目标反复添加到图片内
  6. 多尺度训练:利用多尺度训练策略,使模型能够学习检测各种大小的对象。
  7. 模型架构:尝试 YOLOv8 提供的不同模型架构,因为有些模型架构旨在更专注于较小的对象。(即用更小的步数去保留图片的周围信息,和利用更强的特征提取网络把特征提取出来)
  8. 专注于特征金字塔网络 (FPN):FPN 可以通过利用多级特征图来增强模型在各种对象大小上的性能。
  9. 仅对小目标设置不过于严格的iou阈值(有可能附近的大目标会把小目标的iou在nms时去掉)
  10. 小目标可以采取过拟合的训练来提高模型的感知能力
动态蛇形卷积

其他改进博客

https://snu77.blog.csdn.net/?type=blog
https://blog.csdn.net/m0_70388905/category_11905937.html

参考链接:
https://zhuanlan.zhihu.com/p/403209170#:~:text=在计算机视觉中,检测小目标是最有挑战的问题之一。 本文汇总了一些有效的策略。 为何小目标 (1)基于相对尺度,物体宽高是原图宽高的1%2F10以下的可以视为小目标。 目标边界框面积与图像面积的比值开方小于一定值(较为通用的值为0.03)的可以视为小目标。 (2)基于绝对尺度 通常认为绝对尺寸小于32×32的物体可以视为小目标。

未完成,持续更新!~~

posted @ 2023-11-05 10:25  waterdoor  阅读(551)  评论(0编辑  收藏  举报