目标检测-One Stage-YOLOv5

文章目录

  • 前言
  • 一、YOLOv5的网络结构和流程
    • YOLOv5的不同版本
    • YOLOv5的流程
    • YOLOv5s的网络结构图
  • 二、YOLOv5的创新点
    • 1. 网络结构
    • 2. 输入数据处理
    • 3. 训练策略
  • 总结


前言

前文目标检测-One Stage-YOLOv4提到YOLOv4主要是基于技巧的集成,对于算法落地具有重大意义,YOLOv5则在工程应用方面更近一步,将算法深度集成,使得使用者不用再过多关注算法实现,且提供了多种预训练模型,到目前为止,由ultralytics团队开发的ultralytics包,已经支持YOLOv3YOLOv5YOLOv6YOLOv8YOLO-NASRT-DETR等等,其中YOLOv5和当前YOLO家族最新的YOLOv8是由ultralytics团队研发的。


提示:以下是本篇文章正文内容,下面内容可供参考

YOLOv5_13">一、YOLOv5的网络结构和流程

YOLOv5_14">YOLOv5的不同版本

YOLOv5给出了五个版本:Yolov5nYolov5sYolov5mYolov5lYolov5x

ps:

  • 要注意的是Yolov5n是YOLOv5 系列中的一个变体,专为 Nano 设备(如 NVIDIA Jetson Nano)进行优化。YOLOv5n 在保持较快速度的同时,提供适用于边缘设备的准确度。
  • 因此不算Yolov5n的话,YOLOv5s网络是YOLOv5系列中深度最小,特征图的宽度(channels)最小的网络。其他的三种(m、l、x)都是在此基础上不断加深,不断加宽。
    在这里插入图片描述

YOLOv5_21">YOLOv5的流程

  1. 利用自适应图片缩放技术对输入图片进行缩放

ps:

  • 传统的缩放填充后,两端的黑边大小都不同,如果填充的比较多,则存在信息冗余,影响推理速度。
    在这里插入图片描述
  • yolov5对原始图像自适应的添加最少的黑边。图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。注意自适应图片缩放只在检测时使用,在训练时仍使用传统填充方法
  • 举例说明自适应图片缩放计算过程:
  1. 根据原始图片大小以及输入到网络的图片大小计算缩放比例,并选择小的缩放系数
    在这里插入图片描述
  2. 第一步得到缩放系数的计算缩放后的图片大小
    在这里插入图片描述
  3. 计算黑边填充数值:将416-312=104,得到原本需要填充的高度,再采用32对104取余,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。之所以利用32取余,是因为YOLOv5的网络经过5次下采样,而2的5次方,等于32。所以至少要去掉32的倍数,再进行取余,以免产生尺度太小走不完stride(filter在原图上扫描时,需要跳跃的格数)的问题。
    在这里插入图片描述
  1. 将利用Focus在不丢失信息情况下对输入影像进行下采样
  2. 将下采样图像输入Backbone+PANet提取多尺度特征
  3. 利用自适应anchor计算获取预选框

ps:

  • YOLO系列中,可以针对数据集设置初始的anchor。在网络训练中,网络在anchor的基础上输出预测框,进而和GT框进行比较,计算loss,再反向更新,迭代网络参数。在YOLOv3、4版本中,设置初始anchor的大小都是通过单独的程序使用K-means算法得到,但是在YOLOv5中,将此功能嵌入到代码中,每次训练数据集之前,都会自动计算该数据集最合适的Anchor尺寸,该功能可以在代码中设置超参数进行关闭。
  • 自适应anchor的计算具体过程如下:
    ①获取数据集中所有目标的宽和高。
    ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。
    ③将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。
    ④筛选 bboxes,保留宽高都大于等于两个像素的 bboxes。
    ⑤使用 k-means 聚类三方得到n个 anchors,与YOLOv3、YOLOv4 操作一样。
    ⑥使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor_fitness 方法计算得到的适应度 fitness,然后再进行评估。
  1. 将上一步得到的anchor输入不同的分类和边框回归器
  2. 使用非极大值抑制DIoU-NMS去除冗余窗口(训练时用的CIoU loss)

YOLOv5s_51">YOLOv5s的网络结构图

在这里插入图片描述

YOLOv5_53">二、YOLOv5的创新点

1. 网络结构

  • 卷积块从CBM换回了CBL(激活函数从Mish到Leaky relu)
  • 设计了CSP_2X结构应用于Neck中,加强了网络特征融合的能力。
  • backbone最前端添加了Focus模块(基本上是Yolov2中的pass through)以减小特征图尺寸,减小了模型复杂度。

2. 输入数据处理

  • Mosaic数据增强
  • 自适应锚框计算
  • 自适应图片缩放

3. 训练策略

  • 多尺度训练(Multi-scale training)。 如果网络的输入是416 x 416。那么训练的时候就会从 0.5 x 416 到 1.5 x 416 中任意取值,但所取的值都是32的整数倍。
  • 训练开始时先使用 warmup 进行预热。 在模型预训练阶段,先使用较小的学习率训练一些epochs或者steps (如4个 epoch 或10000个 step),再修改为预先设置的学习率进行训练。
  • 使用了余弦退火学习率衰减策略(Cosine annealing scheduler)。
  • 采用了 EMA (Exponential Moving Average)更新权重。 相当于训练时给参数赋予一个动量,这样更新起来就会更加平滑。

ps:在深度学习中,经常会使用EMA(指数移动平均)这个方法对模型的参数做平均,以求提高测试指标并增加模型鲁棒。

  • 使用了AMP(Automatic Mixed-Precision training)进行混合精度训练(Mixed precision)。 能够减少显存的占用并且加快训练速度,但是需要 GPU 支持。

ps:默认情况下,大多数深度学习框架都采用32位浮点算法进行训练。2017年,NVIDIA研究了一种用于混合精度训练的方法,该方法在训练网络时将单精度(FP32)与半精度(FP16)结合在一起,并使用相同的超参数实现了与FP32几乎相同的精度。


总结

YOLOv5的精度和速度如下:
在这里插入图片描述

在这里插入图片描述

ps:YOLOv5n6等后缀的6代表6.0版本,是在默认版本(5.0)上的更新,区别如下:

  1. 使用了更大的输入,提高了对小物体的检测精度
  2. backbone中:5.0中是SPP+CSP2_X的结构,而在6.0版本是CSP1_X+SPPF结构
  3. CBL修改为CBS
    在这里插入图片描述

http://www.niftyadmin.cn/n/5319482.html

相关文章

58.leetcode 最后一个单词的长度

一、题目 二、解答 1. 思路 分2种情况 第一种情况只有一个单词,不包含空格:这种情况直接返回单词本身的长度。第二种情况包含空格:先去掉首尾的空格,根据空格切割字符串生成一个字符串列表,返回倒数第一个索引位置字…

深度解析:接口测试与功能测试的区别,精彩回答震撼心灵

软件测试的细分领域范围广泛。 很多人常常搞不清楚接口测试与功能测试之间的区别。 今天用一篇文章来讲清楚“接口测试与功能测试的区别及内存联系”。 接口测试和功能测试都属于软件测试的细分领域。 更准确的说,软件测试按大的方向分类分别为:功能…

freemarker导出word文件实现动态列合并

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Spring Cloud + Vue前后端分离-第12章 通用权限设计

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第12章 通用权限设计 这一章我们不依赖第三方框架,我会从权限相关表的设计,到权限的配置,到权限的拦截,带大家一步一步的做出…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 语音唤醒失败问题的分析(1)

前边经过重重关卡,终于构建好了OpenHarmony系统。而编译好系统只是万里长征走完了第一步,真正的目的是为了实际的项目,以及在完成项目过程中完成具体的任务和实际解决的问题。 这里就开始介绍实际遇到的问题,以及对于它们的分析与…

AdaM: An Adaptive Fine-Grained Scheme for Distributed Metadata Management——泛读论文

ICPP 2019 Paper 分布式元数据论文汇总 问题 为了同时解决元数据局部性和元数据服务器的负载均衡。 现有方法缺陷 基于哈希的方法:zFS [16],CalvinFS [21],DROP [24],AngleCut [8] 静态子树划分:HDFS [6], NFS [14…

如何一键合并多个excel文件

import pandas as pd import glob import datetime# 获取所有xls文件 files glob.glob(需要合并的文件/*.xls)# 读取第一个xls文件的表头 first_file files[0] df_first pd.read_excel(first_file, headerNone) header df_first.iloc[0].tolist()# 合并所有xls文件 dfs []…

PHP版学校教务管理系统源码带文字安装教程

PHP版学校教务管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 系统介绍: 后台权限控制:支持多个管理员,学生管理,学生成绩,教师管理,文章管理&#x…