https://github.com/dmlc/gluon-cv/blob/master/gluoncv/model_zoo/rpn/rpn_target.py

  1. def forward(self, ious):
  2. """RPNTargetSampler is only used in data transform with no batch dimension.
  3. Parameters
  4. ----------
  5. ious: (N, M) i.e. (num_anchors, num_gt).
  6. Returns
  7. -------
  8. samples: (num_anchors,) value 1: pos, -1: neg, 0: ignore.
  9. matches: (num_anchors,) value [0, M).
  10. """
  11. matches = mx.nd.argmax(ious, axis=1)
  12.  
  13. # samples init with 0 (ignore)
  14. ious_max_per_anchor = mx.nd.max(ious, axis=1)
  15. samples = mx.nd.zeros_like(ious_max_per_anchor)
  16.  
  17. # set argmax (1, num_gt)
  18. ious_max_per_gt = mx.nd.max(ious, axis=0, keepdims=True)
  19. # ious (num_anchor, num_gt) >= argmax (1, num_gt) -> mark row as positive
  20. mask = mx.nd.broadcast_greater(ious + self._eps, ious_max_per_gt)
  21. # reduce column (num_anchor, num_gt) -> (num_anchor)
  22. mask = mx.nd.sum(mask, axis=1)
  23. # row maybe sampled by 2 columns but still only matches to most overlapping gt
  24. samples = mx.nd.where(mask, mx.nd.ones_like(samples), samples)
  25.  
  26. # set positive overlap to 1
  27. samples = mx.nd.where(ious_max_per_anchor >= self._pos_iou_thresh,
  28. mx.nd.ones_like(samples), samples)
  29. # set negative overlap to -1
  30. tmp = (ious_max_per_anchor < self._neg_iou_thresh) * (ious_max_per_anchor >= 0)
  31. samples = mx.nd.where(tmp, mx.nd.ones_like(samples) * -1, samples)
  32.  
  33. # subsample fg labels
  34. samples = samples.asnumpy()
  35. num_pos = int((samples > 0).sum())
  36. if num_pos > self._max_pos:
  37. disable_indices = np.random.choice(
  38. np.where(samples > 0)[0], size=(num_pos - self._max_pos), replace=False)
  39. samples[disable_indices] = 0 # use 0 to ignore
  40.  
  41. # subsample bg labels
  42. num_neg = int((samples < 0).sum())
  43. # if pos_sample is less than quota, we can have negative samples filling the gap
  44. max_neg = self._num_sample - min(num_pos, self._max_pos)
  45. if num_neg > max_neg:
  46. disable_indices = np.random.choice(
  47. np.where(samples < 0)[0], size=(num_neg - max_neg), replace=False)
  48. samples[disable_indices] = 0
  49.  
  50. # convert to ndarray
  51. samples = mx.nd.array(samples, ctx=matches.context)
  52. return samples, matches

gluoncv rpn 正负样本的更多相关文章

  1. 正负样本比率失衡SMOTE

    正负样本比率失衡SMOTE [TOC] 背景 这几天测试天池的优惠券预测数据在dnn上面会不会比集成树有较好的效果,但是正负样本差距太大,而处理这种情况的一般有欠抽样和过抽样,这里主要讲过抽样,过抽样 ...

  2. DDBNet:Anchor-free新训练方法,边粒度IoU计算以及更准确的正负样本 | ECCV 2020

    论文针对当前anchor-free目标检测算法的问题提出了DDBNet,该算法对预测框进行更准确地评估,包括正负样本以及IoU的判断.DDBNet的创新点主要在于box分解和重组模块(D&R) ...

  3. RPN网络

    Region Proposal Network RPN的实现方式:在conv5-3的卷积feature map上用一个n*n的sliding window(论文中n=3)生成一个长度为256(ZF网络 ...

  4. NeurIPS 2019 | 基于Co-Attention和Co-Excitation的少样本目标检测

    论文提出CoAE少样本目标检测算法,该算法使用non-local block来提取目标图片与查询图片间的对应特征,使得RPN网络能够准确的获取对应类别对象的位置,另外使用类似SE block的sque ...

  5. 【ROC曲线】关于ROC曲线、PR曲线对于不平衡样本的不敏感性分析说引发的思考

    ROC曲线 在网上有很多地方都有说ROC曲线对于正负样本比例不敏感,即正负样本比例的变化不会改变ROC曲线.但是对于PR曲线就不一样了.PR曲线会随着正负样本比例的变化而变化.但是没有一个有十分具体和 ...

  6. 压缩跟踪(CT)代码具体学习_模块1(样本的採集和扩充)

    本章主要具体解释的是compressive tracking框架中的第一部分:样本的採集和扩充部分. 在開始代码学习的前面,你须要知道的理论知识參见论文:Real-time Compressive T ...

  7. 基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习

    PU learning问题描述 给定一个正例文档集合P和一个无标注文档集U(混合文档集),在无标注文档集中同时含有正例文档和反例文档.通过使用P和U建立一个分类器能够辨别U或测试集中的正例文档 [即想 ...

  8. [ML] 解决样本类别分布不均衡的问题

    转自:3.4 解决样本类别分布不均衡的问题 | 数据常青藤 (组织排版上稍有修改) 3.4 解决样本类别分布不均衡的问题 说明:本文是<Python数据分析与数据化运营>中的“3.4 解决 ...

  9. 负样本采样及bias校准、ctr平滑

    参考:https://zhuanlan.zhihu.com/p/31529643 在CTR预估中,负样本采样是一种常见的特征工程方法.一般CTR预估的原始正负样本比可能达到1:1000~1:10000 ...

随机推荐

  1. Java中HashSet的解读

    一. HashSet源代码 HashSet 的实现   对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的 ...

  2. Spring学习(二)--- Bean 作用域

    概述 本文介绍的Spring 中bean的作用域. 问题 : bean的作用域有几种,有那些应用场景 bean 装配过程 下图为bean在容器中从创建到销毁的若干阶段. bean 作用域 作用域介绍 ...

  3. 后台UI模板开发规范

    AdminLTE模板 在接触新模板之前,需要对bootstrap有初步了解,文档戳这里  主要是了解有哪些控件.样式.元素 可以直接follow使用(形成需要什么的时候直接去查文档的意识,而不是都自己 ...

  4. [编程] C语言结构体指针作为函数参数

    结构体指针作为函数参数:结构体变量名代表的是整个集合本身,作为函数参数时传递的整个集合,也就是所有成员,而不是像数组一样被编译器转换成一个指针.如果结构体成员较多,尤其是成员为数组时,传送的时间和空间 ...

  5. 内嵌Jetty输出debug日志

    Slf4jLog logger = new Slf4jLog(); logger.setDebugEnabled(true); Log.setLog(logger); log4j2.xml中配置如下章 ...

  6. data-id 和 id 的区别

    作者:Zeropoint零点 来源:CSDN 原文:https://blog.csdn.net/qq_41648132/article/details/80364335 版权声明:本文为Zeropoi ...

  7. "Error: ANDROID_HOME is not set and "android" command not in your PATH. You must fulfill at least one of these conditions.".

    设置环境变量 set ANDROID_HOME=C:\\android-sdk-windows set PATH=%PATH%;%ANDROID_HOME%\tools;%ANDROID_HOME%\ ...

  8. Windows安装ActiveMQ记录

    1.下载压缩包(activeMQ应用要基于jdk服务上,安装本软件时,最好已经安装了jdk并且配置好了环境变量) 下载5.12.2版本:http://activemq.apache.org/activ ...

  9. Linux(Ubuntu16.04)下添加新用户

    某些情况下,Ubuntu 使用useradd 新用户名,在home 文件夹下面看不到新创建的用户文件夹,例如: 发现找不到,spark的文件夹,因此将采用下面方式重新建立首先删除spark用户 若想给 ...

  10. 在Qt中使用Font Awesome图标

    官网: http://fontawesome.io/中文网: http://www.fontawesome.com.cn/GitHub: https://github.com/FortAwesome/ ...