Jetson NanoでOAK-D OpenCV DepthAIカメラを使ってみる!
ディープラーニングは大量のコンピュータリソースを必要とするため, それを効率的に演算するFPGA, GPU, TPU, VPU等のプロセッサが求められます. 今回, エッジデバイスにも搭載可能なNvidiaのJetsonシリーズとIntel製のVPUを備えたカメラの効率的な組み合わせを探求してみました. その結果, Jetson NanoとOAK-Dカメラのコンビが最適な環境を構築することが分かりました. これらの詳細について詳しく見ていきましょう.
今回試した組み合わせ
今回はGPUを備えているJetson NanoとVPUを備えているOpenCV AI Kitを組み合わせてみました. それぞれ単体で効率的にDeep learningの推論を行うことができます.
ボード | CUDAコア128基(Jetson Nano) |
カメラ | Intel® Movidius™ Myriad™ X Vision Processing Units(OpenCV AI Kit) |
準備したもの
私たちが試したJetson Nanoは, 128基のCUDAコアを備えたGPUを持ち, Tensorflowなどのプログラムを効率的に処理できます. 特に動画を扱う際には, メモリ4GBのJetson Nanoが優れたパフォーマンスを発揮します.
一方, OAK-DカメラはIntel® Movidius™ Myriad™ X VPUを搭載しており, ニューラルネットワークの処理を高速化します. この高速化は, Jetson Nanoと組み合わせることでさらに力を発揮します.
セットアップ
OAK-D OpenCV DepthAIカメラでMediaPipe実行用にDepthAI, Jetson Nanoで推論用にTensorflowをインストールします. セットアップ方法は以下の通りです.
DepthAI
# Disable ZRAM:
sudo systemctl disable nvzramconfig
# Create 4GB swap file
sudo fallocate -l 4G /mnt/4GB.swap
sudo chmod 600 /mnt/4GB.swap
sudo mkswap /mnt/4GB.swap
sudo -H apt install -y python3-pip
#Download and install the dependency package
sudo wget -qO- http://docs.luxonis.com/_static/install_dependencies.sh | bash
#Clone github repository
git clone https://github.com/luxonis/depthai.git
cd depthai
echo "export OPENBLAS_CORETYPE=ARMV8" >> ~/.bashrc
python3 install_requirements.py
Tensorflow
# dependency
sudo apt-get update
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
# update pip
sudo apt-get install python3-pip
sudo pip3 install -U pip testresources setuptools==49.6.0
sudo pip3 install -U --no-deps numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig
# tensorflow
sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 tensorflow
サンプル
Jetson Nano + OpenCV AI Kitで手のジェスチャー認識を試してみます.
手の形の認識ができれば成功です.
git clone --recursive https://github.com/tech-life-hacking/HandGestureRecognition.git
cd HandGestureRecognition
python3 example.py
検証
手のジェスチャー認識は
- 手の画像から手の代表点の座標を抽出
- その座標をクラスタリングしてどんなジェスチャーをしているか判別
ということをしています.
前者はOpenCV AI Kitに搭載されているVPUが行っており, この処理におおよそ20msくらいかかっています.
後者はJetson NanoのGPUが行っており, おおよそ0.7msかかっています.
このようにJetson NanoとOAK-Dカメラを組み合わせると, 手のジェスチャー認識の処理時間は20ms程度になります. 他に処理をいれなければ40-50FPS程度でることになります.
OAK-D vs Raspberry Pi
手の画像から手の代表点の座標を抽出する部分の処理時間をOAK-DとRaspberry Piで実行したときで比較しました. Raspberry Pi 4によるCPU推論に比べてOAK-DのVPU推論の方が40msほど早いです.
おわりに
Jetson NanoとOAK-Dカメラの組み合わせで手のジェスチャー認識を試してみました. 結果として, OpenCV AI Kitに搭載されているVPUが20msで手の代表点の座標を抽出し, Jetson NanoのGPUが0.7msでそれらをクラスタリングし, どのジェスチャーをしているか判別することができました. 処理全体の時間は20ms程度で, 40-50FPSのパフォーマンスを達成しました.
また, 同じジェスチャー認識の処理をRaspberry Piで試したところ, OAK-DカメラのVPU推論は, Raspberry Pi 4のCPU推論に比べて約40ms早く, 明らかな差を見せました.
これらの結果から, Jetson NanoとOAK-Dカメラの組み合わせは, エッジデバイスでのディープラーニングにおける非常に効果的な選択肢となります. エッジデバイスでディープラーニングを実装することを考えているなら, Raspberry Piだけでなく, Jetson NanoとOAK-Dカメラのような高性能なオプションも検討すべきです. これらのデバイスはそれぞれが単独で素晴らしい性能を発揮するだけでなく, 組み合わせることで互いの強みを最大限に引き出すことができます.
Jetson Nano
OAK-Dカメラ