【发布时间】:2019-06-18 11:07:13
【问题描述】:
我们可以使用 ROI-Pool/ROI-Align 来裁剪图像区域(矩形)内部的子特征。
我想知道如何裁剪该区域外部的特征。
换句话说,如何将(特征图)inside矩形区域的值设置为零,但该区域outside的值保持不变。
【问题讨论】:
标签: deep-learning pytorch object-detection
我们可以使用 ROI-Pool/ROI-Align 来裁剪图像区域(矩形)内部的子特征。
我想知道如何裁剪该区域外部的特征。
换句话说,如何将(特征图)inside矩形区域的值设置为零,但该区域outside的值保持不变。
【问题讨论】:
标签: deep-learning pytorch object-detection
我不确定这种 ROI 对齐的想法是否完全正确。 ROI pool 和 align 用于获取在原始输入空间(即像素空间)中识别的多个不同大小的感兴趣区域,并从(名义上)卷积网络计算的特征中输出一组相同大小的特征裁剪。
不过,作为对您问题的简单回答,您只需创建一个与特征图具有相同维度的掩码张量,并将此掩码的 ROI 内的值设置为零,然后将掩码相乘通过特征图。这将抑制 ROI 内的所有值。这个掩码的创建应该相当简单。我使用 for 循环来避免思考,但也可能有更有效的方法。
feature_maps # batch_size x num_feature maps x width x height
mask = torch.ones(torch.shape(feature_maps[0,0,:,:]))
for ROI in ROIs: # assuming each ROI is [xmin ymin xmax ymax]
mask[ROI[0]:ROI[2],ROI[1]:ROI[3]] = 0
mask = mask.unsqueeze(0).unsqueeze(0) # 1 x 1 x width x height
mask = mask.repeat(batch_size,num_feature_maps,1,1) # batch_size x num_feature maps x width x height
output = torch.mul(mask,feature_maps)
【讨论】: