2017-04-20 5 views
1

テンソルを使った2D画像マップ上の極小点の位置と値を検出しようとしています。これは些細なことではないので、私はtfの堅牢で効率的な方法が何であるか疑問に思いましたか?テンソルを使った2Dマップ上の極小値の発見

これまでのところ、[-1 1]カーネルを使った単純な水平および垂直の畳み込みを考えました。極小値については

import tensorflow as tf 

def get_local_maxima(in_tensor): 
    max_pooled_in_tensor = tf.nn.pool(in_tensor, window_shape=(3, 3), pooling_type='MAX', padding='SAME') 
    maxima = tf.where(tf.equal(in_tensor, max_pooled_in_tensor), in_tensor, tf.zeros_like(in_tensor)) 
    return maxima 

それが唯一のAVGとMAX pooling_typeのために、これまでサポートされているため、入力を無効にして、最大値を見つけることが最も簡単でしょう:

+2

私はあなたに質問するのを忘れたと思います。 –

答えて

3

あなたはこのようにプールを使用して極大値を見つけることができます。

これはなぜ機能しますか?in_tensorのあるインデックスの値が、同じインデックスの値がmax_pooled_in_tensorの唯一の値であるのは、そのインデックスがin_tensorのインデックスを中心とする3x3近傍で最も高い値だった場合です。

+0

浮動小数点型の 'tf.equal'を使って値を0にする方が効率的だと思います。 'maxima = in_tensor * tf.float(tf.equal(in_tensor、max_pooled_in_tensor))' – Multihunter