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