anchor_target_layer中的bounding regression

在anchor_target层,这两行是计算bounding regression代码:

bbox_targets = np.zeros((len(inds_inside), 4), dtype=np.float32)
bbox_targets = _compute_targets(anchors, gt_boxes[argmax_overlaps, :])
def _compute_targets(ex_rois, gt_rois):
    """Compute bounding-box regression targets for an image."""

    assert ex_rois.shape[0] == gt_rois.shape[0]
    assert ex_rois.shape[1] == 4
    assert gt_rois.shape[1] == 5

    return bbox_transform(ex_rois, gt_rois[:, :4]).astype(np.float32, copy=False)

以下是bounding regression的计算公式:

def bbox_transform(ex_rois, gt_rois):
    ex_widths = ex_rois[:, 2] - ex_rois[:, 0] + 1.0
    ex_heights = ex_rois[:, 3] - ex_rois[:, 1] + 1.0
    ex_ctr_x = ex_rois[:, 0] + 0.5 * ex_widths
    ex_ctr_y = ex_rois[:, 1] + 0.5 * ex_heights

    gt_widths = gt_rois[:, 2] - gt_rois[:, 0] + 1.0
    gt_heights = gt_rois[:, 3] - gt_rois[:, 1] + 1.0
    gt_ctr_x = gt_rois[:, 0] + 0.5 * gt_widths
    gt_ctr_y = gt_rois[:, 1] + 0.5 * gt_heights

    targets_dx = (gt_ctr_x - ex_ctr_x) / ex_widths
    targets_dy = (gt_ctr_y - ex_ctr_y) / ex_heights
    targets_dw = np.log(gt_widths / ex_widths)
    targets_dh = np.log(gt_heights / ex_heights)

    targets = np.vstack(
        (targets_dx, targets_dy, targets_dw, targets_dh)).transpose()
    return targets

bbox_targets存储的是anchor和gt之间的bouding regression,并且将作为这一层的一个输出,输出到rpn_loss_bbox。

rpn_loss_bbox的另一个输入是

实际上,

rpn_loss_bbox就是rpn损失函数的第二部分,也就是计算框损失的部分。论文中的两个输入是ti和ti*,我本以为ti和ti*是两个框的4个坐标(即左上右下)。但实际看代码发现,ti是

rpn_bbox_pred,

是一个feature map(即特征向量)。ti*是anchor和gt bounding box regression的结果(即△x,△y,△w,△h)。这样也可以看出rpn_bbox_pred不是直接生成的roi坐标,而是feature map。

时间: 2024-11-05 23:22:57

anchor_target_layer中的bounding regression的相关文章

在matlab中实现线性回归和logistic回归

本文主要讲解在matlab中实现Linear Regression和Logistic Regression的代码,并不涉及公式推导.具体的计算公式和推导,相关的机器学习文章和视频一大堆,推荐看Andrew NG的公开课. 一.线性回归(Linear Regression) 方法一.利用公式 : function [ theta ] = linearReg() %线性回归. X=[1 1;1 2;1 3;1 4]; %注意第一列全为1,即x0=1,第二列才为x1 Y=[1.1;2.2;2.7;3.

SparkMLlib之 logistic regression源码分析

最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其理论部分参考:http://www.cnblogs.com/ljy2013/p/5129610.html 下面我们跟随我的demo来一步一步解剖源码,首先来看一下我的demo: 1 package org.apache.spark.mllib.classification 2 3 import or

Linear Regression总结

转自:http://blog.csdn.net/dongtingzhizi/article/details/16884215 Linear Regression总结 作者:洞庭之子 微博:洞庭之子-Bing (2013年11月) 关于linear regression,Andrew Ng老师的课程中介绍了两种方法:gradient descent(梯度下降法)和normal equation,<机器学习实战>中直接使用的normal equation及其改进方法,本文记录对着两种方法的学习笔记

rcnn -&gt;fast rcnn-&gt;faster rcnn物体检测论文

首先rcnn,和fast rcnn都比较好理解 fast rcnn其实就是roi+clc+bbox regression faster rcnn是rpn(region proposal network)+ fast rcnn,最后两个网络是迭代训练 本弱找到一篇讲解faster rcnn比较好都博文,所以就速速搬过来了: 缩进经过RCNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCN已经将特征抽取(feat

faster-rcnn原理及相应概念解释

R-CNN --> FAST-RCNN --> FASTER-RCNN R-CNN: (1)输入测试图像: (2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal: (3)将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,将CNN的fc7层的输出作为特征: (4)将每个Region Proposal提取的CNN特征输入到SVM进行分类: (5)对于SVM分好类的Region Proposal做边

论文笔记:Fast(er) RCNN

在 RCNN 初步试水取得成功后,研究人员又迅速跟进,针对 RCNN 中的几点不足提出改进,接连推出了 fast-rcnn 和 faster-rcnn.关于这两篇论文,网上相关的文章实在是多如牛毛,因此,本篇博文不打算深入讲解,只是不落俗套地介绍一下它们改进的痛点,基本流程,以及我自己对一些小问题的理解. RCNN 的问题 我们先回忆一下 RCNN 做了哪些事情: Selective Search 选出候选区域(region proposal): CNN 对这些区域提取特征: SVM 对 CNN

Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结

Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.html Exercise 2:Logistic Regression---实现一个逻辑回归 问题描述:用逻辑回归根据学生的考试成绩来判断该学生是否可以入学. 这里的训练数据(training instance)是学生的两次考试成绩,以及TA是否能够入学的决定(y=0表示成绩不合格,不予录取:y=1表示录

感知机的简单理解

一,感知机模型 1,超平面的定义 令w1,w2,...wn,v都是实数(R) ,其中至少有一个wi不为零,由所有满足线性方程w1*x1+w2*x2+...+wn*xn=v 的点X=[x1,x2,...xn]组成的集合,称为空间R的超平面. 从定义可以看出:超平面就是点的集合.集合中的某一点X,与向量w=[w1,w2,...wn]的内积,等于v 特殊地,如果令v等于0,对于训练集中某个点X: w*X=w1*x1+w2*x2+...+wn*xn>0,将X标记为一类 w*X=w1*x1+w2*x2+.

机器学习基石笔记(三)

三.How Can Machines Learn? 第三节首先介绍了linear regression,线性可分的线性规划是有analytic solution的,林老师给我们推了一下,关键就是矩阵化的处理,简化了很多的工作 上面三幅图是整个推导的过程,需要注意的是,最后的X不一定是可逆的,因为我们的数据的数量N一般来说远大于d+1.所以x不可逆的可能性太大的,一般这时候就用伪逆来解决. 后面是解释为什么可以学习,经过一系列的推导可以得到下图: 这个是相当符合的我们的直观感受的,因为我们是用训练