![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
目标检测YOLOv5技巧汇总
文章平均质量分 94
在之前yolov3-spp的基础之上,yolov5-6.0版本又增加了很多改进,同时也增加了许多新提出的技巧,这里再对yolov5-6.0这个版本项目进行汇总,比如TTA,融合卷积归一化,model ensemble等...
Clichong
这个作者很懒,什么都没留下…
展开
-
YOLOv5的Tricks | 【Trick15】使用COCO API评估模型在自己数据集的结果
如有错误,恳请指出。在解析yolov5整个工程项目的时候要,已经对其detect.py脚本和val.py脚本进行分别的解析。其中,个人觉得detect脚本写得过于冗杂,所以分别为每个任务(图片推理,视频推理,摄像头推理)单独的写了个简单易懂的推理脚本。在之前在解析完val.py脚本之后,一直想同样地对其进行简化,现在用这篇博客来记录简化过程以及出现的问题。一般来说,现有的标注格式就是xml格式,yolo的txt格式还有coco的json标注特殊,我们使用yolov5项目来说标注文件就是一堆txt文件,文件名原创 2022-08-29 21:12:38 · 5348 阅读 · 16 评论 -
YOLOv5的Tricks | 【Trick14】YOLOv5的val.py脚本的解析
如有问题,恳请指出。这篇可能是这个系列最后的一篇了,最后把yolov5的验证过程大致的再介绍介绍,基本上把yolov5的全部内容就稍微过了一遍了,也是我自己对这个项目学习的结束。(补充一下,这里我介绍的yolov5-6.0版本的代码)这个脚本主要分为是三个部分:主体代码运行部分 + 指标计算部分 + 绘图部分,这里就主要介绍前两个部分的内容。细节比较多,比上一篇的detect.py脚本复杂很多,这里写得困难逻辑也不会很清晰,简单做个记录,方便日后自己回忆。在训练阶段每个batch训练结束后,都会调用一次va原创 2022-08-12 21:09:10 · 10587 阅读 · 12 评论 -
YOLOv5的Tricks | 【Trick13】YOLOv5的detect.py脚本的解析与简化
如有错误,恳请指出。在之前介绍了一堆yolov5的训练技巧,train.py脚本也介绍得差不多了。之后还有detect和val两个脚本文件,还想把它们总结完。在之前测试yolov5训练好的模型时,用detect.py脚本简直不要太方便,觉得这个脚本集成了很多功能,今天就分析源码一探究竟。关于如何使用yolov5来训练自己的数据集在之前已经写了一篇文章记录过:yolov5的使用 | 训练Pascal voc格式的数据集,所以在这篇文章中就主要分析源码,再稍微提及一下detect的可用参数。对于测试的都会存放在原创 2022-08-10 22:55:25 · 8248 阅读 · 6 评论 -
YOLOv5的Tricks | 【Trick12】YOLOv5使用的数据增强方法汇总
在专栏前面的内容一直介绍的是yolov5训练时候使用的一些技巧,这里用这篇博客最后归纳一下yolov5在数据增强上所使用的技巧。在yolov3-spp专栏的时候,我介绍过yolov3-spp大致所使用的一些数据增强的方法:数据增强:Mosaic数据增强:随机旋转、平移、缩放、错切、HSV在之前详细的介绍过代码,而在yolov5这里,其实代码是类似的,甚至函数的名字都没有变化,看过源码的朋友就可能知道了,改变的地方其实不是很多,所以这里就不再详细介绍代码的细节了,只是总结一下使用的数据增强。...原创 2022-08-07 17:58:19 · 28670 阅读 · 21 评论 -
YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights & Biases)
如有错误,恳请指出。与其说是yolov5的训练技巧,这篇博客更多的记录如何使用wandb这个在线模型训练可视化工具,感受到了yolov5作者对其的充分喜爱。所以下面内容更多的记录下如何最简单的使用这个工具,而不是在介绍他在yolov5中的使用,后者具体可以见官方资料:Weights & Biases with YOLOv5Wandb是Weights & Biases的缩写,这款工具能够帮助跟踪你的机器学习项目。它能够自动记录模型训练过程中的超参数和输出指标,然后可视化和比较结果,并快速与同事共享结果。(感受原创 2022-08-07 11:43:06 · 5703 阅读 · 0 评论 -
YOLOv5的Tricks | 【Trick10】从PyTorch Hub加载YOLOv5
如有错误,恳请指出。严格意义来说,这篇文章算不上是yolov5的一个训练技巧,而且yolov5的训练技巧在专栏之前的文章中基本已经都讲完了,之后可以会补充一些yolov5项目的其他内容。比如这篇,从 加载YOLOv5模型,不需要克隆 不过很多朋友(包括我),在整理之前,还不知道pytorch hub是什么,所以这里顺便介绍一些pytorch hub,然后再根据官方链接介绍如何不需要克隆就可以玩转yolov5项目。官方介绍:Towards Reproducible Research with PyTorch原创 2022-08-06 22:33:59 · 2235 阅读 · 0 评论 -
YOLOv5的Tricks | 【Trick9】模型剪枝处理与Pytorch实现的剪枝策略
如有错误,恳请指出。在yolov5项目中的torch_utils.py文件下,有prune这个函数,用来实现模型的剪枝处理。对模型裁剪,模型剪枝这方面之前没有接触到,这里用这篇笔记来学习记录一下这方面内容。在yolov5项目中提供了两个函数:sparsity与prune,前者可以返回模型的稀疏性,后者实现对模型的裁剪处理。对于模型稀疏性的判断,其实现的思路是遍历每一层模块的参数量,当当前层的参数值非0,表示当前的神经元是被激活的在网络的前向传播中是使用到的;而当当前层的参数值为0时,表示这个为0的参数所控制原创 2022-06-12 15:36:31 · 2545 阅读 · 2 评论 -
YOLOv5的Tricks | 【Trick8】图片采样策略——按数据集各类别权重采样
如有错误,恳请指出。这篇文章用来记录一下yolov5在训练过程中提出的一个图片采样策略,简单来说,就是根据图片的权重来决定其采样顺序。在我们训练数据集的时候,一般是对数据集随机采样几张图像然后构建成一个来批量输入网络处理。个人猜想,一个可能的想法就是,这种随机的图像采集会不会过于随意,因为有些图像的目标是过少的,那么这种图像可能对网络来说比较简单;而有些图像的目标是比较多的,这种是比较困难的。而对于开始训练的初期就使用这种简答图像对网络的训练可能带来不了多大的学习提升。所以,如果可以对数据集中的每张图像做一原创 2022-06-10 17:15:20 · 3762 阅读 · 1 评论 -
YOLOv5的Tricks | 【Trick7】指数移动平均(Exponential Moving Average,EMA)
如有错误,恳请指出。这篇博客主要用于整理网上对EMA(指数移动平均)的介绍,在yolov5代码中也使用了这个技巧,现对其进行归纳。相信大家对算术平均:x^=1n(x1+x2+…+xn)\hat{x}=\frac{1}{n}(x_1+x_2+…+x_n)x^=n1(x1+x2+…+xn),加权平均:x^=1n(x1f1+x2f2+…+xkfk)\hat{x}=\frac{1}{n}(x_1f_1+x_2f_2+…+x_kf_k)x^=n1(x1f1+x2f2+…+xkfk),其中(f1+原创 2022-06-08 17:19:46 · 3251 阅读 · 1 评论 -
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
如有错误,恳请指出。其中包括:LR Range Test、Cyclical LR、One Cycle Policy、SGDR、AdamW 、SGDW、pytorch实现的余弦退火策略。具体的学习率调整策略,详细见参考资料。yolov5代码中提供了两种学习率调整方案:线性学习率与One Cycle学习率调整代码比较简单,如下所示:配合辅助绘制函数,这里可以将两种学习率调整策略的学习率随epochs变化绘制出来,这里我重新写了一个函数比较方便调用lf。参考代码:下面利用以上函数分别查看线性学习率与One C原创 2022-06-07 21:45:31 · 14570 阅读 · 8 评论 -
YOLOv5的Tricks | 【Trick5】遗传算法实现超参数进化(Hyperparameter Evolution)
如有错误,恳请指出。Hyperparameter evolution超参数演化是一种使用遗传算法(GA)进行优化的超参数优化方法。ML 中的超参数控制训练的各个方面,为它们找到最佳值可能是一个挑战。由于 1) 高维搜索空间 2) 维度之间的未知相关性,以及 3) 评估每个点的适应度的昂贵性质,网格搜索等传统方法很快就会变得难以处理,这使得 GA 成为超参数搜索的合适候选者。以上是官方文档的介绍:Hyperparameter Evolution,其实简单的来说,就是使用遗传算法来对超参数已经交叉变异以获得更好原创 2022-06-07 14:45:35 · 6651 阅读 · 6 评论 -
YOLOv5的Tricks | 【Trick4】参数重结构化(融合Conv+BatchNorm2d)
如有错误,恳请指出。这篇文章是想要记录yolov5在模型搭建过程中的一个融合模块,就是把卷积与批归一化的参数进行融合,想卷积带有批归一化的性质,使得推理过程中可以加快模型推理速度,简化整个模型结构,实现训练与推理两个阶段的解耦。我最早接触参数重结构化这个词是看见了大佬丁霄汉发表的几篇论文:RepVGG,RepMLP,RepLKNet,这些构建新backbone的论文无一例外的全部使用了参数重结构化的思想。RepVGG将3x3,1x1,identity分支的残差结果利用数学计算方法等价为一个3x3的卷积结构,原创 2022-06-02 11:34:58 · 3194 阅读 · 7 评论 -
YOLOv5的Tricks | 【Trick3】Test Time Augmentation(TTA)
如有错误,恳请指出。一句话简单的介绍就是测试过程中也使用数据增强,官方教程介绍:Test-Time Augmentation (TTA) Tutorial在训练过程中数据增强是非常常用的一种手段,目的是为了提高模型的泛化能力,以免出现大小不一样,图像选择一下就分辨不出来的尴尬。那么TTA就是想在推理阶段也进行数据增强。不过不会太复杂,因为会增加额外的计算量,在打比赛的时候可能会用到,因为打比赛不在意你的推理时长是多久,所以可以尽情瞎造;但是在实际部署的情况下,因为推理速度减慢很可能会达不到实时监测的效果,所原创 2022-06-01 17:48:56 · 3475 阅读 · 0 评论 -
YOLOv5的Tricks | 【Trick2】目标检测中进行多模型推理预测(Model Ensemble)
如有错误,恳请指出。在学习yolov5代码的时候,发现experimental.py文件中有一个很亮眼的模块:Ensemble。接触过机器学习的可能了解到,机器学习的代表性算法是随机森林这种,使用多个模型来并行推理,然后归纳他们的中值或者是平均值来最为整个模型的最后预测结构,没想到的是目标检测中也可以使用,叹为观止。下面就对其进行详细介绍:集成建模是通过使用许多不同的建模算法或使用不同的训练数据集创建多个不同模型来预测结果的过程。使用集成模型的动机是减少预测的泛化误差。只要基础模型是多样且独立的,使用集成方原创 2022-06-01 17:03:01 · 4982 阅读 · 6 评论 -
YOLOv5的Tricks | 【Trick1】关于激活函数Activation的改进汇总
如有错误,恳请指出。在yolov5模型搭建的过程实现中,额外实现了很多非常新奇有趣的激活函数,不再是的简单nn.ReLU等,所以这里使用这篇笔记来对这一些列的激活函数进行总结归纳。关于激活函数,在很早之前我写过一篇笔记介绍,笔记链接:激活函数与Loss函数求导,在这里主要介绍的是目标检测yolov5算法中实现的一些的激活函数,主要设计ReLU函数及其变体,包含ReLU,PReLU,RReLU,FReLU,Swish,Mish,Acon系列,Dynamic ReLU系列。ReLU相比之前的 Sigmoid/t原创 2022-06-01 16:37:06 · 7029 阅读 · 3 评论