gluoncv rpn 正负样本

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

    def forward(self, ious):
        """RPNTargetSampler is only used in data transform with no batch dimension.
        Parameters
        ----------
        ious: (N, M) i.e. (num_anchors, num_gt).
        Returns
        -------
        samples: (num_anchors,) value 1: pos, -1: neg, 0: ignore.
        matches: (num_anchors,) value [0, M).
        """
        matches = mx.nd.argmax(ious, axis=1)

        # samples init with 0 (ignore)
        ious_max_per_anchor = mx.nd.max(ious, axis=1)
        samples = mx.nd.zeros_like(ious_max_per_anchor)

        # set argmax (1, num_gt)
        ious_max_per_gt = mx.nd.max(ious, axis=0, keepdims=True)
        # ious (num_anchor, num_gt) >= argmax (1, num_gt) -> mark row as positive
        mask = mx.nd.broadcast_greater(ious + self._eps, ious_max_per_gt)
        # reduce column (num_anchor, num_gt) -> (num_anchor)
        mask = mx.nd.sum(mask, axis=1)
        # row maybe sampled by 2 columns but still only matches to most overlapping gt
        samples = mx.nd.where(mask, mx.nd.ones_like(samples), samples)

        # set positive overlap to 1
        samples = mx.nd.where(ious_max_per_anchor >= self._pos_iou_thresh,
                              mx.nd.ones_like(samples), samples)
        # set negative overlap to -1
        tmp = (ious_max_per_anchor < self._neg_iou_thresh) * (ious_max_per_anchor >= 0)
        samples = mx.nd.where(tmp, mx.nd.ones_like(samples) * -1, samples)

        # subsample fg labels
        samples = samples.asnumpy()
        num_pos = int((samples > 0).sum())
        if num_pos > self._max_pos:
            disable_indices = np.random.choice(
                np.where(samples > 0)[0], size=(num_pos - self._max_pos), replace=False)
            samples[disable_indices] = 0  # use 0 to ignore

        # subsample bg labels
        num_neg = int((samples < 0).sum())
        # if pos_sample is less than quota, we can have negative samples filling the gap
        max_neg = self._num_sample - min(num_pos, self._max_pos)
        if num_neg > max_neg:
            disable_indices = np.random.choice(
                np.where(samples < 0)[0], size=(num_neg - max_neg), replace=False)
            samples[disable_indices] = 0

        # convert to ndarray
        samples = mx.nd.array(samples, ctx=matches.context)
        return samples, matches

原文地址:https://www.cnblogs.com/TreeDream/p/10192410.html

时间: 2024-10-02 06:58:33

gluoncv rpn 正负样本的相关文章

正负样本不平衡处理方法总结【转】

转自:watersink 1, Bootstrapping,hard negative mining最原始的一种方法,主要使用在传统的机器学习方法中.比如,训练cascade类型分类模型的时候,可以将每一级分类错误的样本继续添加进下一层进行训练. 比如,SVM分类中去掉那些离分界线较远的样本,只保留离分界线较近的样本. 2, heuristic sampling 标准的faster-RCNN中,假设正样本IOU(0.7~1.0).负样本IOU(0.1~0.3),hard 负样本IOU(0.0~0

人脸检測流程及正负样本下载

人脸检測做训练当然能够用OpenCV训练好的xml.可是岂止于此.我们也要动手做! ~ 首先是样本的选取. 样本的选取非常重要.找了非常久才发现几个靠谱的. 人脸样本:http://www.vision.caltech.edu/Image_Datasets/Caltech_10K_WebFaces/   网上抓取的逾10,000个人脸样本 http://vis-www.cs.umass.edu/lfw/  13.000个人脸 负样本(背景环境衣服动物乱七八糟的):http://groups.cs

人脸检测流程及正负样本下载

人脸检测做训练当然可以用OpenCV训练好的xml,但是岂止于此.我们也要动手做!~ 首先是样本的选取.样本的选取很重要,找了很久才发现几个靠谱的. 人脸样本:http://www.vision.caltech.edu/Image_Datasets/Caltech_10K_WebFaces/   网上抓取的逾10,000个人脸样本 http://vis-www.cs.umass.edu/lfw/  13,000个人脸 负样本(背景环境衣服动物乱七八糟的):http://groups.csail.

压缩跟踪(CT)代码详细学习_模块1(样本的采集和扩充)

本章主要详解的是compressive tracking框架中的第一部分:样本的采集和扩充部分. 在开始代码学习的前面,你需要知道的理论知识参见论文:Real-time Compressive Tracking.理论理解可以参见我的博客:http://blog.csdn.net/ikerpeng/article/details/19826409 . 这个模块中你需要知道一个基本的概念:代码里面几个变量指的是什么.上一张图: 也许你现在还不知道他们是什么,直接贴代码了.相信有我的注释你一定会懂的.

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

ROC曲线 在网上有很多地方都有说ROC曲线对于正负样本比例不敏感,即正负样本比例的变化不会改变ROC曲线.但是对于PR曲线就不一样了.PR曲线会随着正负样本比例的变化而变化.但是没有一个有十分具体和严谨地对此做出过分析和论证(至少我没有找到). 此处记为结论1: 结论1:PR曲线会随着正负样本比例的变化而变化:但是ROC曲线不会. 此处我就这一问题进行了详细的分析论证,并在这个过程中引发了很多思考. 首先,如何分析这个问题呢? 看下ROC曲线是由TPR和FPR组成的 下面我们这样来分析这个问题

opencv训练分类器样本处理

分类器的训练以分为以下三部进行: 1. 样本的创建 2. 训练分类器 3. 利用训练好的分类器进行目标检测. 对检测物体要确定其属性:是否为绝对刚性的物体,也就是检测的目标是一个固定物体,没有变化(如特定公司的商标),这样的物体只要提供一份样本就可以进行训练. 但绝大数时候我们想进行训练的目标是非绝对刚性的物体,如对人的检测,包括人脸识别.手势识别. 样本:分为正样本---------负样本 正样本处理步骤: 所谓所谓正样本就是只包含检测目标的图片(最好背景一致),对于这我个人认为最好是检测目标

【转】解决样本类别分布不均衡的问题

3.4 解决样本类别分布不均衡的问题 说明:本文是<Python数据分析与数据化运营>中的“3.4 解决样本类别分布不均衡的问题”. -----------------------------下面是正文内容-------------------------- 所谓的不平衡指的是不同类别的样本量异非常大.样本类别分布不平衡主要出现在分类相关的建模问题上.样本类别分布不均衡从数据规模上可以分为大数据分布不均衡和小数据分布不均衡两种. 大数据分布不均衡.这种情况下整体数据规模大,只是其中的少样本类的

机器学习-样本不均衡问题处理

在机器学习中,我们获取的数据往往存在一个问题,就是样本不均匀.比如你有一个样本集合,正例有9900个,负例100个,训练的结果往往是很差的,因为这个模型总趋近于是正例的. 就算全是正那么,也有99%的准确率,看起来挺不错的,但是我们要预测的负样本很可能一个都预测不出来. 这种情况,在机器学习中有三个处理办法,过采样.欠采样.再平衡(再缩放) 过采样:增加一些数据数据,使得正反例数量一致,比如这里,我们增加负例9800个,若单纯复制这100个负例,则很可能会导致多重共线性问题,所以实际的处理方法一

机器学习中样本不平衡的处理方法

在现实收集的样本中,正负类别不均衡是现实数据中很常见的问题.一个分类器往往 Accuracy 将近90%,但是对少数样本的判别的 Recall 却只有10%左右.这对于我们正确找出少数类样本非常不利. 举例来说:在一波新手推荐的活动中,预测用户是否会注册的背景下,不注册的用户往往是居多的,这个正负比例通常回事1:99甚至更大.一般而言,正负样本比例超过1:3,分类器就已经会倾向于负样本的判断(表现在负样本Recall过高,而正样本 Recall 低,而整体的 Accuracy依然会有很好的表现)