yolox的正负样本分配策略mmdet代码详解
以mmdet为例,正负样本分配的核心代码在YOLOXHead中的MlvlPointGenerator,SimOTTAssigner,PseudoSampler,_bbox_decode中,其中核心代码在SimOTTAssigner.
yolox是解耦头,输入fpn之后给出的是cls_score:(8,2,80,80),(8,2,40,40),(8,2,20,20),bbox_pred:(80,4,80,80),(80,4,40,40),(80,4,20,20),objectness:(80,1,80,80),(80,1,40,40),(80,1,20,20),3个特征图,每个特征图都有3个head,不再组装成一个长head。
1.MlvlPointGenerator.grid_prior
这里面不存在对每个网格生成anchor的操作,yolox是anchor-free的,这里面anchor的生成实际上是点的生成,一共生成了80*80+40*40+20*20=8400个网格点,或者叫大小为1的anchor,同fcos。
2._bbox_decode
对预测分支的预测值和前面生成的点做了组合。
3.YOLOXHead.SimOTTAssigner
yolox的核心,如何给8400个特征图上的点,原图上的框进行正负样本的分配
1.计算所有在gt bbox内部的anchor点的掩码is_in_gts_all;
2.利用center_radius阈值重新计算在gt bbox中心center_radius范围内的anchor点掩码is_in_centers_all;
3.两个掩码取并集得到在gt bbox内部或处于center_radius范围内的anchor点的掩码is_in_boxes_anchor,同时可以取交集得到每个gt bbox和哪些anchor点符合gt bbox内部和处于center_radius范围内的is_in_boxes_and_centers
若此时获取到is_in_gts_or_center:8400,is_In_boxes_and_center:1596,58
1.valid_mask是前面计算出的is_in_boxes_anchor,如果某个位置是True代表anchor点是前景即落在gt bbox内部或者在距离gt bbox中心center_radius半径范围内,这些True位置就是正样本候选点
2.利用valid_mask提取对应的预测信息,num_gt是58,一共提取了1596个候选预测位置,则每个gt bbox都会提取1596个候选位置
3.计算候选预测框和gt bbox的配对iou,然后加log和负数,变成iou的代价函数
4.计算候选框和gt bbox的配对分类代价,同时考虑了objectness预测分支,并且其分类cost在binary_cross_entropy前有开根号的训练trick,
5.is_in_boxes_and_center是(1596,58),如果某个位置是True表示anchor点落在gt bbox内部并且在距离gt bbox中心center radius半径范围内。在计算代价函数时,如果改预测点是False,表示不在交集内部,那么不太可能是候选点,所以给予一个非常大的权重100000,该操作可以保证每个gt bbox最终选择的候选点不会在交集外部
SimOTTAssigner.dynamic_k_matching
4.PseudoSampler.sample
5.loss
yolox的正负样本分配策略mmdet代码详解相关推荐
- 基于机器学习的恶意样本静态检测的代码详解(ember)
文章目录 1. 类与类之间的关系 2. 每个类的详细分析 2.1 ByteHistogram 2.2 ByteEntropyHistogram 2.3 SectionInfo 2.4 ImportsI ...
- yolov7正负样本分配详解
来源:知乎-骚骚骚 地址:https://zhuanlan.zhihu.com/p/543160484 整体上在正负样本分配中,yolov7的策略算是yolov5和YOLOX的结合. 首先大概回顾一下 ...
- YOLOv7 | 模型结构与正负样本分配解析
如有错误,恳请指出. Yolov7的原作者就是Yolov4的原作者.看论文的时候看到比较乱,这里可能会比较杂乱的记录一下我觉得有点启发的东西.对于yolov7的代码,我也没有仔细的看,只是大概的看了下 ...
- yolo 负样本_目标检测正负样本区分策略和平衡策略总结(二)
0 简介 本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为正负样本定义.正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的he ...
- 来FAL学风控|风控策略分析师的日常是怎样的?(案例+代码详解篇)
风控策略分析师的日常是怎样的?(案例+代码详解篇) FAL金科应用研究院 做了5年的金融,3年的数据分析工作,从17年6月才真正接触代码,算不到熟练,但在不断的学习和工作实践中目前是可以解决任何问题的 ...
- 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解
天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...
- Faster RCNN代码详解(五):关于检测网络(Fast RCNN)的proposal
在Faster RCNN代码详解(二):网络结构构建中介绍了Faster RCNN算法的网络结构,其中有一个用于生成ROI proposal target的自定义层,该自定义层的输出作为检测网络(Fa ...
- Make your own Neural NetWork之代码详解中
这篇博客接上一篇博客Make Your Own Neural Network之代码详解上.本文也是出自Make your own Neural NetWork这本书.上一篇博客讲了神经网络类的功能模块 ...
- 深入浅出吃透多线程、线程池核心原理及代码详解
一.多线程详解 1.什么是线程 线程是一个操作系统概念.操作系统负责这个线程的创建.挂起.运行.阻塞和终结操作.而操作系统创建线程.切换线程状态.终结线程都要进行CPU调度--这是一个耗费时间和系统资 ...
最新文章
- 安装关联vs2008的opencv
- A Guide to Python's Magic Methods
- 3.Struts2的输入验证
- ACF:让控制台程序变得更为简单
- Python 基于Python生成短8位唯一id解决方案
- BM16 删除有序链表中重复的元素-II
- 如何定位和处理手机游戏内存泄露
- 5.12 QR分解的阻尼倒数法和正则化方法区别
- 微软最新GDI漏洞MS08-052安全解决方案
- 大数据分析机器学习(一)之线性模型-年龄和心率关系
- linux 乌班图 lnmp环境搭建
- 注册(二)之增加绑定
- perl脚本 linux,linux – 通过Perl脚本设置环境变量
- 海康、大华连接相机失败:未安装USB3驱动或驱动无效
- 3G模块驱动运用开发总结
- 国际化翻译navigator.language与语种对照表
- Win7系统专业版调整屏幕亮度的详细教程--win7w.com
- Ant Design of Vue Icon 图标列表
- MySQL表连接算法
- SQL Server Management Studio(SMSS)删除连接记录