えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ROS NoeticでDarknet-rosは動くらしい(OpenCV4+CUDA11.2)

 CUDA 11.2 + OpenCV4.2でdarknet-ros(noetic-devel)の動作を確認しました。実装当初は問題になっていたメモリリークも解消したようです。

github.com

 しかし、私の環境では少し書き換えが必要だったのでメモとして残します。

環境構築

環境構築は以下のリンクの通りに行いました。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のほうが不具合なのか…?

f:id:Ray_ar:20210507004311p:plain

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超えが可能です。