※この記事は過去に私が投稿した記事(えいあーる・れいの技術日記(はてなブログ))を修正したものです。
元記事はこちら↓
この記事では、Ubuntu20.04+CUDA11.2でDarknet_rosを動かす方法を環境構築と合わせて説明します。リポジトリを見る限りYOLOv3までの対応だと思います。
Ubuntu20.04+CUDA11.2+OpenCV4.2+ROS2-Foxy(2021年3月時点ですべて最新)の組み合わせを前提にしています。また、NVIDIAドライバのバージョンは460.32.03です。
ハードウェア
次のハードウェアで環境構築しました。
- CPU:Ryzen7 2700x(16threads @4.3GHz)
- GPU:GeForce RTX2080Ti(TU102)
- RAM:16GB DDR4
Ubuntu20.04LTSの環境構築
1.Ubuntu20.04LTSのインストール
- PCをUbuntu20.04を焼いたUSBメモリでブートし、インストールを行います。
minimal installation
でいいです。言語は英語推奨。
2.パッケージの更新とインストール
gccとcmakeはNVIDIA Driverのインストールで必要です。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git gcc cmake
3.NVIDIA Driverのインストール
- https://www.nvidia.co.jp/Download/index.aspx?lang=jp でGPUの種類とOSを選択してダウンロードします。
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のインストール
-
https://developer.nvidia.com/cuda-downloads に従ってインストールします。
-
$ sudo apt install cuda-11-2
のステップまで終わらせます。 -
nanoやvscodeなどで~/.bashrcを開いて環境変数の設定を追記します。2行目については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のインストール
※かなり面倒な方法なので、もっと楽な方法があれば教えてください。
-
https://developer.nvidia.com/rdp/cudnn-download に移動して対応するcuDNNをダウンロードして、
/usr/local/cuda-11.2/include/
と/usr/local/cuda-11.2/lib64/
にそれぞれファイルをコマンドでコピペし、シンボリックリンクを作成します。
ROS2のインストール
-
https://docs.ros.org/en/foxy/Installation.html に従ってインストールを進めます。OpenCVはFoxy依存なので、
ros-foxy-vision-opencv
パッケージは必ずインストールしてください。(ros-foxy-desktop
で勝手にインストールされます)
ROS2用ワークスペースの作成とソースコードのダウンロード
4つめのコマンドで--recusiveオプションを追加しないように!(OpenCV3のバージョンがダウンロードされてしまいます。)
$ 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
(YOLOv4)AlexeyAB氏実装のdarknetについて
Ubuntu20.04LTS+CUDA11.2の場合、コンパイルしてそのまま動きました。MakeFileのパスは適宜変更してください。CUDA11以上を使用する場合は-gencode arch=compute_30,code=sm_30 \
を削除してください。(CUDA11より、KeplerアーキテクチャのGPUは使えなくなりました。)
トラブルシューティング
-
cannot find -lcuda
というエラーについて:以下のリンクを参照して、バージョンを書き換えてシンボリックリンクを貼り付けてください。
-
Could not load library libcudnn_cnn_train.so.8
などロードできないという趣旨のエラー:エラーをよく確認して、リンクを正しく貼り直してください。 -
error "OpenCV 4.x+ requires enabled C++11 support"
というエラーが出る:ROS2用ワークスペースの作成の時点でダウンロードしたリポジトリがOpenCV3用の可能性があります。OpenCV4用のリポジトリをダウンロードしてください。
使用したリポジトリ
関連
- Darknet YOLOv3・YOLOv4の作者のリポジトリです。