PP-YOLO中的tricks集合
检测中有效的tricks集合,不包括backbone以及数据增广方面的tricks
Github:https://github.com/PaddlePaddle/PaddleDetection
Abstract:
目标检测是计算机视觉中最重要的领域之一,在各种实际场景中发挥着关键作用。由于硬件的限制,在实践中通常必须牺牲精度以确保检测器的推断速度。因此,必须考虑物体检测器的有效性和效率之间的平衡。本文的目的是实现一种可以在实际应用场景中直接应用的具有相对平衡的有效性和效率的目标检测器,而不是提出一种新颖的检测模型。考虑到YOLOv3已在实践中得到广泛应用,我们开发了一种基于YOLOv3的新型目标检测器。我们主要尝试结合各种几乎不增加模型参数和FLOP数量的技巧,以实现在确保速度几乎不变的情况下尽可能提高检测器精度的目标。由于本文中的所有实验都是基于PaddlePaddle进行的,因此我们将其称为PP-YOLO。通过结合多种技巧,PP-YOLO可以在效率(45.2%mAP)和效率(72.9 FPS)之间取得更好的平衡,超越了现有的最新检测器,例如EfficientDet和YOLOv4。
Architecture:
1.Backbone:将yolov3中的darknet53替换为resnet50_vd+DCN
2.Neck:FPN结构
3.Head:FPN的3个层级特征分别输出1个Head,所以输出为3(k+5)。其中,k为类别个数,4为回归的相对坐标,1为Objectness(目标可靠性)的得分
Tricks:
1.Larger Batch Size:由于BN的问题,所以训练采用大的batch size有助于性能提升
2.Exponential Moving Average (EMA):训练模型时,保持训练参数的移动平均值通常是有益的。 使用平均权重参数在评估有时会产生比最终训练值更好的结果。其中公式为:
3.DropBlock:图中的三角形标记,与原始论文不同,本文是将DropBlock应用于检测的Head,因为本文发现将DropBlock添加到Backbone会导致性能下降。 Drop-Block的详细注入点在图2中用“三角形”,即将DropBlock应用在FPN结构中
4.IoU Loss:回归损失函数使用IoU Loss替换yolov3中的L1 loss
5.IoU Aware:yolov3中使用分类得分与objectness分数相乘作为最终的检测置信度,而这不考虑定位的精度,为了解决这个问题,增加了一个IoU预测分支来测量定位的准确性。 在训练过程中,采用IoU感知损失来训练IoU预测分支。 在推论过程中,将预测的IoU乘以分类概率和客观性得分,以计算最终的检测置信度,这与定位精度更加相关。 然后将最终的检测置信度用作后续NMS的输入。
6.Grid Sensitive:
yolov3采用的回归方法如上式,其中x,y是目标中心,s为尺度因子,gx,gy为预测的网格中心整数。显然,x和y不能精确等于s x gx或s x(gx + 1)。 这使得很难预测仅位于网格边界上的边界框的中心。 通过将公式更改如下,其中a设置为1.05,这使模型更容易预测准确位于网格边界上的边界框中心:
7.Matrix NMS:Solov2中提出的速度更快的nms方法,在soft-nms等基础上进行并行化加速,并且性能还略有提升
8.CoordConv:
CoordConv的工作原理是通过使用额外的坐标通道使卷积访问其自身的输入坐标。 CoordConv允许网络学习完整的变换不变性或不同程度的变换依赖性。 考虑到Coord-Conv将向卷积层添加两个输入通道,因此将添加一些参数和FLOP。 为了尽可能减少效率的损失,本文不更改backbone网络中的卷积层,而仅用CoordConv替换了FPN中的1x1卷积层和检测头中的第一个卷积层。 CoordConv的详细注入点在图2中用“钻石”标记
9.SPP:
经典方法之一了,YOLOv4通过串联内核大小为k x k的最大池输出来应用SPP模块,其中k = {1、5、9、13},步长等于1。在这种设计下,相对较大的k x k最大池有效地增加了 骨干特征感受野范围。 详细而言,SPP仅应用于图2中带有“星号”标记的顶部特征图。
10.Better Pretrain Model:好的预训练模型对于性能提升不用多说
Experiments:
PP-YOLO中的tricks集合相关推荐
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词.对于我 ...
- FreeMarker中的list集合前后台代码
freemarker中的list集合前后台代码: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它 ...
- Python中怎样改变集合之间的关系?
Python中怎样改变集合之间的关系?数学中,两个集合关系的常见操作包括:交集.并集.差集.补集.设A,B是两个集合,集合关系的操作介绍如下: 交集是指属于集合A且属于集合B的元素所组成的集合, 并集 ...
- 目标检测中的Tricks
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎 作者 | roger 链接 | https: ...
- Swift中的选项集合
Swift3中的选项集合(Option Set) 作者:Ole Begemann,原文链接,原文日期:2016/09/28 译者:Lanford3_3:校对:saitjr:定稿:CMB 选项集合在OC ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- 【Android 安全】DEX 加密 ( Application 替换 | ActivityThread 中的 mAllApplications 集合添加 Application )
文章目录 一. 当前 Application 替换进度 二. ActivityThread 中的 mAllApplications 集合添加 Application 一. 当前 Application ...
- 多线程环境中安全使用集合API(含代码)
转自: http://blog.csdn.net/ns_code/article/details/17200509 在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于 ...
- Java并发编程(8):多线程环境中安全使用集合API(含代码)
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...
最新文章
- 看清上市公司的财务分析
- cocos creator 游戏源码_Cocos Creator 3D引擎源码阅读之授之以渔 源码阅读
- oracle 生成目录树,jQuery zTree插件快速实现目录树
- 我们怎样确保从大数据计算中获得价值
- 数据库:SQLServer数据库备份方式介绍
- 43request对象 续
- linux bsd命令,科学网—Linux/BSD下join命令使数据以tab为分隔符的方法 - 李雷廷的博文...
- mysql强制安装参数_Mysql编译安装参数优化
- 闭环整流电路matlab仿真,分享:基于双闭环的单相整流器原理简介及仿真验证
- 计算机频繁开机是什么原因,电脑频繁自动重启什么原因
- 取消WIN10上shift键切换中英文输入法的设置
- 谷歌浏览器控制台preview乱码问题及原因
- 手把手教你用Python分析微信聊天内容
- 实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)
- Vue指令 v-for遍历、下拉列表、单选框、复选框
- python中用sympy对变量求偏导
- mysql 重做日志 镜像_mysql重做日志 - osc_vr7hvjd2的个人空间 - OSCHINA - 中文开源技术交流社区...
- Python快速搭建网站
- 自定义android模拟器,在模拟器上运行自定义Android ROM
- 【BYM】Android 实现相机快门动画,hashmap底层实现原理