0

pix2pix アーキテクチャに基づく Tensorflow 凍結モデルをNVIDIA TensorRT エンジンに変換しようとしています。TensorRT 3 バージョンがあります。私のレイヤーは TensorRT 3 でサポートされていますが、一部のレイヤーは UFF パーサーではサポートされていません。私が直面している問題は、次の行によるものです。

mean, variance = tf.nn.moments(input, axes=[0, 1, 2], keep_dims=False)

内部操作の 1 つはsquared differenceTensorRT でサポートされていないもので、実行時に次のエラーが返されます。

UFF グラフに変換中 警告: keep_dims はサポートされていません。無視します...

警告: レイヤーの変換関数が登録されていません: SquaredDifference はまだです。

カスタム op SquaredDifference として変換 >

generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference 名:

"generate_output/generator/decoder_2/batchnorm/moments/SquaredDifference"

op: "二乗差"

入力: "generate_output/generator/decoder_2/batchnorm/Identity"

入力: "generate_output/generator/decoder_2/batchnorm/moments/StopGradient"

属性 {

キー:「T」

価値 {

タイプ: DT_FLOAT

}

}

トレースバック (最新の呼び出しが最後):

ファイル「scripts/convert_plan.py」、71 行目、data_type

ファイル「scripts/convert_plan.py」、22 行目、frozenToPlan text=False 内

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py」の 103 行目、from_tensorflow_frozen_model で from_tensorflow(graphdef, output_nodes, **kwargs) を返す

ファイル "/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/conversion_helpers.py"、75 行目、from_tensorflow name="main" 内)

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、64 行目、convert_tf2uff_graph uff_graph、input_replacements 内)

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、51 行目、convert_tf2uff_node op、name、tf_node、inputs、uff_graph、tf_nodes=tf_nodes 内)

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、28 行目、convert_layer フィールド = cls.parse_tf_attrs(tf_node.attr)

ファイル "/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py"、177 行目、キーの parse_tf_attrs、attrs.items() の val}

ファイル "/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py"、177 行目、キーは attrs.items() の val}

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、172 行目、parse_tf_attr_value で cls.convert_tf2uff_field(code, val) を返す

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、146 行目、convert_tf2uff_field で TensorFlowToUFFConverter.convert_tf2numpy_dtype(val) を返す

ファイル「/usr/local/lib/python2.7/dist-packages/uff/converters/tensorflow/converter.py」、74 行目、convert_tf2numpy_dtype で np.dtype(dt[dtype]) を返す

TypeError: リストのインデックスは AttrValue ではなく整数でなければなりません

tf.nn.moments私は2つの代替方法に置き換えようとしました:

  1. mean = tf.reduce_mean(input, axis = [0, 1, 2], keep_dims=False)

    devs_squared = tf.multiply(input - mean, input - mean)

    variance = tf.reduce_mean(devs_squared, axis = [0, 1, 2], keep_dims=False)

レイヤーはすべて TensorRT 3 でサポートされていますreduce_meanが、UFF パーサーではサポートされておらず、次のエラーがスローされます。

UFFParser: パーサー エラー:

generate_output/generator/encoder_2/batchnorm/Mean: Reduce 演算子はサポートされていません

  1. 2 番目の方法:

    mean = tf.keras.backend.sum(input, axis = [0, 1, 2])

    div_factor_1 = input.get_shape().as_list()[0]*input.get_shape().as_list()[1]*input.get_shape().as_list()[2]

    mean = mean * (1 / div_factor_1)

    devs_squared = tf.multiply(input - mean, input - mean)

    variance = tf.keras.backend.sum(devs_squared, axis = [0, 1, 2])

    div_factor_2 = devs_squared.get_shape().as_list()[0]*devs_squared.get_shape().as_list()[1]*devs_squared.get_shape().as_list()[2]

    variance = variance * (1 / div_factor_2)

しかし、再び UFF パーサー エラーが発生します。

UFFParser: パーサー エラー: generate_output/generator/encoder_2/batchnorm/Sum: Reduce 演算子はサポートされていません

同じエラーに対応するために、代替 2 で keras.backend.sum の代わりに reduce_sum も使用しました。

4

1 に答える 1