Deep learning 独立于分辨率的UNet实现?

Deep learning 独立于分辨率的UNet实现?,deep-learning,pytorch,Deep Learning,Pytorch,我想知道让UNet模型在不同输入分辨率下工作的最简单方法是什么?我的意思是,如果我减少采样3次,那么对于例如320x320大小的图像,特征层的空间尺寸将是: 320 -> 160 -> 80 -> 40 -> 80 -> 160 -> 320 另一方面,如果输入大小为960x540的图像,则 540 -> 270 -> 135(!) -> 68 -> 136(!) ->... 网络将因为这样的输入图像而崩溃,因为当从跳过连接张

我想知道让UNet模型在不同输入分辨率下工作的最简单方法是什么?我的意思是,如果我减少采样3次,那么对于例如320x320大小的图像,特征层的空间尺寸将是:

320 -> 160 -> 80 -> 40 -> 80 -> 160 -> 320
另一方面,如果输入大小为960x540的图像,则

540 -> 270 -> 135(!) -> 68 -> 136(!) ->...
网络将因为这样的输入图像而崩溃,因为当从跳过连接张量时,张量大小不匹配


是否有一些标准技巧来处理此问题?

您可以将输入图像的大小调整为8的最接近倍数(同时保持纵横比)。在这种情况下,每次除以2三次将有整数输出。可能不是一个标准的技巧,但它应该可以工作。是的,我想如果我选择输入的反射填充,然后从输出中删除,那么它应该可以工作。我的意思是使用类似opencv的
cv2.resize
函数来调整大小。所以,我认为它将使用双线性插值调整图像大小。因此,您的图像看起来与原始图像一样,只是大小发生了变化。这对高度矩形的图像不起作用,因为纵横比的变化会阻止网络识别常见对象。但是,填充到可以处理下采样的大小(即使维度可以用正确的数字整除),然后从输出中删除填充似乎是可行的。您可以将输入图像的大小调整为8的最接近倍数(同时保持纵横比)。在这种情况下,每次除以2三次将有整数输出。可能不是一个标准的技巧,但它应该可以工作。是的,我想如果我选择输入的反射填充,然后从输出中删除,那么它应该可以工作。我的意思是使用类似opencv的
cv2.resize
函数来调整大小。所以,我认为它将使用双线性插值调整图像大小。因此,您的图像看起来与原始图像一样,只是大小发生了变化。这对高度矩形的图像不起作用,因为纵横比的变化会阻止网络识别常见对象。但是,填充到可以处理下采样的大小(即使维度可以用正确的数字整除),然后从输出中删除填充似乎是可行的。