yolov8开发项目总结

发布于 2023-07-17 03:39:28

初次使用yolov8进行工具开发,研究对yolov8整个软件的使用。明确使用流程和步骤。

查看更多

浏览量
7899
10 个回答
猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

相关其他软件使用知识点整理

  1. 利用jmpy将py生成pyd格式保存
  2. 利用正则删除py中多余的注释

3.

猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

基于yolov8识别并实现自动化控制软件的项目中使用到的技术整理

  1. 基于ocr的文件识别,可控CPU、GPU。
  2. 退出程序前执行清理程序 atexit
  3. 获取窗口句柄
  4. 重置宽口位置
  5. 窗口还原并置顶激活
  6. 获取窗口尺寸
  7. 窗口画面截图,循环截图,形成视频流。
  8. 图片截图
  9. 图片相似度对比
  10. 获取图片灰度数据
  11. 检查目标图片是否出现在当前图中
  12. 检查某个像素位置颜色
  13. 向窗口发送键盘、鼠标指令
  14. 前台模式控制键盘鼠标
  15. 按键的按下、抬起、鼠标移动到
  16. 线程获取窗口画面数据
  17. 获取每一帧画面(截图流或视频流)
  18. 显示帧画面
  19. 线程对帧画面进行yolov8目标识别运算
  20. 显示运算结果
  21. 反向截图
  22. 服务器接口请求数据
  23. yolov8 训练、预测、打标签。
猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

理解什么是Tensor?

  • 在深度学习里,Tensor实际上就是一个多维数组(multidimensional array)。而Tensor的目的是能够创造更高维度的矩阵、向量。
  • Tensor有三个属性,rank-数据维度 shape-数据rows/columns type-数据类型
  • tensor 实际上跟numpy数组、向量、矩阵的格式基本一样,但是是专门针对GPU来设计的,可以运行在GPU上来加快计算效率
  • 一个可以运行在gpu上的多维数据,所以你明白它为啥与cuda有关系了吧。
  • TensorFlow 的计算图的每个节点的输入输出都是 Tensor,而连接节点的有向线段就是 Flow,表示从一个 Tensor 状态到另一个 Tensor 状态。这样可能更贴切 TensorFlow 里面的想法
猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

yolov8训练中的超参数如何使用?

在 YOLOv8 训练中,超参数是指那些需要手动设置的参数,用于控制模型的训练过程和性能。这些超参数的选择对于训练的效果和速度都具有重要影响。以下是一些常见的 YOLOv8 训练中的超参数及其作用:

学习率(learning rate):学习率决定了模型在每次迭代中更新参数的步幅大小。合适的学习率可以使模型更快地收敛到最优解。通常需要进行学习率的调度和调优,例如使用学习率衰减策略或自适应的优化算法。

批量大小(batch size):批量大小定义了在每次参数更新中同时处理的样本数量。较大的批量大小可以提高训练速度,但可能会增加内存需求。选择适当的批量大小需要平衡训练速度和内存消耗。

迭代次数(epochs):迭代次数指定了模型需要遍历训练数据集的次数。增加迭代次数可以提高模型的训练效果,但也会增加训练时间。

权重衰减(weight decay):权重衰减是一种正则化技术,通过在损失函数中添加权重的 L2 范数来惩罚大的权重值,以防止过拟合。权重衰减的值控制了正则化的程度。

数据增强(data augmentation):数据增强是一种通过对训练数据进行随机变换来扩充数据集的方法,以增加模型的泛化能力。常用的数据增强操作包括随机缩放、随机裁剪、随机翻转等。

除了上述常见的超参数外,还有一些与 YOLOv8 特定的超参数,例如 anchor boxes(锚框)的大小和数量,输入图像的尺寸等,这些超参数会影响模型的检测性能和速度。

选择适当的超参数需要根据具体的任务和数据集进行调整和优化。一般来说,可以通过尝试不同的超参数组合,并使用验证集来评估模型的性能,选择性能最佳的超参数。此外,还可以借助调参工具、自动化调参算法或经验规则来辅助选择超参数。

需要注意的是,超参数的选择通常是一个迭代的过程,需要不断尝试和调整,结合实际情况进行优化。

猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

Yolov8的核心使用方法

  1. 整理图片素材,这个也可以反向截图函数临时获得。
  2. 图片打标签,最便捷的是使用labelimg,它可以用快捷键打标签,还能直接导出yolo可用的label数据集,yaml文件是必要的(开发脚本中有函数可以自动生成)
  3. 模型训练

    model.train(data=data_yaml, project=project, exist_ok=True, resume=resume,
                        epochs=epochs,
                        batch=batch,
                        workers=workers,
                        imgsz=imgsz)
  4. 模型预测

    from ultralytics import YOLO
            model = YOLO('yolov8n')
            results = model.predict(source=0, stream=True)
            for res in results:
                cv2.imshow('dd', res.plot())
                cv2.waitKey(1)
            cv2.destroyAllWindows()
  5. 根据预测结果进行键鼠控制或者发送设备行动指令。
猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助
猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

yolov8开发过程中遇到的错误问题

  1. 使用pycharm开发的时候,主线程关闭,但守护子线程未能相应关闭的问题

    这个时候快速点击结束线程能再开发中解决。然后在cmd模式总关闭窗口也会全部结束,猜测与pycharm的某个监听机制有关
  2. 使用OBS软件获取软件窗口画面,直播流出来的数据有延迟,效果不理想。

3.

猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

yolov8中某些参数的理解

Yaml文件 是yolo网络模型结构定义的文件,其中depth_multiplewidth_multiple两个参数在不同的模型yaml文件种不一样,他俩与模型的复杂度有关。

Summary 参数通常用于控制模型的摘要信息,可以用来显示模型的结构和参数数量等。在 YOLOv 中,Summary 可以用来打印模型的摘要信息,例如网络层的结构、输入输出形状、参数数量等。

Layers 参数用于指定网络中的层。在 YOLOv 中,Layers 可以表示网络的不同组件或模块,例如卷积层、池化层、全连接层等。通过指定 Layers 参数,可以对不同层进行操作,例如设置层的权重、激活函数等。

"Parameters" 参数表示模型的可学习权重。在 YOLOv 中,Parameters 可以表示卷积层的卷积核权重、全连接层的权重等。通过调整参数,可以改变模型的学习能力和性能。

Gradients:Gradients 参数表示模型的梯度,用于优化模型的训练过程。在 YOLOv 中,Gradients 可以表示模型在反向传播过程中计算得到的梯度值。通过计算梯度,可以更新模型的参数,使得模型能够更好地适应训练数据。

举个通俗的例子来说明这些参数的含义:假设你正在组装一辆汽车,Summary 参数可以告诉你整个汽车的结构和组件数量;Layers 参数可以表示汽车的不同部件,例如发动机、车身、座椅等;Parameters 参数可以表示汽车部件的具体参数,例如发动机的马力、车身的长度、座椅的材质等;Gradients 参数可以表示你根据用户反馈进行的调整,例如根据用户的意见改变发动机的性能、车身的外观设计等。

nc 参数表示数据集中的类别数量。

scales 参数表示用于调整 anchor boxes 的尺寸的比例因子.在 YOLOv 中,anchor boxes 是用于预测物体位置和尺寸的基准框。通过 scales 参数,我们可以控制 anchor boxes 的尺寸范围,以适应不同大小的物体

depth 参数表示网络的深度或层数. 在 YOLOv 中,depth 可以用来控制模型的复杂度和性能。较深的网络通常具有更多的层和参数,但也可能会增加训练和推理的时间.

width 参数表示网络的宽度或通道数。在 YOLOv 中,width 可以用来控制网络的通道数,从而影响模型的学习能力和表达能力。较大的宽度通常能够提供更强的特征提取能力,但也会增加模型的计算复杂度。

max_channels 参数表示网络中最大的通道数。在 YOLOv 中,max_channels 用于限制网络中每个层的通道数不超过指定的最大值。这样可以控制网络的参数量和计算量,避免过度拟合和过度复杂化。

backbone 参数表示模型的主干网络。在 YOLOv 中,主干网络用于提取输入图像的特征表示。常见的主干网络包括 Darknet、ResNet、EfficientNet 等。

gflops 参数表示模型的计算量,以 GigaFLOPs(十亿次浮点运算)为单位。gflops 参数可以用来评估模型的计算效率和性能。

repeats 参数表示模型中重复的模块或层的数量。在 YOLOv 中,一些模块会按照 repeats 参数的设置进行重复堆叠,以增加模型的深度和表达能力。

yaml和pt的不同

使用 .YAML 文件创建 YOLO 模型时,模型的结构、超参数和配置信息都会以 YAML 格式进行定义。通过编辑 .YAML 文件,可以灵活地调整模型的各种参数和设置。而使用训练好的 .pt 文件创建 YOLO 模型时,模型的结构和参数已经在训练阶段确定,并保存在 .pt 文件中。因此,无法通过简单修改 .pt 文件来调整模型的结构或超参数。
PT权重文件 使用 .YAML 文件创建 YOLO 模型时,需要根据 .YAML 文件定义的结构和参数来构建模型,并随机初始化权重。而使用训练好的 .pt 文件创建 YOLO 模型时,可以直接加载预训练的权重,这些权重是在之前的训练过程中学习到的。这样可以节省训练时间,同时可以使用预训练权重来提高模型的性能和收敛速度。
使用 .YAML 文件创建 YOLO 模型适用于从头开始训练模型或根据自己的需求定制模型结构和参数。这种方式适合于研究人员或需要自定义模型的用户。而使用训练好的 .pt 文件创建 YOLO 模型适用于迁移学习或在特定任务上进行微调。这种方式适合于快速部署和使用已经训练好的模型。

AMP, 在 YOLOv8 中,"automatic mixed precision"(自动混合精度)是一种训练技术,旨在提高深度学习模型的训练速度和内存效率。它利用了半精度浮点数(16位)和单精度浮点数(32位)的优势,同时减少了计算和内存开销。举个例子来说明,假设你要训练一个图像分类模型,你可以将模型的前向传播过程使用低精度来执行,而将反向传播过程使用高精度来执行。这样可以在保持模型精度的同时,加快计算速度和降低内存消耗。

在 YOLOv8 中,mAP 是指平均精度均值(mean Average Precision),用于评估目标检测算法在不同类别上的性能表现。mAP 是一个常用的指标,用于衡量模型在多个类别上的准确性。较高的 mAP 值表示模型具有更好的目标检测精度和准确性。

猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

Yolov8的安装流程

这个可以参考#bat批处理一键安装yolov5目标识别框架开发环境 的回答。

Yolov8安装中遇到的问题

  1. 当前时间最安全的python版本时3.9.X,目前最稳定兼容的版本python3.9(10以上的部分软件不兼容),以后可能会逐步兼容,后面开发可以再验证更高版本的兼容性。
  2. 安装依赖库时会出现opencv相关的错误时,可能还是版本不兼容的问题,直接卸载重装最新版opencv-python opencv-contrib-python。
  3. yolov8 需要 pytorch, Tensor是基于GPU进行深度学习的库。GPU深度学习需要cuda和cudnn,一个是运算平台,一个是GPU加速运算库。
  4. cuDNN是CUDA的扩展计算库,安装时只要把cuDNN文件复制到CUDA的对应文件夹里就可以。
  5. cudnn 和 cuda 需要下载对应的版本。而且这个必须到官网注册下载(可能还需要科学上网,挺麻烦的)

6.

猫哥
猫哥 项目组成员 2023-07-18
希望我的回答能对你有所帮助

使用到的某些cmd命令

  • 查询某个命令所在的路径使用:where python
  • nvidia-smi 查看nvidia驱动版本cuda版本

学习
记录

发布
问题

分享
好友

手机
浏览

扫码手机浏览