【yolov7系列二】正负样本分配策略

6 篇文章 0 订阅
3 篇文章 0 订阅

本文主要就yolov7的正负样本筛选策略,并与yolov5,yolov6进行比对。

首先接着上一篇yolov7系列一,网络整体结构,填几个小坑,希望对大家没有造成困扰:
在这里插入图片描述
如:E-ELAN层,在cat后需要要conv层做特征融合:
在这里插入图片描述
还有SPPCSPC层经大家勘误后,改动如下:
在这里插入图片描述
还有另外几个小问题:如REPconv层在yolov7论文中将identity 层去掉,卷积后的激活函数是SiLu这些,因yolov7网络是基于Tag0.1版本yolov7.yaml的代码构造的,作者后续在持续优化迭代,后续大刀也会继续更新。

**yolov7因为基于anchor based的目标检测,与yolov5相同,yolov6的正负样本的匹配策略则与yolox相同,yolov7则基本集成两家之所长。**下面先回顾下yolov5,v6的正负样本匹配策略。

yolov5的正负样本匹配策略

yolov5基于anchor based,在开始训练前,会基于训练集中gt(ground truth 框),通过k-means聚类算法,先验获得9个从小到大排列的anchor框。先将每个gt与9个anchor匹配(以前是IOU匹配,yolov5中变成shape匹配,计算gt与9个anchor的长宽比,如果长宽比小于设定阈值,说明该gt和对应的anchor匹配)
在这里插入图片描述
如上图为yolov5的网络架构,yolov5有三层网络,9个anchor, 从小到大,每3个anchor对应一层prediction网络,gt与之对应anchor所在的层,用于对该gt做训练预测,一个gt可能与几个anchor均能匹配上。
所以一个gt可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现gt与所有anchor都匹配不上的情况,这样gt就会被当成背景,不参与训练,说明anchor框尺寸设计的不好。

在训练过程中怎么定义正负样本呢,因为yolov5中负样本不参与训练,所以要增加正样本的数量。gt框与anchor框匹配后,得到anchor框对应的网络层的grid,看gt中心点落在哪个grid上,不仅取该grid中和gt匹配的anchor作为正样本,还取相邻的的两个grid中的anchor为正样本。

如下图所示**,绿色的gt框中心点落在红色grid的第三象限里,那不仅取该grid,还要取左边的grid和下面的grid,**这样基于三个grid和匹配的anchor就有三个中心点位于三个grid中心点,长宽为anchor长宽的正样本,同时gt不仅与一个anchor框匹配,如果跟几个anchor框都匹配上,所以可能有3-27个正样本,增大正样本数量。

在这里插入图片描述

yolov6的正负样本匹配策略

yolov6的正负样本匹配策略同yolox,yolovx因为是anchor free,anchor free因为缺少先验框这个先验知识,理论上应该是对场景的泛化性更好,同时参见旷视的官方解读:Anchor 增加了检测头的复杂度以及生成结果的数量,将大量检测结果从NPU搬运到CPU上对于某些边缘设备是无法容忍的。

yolov6中的正样本筛选,主要分成以下几个部分:
①:基于两个维度来粗略筛选;
②:基于simOTA进一步筛选。

具体步骤如下:
在这里插入图片描述
tie标签的gt如图所示,找到gt的中心点(Cx,Cy),计算中心点到左上角的距离(l_l,l_t),右下角坐标(l_r,l_b),然后从两步筛选正样本:

第一步粗略筛选第一个维度是如果grid的中心点落在gt中,则认为该grid所预测的框为正样本,如图所示的红色和橙色部分**,第二个维度是**以gt的中心点所在grid的中心点为中心点,上下左右扩充2.5个grid步长范围内的grid,则默认该grid所预测的框为正样本,如图紫色和橙色部分。这样第一步筛选出31个正样本(注:这里单独一层的正样本,yolov6有三个网络层,分别计算出各层的正样本,并叠加)。
在这里插入图片描述
第二步:通过SimOTA进一步筛选:

SimOTA是基于OTA的一种优化,OTA是一种动态匹配算法,具体参见旷视官方解读(https://www.zhihu.com/question/473350307/answer/2021031747)

SimOTA流程如下:
①计算初筛正样本与gt的IOU,并对IOU从大到小排序,取前十之和并取整,记为b。
②计算初筛正样本的cos代价函数,将cos代价函数从小到大排列,取cos前b的样本为正样本。
同时考虑同一个grid预测框被两个gt关联的情况,取cos较小的值,该预测框为对应的gt的正样本。
具体细节可以参考江大白的知乎文章:https://www.zhihu.com/search?type=content&q=simOTA

yolov7的正负样本匹配策略

yolov7因为基于anchor based , 集成v5和v6两者的精华,即yolov6中的第一步的初筛换成了yolov5中的筛选正样本的策略,保留第二步的simOTA进一步筛选策略。

同时yolov7中有aux_headlead_head 两个head ,aux_head做为辅助,其筛选正样本的策略和lead_head相同,但更宽松。如在第一步筛选时,lead_head 取中心点所在grid和与之接近的两个grid对应的预测框做为正样本,如图绿色的grid, aux_head则取中心点以及周围的4个预测框为正样本。如下图绿色+蓝色区域的grid.
在这里插入图片描述
同时在第二步simOTA部分,lead_head 是计算初筛正样本与gt的IOU,并对IOU从大到小排序,取前十之和并取整,记为b。aux_head 则取前二十之和并取整。其他步骤相同,aux_head主要是为了增加召回率,防止漏检,lead_head再基于aux_head 做进一步筛选。

以上为yolov7的正负样本的匹配策略,希望对大家有帮助。同时文中如果有bug,欢迎一起讨论。

最后如果大家需文中ppt使用,请关注公众号后台添加微信,领取,备注“ppt”。

参考:
[1] https://github.com/WongKinYiu/yolov7(官方github代码)
[2] https://arxiv.org/pdf/2207.02696.pdf(yolov7论文)
[3] ]https://zhuanlan.zhihu.com/p/39
[4]YOLOv7官方开源 | Alexey Bochkovskiy站台,精度速度超越所有YOLO,还得是AB (qq.com)
[5] 如何评价旷视开源的YOLOX,效果超过YOLOv5?

  • 11
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
YoloV5中,正样本和负样本是根据目标检测中的正负样本不均衡问题来定义的。正样本是指与真实目标有较高IoU(交并比)的anchor box,而负样本是指与真实目标的IoU较低的anchor box。\[1\]为了解决正负样本不均衡问题,YoloV5采用了一些策略。首先,每个目标只有一个正样本,通过最大IoU匹配策略选取出来的anchor box被视为正样本。\[3\]其次,IoU小于0.2的anchor box被视为负样本。除了正负样本,其余的anchor box被视为忽略样本。\[3\]正样本用于分类和回归的学习,负样本用于置信度confidence的学习,而忽略样本则不参与训练。\[3\]这样的定义可以帮助提高网络的收敛效率和检测精度。\[1\]总的来说,YoloV5通过调整正负样本的定义来解决正负样本不均衡问题,从而提升目标检测的性能。\[2\] #### 引用[.reference_title] - *1* [【YOLOv5】正样本分配详解](https://blog.csdn.net/u013066730/article/details/126969286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [YOLOv3/v5/v4/x中正负样本的定义](https://blog.csdn.net/weixin_43850171/article/details/123380975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值