Jetson Nanoでディープラーニング

# Jetson Nanoでディープラーニング
　[Jetson Nano TIPSまとめ](https://qiita.com/karaage0703/items/b14c249aa33112669ee4)のページが大きくなってきたので、ディープラーニング関連の項目を切り出してまとめました。


## TensorFlowのセットアップ方法
　公式の方法は以下です。
[Jetson NanoへのTensorFlowセットアップ方法（公式）](https://docs.nvidia.com/deeplearning/frameworks/install-tf-jetson-platform/index.html)

　ただし、少し煩雑なのと現時点（2019/05/12）でいくつか問題点があるため、問題点を回避しつつ自動でセットアップするスクリプトを作成しました。以下コマンドで（比較的）楽々セットアップできます。

```sh
$ git clone https://github.com/karaage0703/jetson-nano-tools
$ cd jetson-nano-tools
$ ./install-tensorflow.sh
```

　追記：JetPack V4.4の場合は、最後の`install-tensorflow.sh`の代わりに以下スクリプトを実行してください。

```sh
$ ./install-tensorflow-v44.sh
```

　その他、TensorFlow関係のセットアップでハマりやすいことを記載しておきます。

### pip3 install -U pip してしまうとその後「cannot import name ‘main’ 」というエラーが出る
　`pip3 install -U pip`を実行してはいけないようです。もし、誤って実行してしまった場合は、以下コマンドでリカバーできます。

```sh
$ sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall
```

　詳しくは、[このサイト](https://kokensha.xyz/python/python-pip3-cannot-import-name-main-error-after-upgrading-pip/)など参照下さい。


### 公式の方法でTensorFlowをインストールできない
　以下でバージョン固定してTensorFlowをインストールして下さい。

```sh
$ pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.4 --user
```

　詳細は、以下のリンク先を参照下さい。

[Official TensorFlow for Jetson Nano !!!](https://devtalk.nvidia.com/default/topic/1048776/jetson-nano/official-tensorflow-for-jetson-nano-/3)

### 404 Client Error:でインストールできない
　pip3に`--no-cache-dir`をつけた以下コマンドでTensorFlowをインストールできました。

```sh
$ pip3 install --no-cache-dir --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.4 --user
```

　以下のコミュニティーサイトの情報を参考にしました。

[Unable to install TensorFlow on Jetson Nano because of "404" on NVidia server!](https://devtalk.nvidia.com/default/topic/1055757/unable-to-install-tensorflow-on-jetson-nano-because-of-quot-404-quot-on-nvidia-server-/)

### `tf.__version__`でエラーが発生する
JetPack v4.4で発生しました。Twitterで教えてもらいましたが、`tf.version.VERSION`でバージョンが確認できるようです。何故…

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">やっぱりそうなんですね。<br>jetpack 4.4のtensorflow2.xの挙動がよくわかりません...<br><br>わかったのは、<br>tf .__ version__ =&gt; NG<br>tf.version.VERSION =&gt; OK<br>でした。<a href="https://t.co/6jwSRl3Yzl">https://t.co/6jwSRl3Yzl</a> <a href="https://t.co/e6DqcEp3hg">pic.twitter.com/e6DqcEp3hg</a></p>&mdash; nb.o (@Nextremer_nb_o) <a href="https://twitter.com/Nextremer_nb_o/status/1266736451200315392?ref_src=twsrc%5Etfw">May 30, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

とりあえず使いたいソフトに`tf.__version__`がある場合は、コメントアウトするなりしましょう。自分のソフトに関しては、tryで囲んでます。

## Kerasのセットアップ方法
　TensorFlowのラッパープログラムKerasの使い方です。元々は単独のプログラムだったのですが、途中からTensorFlowに取り込まれたため、TensorFlow内蔵のKerasと単体のKerasがあります。それぞれ説明します。

### TensorFlow内蔵のKerasを使用する方法
　Jetson Nanoで使う最新のTensorFlowにはKerasが内蔵されているので、TensorFlow内蔵のKerasを使うのがオススメです。import文を書き換えるだけで基本的にそのまま動きます。

　具体的には、例えば以下のようなimport文であれば

```python
from keras.preprocessing.image import array_to_img, img_to_array, load_img
from keras.models import model_from_json
```

　以下のように変更します。

```python
from tensorflow.keras.preprocessing.image import array_to_img, img_to_array, load_img
from tensorflow.keras.models import model_from_json
```

### 単体のKerasをインストールする方法
　単体のKerasは以下のコマンドを実行してインストールできます（TensorFlowはインストール済みの前提です）。単体のKerasを前提にしたプログラムを動かすときは、Kerasを入れた方が手っ取り早いと思います。

```sh
$ sudo apt install libatlas-base-dev gfortran
$ pip3 install -U cython
$ pip3 install keras
```

 officialのKeras拡張`keras-contrib`をインストールする場合は、追加で以下も実行下さい。

```sh
$ pip3 install git+https://www.github.com/keras-team/keras-contrib.git
```

　以下のページを参考にしました。

[【Jetson_nano】インストールからTensorflow,Chainer,そしてKeras環境構築出来たよ♬](https://qiita.com/MuAuan/items/eaf0940491d7232377c7)

## PyTorchのインストール方法
　TensorFlowを入れた後に以下コマンドを実行しましょう。

```sh
$ wget https://nvidia.box.com/shared/static/veo87trfaawj5pfwuqvhl6mzc5b55fbj.whl -O torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl
$ pip3 install numpy torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl
```

　[公式情報](https://devtalk.nvidia.com/default/topic/1049071/pytorch-for-jetson-nano/)ままです。最新のバージョンや動作確認に関しては、公式情報参照下さい。

# Jetson Nanoでディープラーニングを使った応用例

## StayleGANを動かす
　以下記事参照下さい。

[Jetson Nano上でStyleGANを使って無限に人物画像生成するデモを行う方法](https://qiita.com/karaage0703/items/f78b04ab952ee7264f9b)

## Jetson Nanoでリアルタイムに物体検出する
　以下記事参照下さい。

[Jetson Nanoでリアルタイムに物体検出する方法](https://qiita.com/karaage0703/items/67050f2418aa6bb3851a)


## Jetson Nanoで骨格検出「tf-pose-estimation」

[Jetson Nanoで「tf-pose-estimation」をセットアップする方法](https://qiita.com/karaage0703/items/1f6f4f19e623102715bb)

[Jetson Nanoとディープラーニングを使って身体を楽器にする「Skeleton Sequencer」を作ってみた](https://www.shumi-tech.online/entry/2019/07/15/Jetson_Nanoとディープラーニングを使って身体を楽器にす)

## スタイル変換

[ディープラーニングで軽量のスタイル変換を手軽に楽しむ方法](https://karaage.hatenadiary.jp/entry/2019/08/02/073000)

[ディープラーニングで自撮り画像をアニメ画像に画風変換する方法]
(https://qiita.com/karaage0703/items/221f96436c32f6f405c7)

# 関連記事
[Jetson Nano関係のTIPSまとめ](https://qiita.com/karaage0703/items/b14c249aa33112669ee4)
Jetson Nano関係の情報はこちらにまとめています