pix2pix アーキテクチャに基づく Tensorflow 凍結モデルをNVIDIA TensorRT エンジンに変換しようとしています。TensorRT 3 バージョンがあります。私のレイヤーは TensorRT 3 でサポートされていますが、一部のレイヤーは UFF パーサーではサポートされていません。私が直面している問題は、次の行によるものです。
mean, variance = tf.nn.moments(input, axes=[0, 1, 2], keep_dims=False)
内部操作の 1 つはsquared difference
TensorRT でサポートされていないもので、実行時に次のエラーが返されます。
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つの代替方法に置き換えようとしました:
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 演算子はサポートされていません
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 も使用しました。