yolov5 识别效果不好如何判断原因

2023-05-16

yolov5 训练完模型以后发现 对测试图片的识别效果不好. 那么这个时候该怎么办呢?
是过拟合还是欠拟合了呢? 怎么判断呢?

欠拟合
机器学习中一个重要的话题便是模型的泛化能力,泛化能力强的模型才是好模型,对于训练好的模型,若在训练集表现差,在测试集表现同样会很差,这可能是欠拟合导致, 这是泛化能力太强, 训练集上和测试集上误识别比较高.

欠拟合解决方法

  1. 最简单的是增加数据集的正样本数, 增加主要特征的样本数量

  2. 增加训练次数. 有可能是你还没有训练到合适的次数, 网络还没有学习到特征就被你停止掉了

  3. 添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。

  4. 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。

  5. 减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

过拟合
若在训练集表现非常好,在测试集表现很差,这可能是过拟合导致
例如易拉罐在训练集上的图片能识别, 但是在测试集上就不能识别. 此为过拟合的表现.

过拟合解决方法

  1. 最简单的是增加其他的特征的样本数, 重新训练网络.

  2. 重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。

  3. 增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

  4. 采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则,下面看具体的原因。

L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。两者都可以实现稀疏性,既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。

L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。还有就是看到有人说L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题(具体这儿我也不是太理解)。

  1. 采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。具体看下图:
    在这里插入图片描述

如上图所示,左边a图是没用用dropout方法的标准神经网络,右边b图是在训练过程中使用了dropout方法的神经网络,即在训练时候以一定的概率p来跳过一定的神经元。


下面内容跟本文有点相关. 算是一点工作心得吧

经过长期的摸索和实验. 总结出来了下面的几个点.

目前来看, 我感觉视觉类神经网络要想能达到实用的阶段, 首先要重视训练用数据集的管理.
在讨论之前我们应该要明白,目前的神经网络是怎么工作的. 咱们不讲太细如何实现的.咱讲的粗一点.

目前的视觉类神经网络最主要的功能, 就是在数据集和人工给的标准答案之间建立起一个映射模型.
这个模型是如何生成的呢? 视觉神经网络分三个阶段完成此功能,
第一个阶段是提取特征, 把图片拆分成不同的一个个的小特征.例如角点,轮廓,颜色,形状,明亮度
第二个阶段是用提取的特征,和标准答案通过多项式公式建立起关联关系, 不断的调整多项式的参数最终达到预测结果和识别结果一致.

而且这个模型有一定的泛化能力, 通俗的讲就是可以举一反三… 这确实是可以的, 因为它的原理是计算每个特征的权重占比来归类的. 是个概率性答案. 而不是1+1=2的确定性问题… 但是能不能做到举一反四, 举一反五, 呢.这个目前还做不到.
既然是概率性答案 那么就一定存在着答案不正确的可能性…也就是说识别不正确.

简单概括一下, 数据集中一定要有知识 也就是特征, 主要特征的数据不能少, 也不能只有一两个主特征.

第一个是 数据集图片中必须包含能够体现要识别的物品的一些主要特征. 例如,瓶子和罐子, 说到瓶子一般都是上面口小下面身子大的形状, 你把瓶子和罐子混合着标注,
罐子 一般是上面开口大,下面身体差不多一样大的形状. 这两种物品的训练数据集就不能随便混淆, 虽然有的时候人类也会把直通的罐子叫瓶子, 例如营养快线的瓶子开口就很大. 还有水蜜桃的罐子也有的时候叫瓶子, 但是这对于电脑来说等于增加了不确定性, 导致无法拟合. 也就是说数据集的正样本要能突出物品的主要特征.

第二个是数据集中表现主要特征的图片不能太少,越多越容易提取到主要特征. 尽量的各种角度都有.现在的神经网络还没有立体三维的关联性推导能力还只是平面性的求共同特征,找规律.还没有联想,立体翻滚的能力. 特征多才可以保证在各种情况下都能识别物品. 举个例子, 现在神经网络识别人的效果很好, 由于数据集非常非常多的样本都是正面或侧面拍的. 即便是训练的再怎么好. 你让它识别从裙底下面偷拍的哪些图片. 它照样不认识… 除非你把大量的这种图片加进去. 它也照样能学会. 这叫数据集内蕴含知识.找规律.找特征.仅此而已.

第三个是 数据集中体现一个物品的图片一定不能只有一个特征, 应该尽可能的包含所有的特征. 一个物品最起码应该有很5个以上的特征, 才容易有很好的泛化效果, 举个例子, 毛茸茸这个特征,可以是什么物品的主要特征? 这就太多了. 可以是玩具, 猫,狗,头发, 羽绒服.

总结
通过冷静的分析和思考. 可以发现, 要想学习到知识, 效果要想达到最好, 首先需要有大量的数据集而且要是比较好的数据集. 标注正确合理不要指鹿为马. 选图集中突出几个主要特征(注意是几个). 外加几个边缘样本…

上面关于数据集的的要求是纯粹的靠推理就可以想明白的事情. 我想应该不用证明大家也能明白.

太少了容易欠拟合, 导致它很难识别不同的物品, 例如 王老吉饮料瓶, 把红色也当做王老吉的重要特征… 数据集也不能训练的太多, 训练的次数太多也容易过拟合.

训练的过程就是一个不断试错拟合的过程. 不断的调整模型参数 适应结果. 它也不知道这个参数是什么意义. 所以会得到各种乱七八糟的结果.

要想解决数据集缺少的问题, 我感觉, 弄个物品360度拍照, 作为基础的物品照片. 然后跟背景图片混合形成各种照片, 基本上能达到很好的识别效果. 然后在加上后期我们一些真实数据的照片, 基本上是可以做到效果实用的.

这里面算力就变的很重要了… 目前来看, 每次训练的结果是可以提高后续的训练速度的. 后期的训练应该会比刚开始要快, 因为参数已经都调整到位了.

后续增加物品品类也是可以的, 必须保证数据集和模型一致,每次新增的品类必须在已有品类的后面增加. 要不然会导致前面的网络重新训练.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

yolov5 识别效果不好如何判断原因 的相关文章

  • 视觉学习(四) --- 基于yolov5进行数据集制作和模型训练

    环境信息 Jetson Xavier NX xff1a Jetpack 4 4 1 Ubuntu xff1a 18 04 CUDA 10 2 89 OpenCV 4 5 1 cuDNN xff1a 8 0 0 180 一 yolov5 项目
  • yolov5 识别效果不好如何判断原因

    yolov5 训练完模型以后发现 对测试图片的识别效果不好 那么这个时候该怎么办呢 是过拟合还是欠拟合了呢 怎么判断呢 欠拟合 机器学习中一个重要的话题便是模型的泛化能力 xff0c 泛化能力强的模型才是好模型 xff0c 对于训练好的模型
  • [jetson浅试] yolov5+deepsort+Tensorrt C++部署(Xavier AGX)

    1 简介 xff1a 这学期刚开学的时候搞的 xff0c 空下来整理一些 xff08 以后还是应该养成边搞边写博客的好习惯 xff09 本文主要是对yolov5 deepsort tensorrt A c 43 43 implementat
  • c++读取yolov5模型进行目标检测(读取摄像头实时监测)

    文章介绍 本文是篇基于yolov5模型的一个工程 xff0c 主要是利用c 43 43 将yolov5模型进行调用并测试 xff0c 从而实现目标检测任务 任务过程中主要重点有两个 xff0c 第一 版本问题 xff0c 第二配置问题 一
  • 55、记录标注的关键点和目标检测数据集,进行目标检测标注文件和关键点文件分离以及yolov5.txt标注格式转xml数据集

    基本思想 xff1a 手中存在一份关键点检测模型 xff0c 因为客户把检测框和目标关键点框都标注在一起了 xff0c 所以进行一下剥离 代码一 xff1a 从关标注数据集剥离目标检测 coding utf 8 import cv2 imp
  • YOLOv5核心基础知识讲解

    我这主要是江大白老师的内容 xff01 xff01 深入浅出Yolo系列之Yolov3 amp Yolov4 amp Yolov5 amp Yolox核心基础知识完整讲解 xff08 CSDN xff09 深入浅出Yolo系列之Yolov5
  • yolov5获取边框坐标

    这里使用的是5 0版本 打开detect py xff0c 找到 Write results模块 xff0c 找到 save one box ctr 43 鼠标点击 xff0c 进入general py xff0c 会自动定位到 save
  • Jetson Xavier NX 部署Yolov5

    大部分过程非原创 xff0c 写这篇文章主要是因为设备不同出的问题也各不相同 xff0c 需要到处去找解决方法 xff0c 因此我把配置过程中遇到的全部问题以及解决方法记录在此 注 xff1a 该博客原文来自Jetson nano NX 部
  • yolov5/v7/v8自动检测多个文件夹及截取锚框

    目前yolo仅支持检测图片或单个文件夹 xff0c 但在很多时候需要对成百上千个文件夹中图片进行检测 xff0c 再根据得到的位置信息txt文件来截取图片 xff0c 如何一步完成呢 xff0c 详情见下文 在detect py中将save
  • YOLOv5识别目标的实时坐标打印

    引言 这个功能看似鸡肋 xff0c 但对于无人机目标识别与追踪有重要意义 xff0c 通过目标在摄像头视野的坐标位置 xff0c 可以推算出无人机相对与目标的位置 xff0c 从而对无人机进行位置矫正 因此 xff0c 添加代码打印坐标并不
  • YoloV5 train.py 如何使用

    parser 参数详解 1 weights 初始化模型 有yolov5m yolov5s yolov5x yolov5l 如果为设置为空就是没有任何与训练模型 2 config 训练配置文件 yaml 文件 与预训练模型相对应 3 data
  • YOLOv5区域入侵检测【附完整代码以及视频演示】

    一 前期准备 首先你需要有一份yolov5的官方源码 并且能够找到其中的detect py文件即可 在检测过程中 有些项目不需要我们检测所有的区域 比如禁止区域的入侵检测 只需要检测制定规划出来的区域就可以 例如下图所示这样 在网上随便找的
  • yolov5 【v4.0】用自有数据集训练结果大比拼【5s,5m,5l,5x,5shpy】

    5s python test py weights runs train exp9 weights best pt data data 9 yaml task test save json iou thres 0 5 模型大小 best p
  • yolov5 烟雾和火焰检测

    视频实时多人姿态估计 cpu fps33 实时视频动作检测 action detection 基于人体姿态的跌倒检测 yolov5 烟雾和火焰检测 文章用到的云gpu详细使用说明 随着社会经济的高速发展 工业 企业园区 住宅日益增多 存在一
  • 干货-YOLOv5检测烟火

    火灾是一种常见的自然灾害和事故 经常给人们的生命财产安全带来威胁 在人力无法及时发现火灾的情况下 火势可能迅速扩散 造成不可挽回的损失 因此 及时发现火灾并采取有效的救援措施至关重要 利用计算机视觉技术检测火灾具有以下意义 提高火灾检测效率
  • yolov5小目标检测-提高检测小目标的检测精度

    目前基于目标检测方面 近些年基于深度学习的人神经网络产生了很多经典且高效的网络结构 其中不乏有凯明大神的Fast RCNN Faster RCNN家族系列检测网络结构 还有号称you only look once的YOLO系列 本次分享的就
  • YOLOv5训练目标检测数据集(小白)

    一 提前准备工作 1 利用labelimg软件给收集到的图片打标签 具体步骤网上都有 2 下载好yolov5 v6 1 源码 下载地址 https github com ultralytics yolov5 用pycharm打开 在项目目录
  • 使用cocotools对yolov5 6.1的检测结果进行评估(其他模型类似,只需要调整数据格式为coco的就行)

    介绍 本博客是讲如何使用yolov5对测试集进行检测 然后使用cocotools进行评估 增加COCOeval的每个类别ap显示 5 0版本模型看这个博客 代码 5 0版链接 6 1版链接 环境 pytorch只需要保证能跑起来yolov5
  • Yolov5目标检测环境搭建过程(Cuda+Pytorch+Yolov5)

    本文介绍了如何搭建yolov5目标检测代码的环境 详细记录了python虚拟环境 安装pytorch 加载yolov5项目以及运行检测程序的全过程 完成了本文的yolov5项目搭建后 可以查看本文下一篇文章 使用yolov5训练自己的数据集
  • yolov5量化部署(基于openvino和tensorrt)

    yolov5 openvino量化部署 首先 下载YOLOv5源码 安装YOLOv5和OpenVINO的python依赖 git clone https github com ultralytics yolov5 git pip insta

随机推荐

  • MacBook Air M1 + MacTex + VS Code的LaTex教程

    MacBook Air M1 43 MacTex 43 VS Code的LaTex教程 参考博文 xff1a https zhuanlan zhihu com p 107393437 分为6步 xff1a 1 安装MacTex xff1a
  • Linux进程管理-ps

    Linux进程管理 ps ps 命令的基本格式如下 xff1a root 64 localhost ps aux 查看系统中所有的进程 xff0c 使用 BS 操作系统格式 root 64 localhost ps le 查看系统中所有的进
  • Linux进程管理-常见信号

    Linux进程管理 常见信号
  • Linux进程管理-kill

    Linux进程管理 kill kill 从字面来看 xff0c 就是用来杀死进程的命令 xff0c 但事实上 xff0c 这个或多或少带有一定的误导性 从本质上讲 xff0c kill 命令只是用来向进程发送一个信号 xff0c 至于这个信
  • 联想笔记本更换固态硬盘和重装系统

    近期给自己笔记本更换了固态硬盘并且重装了系统 xff0c 在此做一下记录 更换固态硬盘 https jingyan baidu com article 48b37f8d08128f1a6564886b html 将原来机械硬盘更换为固态硬盘
  • public、private和protected的区别

    public xff1a 声明方法和属性可以被随意访问 Protected xff1a 声明的方法和属性只能被类本身和其继承子类访问 private xff1a 只能被定义属性和方法的类访问 private 是完全私有的 只有当前类中的成员
  • java.lang.ClassNotFoundException: org.springframework.jdbc.support.JdbcTransactionManager

    这个错误出现的原因可能是导入的依赖版本过低 xff0c 我的跟新到这个版本就可以了 xff0c 要添加比较新的依赖 span class token generics function span class token punctuatio
  • 关于创建React App的8个有趣事实

    来源 xff1a https medium com xff0c 作者 xff1a Jennifer Fu 翻译 xff1a 前端外文精选 你所知道的一些事情 xff0c 你可能不知道的一些事情 Create React App是搭建Reac
  • 查询“ 01 “课程比“ 02 “课程成绩高的学生的信息及课程分数

    这个是一个比较经典的sql面试题 xff0c 面试的难度挺大的 xff0c 这里我将详细讲解 xff0c 怎么使用这个方法进行查询操作 student Sid Sname Sage Ssex Sid 学生编号 Sname 学生姓名 Sage
  • localhost可以访问,使用ip地址失败

    场景 使用手机访问同一局域网内的电脑 xff0c 无法访问的问题 xff0c 前段使用的是vue的框架 Vue的框架配置 在package json中 34 dev 34 34 webpack dev server host 0 0 0 0
  • 修改Linux配置文件后,让其生效的办法

    方法一 下面这个命令 xff0c 可以使所有用户都可以生效 xff0c 但是需要重新启动服务器 xff0c 如果是企业服务器 xff0c 极其不建议重新启动 xff0c 如果允许可以重启 项目中 xff0c 这个命令一般是java通过ssh
  • 在Windows上使用nginx具体步骤

    首先下载Windows版本的nginx http nginx org en docs windows html 直接将文件解压 xff0c 然后直接在有nginx exe同级的目录下执行cmd 当然你也可以双击下图红框中的文件 xff0c
  • Linux重启nginx服务

    1 方法一 到nginx下面的sbin目录下执行 nginx s reload 2 方法二 如果第一种不生效 xff0c xff08 项目背景 xff09 实际项目不生效 xff0c 也即部署到nginx下面的vue项目 xff0c 已经更
  • 静态方法调用yml配置文件中的值

    目录 一 概念讲解二 正确方式正确方法一正确方法二 可能遇到的问题 一 概念讲解 获取配置文件的注解方式有 64 value 64 ConfigurationProperties xff0c 这两种方式遇到下列情况都会失效 xff1a 属性
  • 2022IDEA搭建springMvc项目

    springmvc项目搭建 一 创建maven项目二 Add Framework Support三 添加依赖并配置maven四 配置前端控制器 96 DispatcherServlet 96 五 配置SpringMVC XML文件六 创建c
  • Error creating bean with name ‘mySwaggerResourceProvider‘

    多种情况都会导致此错误的产生 造成原因1 依赖冲突 xff1a 当maven导入项目的依赖A与导入项目的依赖B都依赖于依赖C xff0c 如下图所示 xff0c 都依赖于guava 也就是依赖C xff0c 因为依赖A与依赖B都有依赖C的依
  • Contents have difference only in line separators

    问题描述 xff1a idea关联上git xff0c 文件更改完 xff0c 然后ctrl 43 z回退到未更改之前 xff0c 但是git上的commit还是有此文件 xff08 表示有更改的地方 xff09 xff0c 如下图所示 红
  • valid prop: custom validator check failed for prop “size“.

    问题现象 xff0c 如下图所示 解决方案 xff1a 第一步 xff1a 首先确定出问题的 vue页面 xff0c 如上图所示 xff0c 是c view business product product manage vue 文件出现的
  • 装饰器

    装饰器 由于函数也是一个对象 xff0c 而且函数对象可以被赋值给变量 xff0c 所以 xff0c 通过变量也能调用该函数 span class prompt gt gt gt span class function span class
  • yolov5 识别效果不好如何判断原因

    yolov5 训练完模型以后发现 对测试图片的识别效果不好 那么这个时候该怎么办呢 是过拟合还是欠拟合了呢 怎么判断呢 欠拟合 机器学习中一个重要的话题便是模型的泛化能力 xff0c 泛化能力强的模型才是好模型 xff0c 对于训练好的模型