Jetson nano で機械学習をやってみた

<h1>Jetson Nanoの初期セットアップ</h1>

nvidiaの公式に従っていけば問題ないと思います。
<a href="https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit">https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit</a>

ＯＳのインストールに成功したらこんな感じのデスクトップが表示
![top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513987/9f917556-f477-859c-cc25-d9e13805e041.png)

■sshで接続してみる。
普段使いのパソコンからTera Tarmを使ってリモートログイン

■パッケージのupdate

```
sudo apt-get remove python
sudo apt-get remove python3
sudo apt-get autoremove

sudo apt-get update
sudo apt-get upgrade
```
if

■とりあえすgit cmake tree  doxygenのインストール

```
sudo apt-get install git cmake tree  doxygen
```

<h2>TigerVNCを使ってRDTで接続</h2>

```
sudo apt install tigervnc-common tigervnc-standalone-server tigervnc-scraping-server

vncpasswd

x0vncserver -display :1 -passwordfile ~/.vnc/passwd


```

デーモンとして自動起動させる

```
sudo vi /etc/systemd/system/x0vncserver.service
```

以下を記述
＊＊＊＊はユーザ名を記述

```
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target
After=network.target remote-fs.target nss-lookup.target
After=x11-common.service 

[Service]
Type=forking
User=＊＊＊＊
Group=＊＊＊＊
WorkingDirectory=/home/＊＊＊＊
ExecStart=/bin/sh -c 'sleep 30 && /usr/bin/x0vncserver -display :1  -rfbport 5900 -passwordfile /home/＊＊＊＊/.vnc/passwd &'

[Install]
WantedBy=multi-user.target
```

以下のコマンドで自動起動を有効にする

```
sudo systemctl start x0vncserver.service
sudo systemctl status x0vncserver.service
```

成功すると自動起動でTigerVNCが立ち上がりWindowsから接続できるようになる。


ディスプレイの情報表示

```
xdpyinfo
```

<h2>Jetson nano のチュートリアルを動かしてみる</h2>

まずパフォーマンスの最大化する

Jetson NanoをCPU 4コアで動作

```
sudo nvpmodel -m 0
```

Jetson Nanoを最大動作周波数で動作

```
sudo jetson_clocks
```

■jetson-inferenceを使ってみる

レポジトリを作成

```
git clone https://github.com/dusty-nv/jetson-inference
cd jetson-inference
git submodule update --init
```

CMakeでビルド

```
mkdir build
cd build
cmake ../

make
sudo make install
```

ImageNetを使った画像のクラス分類

```
cd aarch64/bin
./imagenet-console orange_0.jpg output_0.jpg
```

以下の結果が出力される

```
class 0950 - 0.978907  (orange)
class 0951 - 0.020961  (lemon)
```

![orange.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513987/5cefd291-5790-f706-86e9-41ad0149f200.png)


<h2>Jetson NanoにＵＳＢカメラを接続してリアルタイム物体類推</h2>

```
./imagenet-camera googlenet --camera=/dev/video0 --width=640 --height=480 --network=googlenet
```

![real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513987/c294ba84-0255-d1d3-2406-69cff9216551.png)


■imagenet-cameraで使えるネットワーク

|Network|CLI argument|NetworkType enum|
|:-----------|------------:|:------------:|
|AlexNet	|alexnet	|ALEXNET|
|GoogleNet	|googlenet	|GOOGLENET|
|GoogleNet-12	|googlenet-12	|GOOGLENET_12|
|ResNet-18	|resnet-18	|RESNET_18|
|ResNet-50	|resnet-50	|RESNET_50|
|ResNet-101	|resnet-101	|RESNET_101|
|ResNet-152	|resnet-152	|RESNET_152|
|VGG-16		|vgg-16		|VGG-16|
|VGG-19		|vgg-19		|VGG-19|
|Inception-v4	|inception-v4	|INCEPTION_V4|


<h2>Jetson nano のサンプルアプリを動かしてみる Hello AI World</h2>

以下がJetson nano のサンプルフォルダ内

```
/usr/src/tensorrt/samples$ ls
common    Makefile.config  README.md      sampleFasterRCNN  sampleINT8     sampleMLP    sampleMNISTAPI   sampleOnnxMNIST  sampleSSD       sampleUffSSD
Makefile  python           sampleCharRNN  sampleGoogleNet   sampleINT8API  sampleMNIST  sampleMovieLens  samplePlugin     sampleUffMNIST  trtexec
```

■Jetson nano のcpuの熱がやばい

Jetson のヒートシンクが熱くなってきたので以下のコマンドで温度を調べてみたら
７０度近くまで上がっていた。やっぱりファンを付けた方が良さそうです。

```
cat /sys/class/thermal/thermal_zone0/temp
69500
```

■python3系　OpenCvのインストール

```
sudo apt-get install python3-opencv
```