onnx ファイル内の冗長ノード「identity」を削除します。

onnx ファイル内の冗長ノード「identity」を削除します。

モデルのデプロイのプロセスで、変換された onnx モデルに多数の「アイデンティティ」ノードが含まれていることがわかりました。実際に測定したところ、これらのノードはonnxの推論結果やonnxから変換されたtensorrt推論エンジンの推論結果には影響を与えませんが、onnxの推論速度に重大な影響を与えることが分かりました。同時に、変換された tensorrt ファイルも通常よりもはるかに大きくなり、推論速度にも重大な影響が生じます。

したがって、「アイデンティティ」ノードのプルーニング プロセスとコードをここに記録します。

アイデンティティノード

なぜ「アイデンティティ」ノードがたくさんあるのかはまだわかりませんが、最終的な結果には影響せず、速度だけが影響を受けるようです。私の onnx ビジュアライゼーションは次のようになります:
ここに画像の説明を挿入
カット後、次のようになります:
ここに画像の説明を挿入
カット後、tensorrt ファイルを変換します。ファイル サイズは以前よりもはるかに小さくなり、速度は速くなります。

トリムコード

プルーニングにはonnx-simplifier を使用します。最初に以下をインストールします。

pip install onnx-simplifier

その後、それを直接使用できます。

import onnx
import onnxoptimizer

#加载修剪之前的模型
onnx_model = onnx.load(r"mmdeploy/s2anet2onnx2/resnet50+cat+fam+deform-1024-prune.onnx")

#去掉identity层
all_passes = onnxoptimizer.get_available_passes()
print("Available optimization passes:")
for p in all_passes:
    print('\t{}'.format(p))
print()

#保存修剪后的模型
onnx_optimized = 'mmdeploy/s2anet2onnx2/resnet50+cat+fam+deform-1024-prune.onnx'
passes = ['eliminate_identity']
optimized_model = onnxoptimizer.optimize(onnx_model, passes)
onnx.save(optimized_model, onnx_optimized)

おすすめ

転載: blog.csdn.net/weixin_45453121/article/details/130923911