9.2.tensorRTアドバンスト(4)パッケージシリーズ - 自動運転ケースプロジェクト 自動運転深度推定

序文

以前、Du 先生が立ち上げたtensorRT 高パフォーマンス導入コースを最初から読みましたが、メモを取っていなかったので多くのことを忘れていました。今度もやってメモを取ります。

このコースでは、tensorRT の高度な自動運転ケース プロジェクトの自動運転深度推定について学びます

コースのシラバスについては、以下のマインドマップを参照してください

ここに画像の説明を挿入します

1. 深さの推定

このセクションでは、深度推定モデルの分析について学習します。私たちの目的は、深度推定のための onnx を見つけ、onnx の一般的な使用ロジックを分析し、最も簡潔なバージョンのpredict.pyを作成することです。次の 3 つのステップ:

1.深度推定のために onnx を開き、その入力と出力を表示します。

2.コードをチェックし、onnx の前処理を見つけて、前処理ロジックを分析します。

3.得られた情報を元に、predict.pyを記述し、書き出してみる

以下の図に示すように、その onnx モデルを見てみましょう。

ここに画像の説明を挿入します

図 1 onnx モデル

エクスポートされた onnx モデルから、入力が 1x3x256x512 で、出力が 6 つあることがわかります。

プロジェクト内の image_processor/ Depth_engine.cpp コードを分析して、特定の前処理作業を取得しましょう: (詳細な分析についてはビデオを参照してください)。

1.入力は 1x3x256x512、input.1 です。

2.出力は 1x1x256x512、2499 ノードです

3.正規化.mean = 0.485f、norm = 0.229f

4. y = (x / 255.0 - 平均) / ノルム

5.サイズ変更部分はそれほど複雑ではなく、直接サイズ変更するだけです

6.色に関しては cvtColor が必要です→ \rightarrow RGBへ

それを検証するためのプリプロセッサを作成するだけです。コードは次のとおりです。

import onnxruntime
import cv2
import numpy as np

session = onnxruntime.InferenceSession("workspace/ldrn_kitti_resnext101_pretrained_data_grad_256x512.onnx", provider_options=["CPUExecutionProvider"])

image = cv2.imread("workspace/imgs/dashcam_00.jpg")
image = cv2.resize(image, (512, 256))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = (image / 255.0)
mean = [0.485, 0.456, 0.406]
norm = [0.229, 0.224, 0.225]
image_tensor = ((image_tensor - mean) / norm).astype(np.float32)
image_tensor = image_tensor.transpose(2, 0, 1)[None]

prob = session.run(["2499"], {
    
    "input.1": image_tensor})[0]

print(prob.shape)

prob = prob[0, 0] * -5 + 255
y = int(prob.shape[0] * 0.18)
prob = prob[y:]

cv2.imwrite("depth.jpg", prob)

出力は次のとおりです。

ここに画像の説明を挿入します

図2 前処理の検証

出力が期待どおりであることがわかります。出力された深度推定マップは次のとおりです。

ここに画像の説明を挿入します

図3 深度推定マップ

さらに、matplotlib を使用して視覚化することもできます。コードは次のとおりです。

import onnxruntime
import cv2
import numpy as np
import matplotlib.pyplot as plt

session = onnxruntime.InferenceSession("workspace/ldrn_kitti_resnext101_pretrained_data_grad_256x512.onnx", provider_options=["CPUExecutionProvider"])

image = cv2.imread("workspace/imgs/dashcam_00.jpg")
image = cv2.resize(image, (512, 256))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = (image / 255.0)
mean = [0.485, 0.456, 0.406]
norm = [0.229, 0.224, 0.225]
image_tensor = ((image_tensor - mean) / norm).astype(np.float32)
image_tensor = image_tensor.transpose(2, 0, 1)[None]

prob = session.run(["2499"], {
    
    "input.1": image_tensor})[0]

print(prob.shape)

prob = prob[0, 0]
y = int(prob.shape[0] * 0.18)
prob = prob[y:]

plt.imsave("depth.jpg", prob, cmap='plasma_r')

出力される深度推定マップは次のとおりです。

ここに画像の説明を挿入します

図 4 深度推定チャート (matplotlib)

要約する

このコースでは、オープンソースプロジェクトにおける深度推定事例を学び、主に深度推定モデルのonnxの簡易解析を行い、プロジェクトコードの解析を通じて前処理部分を明らかにし、その後onnxruntimeによる簡易検証を行い、最終的な深度を決定しました。推定結果が視覚的に表示されます

Supongo que te gusta

Origin blog.csdn.net/qq_40672115/article/details/132655718
Recomendado
Clasificación