2016-04-19 25 views
6

Chcę dokonać prostej zmiany rozmiaru bilinear (niekoniecznie przez współczynnik całkowity) w TensorFlow. Na przykład, zaczynając od tensora (32, 64, 64), chciałbym mieć tensor (32, 36, 96), gdzie każde 64x64 zostało przeskalowane o współczynnik 1,5 z wykorzystaniem interpolacji dwuliniowej. Jaki jest najlepszy sposób na zrobienie tego?Bilinear upample w tensorflow?

Chciałbym to wspierać arbitralne czynniki> 1, a nie tylko 1.5 konkretnie.

Uwaga: operacja na każdym modelu 64 x 64 będzie taka sama jak w przypadku skimage.transform.rescale (scale=1.5, order=1).

Odpowiedz

12

tf.image.resize_images powinien zrobić to, czego potrzebujesz. Akceptuje tensory 3d (pojedynczy obraz) i 4d (partia obrazów) z dowolną głębokością (liczba kanałów). Więc mam nadzieję, że to powinno działać:

# it's height, width in TF - not width, height 
new_height = int(round(old_height * scale)) 
new_width = int(round(old_width * scale)) 
resized = tf.image.resize_images(input_tensor, [new_height, new_width]) 

Bilinearny interpolacja jest domyślna, więc nie trzeba go określić. Można również bezpośrednio użyć resize_bilinear.

+1

Dzięki, właśnie tego szukałem. Zastanawiam się, czy możliwe jest backpropagate poprzez resize_images? –

+0

@AlexI można to zrobić? Backpropogate przez zmianę rozmiaru? – mattdns

+0

@mattdns Tak, absolutnie. Możesz wznowićpoprzez zmianę rozmiaru, ponieważ jest to operator liniowy. Tensorflow robi to bez problemu. – RawMean

Powiązane problemy