ROIAlign详细解读

ROIAlign的理解

在tensorflow版本中的ROIAlign采用的是函数

tf.image.crop_and_resize(
				feature_maps[i],
				level_boxes,
				box_indices,
				self.pool_shape)
image = feature_maps[i] 
# feature_mapsp[i] 是第i批 [P2, P3, P4, P5]进行pooling的特征图
boxes = level_boxes
# level_boxes 是有FPN公式确定 该层级对应的boxes
# 不同的box对应不同阶段的特征图
box_ind = box_indices
# box_indices记录每个propose对应图片序号
crop_size = self.pool_shape
 # 7*7  
# 代码中参考了原文中的结论,认为在每个单元中划分设置一个采样点和四个采样点的差别不大
# 因此这个函数只能完成采样单元为1的Align过程

现在我们来观察下函数tf.image.crop_and_resize

# 函数原型
'''
tf.image.crop_and_resize(
    image,
    boxes,
    box_ind,
    crop_size,
    method='bilinear',
    extrapolation_value=0,
    name=None
)
'''
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

img = np.array([
    [
        [1,2,3],[4,5,6],[7,8,9]
    ]
])
img = img.reshape([1,3,3,1]) # 1,3,3,1

box1 = [0.5,0.5,0.9,0.9] # y1, x1, y2, x2

tensor_pooled_img = tf.image.crop_and_resize(image=img, boxes=[box1], box_ind=[0], crop_size=(2,2))

with tf.Session() as sess:
    pooled_img = sess.run(tensor_pooled_img)
    print(pooled_img)
    print(pooled_img.shape)

# [
#	[
#		[[5.],[5.8]]
#  		[[7.3999996],[8.2]]
#  	]
# ]
# shape = (1,2,2,1) 批数为1,宽为2,高为2,通道为1的 pooledimage

上述的结果有什么含义呢?通过画图来了解。
在这里插入图片描述
在一个3×3的特征图中,使用ROIAlign方法生成2×2的pooledimage
其中裁剪的边框经过归一化的坐标为:(0.5,0.5),(0.5,0.9),(0.9,0.5),(0.9,0.9)
映射到3×3的特征图就是(1,1),(1,1.8),(1.8,1),(1.8,1.8)
即就是图中蓝色元组包含的坐标

在每个pooled的单元内(蓝色虚线框)选择的点就是边框顶点,对四个顶点进行双线性差值的计算:

  1. 第一个点:与原图的点重合因此就是5
  2. 第二个点:坐标(1.8,1)计算后得到5.8
  3. 第三个点:坐标(1,1.8)计算后得到7.4
  4. 第四个点:坐标(1.8,1.8)计算后得到8.4

与程序中的结果相对应,可以发现与论文中所说的方法有一定的差异,有人实验表示对mAP有些许影响。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值