以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代码详解相关推荐

  1. 基于机器学习的恶意样本静态检测的代码详解(ember)

    文章目录 1. 类与类之间的关系 2. 每个类的详细分析 2.1 ByteHistogram 2.2 ByteEntropyHistogram 2.3 SectionInfo 2.4 ImportsI ...

  2. yolov7正负样本分配详解

    来源:知乎-骚骚骚 地址:https://zhuanlan.zhihu.com/p/543160484 整体上在正负样本分配中,yolov7的策略算是yolov5和YOLOX的结合. 首先大概回顾一下 ...

  3. YOLOv7 | 模型结构与正负样本分配解析

    如有错误,恳请指出. Yolov7的原作者就是Yolov4的原作者.看论文的时候看到比较乱,这里可能会比较杂乱的记录一下我觉得有点启发的东西.对于yolov7的代码,我也没有仔细的看,只是大概的看了下 ...

  4. yolo 负样本_目标检测正负样本区分策略和平衡策略总结(二)

    0 简介 本文抛弃网络具体结构,仅仅从正负样本区分和正负样本平衡策略进行分析,大体可以分为正负样本定义.正负样本采样和平衡loss设计三个方面,主要是网络预测输出和loss核心设计即仅仅涉及网络的he ...

  5. 来FAL学风控|风控策略分析师的日常是怎样的?(案例+代码详解篇)

    风控策略分析师的日常是怎样的?(案例+代码详解篇) FAL金科应用研究院 做了5年的金融,3年的数据分析工作,从17年6月才真正接触代码,算不到熟练,但在不断的学习和工作实践中目前是可以解决任何问题的 ...

  6. 天津理工大学《操作系统》实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解

    天津理工大学<操作系统>实验二,存储器的分配与回收算法实现,代码详解,保姆式注释讲解 实验内容 1. 本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不 ...

  7. Faster RCNN代码详解(五):关于检测网络(Fast RCNN)的proposal

    在Faster RCNN代码详解(二):网络结构构建中介绍了Faster RCNN算法的网络结构,其中有一个用于生成ROI proposal target的自定义层,该自定义层的输出作为检测网络(Fa ...

  8. Make your own Neural NetWork之代码详解中

    这篇博客接上一篇博客Make Your Own Neural Network之代码详解上.本文也是出自Make your own Neural NetWork这本书.上一篇博客讲了神经网络类的功能模块 ...

  9. 深入浅出吃透多线程、线程池核心原理及代码详解

    一.多线程详解 1.什么是线程 线程是一个操作系统概念.操作系统负责这个线程的创建.挂起.运行.阻塞和终结操作.而操作系统创建线程.切换线程状态.终结线程都要进行CPU调度--这是一个耗费时间和系统资 ...

最新文章

  1. 安装关联vs2008的opencv
  2. A Guide to Python's Magic Methods
  3. 3.Struts2的输入验证
  4. ACF:让控制台程序变得更为简单
  5. Python 基于Python生成短8位唯一id解决方案
  6. BM16 删除有序链表中重复的元素-II
  7. 如何定位和处理手机游戏内存泄露
  8. 5.12 QR分解的阻尼倒数法和正则化方法区别
  9. 微软最新GDI漏洞MS08-052安全解决方案
  10. 大数据分析机器学习(一)之线性模型-年龄和心率关系
  11. linux 乌班图 lnmp环境搭建
  12. 注册(二)之增加绑定
  13. perl脚本 linux,linux – 通过Perl脚本设置环境变量
  14. 海康、大华连接相机失败:未安装USB3驱动或驱动无效
  15. 3G模块驱动运用开发总结
  16. 国际化翻译navigator.language与语种对照表
  17. Win7系统专业版调整屏幕亮度的详细教程--win7w.com
  18. Ant Design of Vue Icon 图标列表
  19. MySQL表连接算法
  20. SQL Server Management Studio(SMSS)删除连接记录

热门文章

  1. 根据WebService地址展示方法列表、入参和返回值(解析wsdl)
  2. 怎么选购海外服务器?
  3. 我的世界观——阿尔伯特·爱因斯坦
  4. 【删文说明】谁说本科妹纸不能拿 BAT SP Offer?
  5. Android安全加密
  6. nfs服务共享目录的创建
  7. Python爬取0复仇者联盟3:无限战争0评论并写入Excel
  8. J storm战队成员_J.Storm战队踢掉队内三号位Forev主动扣分
  9. 详解中断系统 与 中断周期
  10. 阿里国际站新版关键词你升级了吗?