機械学習・AI【物体検出】vol.10 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす~その2(OpenCV4対応)

【物体検出】vol.10 :YOLOv3をNVIDIA Jetson AGX Xavierで動かす~その2(OpenCV4対応)

前回の記事以降、5カ月ほど時間が経ちました。当時と今とでは、JetPackもOpenCVも新しくなっていますので、これからセットアップする場合には、過去の記事はあてになりません。

今回、OpenCVでの動作を確認すべく、Xavierの再セットアップを実行しました。

しかし・・・・ここからが苦行でした。まさに、苦行。己の無知との遭遇。思い出すだけでも心のダメージが蘇るほどでした。(実は、OpenCV4の導入で3-4日悶々してしまったことだけは秘密にしておいてください。)

様々なサイトで、Xavier上でOpenCV4をセットアップする方法が議論されていますが、私が最終的に救われたのが、install-opencv.shです。

以下、XavierでOpenCV4(==4.2.0)をセットアップした私の足跡をご紹介します。

 

今回新たにやったこと(手順)

既存のXavierの大事なデータをバックアップ(単純コピーです)してから、最新のJetPack(==4.3)を入れ、その上でOpenCV(==4.2.0)とYOLOv3を入れました。YOLOv3はcmakeでビルドしました。

  • 既存データのバックアップ
  • 最新版のJetPack導入
  • cuda環境の確認
  • OpenCV4の導入
  • python-opencv動作の確認
  • 最新版Darknetの導入

 

バックアップ

まずは、既存のXavierをまっさらにしてしまう前に、必要なデータをバックアップします。
darknet以下のcfg、data、backupあたりの.cfg、.data、.weightは取っておくと良いです。
自分で作成したり、他所から手を入れた.pyも取っておきます。
※JetPackで上書きしてしまってから「ああ!」とならないように、慎重に。

 

 

最新版JetPack導入

NVIDIAのDeveloperサイトから最新のJetPackを入手します。今回は、JetPack4.3をダウンロードしました。
https://developer.nvidia.com/embedded/jetpack

・pipが入っていないようなので入れる
get-pipの入手
https://bootstrap.pypa.io/get-pip.py

$ sudo python3 get-pip.py

 

 

cuda環境の確認

JetPack4.3を入れて、どんな環境になったのでしょうか?主にcuda周りが気になります。 

$ nvprof --version
nvprof: NVIDIA (R) Cuda command line profiler
Copyright (c) 2012 - 2018 NVIDIA Corporation
Release version 10.0.326 (21)

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Mon_Mar_11_22:13:24_CDT_2019
Cuda compilation tools, release 10.0, V10.0.326

こちらはOpenCVのConfigurationの情報です。
-- NVIDIA CUDA: YES (ver 10.0, CUFFT CUBLAS FAST_MATH)
-- NVIDIA GPU arch: 72
-- NVIDIA PTX archs: 72
--
-- cuDNN: YES (ver 7.6.3)

日本語環境もちゃんとしておきましょう(前回同様)

・日本語入力設定
$sudo apt-get install aptitude
$sudo aptitude reinstall dbus <--これが重要
$sudo apt autoremove

$ sudo apt install language-pack-ja-base language-pack-ja
$ sudo apt install ibus-mozc
$ sudo apt-get install nano

reboot後に入力モードを変更→日本語(Mozc)(IBus)

動作モードをフルパワーに設定します

・動作モードの変更と環境の確認
$ sudo nvpmodel -m 0
$ sudo /usr/bin/jetson_clocks
$ sudo /usr/bin/jetson_clocks --show
$ sudo nvpmodel -q


$ pip -V
pip 19.3.1 from /usr/local/lib/python3.6/dist-packages/pip (python 3.6)

・numpy

$ sudo pip install numpy

 

OpenCV4の導入

今回、私の場合は、鬼のような依存関係やら、自分の無知と直面しながら、最終的に、install-opencv.shに出会い、解決に至りました。 

下記、install-opencv.shの修正が必要な部分は、二か所です。OpenCVのバージョンとopencv-contribを入れるかどうかです。
動作確認環境としてUbuntu 18.04 LTS で OpenCV 4.1.0 を入れた人が 22 Jun 2019 にありますね。
最新の4.2.0でチャレンジしてみます。(→成功しました!)


###################################### 
# INSTALL OPENCV ON UBUNTU OR DEBIAN # 
###################################### 

# -------------------------------------------------------------------- | 
# SCRIPT OPTIONS | 
# ---------------------------------------------------------------------| 
OPENCV_VERSION='4.2.0' # Version to be installed 
OPENCV_CONTRIB='YES' # Install OpenCV's extra modules (YES/NO) 
# -------------------------------------------------------------------- | 

# | THIS SCRIPT IS TESTED CORRECTLY ON | 
# |------------------------------------------------------| 
# | OS | OpenCV | Test | Last test | 
# |------------------|--------------|------|-------------| 
# | Debian 10.2 | OpenCV 4.2.0 | OK | 26 Dec 2019 | 
# |----------------------------------------------------- | 
# | Debian 10.1 | OpenCV 4.1.1 | OK | 28 Sep 2019 | 
# |----------------------------------------------------- | 
# | Ubuntu 18.04 LTS | OpenCV 4.1.0 | OK | 22 Jun 2019 | 
# | Debian 9.9 | OpenCV 4.1.0 | OK | 22 Jun 2019 | 
# |----------------------------------------------------- | 
# | Ubuntu 18.04 LTS | OpenCV 3.4.2 | OK | 18 Jul 2018 | 
# | Debian 9.5 | OpenCV 3.4.2 | OK | 18 Jul 2018 | 



# 1. UBUNTUやDEBIANのアップデート 

sudo apt-get -y update 
# sudo apt-get -y upgrade # Uncomment to install new versions of packages currently installed 
# sudo apt-get -y dist-upgrade # Uncomment to handle changing dependencies with new vers. of pack. 
# sudo apt-get -y autoremove # Uncomment to remove packages that are now no longer needed 
 
 
# 2. 依存関係のインストール 
 
# Build tools: 
sudo apt-get install -y build-essential cmake 
 
# GUI (GTKを選択する場合は,'qt5-default'を'libgtkglext1-dev'に変えて、ビルドオプションの'-DWITH_QT=ON'を削除する): 
sudo apt-get install -y qt5-default libvtk6-dev 
 
# Media I/O: 
sudo apt-get install -y zlib1g-dev libjpeg-dev libwebp-dev libpng-dev libtiff5-dev libjasper-dev \ 
libopenexr-dev libgdal-dev  

# Video I/O: 
sudo apt-get install -y libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev \ 
libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev yasm \ 
libopencore-amrnb-dev libopencore-amrwb-dev libv4l-dev libxine2-dev 
# Parallelism and linear algebra libraries: 
sudo apt-get install -y libtbb-dev libeigen3-dev 
 
# Python関係: 
sudo apt-get install -y python-dev python-tk pylint python-numpy \ 
python3-dev python3-tk pylint3 python3-numpy flake8 
 
# Java: 
sudo apt-get install -y ant default-jdk 
 
# Documentation and other: 
sudo apt-get install -y doxygen unzip wget 
 
# 3. OpenCV本体とオプション機能 
 
wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip 
unzip ${OPENCV_VERSION}.zip && rm ${OPENCV_VERSION}.zip 
mv opencv-${OPENCV_VERSION} OpenCV 
 
if [ $OPENCV_CONTRIB = 'YES' ]; then 
wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip 
unzip ${OPENCV_VERSION}.zip && rm ${OPENCV_VERSION}.zip 
mv opencv_contrib-${OPENCV_VERSION} opencv_contrib 
mv opencv_contrib OpenCV 
fi 
 
cd OpenCV && mkdir build && cd build 
 
if [ $OPENCV_CONTRIB = 'NO' ]; then 
cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON \ 
-DWITH_XINE=ON -DENABLE_PRECOMPILED_HEADERS=OFF .. 
fi 
 
if [ $OPENCV_CONTRIB = 'YES' ]; then 
cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON \ 
-DWITH_XINE=ON -DENABLE_PRECOMPILED_HEADERS=OFF \ 
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. 
fi 
 
make -j8 
sudo make install 
sudo ldconfig 
 
 

install-opencv.shが必要な環境を丸ごと入れてくれるので超便利!

 

python-opencvの動作確認

$ python3 -c "import cv2; print( cv2.__version__ )"
4.2.0
$ pkg-config --modversion opencv
4.1.2
※pkg-configが返す結果が違うみたいですね。(3と4の混在ではないので、気持ち悪いですけど、とりあえずそのままにします)

 

最新版Darknetの導入

Alexeyab氏のGithubを見ていると、ちょくちょく変更があります。最新のソースコードを落として、こまめにリビルドしましょう。(ソースコードを魔改造している場合は要注意です!) 

・cmakeからdarknetをbuild
参考:https://github.com/AlexeyAB/darknet

mkdir build-release
cd build-release
cmake ..
make
make install

 

その他(USBカメラ設定など)

USBカメラ周りの環境を整えます。 

■カメラの解像度を変更する

$ apt-get install v4l-utils

・デバイスの情報を表示
$ v4l2-ctl -d /dev/video0 --all

・対応解像度の表示
$ v4l2-ctl -d /dev/video0 --list-formats-ext

・解像度の変更
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=,height= --set-parm=

・コントロール一覧の表示
$ v4l2-ctl -d /dev/video0 --list-ctrls-menu

・コントロールの変更
$ v4l2-ctl -d /dev/video0 -c = 


 

▼この記事を書いたひと

001@2x.png

R&Dセンター 松井 良行

R&Dセンター 室長。コンピュータと共に35年。そしてこれからも!

 

おすすめの関連記事


機械学習・AIの最新記事


お問い合わせ

ご意見・ご質問などお気軽にお問い合わせ下さい。
ナカシャクリエイテブ株式会社

●富士見事務所 TEL : 052-228-8733 FAX : 052-323-3337
〒460-0014 愛知県名古屋市中区富士見町13−22 ファミール富士見711  地図
交通部 R&Dセンター

Email:メールでのお問い合わせ