图像分割 预测图片的尺寸处理方案?

在做图像分割时,如果训练图片是规整的256x256大小的图片,那在实际运用时,现场为300x300的图片,怎么处理,是采用滑动窗口嘛,感觉欠妥,滑动步长为256的话,两个窗口间的像素关联性就消失了,如果为1或小于256的话,那预测值每个像素点便产生多解,那如何确定每个像素点真实的预测?本人才疏学浅,请各位业内高人指点一二,做图像分割领域的朋友肯定遇到过这个问题,求指点!

压缩图片大小, 或者取图片一部分 可以试试

from PIL import Image  
im = Image.open(r"e:\hello.png")

newsize = (256, 256)
im1 = im.resize(newsize) 
im1.show()

box = 0, 0, 255, 255
im2 = im.crop(box)
im2.show()

box = 44, 44, 299, 299
im3 = im.crop(box)
im3.show()

一般可以将网络设置成动态输入的,只不过这样子的话你需要保证你的网络输入对每一层的下采样倍数都能整除,这样你就可以使用动态输入。
举个例子来说,Unet网络,最大下采样32倍来说,你需要保证你的网络输入为32的倍数,像你的300X300,就需要用到最小的32倍数320x320,多出来的20x20在你的300x300的周围padding(怎么padding看你的数据预处理,最好一致)。
这样你就可以在训练的时候训练256x256(也是32的倍数),然后再检测阶段将300x300的图像padding到320x320输入检测,就不会出现你上面说的问题。

另外就是你说的滑动窗口,这个问题不大,一般分割网络,重合个百分10就可以了(或者更多,最好保证再重合区域的物体是完整的),然后对同一区域产生不同的label进行处理,具体处理规则需要你自己写,比如少数点服从多数点等等。这样的代价就是速度慢一些,重合部分的规则没写好效果不好等


def keep_image_size_open(path, size=(px,px)):#px想要的大小,这个应该不会失真
    picture = Image.open(path)
    temp = max(picture.size)
    mask = Image.new('RGB', (temp, temp), (0, 0, 0))
    mask.paste(picture, (0, 0))
    mask = mask.resize(size)
    return mask