1. Anchor

可以根据实际任务,修改anchor预设的大小和scale ,也就是说stride + anchor ratio + anchor scales都可以调整,选择不同stride确定了feature map的大小,stride就是说下采样的比例,4就是256*256变成64*64,ratio确定了纵横比和尺度。

2. IoU loss与focal loss

  • IoU loss:用来计算pred box与ground true之间的差异,用来边界框损失函数的计算;
  • focal loss:用来平衡正负样本不均衡的问题,由RetinaNet提出使用与One-Step目标检测算法上的一个技巧

IOU的进化史可以分为Smooth L1 loss、iou loss、giou loss、diou loss、ciou loss, α-iou

具体那个IOU可以查一下

focal loss 出资retinanet,计算流程如下:

focal loss也有一些问题,如果让模型过多关注 难分样本 会引发一些问题,比如样本中的离群点(outliers),已经收敛的模型可能会因为这些离群点还是被判别错误,总而言之,我们不应该过多关注易分样本,但也不应该过多关注难分样本

focal loss变体 :

  • Equalized Focal Loss:Equalized Focal Loss for Dense Long-Tailed Object Detection

就是说focal对于所有的类都一样,而这里认为存在不同类别的正负样本不均衡性的问题,意思就是,对于长尾数据集中的长尾数据来说,正样本更少了,意思是正负样本就更不均衡了,所以需要r变大点,对稀少样本的负样本加以抑制,所以rb就是focal中的r,多了一个rvj就是说对于不同的类别设置的不同,对于稀少样本rvj更大

这里借鉴一篇其他论文的思想,用正负样本的梯度累计来做,对于正负样本均衡的gj就大,对于稀少的样本gj就小,为了满足,我们把限制到[0,1]范围内。超参数s用来缩放EFL中的的上限。

但是这又带来了新的问题,对于相同的,γ越大,loss越小。这导致了当我们想要更加关注一个类别的训练的时候,我们不得不牺牲掉其loss在整个训练过程中的贡献。这导致了稀少类别无法取得更好的效果。也就是说,原本的稀少样本的loss,因为更大的r,确实对于负样本抑制了,但是同时正样本也更小了,整体稀少样本对于loss的贡献更小了,这有肯定不行

所以就有前面这一坨,可以看到r越大,那么EFL对于稀少类别的loss的贡献显著增加了。

  • cyclical focal loss:提出一种新颖的cyclical focal loss,并证明它是比交叉熵 softmax 损失或focal loss更通用的损失函数,为平衡、不平衡或长尾数据集提供了卓越的性能。
虽然已经发现focal loss损失在具有不平衡类数据的任务中是有益的,但它通常会在使用更平衡的数据集进行训练时降低性能。因此,对于大多数应用来说,focal loss 并不能很好地替代 cross-entropysoftmax 损失。

核心一段话,就是说开始和后期对于简单样本加权,中期开始着重训练困难样本,

看起来很扯,就是把focal中的剪换成加,那这样做的意义在于 看图

意义在于如下:

意思就是说根据这个循环学习的原理来说,刚开始你这个模型还不太行的时候,就是要靠这个简单的样本来优化,到训练中期才是利用困难样本去提高模型的泛化性。当困难样本学的差不多了,学的很牛了,最后再去学习这个简单样本,更深层次的挖掘一些信息。

所以最后的公式就是

可以看到ei是当前的epoch,en是总共的,fc大于1,开始和结束时,3的值很大,也就是hc的loss比重更大,更注重简单样本,中期lc的比重更大,注重困难样本。

  • GHM(gradient harmonizing mechanism) :paper Gradient Harmonized Single-stage Detector

核心图,首先文章的出发点意思是Focal Loss是从置信度p的角度入手衰减loss,而GHM是一定范围置信度p的样本数量的角度衰减loss。什么意思?

看第一个图:我们确实不应该过多关注易分样本,但是特别难分的样本(outliers,离群点)也不该关注。也就是最困难的样本       

3. 样本不平衡问题:

ATSS: Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection

这篇文章就是首先探讨了一下anchor base和anchor free的区别,经过一系列实验证明,主要是在于正负样本的选择策略差异导致的。

首先,作者拿retinanet和focos两种检测模型作为对比,尽可能的消除两者的差异

主要是一些tricks上的差异

这样二者之间的gap只有0.8了,而这0.8的gap可能来自于两点:

1. 就是正负样本选择的差异

2. Regression的方式不同,一个基于anchor,一个基于point。

retinanet其回归的基点是anchor,首先要判定哪些anchor是正样本,哪些anchor是负样本,然后在正样本anchor的基础上再做位置的回归。而判定anchor是否是正样本,是通过计算anchor和groundtruth的IoU来完成的,这样做的缺陷很明显,anchor是正样本还是负样本非常受限于anchor的设计,比如第一行RetinaNet中可以看到,蓝色的groundtruth包含了6个anchors,但是受限于anchor的大小,他们的IoU没有达到阈值要求,因此这些anchor都被判定成了负样本,显然这样是不太合理的。

而对于FCOS,作为center-base的方式,是通过判定feature上的每个点是否落入到groundtruth中来判定正负样本的,很显然这样就摆脱了类似于anchor这种受限于hard-craft的缺陷, 这也是FCOS效果优于RetinaNet的原因:基于center的方式,能够更有效的选取更多的正样本(不过其实这个点在FCOS的论文中也有提到过)。

对于回归来说,retinanet通过回归框,而fcos通过回归中心点到边的距离

于是乎,作者又做了一些交叉验证

发现相同的正负样本定义下的RetinaNet和FCOS性能几乎一样,不同的定义方法性能差异较大,而回归初始状态对性能影响不大。所以,基本可以确定正负样本的确定方法是影响性能的重要一环。

atss的具体流程为

       侵删

这样就是anchor base也考虑到了中心点

参考连接解决样本不平衡Ⅱ——ATSS - 知乎

UMOP: Progressive Hard-case Mining across PyramidLevels for Object Detection

之前的平衡正负样本的方法都是旨在如何定义正样本的出发点去解决正负样本的不平衡情况,不论是Focal Loss还是ATSS都是巧妙的设计定义了正样本的选择,那么当针对不同层级上的正负样本不平衡情况,也就是说基于FPN不同的层存在正负样本不平衡的问题

作者通过实验证明FPN的性能在一定程度上受到特征层级之间不平衡问题的限制。

可以看到不同的FPN层,正负样本不一致。不同层级的标签分布不同,每个模型的P7在训练过程中更有可能获得正样本作者认为固定超参数设置的Focal loss不能同时对所有金字塔级别进行良好的权衡

为缓解Level Imbalance影响,本文提出一种UMOP(Unified Multi-level Optimization Paradigm),它包含两个成分:

  • 基于不同层级目标重采样考量,对每个层级特征添加独立分类损失进行监督
  • 提出一种跨金字塔层级的难例挖掘损失,且不会引入额外的层级相关设置

具体公式细节: https://www.zhihu.com/people/li-hong-58-80

Progressive Hard-case Mining across Pyramid Levels in Object Detection论文阅读_Laughing-q的博客-CSDN博客

后续还有更牛的simOTA,YOLOX深度解析(二)-simOTA详解 - 知乎

4. 目标检测tricks

目标检测比赛中的tricks(已更新更多代码解析) - 知乎

AI大视觉(二十) | 小目标检测的tricks汇总 - 知乎

目标检测tricks总结(记录)相关推荐

  1. 目标检测tricks(基于detectron2)

    目标检测tricks(基于detectron2) 正确尝试 裁剪 由于目标相对于整张图片来说过小,所以对数据进行裁剪(除了裁剪尺寸还需要关注重叠尺寸,重叠尺寸稍微大一些,尽量保持每个目标有完整的存在, ...

  2. 使用Yolo3进行目标检测实现流程记录1

    上个月需要使用目标检测进行项目开发,简单了解了下目标检测的技术之后,果断选择使用yolo来进行尝试. 在查看了无数篇博客之后,头疼脑热,各种花样的问题之后,果断记录了自行爬坑的过程,希望对后续使用yo ...

  3. DETR目标检测算法学习记录

    引言 无论是One Stage中的YOLO还是Two-Stage中的Faster-RCNN,其虽然都在目标检测领域有着一席之地,但无一例外都是基于Anchor的模型算法,这就导致其在输出结果时不可避免 ...

  4. 【目标检测--tricks】FPN和PAN

    一.FPN结构 FPN结构图: FPN通过利用常规CNN模型内部从底至上各个层对同一scale图片不同维度的特征表达结构,提出了一种克有效在单一图片视图下生成对其的多维度特征表达的方式.它可以有效地赋 ...

  5. 目标检测比赛中的tricks集锦

    ↑ 点击蓝字 关注视学算法 作者丨初识CV@知乎 来源丨https://zhuanlan.zhihu.com/p/102817180 编辑丨极市平台 极市导读 本文总结了目标检测比赛中的8点技巧,包含 ...

  6. 目标检测-识别提升方法记录

    目标检测提升方法记录 1. 添加预训练(imagenet/coco),增强模型泛化能力,缓解过拟合,减少误检(很有用),无副作用.(实验证明,如果有强数据增强,训练数据集又比较多,可以用上次的最优模型 ...

  7. 大盘点|YOLO 系目标检测算法总览

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 YOLO目标检测算法诞生于2015年6月,从出生的那一天起就是"高精度.高效率.高实用性&q ...

  8. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)

    1 小目标检测: 综述: 综述论文Augmentation for small object detection 深度学习笔记(十)Augmentation for small object dete ...

  9. .val()数据乱码_【目标检测数据集】PASCAL VOC制作

    [VOC2007+2012] 数据集地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/ PASCAL VOC为图像识别和分类提供了一 ...

最新文章

  1. Java序列化和反序列化小记
  2. 总结一些关于操作数据库是sql语句还是存储过程问题
  3. HDU2087剪花布条
  4. springmvc +bootstrap创建简单web项目
  5. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)
  6. Android支持横行滚动的ListView控件
  7. scrapy常用工具备忘
  8. quartus管脚分配后需要保存吗_嵌入式必须会的一些硬件面试题,要试一试吗?你过来呀!...
  9. Golang 学习笔记(08)—— 文件操作
  10. 实战操作主机角色转移(二)
  11. 编译指令#pragma详解
  12. 微信小程序云开发———云存储
  13. 各个国家 不同字符集的unicode 编码范围
  14. ts封装,H264和aac 封装成为ts,并生成m3u8
  15. 继小米机器狗、特斯拉机器人后,小鹏汽车发布智能机器马:真的能骑!
  16. Redis篇之解决redis从节点无法写入数据问题
  17. 142_git的一个比较详细的教程
  18. 射频模块(可读写二代证ID)
  19. 【算法】【题解】【usaco】 最受欢迎的牛
  20. linux下的云盘软件下载,360安全云盘linux版下载

热门文章

  1. qt5实现pdf阅读器(三)——pdfjs
  2. DWG格式文件转DWF格式
  3. Kubernetes 容器安全 最小特权原则POLP AppArmor限制容器对资源访问
  4. 【Leetcode】2281. Sum of Total Strength of Wizards
  5. 与曾宪寿共探中医应用属性数学之路一(作者:赵致生)
  6. 生成批量数据 - 方法4 (时间序列)
  7. android学习日记 RecyclerView的简单使用
  8. 蓝牙计算机操作与设置在哪里,ThinkPad蓝牙的设置方法步骤
  9. 读书笔记-城市道路交通信号区域均衡控制方法及应用研发
  10. [oeasy]python0048_注释_comment_设置默认编码格式