TensorFlowで単純な双一次サイズ変更(必ずしも整数係数ではない)を実行したいと思います。たとえば、(32,3,64,64)テンソルから始めて、(32,3,96,96)テンソルが必要です。ここで、各64x64は双線形補間を使用して1.5倍に再スケーリングされています。それを行う最良の方法は何ですか?
これは、特に1.5だけでなく、1より大きい任意の要素をサポートするために必要です。
注:各64x64での操作は、skimage.transform.rescale (scale=1.5, order=1)
と同じです。
tf.image.resize_images は、必要なことを行う必要があります。 3d(単一画像)と4d(画像のバッチ)の両方のテンソルを、任意の深さ(チャネル数)で受け入れます。したがって、これはうまくいけばうまくいくはずです:
# 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])
双一次補間がデフォルトであるため、指定する必要はありません。 resize_bilinear を直接使用することもできます。
私は、ではないtf.image.resize_*
は それらは厄介なバグに苦しんでいます として機能します 修正されません 。
新しい、異なる画像リサンプリング関数のセットがパイプラインにあるようです。それまでの間、ウェブ上で自分でそれを行う方法の例をいくつか見つけることができます。 転置畳み込み 。残念ながら、チャネルごとのアップサンプリングほど効率的ではありませんが、高速よりも正しい方が優れています。
[〜#〜]編集[〜#〜]
彼らは最終的にこのバグを TF 2. で修正しました:
image.resize
は適切なピクセルの中心(...)を考慮します。
この修正は現在、勾配を通過しません。これは...バグが修正されることを期待しています。
Kerasは、テンソルフローバックエンドで'nearest'
および'bilinear'
補間をサポートするようになりました。 ドキュメント を確認してください。しかし、デフォルトのサイズ値は確かに(2,2)またはint値なので、その場合、アップサンプリングは少なくとも2倍になります。
このコードにはKeras 2.2.3
以上が必要です。 tf.keras
を使用している場合、残念ながら、kerasを個別にインストールすることはできません。kerosはtensorflowインストールの一部としてバンドルされています。したがって、tf
バージョンを見つけるか、ナイトリービルドをインストールします。
pip3 install --upgrade tf-nightly