CUDA 11.2 + OpenCV4.2でdarknet-ros(noetic-devel)の動作を確認しました。実装当初は問題になっていたメモリリークも解消したようです。
しかし、私の環境では少し書き換えが必要だったのでメモとして残します。
環境構築
環境構築は以下のリンクの通りに行いました。CUDA11.2+OpenCV4の環境が揃っていればOKです。OpenCV4はros-noetic-vision-opencvでインストールしました.
ROS2-Foxyでdarknet-ros(Ubuntu20.04+OpenCV4.2+CUDA11.2) - えいあーるれいの技術日記
ROS-Noeticのインストールも行っておきましょう。
noetic/Installation - ROS Wiki
darknet_rosのダウンロード
darknet_rosのソースコードをダウンロードしてfix/memory_leak(あるいはmasterブランチ)でチェックアウトします。
git clone --branch fix/memory_leak https://github.com/leggedrobotics/darknet_ros.git
そしてコードを少し書き換えます。
CMakeLists.txtの25行目,CUDA11.2のサポート外のバージョンを外します。
# Find CUDA
find_package(CUDA QUIET)
if (CUDA_FOUND)
find_package(CUDA REQUIRED)
message(STATUS "CUDA Version: ${CUDA_VERSION_STRINGS}")
message(STATUS "CUDA Libararies: ${CUDA_LIBRARIES}")
set(
CUDA_NVCC_FLAGS
${CUDA_NVCC_FLAGS};
-O3
>> 25行目の削除 -gencode arch=compute_30,code=sm_30 >>
-gencode arch=compute_35,code=sm_35
-gencode arch=compute_50,code=[sm_50,compute_50]
-gencode arch=compute_52,code=[sm_52,compute_52]
-gencode arch=compute_61,code=sm_61
-gencode arch=compute_62,code=sm_62
)
また、darknet_ros/src/YoloObjectDetector.cppの165行目を修正しました。usb_camノードから送信されているイメージを表示するときにRGBがずれていました。
- cam_image = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::BGR8); + cam_image = cv_bridge::toCvCopy(msg, sensor_msgs::image_encodings::RGB8);
これはおま環なのか??よく分かっていません…それともusb_camのほうが不具合なのか…?

Darknet学習・実行にオススメのGPU
Darknetの学習・実行には非常に多くのGPUリソースが必要です。特にYOLO v4以降のモデルは実行だけでもVRAM 6GB以上必要になるので注意しましょう。VRAMが足りればゲーミングノートでも可です。
RTX 3060:ディープラーニングビギナーにオススメの1台。ディープラーニングはVRAM(GPUのメモリ)が最も重要なので12GBもあるRTX 3060は多少高騰気味の現市場でもオススメです。
Jetson (Xavier):組み込み用途としてはJetsonが有力です。一応RTXが搭載されたNUCやノートPCと比較して検討してみたほうが良さそうです。YOLO v4-tinyくらいなら30fps超えが可能です。