yolov5小目标检测-提高检测小目标的检测精度

2023-11-02

目前基于目标检测方面,近些年基于深度学习的人神经网络产生了很多经典且高效的网络结构。其中不乏有凯明大神的Fast-RCNN、Faster-RCNN家族系列检测网络结构;还有号称you only look once的YOLO系列。

本次分享的就是最近刚刚发布的基于企业开发需要而产生的yolov5(因为相关论文还没有发表,所以本文不过分讲解其中原理,可自行了解;只对具体的实现操作和部署进行分享)。以下会详细介绍yolov5的下载安装和使用技巧以及如何使用自己的数据集进行小目标的检测工作。具体yolov5的一些细节问题包括网络结构的讲解、大家可以看我下面这个链接的博客,其中也添加了一些小目标检测的相关知识,有兴趣可以了解一下。

(219条消息) 清晰、幽默、轻松地深入理解YOLOv5网络结构和一些细节(查阅无数资料文献总结)_Hack Hui的博客-CSDN博客

一、YOLOv5的下载 

github 链接 https://github.com/ultralytics/yolov5 

下载之后按照其中的README.md文件进行配置和设置。

二、YOLOv5数据集的设置

 对yolov5/data/buy.yaml文件进行配置

 其中 1:yours数据集的根目录

         2:代表生成yolo要求的txt文件

         3:   你需要识别的类别数

         4: 你识别类别的名称

三、小目标检测的难点

当前的检测算法对于小物体并不友好,体现在以下4个方面:

  • 过大的下采样率:假设当前小物体尺寸为15×15,一般的物体检测中卷积下采样率为16,这样在特征图上,过大的下采样率使得小物体连一个像素点都占据不到
  • 过大的感受野:在卷积网络中,特征图上特征点的感受野比下采样率大很多,导致在特征图上的一个点中,小物体占据的特征更少,会包含大量周围区域的特征,从而影响其检测结果。
  • 语义与空间的矛盾:当前检测算法,如Faster RCNN,其Backbone大都是自上到下的方式,深层与浅层特征图在语义性与空间性上没有做到更好的均衡。
  • SSD一阶算法缺乏特征融合:SSD虽然使用了多层特征图,但浅层的特征图语义信息不足,没有进行特征的融合,致使小物体检测的结果较差。

四、提高小目标检测的基本思想

1、数据加强   2、滑动窗口检测:将图片分割为n个小区域分别检测,最后在concat成正常图像大小。本文也是主要介绍这种思想。

五、相关代码

# parameters
nc: 2  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple

# anchors
anchors:
  - [5,6, 8,14, 15,11]  #4
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],   #160*160
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],  #80*80
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]], #40*40
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9   20*20
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],  #20*20
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], #40*40
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4  40*40
   [-1, 3, BottleneckCSP, [512, False]],  # 13     40*40

   [-1, 1, Conv, [512, 1, 1]], #40*40
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3   80*80
   [-1, 3, BottleneckCSP, [512, False]],  # 17 (P3/8-small)  80*80

   [-1, 1, Conv, [256, 1, 1]], #18  80*80
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], #19  160*160
   [[-1, 2], 1, Concat, [1]], #20 cat backbone p2  160*160
   [-1, 3, BottleneckCSP, [256, False]], #21 160*160

   [-1, 1, Conv, [256, 3, 2]],  #22   80*80
   [[-1, 18], 1, Concat, [1]], #23 80*80
   [-1, 3, BottleneckCSP, [256, False]], #24 80*80

   [-1, 1, Conv, [256, 3, 2]], #25  40*40
   [[-1, 14], 1, Concat, [1]],  # 26  cat head P4  40*40
   [-1, 3, BottleneckCSP, [512, False]],  # 27 (P4/16-medium) 40*40

   [-1, 1, Conv, [512, 3, 2]],  #28  20*20
   [[-1, 10], 1, Concat, [1]],  #29 cat head P5  #20*20
   [-1, 3, BottleneckCSP, [1024, False]],  # 30 (P5/32-large)  20*20

   [[21, 24, 27, 30], 1, Detect, [nc, anchors]],  # Detect(p2, P3, P4, P5)
  ]

只需要对yolo下的yaml文件进行如上的配置,就可以大大地提高小目标监测的精度,但是处理时间可能会有所上升。好了,本文介绍到此结束,感兴趣的小伙伴给个点赞关注再走吧,欢迎下方评论区咨询各种问题!!!

 应广大铁粉要求,我已将小目标的数据集整理好,有需要的自行下载吧。免费的!

https://download.csdn.net/download/m0_58508552/87626044?spm=1001.2014.3001.5503https://download.csdn.net/download/m0_58508552/87626044?spm=1001.2014.3001.5503

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

yolov5小目标检测-提高检测小目标的检测精度 的相关文章

  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 数据结构练习题-3栈和队列

    选择题 1 若让元素1 2 3 4 5依次进栈 则出栈次序不可能出现在 种情况 A 5 4 3 2 1 B 2 1 5 4 3 C 4 3 1 2 5 D 2 3 5 4 1 答案 C 解释 栈是后进先出的线性表 不难发现C选项中元素1比元
  • JS删除两个数组对象中id相同的对象

    let arr1 id 1 name json id 2 name book let arr2 id 1 name json age 15 id 2 name book age 16 id 3 name ani age 17 ES6的方法
  • xshell通过跳板机使用隧道和代理连接服务器

    1 建立和跳板机的连接 主机和端口为跳板机的ip和端口 2 使用publicKey认证 3 通过隧道建立和目标主机的连接 源主机为localhost 侦听端口任意填不和本地端口冲突即可 目标主机和端口为要访问的主机端口 4 使用代理 加快本
  • [完美解决]当前不会命中断点。还没有为该文档加载任何符号。

    原文地址 http www cnblogs com furenjun archive 2011 05 31 2064287 html 概述 在调试SL项目 我重装了电脑 项目也是重新配置的 后来在调试的时候发现断点进不去 折腾了两个小时 将
  • vue自定义指令v-loading

    elementUI或者antdesign上的loading拿来就用简单无脑 以前我也是一直在用UI框架自带的loading 后来用的发现好呆板 一点也不炫酷 于是就自定义了 废话不说了直接看效果图 1 创建文件 1 在 src目录下创建一个
  • 学习笔记:区块链概念入门

    本文是100天区块链学习计划的第二篇学习笔记 其实就是按照阮一峰的网络日志 区块链入门教程的讲解进行的简单梳理 也是时间有点紧张的原因 相比于上一篇SHA256算法原理详解 个人感觉质量和原创程度明显下降 待对区块链有了更深的理解后 我会回
  • 【cuda大师班】p12 主机和设备之间的数据传递

    一 主机和设备之间的数据传递 1 1 基本流程框图 1 2 数据传递函数 在主机和设备之间必须显式的传递数据 1 3 代码 使用h 表示某个变量是主机变量 使用d 表示某个变量是主机变量 include cuda runtime h inc
  • ugui实现listview效果

    我们今天要实现listview的效果 首先看下ui结构 根节点是画布 Store节点只是为了固定锚点 抛开背景和标题 核心部分只有ScrollRect ViewPoint Slots Scrollbar ScrollRect是滑动布局 co
  • C++ Programming/RTTI

    原文地址 http en wikibooks org wiki C 2B 2B Programming RTTI Run Time Type Information RTTI RTTI refers to the ability of th
  • Flutter原理与美团的实践

    Flutter是Google开发的一套全新的跨平台 开源UI框架 支持iOS Android系统开发 并且是未来新操作系统Fuchsia的默认开发套件 自从2017年5月发布第一个版本以来 目前Flutter已经发布了近60个版本 并且在2
  • Python- 关于重复字段的一些统计

    问题场景 1 统计dataframe中某两个 多个 字段作为一个整体在dataframe中重复的次数 gt 得到 gt 2 获取某一字段重复次数最多的索引 PS 上图中count最大值为3 索引index 为0 3 获取某一字段重复次数最多
  • Java软件开发

    在开发中我们使用比较多的集合就是List Set和Map了 并且我们也知道大部分用的基本上都是ArrayList LinkedList HashMap HashSet或者TreeSet这几个集合 但是我们在学习使用它们的时候都知道它们这几个
  • upload-labs:pass-07

    is upload false msg null if isset POST submit if file exists UPLOAD PATH deny ext array php php5 php4 php3 php2 html htm
  • 实验九、内核虚拟化

    1 搭建openEuler x86 64系统的qemu虚拟机 1 1 安装虚拟化组件 dnf install y libvirt qemu 1 2验证是否安装成功 安装成功 1 3查看libvird是否已启动 启动成功 1 4查看虚拟网络配
  • QT笔记——QTableWidget点击表头排序问题 数据消失

    在QTableWidget 点击表头排序后 发现重新加载进来的数据消失或者很多空白 解决方法 排序方法 void DesignProductWidget DesignProductWidget ui tableWidget gt setSo
  • mysql安装—基于deepin

    文章目录 MySQL安装 基于deepin20 2 一 安装包准备 二 安装mysql 三 安装完成 MySQL安装 基于deepin20 2 今天带来一期关于如何在Deepin上安装MySQL 总体来说是比较简单的 一 安装包准备 火狐浏
  • opencv中更改摄像头参数,更改mpjg和帧率遇到的问题

    import numpy as np import cv2 import time cv2 VideoCapture set cv2 CAP PROP FPS 30 cap cv2 VideoCapture 0 cap cv2 VideoC
  • Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    目录 一 Centos7 配置说明 1 1 Firewalld 防火墙 1 2 SELinux 二 安装准备工作 2 1 安装环境 2 2 部署环境说明 2 3 配置主机名 master和node节点都执行 2 3 1 修改主机名 2 3
  • redis master和slave怎么实现数据同步

    转载于 https blog csdn net hxpjava1 article details 78347890 Redis的主从同步机制可以确保redis的master和slave之间的数据同步 按照同步内容的多少可以分为全同步和部分同
  • yolov5小目标检测-提高检测小目标的检测精度

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