Welcome to Mashykom WebSite




Jetson Nano で Pytorch を用いた推論


 シングルボードコンピュータの代表的な製品は Rapberry Pi と Jetson Nano の2種類です。Jetson nanoはアメリカの半導体メーカーであるNVIDIA社が製造・販売をするシングルボードコンピューターです。 Jetson Nano Developer Kit B01 にはディープラーニングのためのパッケージ Hello AI World が用意されています。ここでは、 Hello AI World パッケージを使用しないで、ディープラーニングの汎用フレームワーク Pytorch や Tensorflow を活用した機械学習の実際例を取り上げます。まず、Pytorch 及びJupyter Notebook のインストール方法と活用について説明します。

 このページでは、リモートPCとして Mac を使用した手順を説明しています。Windows マシンでも同様にします。

Last updated: 2022.1.27


Jetson Nano への Pytorch のインストール



 Jetson Nano への Pytorch のインストールの手順について、NVIDIAのForums サイトに沿って説明します。JetPack 4.6 を前提に説明します。Jetson Nano の端末に、以下のコマンド群を順番に入力します。


$ wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl
$ sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
$ pip3 install Cython
$ pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl

 ここでは、Pytorch v.1.8.0 をインストールしました。次に、Torchvision をインストールします。Pytorch のバージョンに合わせたバージョンを選択します。Pytorch v.1.8.0 に対応するのは torchvision v0.9.0 です。


$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
$ git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision   # see below for version of torchvision to download
$ cd torchvision
$ export BUILD_VERSION=0.9.0  # where 0.9.0 is the torchvision version  
$ python3 setup.py install --user

 このインストールには相当な時間がかかります。忍耐強く待ちましょう。インストールが正常に終了したことを確認するために、以下のような入力をします。


$ python3 

>>> import torch
>>> print(torch.__version__)
>>> print('CUDA available: ' + str(torch.cuda.is_available()))
>>> print('cuDNN version: ' + str(torch.backends.cudnn.version()))
>>> a = torch.cuda.FloatTensor(2).zero_()
>>> print('Tensor a = ' + str(a))
>>> b = torch.randn(2).cuda()
>>> print('Tensor b = ' + str(b))
>>> c = a + b
>>> print('Tensor c = ' + str(c))
>>> import torchvision
>>> print(torchvision.__version__)

>>> import torchvision
>>> print(torchvision.__version__)

 Illegal instruction (core dumped) というエラーが出たときは、

 export OPENBLAS_CORETYPE=ARMV8

という1行を .bashrc ファイルに追加します。その後、$ source .bashrc と読み込みます。


Jetson Nano への Jupyter Notebook のインストール



 Pytorch のインストールが完了したので、次に、Jupyter Notebook のインストールを行います。vivinkoというサイトに説明がありましたので、この手順を参考にします。以下のコマンドを打ちます。


$ sudo apt-get install python3-pip
$ pip3 install -U pip # pip自体のアップデート
$ pip3 install  jupyter notebook

 インストールでエラーが出たときは、以下のモジュールをインストールしてから、再実行します。


$ sudo apt install libbz2-dev libsqlite3-dev libffi-dev python3-dev

 設定ファイルの作成とパスワードの設定を行います。


$ jupyter notebook --generate-config

 設定ファイルは、~/.jupyter/jupyter_notebook_config.pyにあります。このファイルはコメント#のみが多数記述されていますが、これに以下のコードを追加します。該当する各コメント行を検索してから修正をするのは煩雑なので、もとのコメントコードはそのままの状態で、以下の4行を分かりやすい箇所に追加するだけにします。


c.NotebookApp.allow_remote_access = True
c.NotebookApp.base_url = '/jetson/'
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'

 base_url = '/jetson/'とすることで、http://[JetsonのIPアドレス]:8888/jetson/でアクセスできるようになります。次に、パスワードを設定します。以下のコマンドを打つと、パスワードの設定が要求されます。


$ jupyter notebook password

 Jupyter Notebookの自動起動をするために、エディターで /etc/systemd/system/jupyter.service を作成し、下記のようにします。{USER}と{GROUP}については、適宜置き換えてください。


[Unit]
Description = Jupyter Notebook
[Service]
Type=simple
PIDFile=/var/run/jupyter-notebook.pid
ExecStart=/bin/bash -c ". /home/{USER}/.local/bin/jupyter-notebook --notebook-dir=/home/koichi/my-notebooks"
WorkingDirectory=/home/{USER}/my-notebooks
User={USER}
Group={GROUP}
Restart=always
[Install]
WantedBy = multi-user.target

 自動起動のオプションを以下のコマンドで設定します。


$ sudo systemctl start jupyter.service
$ sudo systemctl enable jupyter.service

 最後に、パスを通します。以下の内容を~/.bash_profileに記載してください。


# Jupyterのコマンドが入っているディレクトリ
PATH="$PATH:~/.local/bin"

# 以下はCUDA関連ですが, 念のためパスを通しておく
PATH="$PATH:/usr/local/cuda/bin"
PATH="$PATH:/usr/local/cuda-10.2/bin"

 reboot すれば、Jupyter Notebook が利用できます。


Jetson Nano - Pytorch で画像識別


 Jetson Nano に ssh 接続したPCのターミナルからJupyter Notebook を起動します。


$ jupyter notebook

 と打ちます。すると Jupyter Notebook が起動して、以下のような表示が出ます。


[I 15:14:16.858 NotebookApp] ローカルディレクトリからノートブックをサーブ: /home/koichi
[I 15:14:16.858 NotebookApp] Jupyter Notebook 6.4.8 is running at:
[I 15:14:16.858 NotebookApp] http://Jetson:8888/jetson/
[I 15:14:16.858 NotebookApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。

 PCのブラウザで「http://[JetsonのIPアドレス]:8888/jetson/」にアクセスすると、Jetson Nano の Jupyter Notebook が開きます。テストに以下のスクリプトをコピペしてノートブックを作成してください。


# -*- coding: utf-8 -*-
try:
    import numpy
    numpyExists = True
except ImportError:
    numpyExists = False

try:
    import scipy
    scipyExists = True
except ImportError:
    scipyExists = False

try:
    import matplotlib
    matplotlibExists = True
except ImportError:
    matplotlibExists = False

try:
    import PIL 
    PILExists = True
except ImportError:
    PILExists = False

try:
    import keras
    kerasExists = True
except ImportError:
    kerasExists = False

try:
    import tensorflow
    tensorflowExists = True
except ImportError:
    tensorflowExists = False

try:
    import torch
    torchExists = True
except ImportError:
    torchExists = False


if numpyExists == True:
    print('numpyのバージョンは{0}です'.format(numpy.__version__))
else:
    print('numpyはインストールされていません')

if scipyExists == True:
    print('scipyのバージョンは{0}です'.format(scipy.__version__))
else:
    print('scypyはインストールされていません')

if matplotlibExists == True:
    print('matplotlibのバージョンは{0}です'.format(matplotlib.__version__))
else:
    print('matplotlibはインストールされていません')

if PILExists == True:
    print('PIL(Pillow)のバージョンは{0}です'.format(PIL.__version__))
else:
    print('PIL(Pillow)はインストールされていません')

if kerasExists == True:
    print('kerasのバージョンは{0}です'.format(keras.__version__))
else:
    print('kerasがインストールされていないか、まだ設定が済んでいません')

if tensorflowExists == True:
    print('tensorflowのバージョンは{0}です'.format(tensorflow.__version__))
else:
    print('tensorflowはインストールされていません')

if torchExists == True:
    print('pytorchのバージョンは{0}です'.format(torch.__version__))
else:
    print('pytorchはインストールされていません')

 このセルを実行すると、以下のような結果が出ます。

numpyのバージョンは1.19.4です
scipyのバージョンは0.19.1です
matplotlibのバージョンは2.1.1です
PIL(Pillow)のバージョンは8.4.0です
kerasがインストールされていないか、まだ設定が済んでいません
tensorflowはインストールされていません
pytorchのバージョンは1.8.0です

 Tensorflow はまだインストールされていないので、上記のような結果になります。それ以外で、インストールされていないモジュールはインストールしてください。インストールする際に、Numpy モジュールが最新バージョンになる可能性があります。その場合、使用中にエラーが出るときは、numpy モジュールを上記のバージョンにダウングレードします。


$ pip3 install numpy==1.19.4

 jupyter notebookを起動して、実行させるときに
ImportError: /usr/lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block
というエラーが出ることがあります。この時は、以下のようなコマンドを入力して、再度jupyter bookを起動して下さい。


$ export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1
$ jupyter notebooks

 Pytorch を用いて画像分類のスクリプトを実行してみましょう。このスクリプトは私のGitHub repoにあります。以下のスクリプトをコピペして、ノートブックを作成してください。わかりやすいようにセルに分割するといいでしょう。

 画像を用意しないといけないので、例えば、私のGitHub repo からダウンロードすることができます。下の画像をダウンロードして使用しても構いません。その場合は、デレクトリ ./images/ を作成して、その中に cat.jpg として配置してくださ。

image/cat.jpg
使用する猫の画像

 パッケージのimportとPyTorchのバージョンを確認します。その後、学習済みのAlexNetモデルを読み込みます。


# パッケージのimport
import numpy as np
import json
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline

import torch
import torchvision
from torchvision import models, transforms
# PyTorchのバージョン確認
print("PyTorch Version: ",torch.__version__)
print("Torchvision Version: ",torchvision.__version__)

# 学習済みのAlexNetモデルをロード

net = models.alexnet(pretrained=True)# 学習済みのパラメータを使用
net.eval()  # 推論モードに設定

print(net)

# 入力画像の前処理のクラス
class BaseTransform():
    """
    画像のサイズをリサイズし、色を標準化する。
    resize : int リサイズ先の画像の大きさ。
    mean : (R, G, B) 各色チャネルの平均値。
    std : (R, G, B) 各色チャネルの標準偏差。
    """

    def __init__(self, resize, mean, std):
        self.base_transform = transforms.Compose([
            transforms.Resize(resize),  # 短い辺の長さがresizeの大きさになる
            transforms.CenterCrop(resize),  # 画像中央をresize × resizeで切り取り
            transforms.ToTensor(),  # Torchテンソルに変換
            transforms.Normalize(mean, std)  # 色情報の標準化
        ])

    def __call__(self, img):
        return self.base_transform(img)

 画像を読み込みます。


# 1. 画像読み込み

image_file_path = './images/cat.jpg'
img = Image.open(image_file_path)  # [高さ][幅][色RGB]

# 2. 元の画像の表示
plt.imshow(img)
plt.show()

# 3. 画像の前処理と処理済み画像の表示
resize = 224
mean = (0.485, 0.456, 0.406)
std = (0.229, 0.224, 0.225)
transform = BaseTransform(resize, mean, std)
img_transformed = transform(img)  # torch.Size([3, 224, 224])

# (色、高さ、幅)を (高さ、幅、色)に変換し、0-1に値を制限して表示
img_transformed = img_transformed.numpy().transpose((1, 2, 0))
img_transformed = np.clip(img_transformed, 0, 1)
plt.imshow(img_transformed)
plt.show()

 出力結果からラベルを予測する後処理クラスを作成し、学習済みAlexNetモデルで画像分類を予測します。

# ILSVRCのラベル情報をロードし辞意書型変数を生成します
class_index = json.load(open('./data/imagenet_class_index.json', 'r'))
#class_index
# 出力結果からラベルを予測する後処理クラス
class Predictor():

    def __init__(self, class_index):
        self.class_index = class_index

    def predict_max(self, out):
        """
        確率最大のラベル名を取得する。
        out : torch.Size([1, 1000]) Netからの出力。
        """
        maxid = np.argmax(out.detach().numpy())
        predicted_label_name = self.class_index[str(maxid)][1]

        return predicted_label_name

# Predictorのインスタンスを生成します
predictor = Predictor(class_index)

# 前処理の後、バッチサイズの次元を追加する
transform = BaseTransform(resize, mean, std)  # 前処理クラス作成
img_transformed = transform(img)  # torch.Size([3, 224, 224])
inputs = img_transformed.unsqueeze_(0)  # torch.Size([1, 3, 224, 224])

# モデルに入力し、モデル出力をラベルに変換する
out = net(inputs)  # torch.Size([1, 1000])
result = predictor.predict_max(out)

# 予測結果を出力する
print("入力画像の予測結果:", result)

 結果は 「Egyptian_cat」 となるはずです。GPU を使用しているので、処理速度は結構速いです。私のGitHubにある画像分類のノートブック、image_classifier_vgg_pytorch.ipynb 、及び、Cifar_pytorch.ipynb もJetson Nano で実行可能です。簡単な学習はできますが、一般的なモデルを学習する能力はありません。


Pytorch-YOLOv5で物体検出


 次に、Yolo(You Only Look Once)v5 バージョンの実装を取り上げます。このパッケージを利用するためには、Python>=3.8 および PyTorch>=1.7 がインストールされていることが必要ですが、Python 3.6でも実行できます。ultralytics/yolov5を参照してください。そのGoogle Colab は YOLOv5_tutorials_roboflow.ipynbにあります。

 依存モジュールのダウンロードしておきます。このうち大部分は既ににインストール済みですが、インストールされていないモジュールだけがダウンロードされます。


$ sudo apt update
$ sudo apt install -y python3-opencv ssh
$ pip3 install -U pip
$ pip3 install requests tqdm pyyaml seaborn pycocotools thop

 yolov5のパッケージを以下のように git clone します。


$ git clone https://github.com/ultralytics/yolov5
$ cd yolov5

  「pip install -r requirements.txt」は使用しません。これで準備はできました。通常は、Jupyter notebook を起動して実行しますが、まずターミナルで実行してみましょう。

 Python スクリプトを用いた物体検出を行ってみましょう。以下のように入力して下さい。


$ python3 detect.py --source data/images --weights yolov5s.pt --conf 0.25

 自動的にyolov5s.pt がダウンロードされます。これは data/images ディレクトリにある2種類の画像からの物体検出の実行例です。結果は以下のように、 runs/detect/exp 内に保存されます。bus.jpg 、 zidane.jpg です。

Downloading https://ultralytics.com/assets/Arial.ttf to /home/koichi/.config/Ultralytics/Arial.ttf...
detect: weights=['yolov5s.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25,
iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False,
classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp,
exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False
YOLOv5 🚀 v6.1-65-g7a2a118 torch 1.8.0 CUDA:0 (NVIDIA Tegra X1, 3964MiB)

Downloading https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt to yolov5s.pt...
100%|██████████████████████████████████████| 14.1M/14.1M [00:05<00:00, 2.75MB/s] Fusing layers... 

YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients, 16.5 GFLOPs 
image 1/2 /home/koichi/my-notebooks/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, Done. (0.654s) 
image 2/2 /home/koichi/my-notebooks/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, Done. (0.116s) Speed: 275.0ms pre-process, 385.1ms inference, 118.7ms NMS per image at shape (1, 3, 640, 640) 
Results saved to runs/detect/exp

zidane.jpg
Zidane.jpg

次に、webcamera のライブ映像から物体検出を実行しましょう。webcamera を接続して、以下のように打って下さい。


$ python3 detect.py --source 2  

 Webcamからの映像が表示されるまでの処理時間は数十秒かかりますが、検出スピードは結構早いです。「ImportError: The _imagingft C module is not installed」というエラーが出る可能性があります。この時は、以下のコマンドを打ってから、Pillow をインストールし直して下さい。
$ sudo apt-get install libfreetype6-dev

 jupyter notebookを使用することを取り上げます。jupyter notebookを起動して、以下のようにセルを記述します。最初のセルに


!git clone https://github.com/ultralytics/yolov5 # clone repo
%cd yolov5

import torch
from IPython.display import Image, clear_output # to display images

clear_output()
print('Setup complete. Using torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if
torch.cuda.is_available() else 'CPU'))

 このセルを実行後、2番目のセルに以下の内容を作成します


!python3 detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images/
Image(filename='runs/detect/exp/zidane.jpg', width=600)

このセルを実行すると
model.warmup(imgsz=(1 if pt else bs, 3, *imgsz), half=half) # warmup
の1行に invalid syntax エラーが出ますが、実行され、画像 zidane.jpg が表示されます。

 全部の画像を表示するには


#display inference on ALL test images

import glob
from IPython.display import Image, display
for imageName in glob.glob('./runs/detect/exp/*.jpg'): #assuming JPG
    display(Image(filename=imageName))
    print("\n")

 というセルを作成します。

 TensorRT を使用するときには、以下のように学習済みモデルの重みを変換します。


# https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-pip
#!pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com # install tensorrt

!python3 models/export.py --weights yolov5s.pt --include engine --imgsz 640 640 --device 0 # export
!python3 detect.py --weights yolov5s.engine --imgsz 640 640 --device 0 # inference


TensorFlow Lite でリアルタイム物体検出


 Tensorflow Lite のインストールなどでは、背後で実行されているビルドで64bit C++コンパイラーが使用されます。 ここで、OSのバージョンおよびC++コンパラーのバージョンを調べておきましょう。OSのバージョンチェックは以下のコマンドを打ちます。


$ uname -a 
$ cat /etc/os-release
$ gcc -v

 aarch64-linux-gnu と表示されているはずです。TensorFlow Lite の C ++ API をビルドするために必要な64bit C++コンパイラーは aarch64-linux-gnu です。

 PythonでTensorFlow Liteを使用すると、 Raspberry PiやEdgeTPUを備えたCoralデバイスなど、Linuxベースの組み込みデバイスに最適です。PythonでTensorFlow Liteモデルの実行をすばやく開始するには、すべてのTensorFlowパッケージではなく、TensorFlow Liteインタープリターのみをインストールします。この簡略化されたPythonパッケージをtflite_runtimeと言います。

 tflite_runtimeパッケージは、完全なtensorflowパッケージの数分の1のサイズであり、TensorFlow Lite(主にInterpreter Pythonクラス)で推論を実行するために必要な最小限のコードが含まれています。公式サイトの説明によれば、TensorFlow Liteランタイムパッケージをインストールするには、次のコマンドを実行します。


$ sudo apt install curl 
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt update
$ sudo apt install python3-tflite-runtime

 このコマンドにより tflite_runtime のパッケージが /usr/lib/python3/dist-packages にインストールされます。

 この例を用いた tflite_runtime の実行を試みます。使用する 画像や MobileNet v1 モデルをインストールします。


$ mkdir tmp
$ curl https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp > ~/tmp/grace_hopper.bmp

$ curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_224.tgz | tar xzv -C ~/tmp

$ curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz  | tar xzv -C ~/tmp  mobilenet_v1_1.0_224/labels.txt

$ mv ~/tmp/mobilenet_v1_1.0_224/labels.txt ~/tmp/

 部分的にエラーが出ますが、無視します。Python スクリプト label_image.py を/home/にコピーします。tensorflow モジュールから Interpreter をインポートする代わりに、tflite_runtime からインポートする必要があります。このスクリプトは Tensorflow 向けに書かれているので、以下の2箇所に修正が必要です。


import tensorflow as tf  ⇨  import tflite_runtime.interpreter as tflite

interpreter = tf.lite.Interpreter(model_path=args.model_file)  ⇨  interpreter = tflite.Interpreter(model_path=args.model_file)

 この修正後、以下のコマンドを実行します。


$ python3 label_image.py   --model_file ~/tmp/mobilenet_v1_1.0_224.tflite   --label_file ~/tmp/labels.txt   --image ~/tmp/grace_hopper.bmp


0.919720: 653:military uniform
0.017762: 907:Windsor tie
0.007507: 668:mortarboard
0.005419: 466:bulletproof vest
0.003828: 458:bow tie, bow-tie, bowtie
time: 169.113ms

 OpenCV のインストールが済んでいない時は、以下のコマンドを打って cv2 をインストールして下さい。


$ sudo apt install python3-opencv

 Tensorflow Lite の公式ページに沿って説明します。TensorFlow のGitHubから Tensorflow Lite パッケージをダウンロードします。Raspberry Pi 向けのコードですが、Jetson Nanoでも実行可能です。


$ git clone https://github.com/tensorflow/examples --depth 1

$ cd examples/lite/examples/object_detection/raspberry_pi

$ sh setup.sh

---- Successfully installed absl-py-1.0.0 argparse-1.4.0 flatbuffers-1.12 numpy-1.22.1 opencv-python-4.5.3.56 pybind11-2.9.0 tflite-runtime-2.7.0 tflite-support-0.3.1 (中略) -e Downloaded files are in ./

 と表示されて、インストールが終わります。warning がいくつか出ますが、無視してください。tflite_runtime をはじめとする関連するファイルはすべてユーザ直下のディレクトリ 「.local/lib/python3.x」 にインストールされます。なお、
「/home/pi/examples/lite/examples/object_detection/raspberry_pi」
には以下のファイルがインストールされます。


README.md                          object_detector.py       test_data
detect.py                          object_detector_test.py  utils.py
efficientdet_lite0.tflite          requirements.txt
efficientdet_lite0_edgetpu.tflite  setup.sh

ここで使用される学習済みモデルが efficientdet_lite0.tflite になります。これは EfficientNet をTensorflow Lite で使用できるように変換したモデルです。Webcamからの映像処理にとなって必要となるモジュールをインストールしておきます。


$ sudo apt install portaudio19-dev
$ pip install pyaudio

次に、Jetson Nano に Webcamera を接続して下さい。Raspberry Piのデスクトップにあるターミナルから実行して下さい。


$ python3 detect.py \
  --model efficientdet_lite0.tflite --cameraId 2

 と入力して、Web camera を用いた物体検出のコードを実行します。デスクトップ画面に結果が表示されます。 以下のスクリプトが detect.py の内容です。

 Jetson Nano のデスクトップのターミナルから実行すると、このコマンドは正常に作動して、デスクトップに Web camera の映像が表示されて、物体検出がされるはずです。検出スピードは早いです。


TensorFlow 2.4.1 のインストール


 Tensorflow のJetson Nano へのインストールは少々厄介です。NVIDIA の Forums に説明されているインストールの説明通りに実行すると「no matching distribution found 」というエラーが出て終了します。JetPack 4.6 に対応するwheel が存在しないようです。また、Tensorflow 2.5.0 が CUDA 11.0 and cuDNN version 8.0.4 に依存しているが、Jetson Nano はこれに対応していません。JetPack がバージョンアップされ、これに対応できるまで待つ必要があるそうです。さらに、 CUDA とNumpy のバージョンが衝突することによるエラーも起きているようです。Tensorflow はインストールに 2.1 GB のストレージを要求します。

 JetPack 4 には Python 3.6.9.がインストールされていますので、確認して下さい。Jetson Nano (aarch64)向けのwheelは、Qengineeringさんが用意していますので、install-tensorflow-2.4.0-on-jetson-nano.htmlで説明されているい手順に従います。以下のコマンドを順に入力します。


# get a fresh start (remember, the 64-bit OS is still under development)
$ sudo apt-get update
$ sudo apt-get upgrade

# install pip and pip3
$ sudo apt-get install python-pip python3-pip

# remove old versions, if not placed in a virtual environment (let pip search for them)
$ sudo pip uninstall tensorflow
$ sudo pip3 uninstall tensorflow

# install the dependencies (if not already onboard)
$ sudo apt-get install gfortran
$ sudo apt-get install libhdf5-dev libc-ares-dev libeigen3-dev
$ sudo apt-get install libatlas-base-dev libopenblas-dev libblas-dev
$ sudo apt-get install liblapack-dev
$ sudo -H pip3 install Cython==0.29.21

# install h5py with Cython version 0.29.21 
$ sudo -H pip3 install h5py==2.10.0
$ sudo -H pip3 install -U testresources numpy

# upgrade setuptools 39.0.1 -> 53.0.0
$ sudo -H pip3 install --upgrade setuptools
$ sudo -H pip3 install pybind11 protobuf google-pasta
$ sudo -H pip3 install -U six mock wheel requests gast
$ sudo -H pip3 install keras_applications --no-deps
$ sudo -H pip3 install keras_preprocessing --no-deps

# install gdown to download from Google drive
$ sudo -H pip3 install gdown

# download the wheel
$ gdown https://drive.google.com/uc?id=1DLk4Tjs8Mjg919NkDnYg02zEnbbCAzOz

# install TensorFlow 
$ sudo -H pip3 install tensorflow-2.4.1-cp36-cp36m-linux_aarch64.whl

 サイズが大きのでインストールには時間がかかります。TensorFlow 2.4 C++ API 向けのインストール手順も説明されていますが、C++ APIのインストールは省略します。インストールの確認をしましょう。

$ python3
Python 3.6.9 (default, Dec 8 2021, 21:08:43)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.


>>> import tensorflow as tf
2022-03-13 11:18:10.849413: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic
library libcudart.so.10.2
2022-03-13 11:18:18.202415: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic
library libcudart.so.10.2
>>> tf.__version__
'2.4.1'


このページの先頭に戻る

Jetson Nano でコンピュータビジョン

Jetson Nano Mouse ロボットの操作

トップページに戻る