2020年8月19日水曜日

Jetson Nano/NXの設定(追記9月1日)

とりあえず作業やテストに必要な設定を一通りインストール。

NXも同じJetpack4.4のopencv4.1.1だとYOLOv3が遅いのでスクリプトのgstreamerをオフにしする。

cmakeflugsは-D WITH_GSTREAMER=ONをOFFにするコメントアウトしても

gstreamerはインストールされる。システムにエラーが出てきたので一度クリーンインストール。


https://github.com/mdegans/nano_build_opencv

7.5FPSから9.1FPSに改善。


Jeston nano・NX setting

ファイル名を英語に変更

LANG=C xdg-user-dirs-gtk-update

sudo apt-get update

sudo apt-get upgrade

エディター、画像処理ソフト、ドライブ用ソフトをインストール

sudo apt-get install nano

sudo apt-get install ffmpeg

sudo apt-get install gparted

参考用ページ

https://www.nakasha.co.jp/future/ai/vol2_yolov3nvidia_jetson_nano.html

Full Power化

sudo nvpmodel -m 0

sudo jetson_clocks


git clone https://github.com/AlexeyAB/darknet


モデルのダウンロード

Pre-Trained Modelを~/darknetにダウンロードしておきます。


YOLOv3

YOLOv3 SPP

YOLOv3 Tiny


恐らく、Jetson Nanoでカメラと共に使うならTinyモデルの方です。ダメ元でやってみる用にYOLOv3、YOLOv3-SPPも念のため落としておきましょう。


nano .bashrc


export PATH=/usr/local/cuda/bin:${PATH}

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}


***********************************************************


GPU=1

CUDNN=1

CUDNN_HALF=1

OPENCV=1

AVX=0

OPENMP=1

LIBSO=1

ZED_CAMERA=0

# set GPU=1 and CUDNN=1 to speedup on GPU

# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher

# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)

DEBUG=0

ARCH= -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,compute_61]

OS := $(shell uname)

# Tesla V100

# ARCH= -gencode arch=compute_70,code=[sm_70,compute_70]

# GeForce RTX 2080 Ti, RTX 2080, RTX 2070, Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Tesla T4, XNOR Tensor Cores

# ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]

# Jetson XAVIER

# ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]

# GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4

# ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61

# GP100/Tesla P100 - DGX-1

# ARCH= -gencode arch=compute_60,code=sm_60

# For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:

 ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]

# For Jetson Tx2 or Drive-PX2 uncomment:

# ARCH= -gencode arch=compute_62,code=[sm_62,compute_62]


 *********************************************************


YOLOv3モデルを使って、WEBカメラで認識させてみます。

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights

./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 0


ラベリングする(アノテーション)

 Yoloは上記で作ったイメージファイルの他に、これらに対応したTXTファイルが必要です。(イメージファイルのどの部分に対応するクラス画像があるかを示すテキストファイルで、イメージファイルの枚数分必要です)ここら辺が一番単調で、手作業では時間のかかる部分となります。今回ラベリングソフトはlabelimgを使いました。以下インストール方法ですが、すでにpython3をインストールしている場合は3,4行目は必要ありません。


git clone https://github.com/tzutalin/labelImg.git

sudo apt install pyqt5-dev-tools

sudo apt install python3-pip

sudo pip3 install lxml

cd labelImg

make qt5py3

python3 labelImg.py


そしてJetson NanoでexFATフォーマットのUSBメモリーが使えるように、以下コマンドで「exfat-fuse」と「exfat-utils」をインストールします。

$ sudo apt-get update

$ sudo apt-get install exfat-fuse expat-utils

続いてJetson Nanoにカードリーダーを接続し、そこにSDカードAを接続します。

さらに別のポートにUSBメモリーを接続します。


clone micro SD card

sudo dd bs=4M if=/dev/sde of=jetcard_image.img status=progress count=6250


*6250 x 4MB=25000MB

マイクロSDカードに書込み

sudo dd bs=4M if=jetcard_image.img of=/dev/sde status=progress



CUDAのサンプルコード

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0563?page=4

CUDAのサンプルコードは「/usr/local/cuda-10.2/samples/」にインストールされています。そこでサンプルコードをあらかじめユーザーが読み書き可能な領域にコピーしておきます。


$ cp -a /usr/local/cuda-10.2/samples/ ~/

サンプルコードのトップディレクトリでmakeを実行すればひととおりビルドしてくれます。時間がかかるのが嫌なら,次の例のように個別にビルドしましょう。


$ cd ~/samples/1_Utilities/deviceQuery

$ make

$ ./deviceQuery


$ cd ~/samples/5_Simulations/oceanFFT/

$ make

$ ./oceanFFT


$ cd ~/samples/5_Simulations/smokeParticles/

$ make

$ ./smokeParticles


Swapの設定

https://www.jetsonhacks.com/2019/04/14/jetson-nano-use-more-memory/

git clone https://github.com/JetsonHacksNano/installSwapfile

cd installSwapfile

./installSwapfile.sh


wiwao@wiwao-desktop:~$ free -h

              total        used        free      shared  buff/cache   available

Mem:           3.9G        2.1G        523M        345M        1.3G        1.3G

Swap:          1.9G         24K        1.9G


wiwao@wiwao-desktop:~/installSwapfile$ ./installSwapfile.sh

Creating Swapfile at:  /mnt

Swapfile Size:  6G

Automount:  Y

-rw-r--r-- 1 root root 6.0G  8月 19 10:03 swapfile

-rw------- 1 root root 6.0G  8月 19 10:03 swapfile

Setting up swapspace version 1, size = 6 GiB (6442446848 bytes)

no label, UUID=d46292ab-c15d-4c3f-937e-870c5a1f6200

Filename Type Size Used Priority

/dev/zram0                              partition 506392 132 5

/dev/zram1                              partition 506392 132 5

/dev/zram2                              partition 506392 132 5

/dev/zram3                              partition 506392 132 5

/mnt/swapfile                          file    6291452 0 -1

Modifying /etc/fstab to enable on boot

/mnt/swapfile

Swap file has been created

Reboot to make sure changes are in effect


wiwao@wiwao-desktop:~/installSwapfile$ free -h

              total        used        free      shared  buff/cache   available

Mem:           3.9G        2.1G        568M        352M        1.2G        1.3G

Swap:          7.9G        528K        7.9G


************************************************************************************

# /etc/fstab: static file system information.

#

# These are the filesystems that are always mounted on boot, you can

# override any of these by copying the appropriate line from this file into

# /etc/fstab and tweaking it as you see fit.  See fstab(5).

#

# <file system> <mount point>             <type>          <options>                               <dump> <pass>

/dev/root            /                     ext4           defaults                                     0 1

/mnt/swapfile swap swap defaults 0 0

************************************************************************************

*********

スワップファイルのONとOFFはコメントアウトをmnt/swapfile swap swap defaults 0 0に追加もしくは削除

*********

# /etc/fstab: static file system information.

#

# These are the filesystems that are always mounted on boot, you can

# override any of these by copying the appropriate line from this file into

# /etc/fstab and tweaking it as you see fit.  See fstab(5).

#

# <file system> <mount point>             <type>          <options>                               <dump> <pass>

/dev/root            /                     ext4           defaults                                     0 1

# /mnt/swapfile swap swap defaults 0 0


gpuGraphを使う方法

 以下ソフトを使用します。

gpuGraph

For Python 3, Matplotlib may be installed as follows:


$ sudo apt-get install python3-matplotlib

$ git clone https://github.com/JetsonHacksNano/gpuGraph

$ cd gpuGraph

$ python3 gpuGraph.py


オープンフレームワークスのインストール方法

wget https://openframeworks.cc/ci_server/versions/nightly/of_v20200818_linuxarmv7l_nightly.tar.gz

tar -zxvf of_v20200818_linuxarmv7l_nightly.tar.gz

mv of_v20200818_linuxarmv7l_release openFrameworks

mv openFrameworks of_10.1


sudo apt install cmake

cd of_10.1/scripts/linux/ubuntu

sudo ./install_dependencies.sh


1.

nano of_10.1/libs/openFrameworksCompiled/project/makefileCommon/config.shared.mk


else ifeq ($(PLATFORM_ARCH),armv7l)

else ifeq ($(PLATFORM_ARCH),aarch64)


2.

nano of_10.1/libs/openFrameworksCompiled/project/linuxarmv7l/config.linuxarmv7l.default.mk

を開き41〜48行目付近


#PLATFORM_CFLAGS += -march=armv7

#PLATFORM_CFLAGS += -mtune=cortex-a8

#PLATFORM_CFLAGS += -mfpu=neon

#PLATFORM_CFLAGS += -mfloat-abi=hard

PLATFORM_CFLAGS += -fPIC

PLATFORM_CFLAGS += -ftree-vectorize

PLATFORM_CFLAGS += -Wno-psabi

PLATFORM_CFLAGS += -pipe


4行にコメント記号を入れ(上記#)、

さらに69〜71行目付近


#PLATFORM_PKG_CONFIG_LIBRARIES += glesv1_cm

#PLATFORM_PKG_CONFIG_LIBRARIES += glesv2

#PLATFORM_PKG_CONFIG_LIBRARIES += egl


3行にコメント記号を入れて保存。


3.追加のファイルをダウンロードしてビルドした後

Download apothecary to recompile kiss and tess2:

git clone https://github.com/openframeworks/apothecary.git

cd apothecary/apothecary/

./apothecary -t linux download kiss

./apothecary -t linux prepare kiss

./apothecary -t linux build kiss

./apothecary -t linux download tess2

./apothecary -t linux prepare tess2

./apothecary -t linux build tess2


アーカイブをコピーしてオープンフレームワークスの中と入替える


apothecary/apothecary/build/kiss/lib/linux/libkiss.a

to 

openFrameworks/libs/kiss/lib/linuxarmv7l/libkiss.a


Copy

apothecary/apothecary/build/tess2_patched/build/libtess2.a

to

openFrameworks/libs/tess2/lib/linuxarmv7l/libtess2.a


最終スクリプトの実行


cd of_10.1/scripts/linux


へ行きコンパイルを実行

./compileOF.sh -j4

その後は各サンプルのフォルダーに入ってmake -j4でmake RunReleaseで実行

0 件のコメント:

コメントを投稿