检测INPUT.MIN_SIZE和INPUT.MAX_SIZE之间的区别



在detectron2训练中,我们可以在配置中定义INPUT.MIN_SIZEINPUT.MAX_SIZE,以告诉detectron根据宽度缩放到什么图像分辨率(高度由detectron 2确定(。我知道这个缩放是由Edge最短尺寸函数完成的。

我的问题是,这两个变量之间的区别是什么?它们在这个函数中是如何工作的?

假设我有1280 x 720的训练图像,但也有2560 x 1440的训练图像。我想将所有图像缩放到最小1280 x 720,所以我会放INPUT.MIN_SIZE(720,)。那么我将用什么来填充最大变量,算法将如何处理?

答案与ResizeShortestEdge文档中所说的完全一样:

它试图将较短的边缩放到给定的short_edge_length,只要较长的边不超过max_size。如果达到max_size,则缩小比例,使较长的边不超过max _size

您也可以在源代码中看到这一点,它计算新形状(粘贴在下面以便于参考(。

def get_output_shape(
oldh: int, oldw: int, short_edge_length: int, max_size: int
) -> Tuple[int, int]:
"""
Compute the output size given input size and target short edge length.
"""
h, w = oldh, oldw
size = short_edge_length * 1.0
scale = size / min(h, w)
if h < w:
newh, neww = size, scale * w
else:
newh, neww = scale * h, size
if max(newh, neww) > max_size:
scale = max_size * 1.0 / max(newh, neww)
newh = newh * scale
neww = neww * scale
neww = int(neww + 0.5)
newh = int(newh + 0.5)
return (newh, neww)

因此,在您的情况下,您将short_edge_length设置为720,max_size将设置为1280。如果你这样做,参考上面的代码,你会看到,

a( 首先,在线scale = size / min(h, w)处将缩放因子计算为0.5。

b( 然后在线newh, neww = size, scale * w处将新的宽度和高度分别计算为1280和720。

c( 最后,条件if max(newh, neww) > max_size:不满足,因此不计算新的缩放因子并且不更新新的宽度和高度。

请注意,您也可以将max_size设置为高于1280,这不会有任何区别。如果您将其设置为低于1280,则(c(中提到的条件将为真,因此将计算新的比例,并缩小新的宽度和高度。

相关内容

  • 没有找到相关文章

最新更新