我们可以使用ROI-Pool / ROI-Align在图像区域(矩形)的内部中裁剪子功能。
我想知道如何在该区域外部上裁剪特征。
换句话说,如何将(特征图的)矩形区域内的值内部设置为零,但是区域内外部的值保持不变。
答案 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)