zoukankan      html  css  js  c++  java
  • RoI Pooling -> RoI Align

    4 Mask RCNN Arc.(Part3) - How RoI Pooling, RoI

    分类任务(Fast-CNN、Faster-CNN):两次  quantized,损失精度;

    Mask-CNN:RoI Pooling -> RoI Align

     

    4)假定采样点数为4,即表示,对于每个2.97*2.97的小区域,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法进行计算,这样,就会得到四个点的像素值,如下图

     

    上图中,四个红色叉叉‘×’的像素值是通过双线性插值算法计算得到的

    最后,取四个像素值中最大值作为这个小区域(即:2.97*2.97大小的区域)的像素值,如此类推,同样是49个小区域得到49个像素值,组成7*7大小的feature map

    双线性插值法

     

    双线性插值法

    在两个方向分别进行一次线性插值。

    这里写图片描述

    在图像处理的时候,我们先根据

    srcX = dstX* (srcWidth/dstWidth)
    srcY = dstY * (srcHeight/dstHeight)

    来计算目标像素在源图像中的位置,这里计算的srcX和srcY一般都是浮点数,比如 f(1.2, 3.4)这个像素点是虚拟存在的,先找到与它临近的四个实际存在的像素点

    (1,3) (2,3)
    (1,4) (2,4)

    写成 f(i+u,j+v) 的形式,则 u=0.2,v=0.4, i=1, j=3 。

    f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j) + uvf(i+1,j+1) 

    保证了 空间对称性(Alignment),在 RoI Align 中使用。

     

    ROI Align

    因此有人提出不需要进行取整操作,如果计算得到小数,也就是没有落到真实的pixel上,那么就用最近的pixel对这一点虚拟pixel进行双线性插值,得到这个“pixel”的值。

    具体做法如下图所示:

    1. 将bbox区域按输出要求的size进行等分,很可能等分后各顶点落不到真实的像素点上
    2. 没关系,在每个bin中再取固定的4个点(作者实验后发现取4效果较好),也就是图二右侧的蓝色点
    3. 针对每一个蓝点,距离它最近的4个真实像素点的值加权(双线性插值),求得这个蓝点的值
    4. 一个bin内会算出4个新值,在这些新值中取max,作为这个bin的输出值
    5. 最后就能得到2x2的输出
     
    --> mask 边界 & 非边界(检测象素梯度变化),分别处理   
  • 相关阅读:
    点击退出 防止回退
    AngularJS select中ngOptions用法详解
    git hub
    .ashx datatable转excel
    写日志 log 到文件夹
    easyui layout 布局title
    easyui tree 折叠节点
    转json using指令
    Qt QWindow转QWidget
    CEF 重写弹窗事件
  • 原文地址:https://www.cnblogs.com/cx2016/p/13023162.html
Copyright © 2011-2022 走看看