問題タブ [tensorrt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - UFF パーサー エラーが原因で TensorRT エンジンが失敗する
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 も使用しました。
c++ - TensorRT を使用した C++ Tensorflow API
私の目標は、C++ アプリケーションで tensorrt に最適化された tensorflow グラフを実行することです。私は tensorrt 4 で tensorflow 1.8 を使用しています。Python API を使用すると、グラフを最適化し、パフォーマンスの向上を確認できます。
C++ でグラフを実行しようとすると、次のエラーで失敗します。
Not found: Op type not registered 'TRTEngineOp' in binary running on e15ff5301262. Make sure the Op and Kernel are registered in the binary running in this process.
その他の非テンソルグラフは機能します。Python api で同様のエラーが発生しましたが、tensorflow.contrib.tensorrt をインポートすることで解決しました。エラーから、カーネルと op が登録されていないことはかなり確信していますが、テンソルフローが構築された後にアプリケーションで登録する方法を知りません。ちなみに、bazel は使用できませんが、cmake を使用する必要があります。これまでのところ、 と にリンクしlibtensorflow_cc.so
てlibtensorflow_framework.so
います。
誰でもここで私を助けることができますか? ありがとう!
更新: c または c++ API を使用してロードする_trt_engine_op.so
と、ロード中にエラーはスローされませんが、実行に失敗します