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

技術系を中心にした日記です

ROS2-Foxyでdarknet-ros(Ubuntu20.04+OpenCV4.2+CUDA11.2)

※ ROS2 Foxy + YOLO v4の実装があります。Qiitaの記事もチェックしてみてください。

qiita.com

 Ubuntu20.04の環境構築をしました。そして、Ubuntu18プログラムの移行のためにとりあえずDarknetの環境構築を行いました。Darknetの環境構築を行う記事は多くありますが、将来環境構築を複数回行うことを見越して備忘録として書きます。

 この記事では、Ubuntu20.04+CUDA11.2+OpenCV4.2(すべて最新)の組み合わせを前提にしています。また、NVIDIAドライバのバージョンは460.32.03です。

Ubuntu20.04LTSの環境構築

1.Ubuntu20.04LTSのインストール:minimal installationでいいです。言語は英語推奨。

2.パッケージの更新とインストール

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git gcc cmake

3.NVIDIA Driverのインストール: NVIDIAドライバダウンロードGPUの種類を選択してダウンロードします。

 私が使用したドライバは以下のリンクから直接とべます。(Linux Driver)

www.nvidia.com

4.nouveauを無効化する

echo `blacklist nouveau` >> /etc/modprobe.d/blacklist-nouveau.conf
echo `options nouveau modeset=0` >> /etc/modprobe.d/blacklist-nouveau.conf
sudo reboot

5.NVIDIA Driverをインストールする

  • Ctrl+Alt+F2を押して、CUIログインをする。
$ cd ~/Downloads/
$ chmod +x NVIDIA-Linux-x86_64-460.67.run
$ ./NVIDIA-Linux-x86_64-460.67.run

###基本的には質問に対してOKでいい

$ sudo reboot

6.再度ログインしてターミナルを開き、$nvidia-smiでドライバがインストールされているか確認

成功例

| NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  On   | 00000000:06:00.0  On |                  N/A |
| 24%   32C    P8    22W / 260W |    654MiB / 11016MiB |      3%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A       983      G   /usr/lib/xorg/Xorg                102MiB |
|    0   N/A  N/A      1491      G   /usr/lib/xorg/Xorg                336MiB |
|    0   N/A  N/A      1623      G   /usr/bin/gnome-shell               70MiB |
|    0   N/A  N/A      2349      G   ...AAAAAAAAA= --shared-files       72MiB |
|    0   N/A  N/A     18194      G   ...AAAAAAAA== --shared-files       22MiB |
|    0   N/A  N/A    113055      G   ...AAAAAAAAA= --shared-files       35MiB |
+-----------------------------------------------------------------------------+

7.CUDA 11.2のインストール

  • CUDA Toolkit 11.3 Update 1 Downloads | NVIDIA Developerに従ってインストール。

  • nanoなどで~/.bashrcを開いて追記する。cudaのままでもいいし、cuda-11.2などのバージョン指定でもよい。(バージョンを切り替えがちな人はbashrcに記載しないほうがいいかも)

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

8.cuDNNのインストール

ROS2のインストール

ROS2用ワークスペースの作成

 4つめのコマンドで--recusiveオプションを追加しないように!

$ source /opt/ros/foxy/setup.bash

$ cd ~/
$ mkdir -p ros2_ws/src
$ cd ros2_ws/src
$ git clone https://github.com/ajaypaul2008/darknet_ros.git
$ cd darknet_ros
$ git checkout foxy

$ git clone https://github.com/kunaltyagi/darknet.git
$ cd darknet
$ git checkout opencv4

$ cd ~/ros2_ws/
$ colcon build
  • webカメラ用ROS2パッケージもインストールしておきましょう。
$ sudo apt install ros-foxy-v4l2-camera

実行

 あらかじめROS2とワークスペースの環境はロードしておきましょう。

  • 1つめのターミナル:$ ros2 run v4l2_camera v4l2_camera_node __ns:=/color

  • 2つめのターミナル:ros2 launch darknet_ros darknet_ros.launch.py

f:id:Ray_ar:20210602044210j:plain

AlexeyAB氏実装のdarknetについて

 Ubuntu20.04LTS+CUDA11.2の場合、そのまま動きました。

f:id:Ray_ar:20210320004142p:plain
動作確認

トラブルシューティング

  • cannot find -lcudaというエラーについて:以下のリンクを参照して、バージョンを書き換えてシンボリックリンクを貼り付ける。

github.com

  • Could not load library libcudnn_cnn_train.so.8などロードできないという趣旨のエラー:リンクを正しく貼り直す。

  • error "OpenCV 4.x+ requires enabled C++11 support"というエラーが出る:リポジトリが違います。あるいは、OpenCV3.2を導入することでも解決します。

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

ROSについて

 ROSとはRobot Operating Systemの略称で、ロボット制御に必要なパッケージや環境が揃っているオープンソースプロジェクトです。企業での産業用ロボット開発から個人のホビーロボット開発まで多くの活用例があります。

 ROS関連の書籍も充実しているのでぜひチェックしてみてください。

(画像をクリックすると詳細ページに移動します) (画像をクリックすると詳細ページに移動します)

Reference

github.com

github.com

github.com