如何使用pytorch裁剪图像区域之外的特征?

时间:2019-01-24 16:30:22

标签: deep-learning pytorch object-detection

我们可以使用ROI-Pool / ROI-Align在图像区域(矩形)的内部中裁剪子功能。

我想知道如何在该区域外部上裁剪特征。
换句话说,如何将(特征图的)矩形区域内的值内部设置为零,但是区域内外部的值保持不变。

1 个答案:

答案 0 :(得分:0)

我不确定这种ROI对齐的想法是否正确。 ROI池和对齐用于获取在原始输入空间(即像素空间)中标识的多个大小不同的关注区域,并从(名义上)卷积网络计算出的特征中输出一组大小相同的特征作物。

不过,作为对问题的一个简单答案,您只需要创建一个与特征贴图尺寸相同的遮罩张量,并将该遮罩的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)