YUVからRGBへのCUDA高速変換:Lidar_AI_Solutionによるミリ秒級画像処理の実現
Lidar_AI_Solutionプロジェクト内のYUVToRGBモジュールは、CUDAを活用した画像フォーマット変換ツールであり、単一のCUDAカーネルを用いてYUVからRGBへのバッチ変換を実行します。これにより、レーザーラーダーと視覚の融合アプリケーションに対し、効率的な画像前処理能力を提供します。このツールは多様な入出力フォーマットをサポートし、高解像度画像のフォーマット変換をミリ秒レベルで完了させることができ、リアルタイムコンピュータビジョンシステムにおける重要なコンポーネントです。
核心機能:包括的な画像フォーマット変換ソリューション
YUVToRGBモジュールは、多様な入出力フォーマットと処理モードをサポートする包括的な画像フォーマット変換機能を提供し、様々なアプリケーションシーンの要件を満たします。
多様なフォーマットサポートと柔軟な構成
このモジュールは3つの主要な入力フォーマットをサポートします:
- NV12 Block Linear(ブロック線形)
- NV12 Pitch Linear(ピッチ線形)
- YUV422 Packed YUYV(パック形式)
出力フォーマットも同様に豊富で、RGB/BGRのNCHW、NHWCレイアウト、およびDLA最適化のためのNCHW16フォーマットをサポートし、データタイプはuint8、float16、float32に対応しています。
高効率変換とスケーリングの一体化
YUVToRGBは革新的にフォーマット変換とスケーリング機能を単一のCUDAカーネルに融合させ、2つの補間モードをサポートします:
- 最近傍補間(Nearest)
- 双一次補間(Bilinear)
変換式は標準的な色空間変換アルゴリズムを採用:R/G/B_output = (R/G/B - offset_R/G/B) * scale_R/G/B、出力結果がOpenCVと完全に一致することを保証します。
性能突破:秒レベルからミリ秒レベルへの飛躍
YUVToRGBモジュールはOrinプラットフォーム上での性能が印象的であり、特に高解像度画像を処理する際にCUDA加速による質的飛躍をもたらします。
性能データ
Orin-DOS6.0.3.0環境下(CUDA11.4.15、GPU@1275MHz)で、3840x2160の入力を受け1920x1080のRGB画像を出力する場合:
| データ型 | 補間方式 | NCHW形式処理時間(μs) | NHWC形式処理時間(μs) |
|---|---|---|---|
| UINT8 | Nearest | 136.06 | 272.24 |
| FP16 | Nearest | 168.13 | 287.11 |
| FP32 | Nearest | 247.62 | 314.69 |
最適化設定下では、4Kから1080Pへの変換にわずか136マイクロ秒(約0.136ミリ秒)しかかからず、これは毎秒7300フレーム以上の画像処理が可能であることを意味し、リアルタイムシステムの要件を完全に満たします。
性能テスト方法
性能テストは簡単な数ステップで実行できます:
- プログラムのコンパイル:
make yuvtorgb - 性能テストコマンドの実行:
./yuvtorgb --input=3840x2160x1/BL --output=1280x720/uint8/NCHW_RGB --interp=nearest --perf
テスト結果の例:
[Nearest] 3840x2160x1/NV12BlockLinear to 1280x720/Uint8/NCHW_RGB performance: 30.32 us
精度検証:OpenCV結果との完全一致
YUVToRGBモジュールは厳密な精度検証を通過し、変換結果がOpenCVと完全に一致することを保証し、後続の視覚アルゴリズムに信頼できる画像データを提供します。
検証方法
プロジェクトは便利な検証ツールを提供しており、以下のコマンドを実行するだけで済みます:
pip install numpy opencv-python
make compare
検証は自動的にYUVToRGBとOpenCVを様々な解像度とフォーマットで変換結果を比較し、以下を保証します:
- 色空間変換の精度が完全に一致
- 最近傍補間が様々な解像度で結果が完全に同一
- 双一次補間が有理数のスケールファクタの場合に結果が一致、その他の場合は1ピセル以内の偏差
検証結果の例:
nearest: 3840x2160x1/BL to 1920x1280/uint8/NCHW_BGR, diff sum = 0, avg = 0.0, max = 0, std = 0.0
迅速な統合ガイド:既存プロジェクトへの簡単接続
YUVToRGBモジュールはシンプルな設計で、既存プロジェクトへの統合が容易です。2つの核心ファイルを含めるだけで済みます:
- yuv_to_rgb_kernel.cu
- yuv_to_rgb_kernel.hpp
共有ライブラリとしてのコンパイル
以下のコマンドでYUVToRGBを共有ライブラリとしてコンパイルできます:
nvcc -Xcompiler "-fPIC" -shared -O3 yuvtorgb_library/yuv_to_rgb_kernel.cu -o libyuvtorgb_kernel.so -lcudart
核心APIインターフェース
モジュールは簡潔なCスタイルインターフェースを提供し、主な関数には以下が含まれます:
create_gpu_yuv_image: GPU側のYUV画像オブジェクトを作成transfer_yuv_host_to_gpu: ホスト側のYUVデータをGPUに転送construct_gpu_rgb_image: GPU側のRGB画像オブジェクトを構築execute_batched_yuv_to_rgb: バッチ処理によるYUVからRGBへの変換を実行
実際の応用シーン
YUVToRGBモジュールはLidar_AI_Solutionプロジェクトで重要な役割を果たし、主に以下の用途に応用されています:
- レーザーラーダーと視覚の融合システム:BEVFusionなどのアルゴリズムに前処理済みのRGB画像を提供
- リアルタイムビデオ処理:カメラ入力のYUVデータをニューラルネットワークが必要とするRGB形式に効率的に変換
- 組み込みシステム:リソースが制限された環境下で効率的な画像フォーマット変換能力を提供
プロジェクト内の他のコンポーネントである3D SparseConvolutionやcuOSDと組み合わせることで、YUVToRGBモジュールはエンドツーエンドのリアルタイム認知システムを構築する上での重要な要素となります。
プロジェクトのアドレス: https://gitcode.com/gh_mirrors/li/Lidar_AI_Solution