如何从特征图中选择ROI像素

时间:2019-01-03 17:30:11

标签: python deep-learning pytorch object-detection

在Faster RCNN或Mask RCNN中,ROI Align图层将不同大小的roi用作输入,并将它们投影到均匀的图层大小上。 我目前正在实施this paper,其中作者将旋转的框用作起始层的输入,以进行进一步检测。这是一个端到端的文本识别管道,它首先执行文本框检测(与对象检测相同的任务),然后将文本框馈送到编码器-解码器以识别字符。

作为旋转边界框,得分图和最后一个特征图的框检测的输出格式为:

# Feature Map from text detector Shape 
torch.Size([1, 256, 128, 128])
# ROI from text detector Shape 
torch.Size([1, 5, 128, 128])
# Score from text detector Shape 
torch.Size([1, 2, 128, 128])

这五个参数代表当前点到顶部,底部,左侧和右侧的距离 相关边界框的侧面及其倾斜方向。利用这些配置,检测分支能够为每个文本实例预测任意方向的四边形。

原始文本检测器体系结构是 based on East.。 我已经能够匹配它的基线分数。

我目前仍在网格采样部分。 我首先将5个值-(4个距离,1个角度)转换为旋转的bbox的相应8个坐标,并将其作为四边形(缩放至要素地图大小,按分数过滤),以生成格式为

的坐标张量
# raw coord coords shape {numberOfPredictionsX8}
torch.Size([2960, 8])

现在,我只需要从顶部要素地图中选择这些坐标之间的这些像素,然后将它们传递到nn.Functional.Interpolate()层即可。

如何在保持渐变不变的情况下执行此操作。 我天真地做了

cv2.fillPoly(fm_, (coords_.reshape(-1, 4, 2)).astype(np.int32), (255, 255, 255), 8)

仅保留fm_中的点所描述的四边形中出现的coords_中的像素值
但是cv函数仅适用于np值。 但是转换为np会导致梯度流损失。

0 个答案:

没有答案