AI環境の設定手順 Part_I : 物体検出入門 (Jetson Xavier NX編)
0. 記事の内容
群馬県産業技術センターではエッジコンピュータを用いたAI技術による物体検出の検討を行い成果を報告書にまとめ、公開 [pdfファイル: 2,594kB] しています。そして、さらにその内容を広く県内企業の方にも活用できるようにソフトウェアの設定をはじめとした環境設定から動作確認までの一連の操作を手順書としてまとめました。
ここでは、その手順書の概要を示し、より具体的な手順書の電子ファイルにつきましては群馬産業技術センター デジタルソリューションラボ に問い合わせ [外部リンク] 頂ければと思います。
1. 目的
この手順書は、近年、Deep Learningとして様々なところでその成果が活用されているAI技術を具体的にボードコンピュータに導入する過程を示すことにより、中小企業へのAI技術の導入やAI技術を利用した製品の開発など、企業の技術力の高度化に寄与することを目的とします。
具体的には、NVIDIA社の高機能なエッジコンピュータJetson Xavier NXに物体検出として高い検出率をもつYOLO v3を導入し、PythonプログラムによりUSBに接続されたカメラからの映像の取り込みと物体検出の一連の手順を示しています。
2-a. はじめに
現在、Deep LearningやAI技術のたくさんの事例が文献やインターネットなどに紹介されています。しかし、この分野の研究開発が活発に行われているため、関連するソフトウェアのバージョンアップも頻繁に行われ、ソフトウェア環境を構築しようとしもエラー等が発生し、ソフトウェアの扱いに慣れた技術者でなければ、紹介されている事例を確認することができない場合も多く、AI技術の確認や導入、関連した製品の開発などを行うときの障害となっています。
本手順書ではソフトウェア環境の再現性に注意してコンピュータやソフトウェアの取り扱いに不慣れな技術者でも手順に従って進めることにより環境を構築し、Deep Learningによる物体検出を体験できる共に、手順の改良などにより利用者が必要する環境を自身で構築できる技術力を得られるよう手順を詳しく示しています。
2-b. 適用範囲
本手順書で使用する主要な機器等の構成を以下に示します。
エッジコンピュータ : NVIDIA社 Jetson Xavier NX Developer Kit
基本ソフト(OS) : JetPack JP4.4 (Ubuntu 18.04 LTSベース)
プログラミング : Python 3.6.9 および Spyder 3
フレームワーク : Tensorflow 1.15.4, Keras 2.1.1
物体検出AIモデル : Keras版 YOLO v3
USBカメラ : iDS社 UI-3280CP-C-HQ R2
電子部品 : ブレッドボード、LED、スイッチ、線材等
最終的に構成するDeep Learningのソフトウェア環境は、YOLO v3によるUSBカメラの動画から物体の検出までですが、各ソフトウェア環境などは単独または組み合わせて利用することも可能です。
3. エッジコンピュータの設定
A. Jetson Xavier NX
A-1. 構成と仕様
NVIDIA社のエッジコンピュータJetson Xavier NX Developer Kit以外に手順書の動作を確認するために次のものが必要となります。
* パソコン (手順書では Windows 10 Pro搭載)
* USB接続のキーボードとマウス
* HDMIまたはDisplayPortに対応したモニタ
* システムを設定するmicroSD Cardとリーダ/ライタ
* 有線または無線によるインターネットおよびメールへのアクセス環境
* インターネットに接続可能なパソコン
パソコンはシステムをmicroSD Cardに設定するために用います。
また、メールはファイルをダウンロードするサイトの登録を行うときに必要となります。
Jetson Xavier NXは、最先端の組込み用AIスーパーコンピュータとして2019年11月に発表され、低電力で小型軽量ながら高速に機械学習フレームワークや複雑なDNN(Deep Neural Network)を実行でき、ロボット、ドローン、スマートカメラ、ポータブル医療機器、組込みIoTシステムなどで活用されることを目的に製品化されたものです。
Jetson Xavier NX
A-2. microSD Card
microSD Cardは、カメラや携帯電話など様々なところで利用されていますが、容量や性能の異なる新旧の製品が販売されています。Jetson Xavier NXで利用するときは、容量以外にデータの読出しや書込みなどを考慮して選択する必要があります。
microSD Card
B. 基本ソフトの設定(OS)
B-1. システムイメージ(JetPack)
(1) イメージの取得
microSD Cardに書込むイメージとしてJetson Xavier NXの基本ソフトウェアのOSとAI開発環境を含むソフトウェアのJetPackをNVIDIA社のサイトからダウンロードする手順を示します。
(2) 書き込みソフト
ダウンロードしたJetPackのイメージをmicorSD Cardに書込むためには、専用のライタソフトが必要です。Windows 10の環境で利用できるBalenaEtcherソフトの設定を行います。
Balena Etcher
(3) microSD Cardへの書き込み
BalenaEtcherソフトにより、JetPackのイメージをmicroSD Cardに書込む手順を示します。
B-2. システムの導入と環境設定
(1) Ubuntu 18.04の設定
microSD CardをJetson Xavier NXのカードソケットに挿入し、Jetson Xavier NXに電源アダプタを接続して、システムを起動させます。
初回の起動で必要なUbuntuのシステムの設定の手順を示します。
Ubuntu 18.04
(2) 環境設定
基本システムの導入後、ログインしたときに現れるメッセージや各種の設定、ソフトウェアのインストールなどの環境設定の手順を示します。
* デスクトップ環境
* ネットワーク環境
* ターミナル
* テキストエディタ
* 日本語の表示や入力などの日本語環境等
Chromium Web Browser
C. 動作確認
基本システムが正常にインストールされたかサンプルのプログラムを実行させて確認します。
C-1. CUDA Sample
JetPackにはNVIDIA社の提供するGPU用の汎用並列計算用ライブラリCUDA-Xが予めインストールされています。
ここでは、そのサンプルプログラムを実行して確認を行う手順を示します。
CUDA fluidsGL
C-2. Python Sample
JetPackには開発用のプログラミング言語Python 3.6.9がインストールされています。
ここでは、Bessel関数のグラフ描画のPythonのプログラムを作成して動作確認を行います。
Bessel function
C-3. GPIO制御の準備
Jetson Xavier NXには、基板に設定のピンヘッダにより各種のIOポートを利用できます。
ここでは、デジタルIOポートを利用してLEDの点灯とSwitchによる点灯制御のプログラムを作成して動作確認を行います。
ここで、Pythonのプログラムを効率的に作成できるIDE環境のSpyderのインストールとBessel関数のグラフ描画による確認の手順を示します。
Spyder & Bessel function
C-4. LEDの点滅
Jetson Xavier NXのGPIOのOutputポートにLEDとスイッチを接続してLEDの点滅のプログラムを作成して動作確認を行います。
Jetson LED点滅 回路
Jetson LED点滅 実行
4. Tensorflow 1.15.4の設定
本手順書で設定する物体検出の機械学習モデルであるYOLO v3は、Google社が開発したオープンソースのTensorflowフレームワークを必要とします。具体的にはTensorflowの高レベルなAPIであるPythonの機械学習ライブラリKerasをインストールした環境が必要となります。また、3章で設定した基本システムのJetPack JP4.4に対応のTensorflow 1.15.4はPythonのバージョンが3.5、3.6、3.7で動作し、YOLO v3はTensorflow 2.xでは動作しないことなどに注意が必要です。
A. ソフトウェアの設定
必要なパッケージとTensorflowとKerasのインストールの手順を示します。
B. 動作確認
Tensorflowのバージョン、GPUの認識、行列計算等により動作の確認を行います。
5. Keras YOLO v3の設定
機械学習アルゴリズムのYOLO v3を実行するために必要なPythonの機械学習ライブラリKerasのインストールと画像と動画による検出の確認手順を示します。
A. ソフトウェアの設定
YOLO v3の実行に必要な機械学習ライブラリKerasは1系で、Tensorflowとは別にインストールする必要があります。
A-1. 必要なPythonパッケージとKeras
YOLO v3に対応したKerasのバージョン2.1.1を導入します。
A-2. Keras YOLO v3環境のダウンロード
GitHubに公開されているKerasによるYOLO v3の実行環境をダウンロードします。
B. 動作確認
B-1. weightデータの変換
インターネットに公開されているYOLO v3の物体検出で使用する学習済みモデルのweightをダウンロードし、YOLO v3で利用できる形式に変換する手順を示します。
このweightファイルはperson、bicycle、carなど80項目のものが学習されています。
B-2. 画像の物体検出
JPEGの画像像ファイルとしてYOLO v3の紹介例等でサンプルとして採上げられているインターネットに公開されている画像を用いて同じように物体検出が行われるか確認します。
YOLO v3 画像の検出
YOLO v3 動画の検出
6. USB Cameraの設定
ここでは、USBカメラを用いた画像の表示、ファイルへの保存の手順について示します。
USBカメラはiDS社のUI-3280CP-C-HQ R2にF1.4の16mmレンズを接続したものです。
次にカメラの主な仕様をと外観を示します。
解像度 : 5MPixcel
有効画素数 : 2456×2054 pixcel
ADC : 12bit
センサー : SONY製 IMX264LQR-C (2/3”、画素サイズ3.45μm)
インターフェース : USB3.0 micro-Bコネクタ
電源 : USBケーブルより供給
外形 : 29.0mm×29.0mm×29.0mm
重量 : 50g
USB Camera
A. ソフトウェアの設定
カメラを制御するためには、iDS社の提供するドライバーソフトiDS Software SuiteとPythonのプログラムを作成するとき必要となるインターフェースライブラリPyuEyeパッケージが必要となります。
A-1. Software Suite
iDS社のサイトからダウンロードし、インストールする手順を示します。
Software Suite
A-2. PyuEyeバッケージ
PyPiのサイトにあるバッケージをインストールする手順を示します。
PyuEye Package
B. 動作確認
USB カメラのドライバーソフトとライブラリパッケージが正しく設定されているかサンプルプログラムを利用して確認を行います。
B-1. USB カメラの認識
コマンドおよびpyueyeを用いたPythonプログラムにより、USBカメラの認識されることを確認します。
B-2. サンプルプログラムによる動画表示
GitHubに公開されているPythonのサンプルプログラムにより、動画の表示を確認します。
B-3. 画像の保存
サンプルプログラムを修正して、静止画および動画ファイルの保存の手順を示します。
7. 実施例
6章で設定したUSBカメラの映像に、5章で設定した物体検出のYOLO v3ソフト(標準版)を適用して、リアルタイムでの物体検出を行います。
また、特定の物体が検出されたときに3章で設定したLEDを点灯させる機能を追加する手順を示します。
A. カメラ映像での物体検出
A-1. 画像保存
USBカメラの映像に対し、物体検出を行った映像を別に表示し、その検出結果のファイルを保存する手順とPythonプログラムの修正について示します。
YOLO & USB Camera
A-2. 動画保存
USBカメラの映像に対し、各画面に物体検出を適用して、物体検出の加わった動画をMP4ファイルとして保存する手順とPytohプログラムについて示します。
YOLO & USB Camera Movie
B. カメラ映像での物体検出とLED点灯
カメラ映像に追随してYOLO v3による物体検出が行われると映像に矩形枠とラベル、確率が表示されます。従って、指定の物体が検出されたか判定を行いLEDの点灯させるためには、この矩形枠のラベルを構成するプログラムの対応する部分を修正する必要があります。
ここでは、dogが検出されたときにLEDを点灯させるように、3章で行ったLED点灯のPythonプログラムを利用します。
具体的には、dogの検出によりLEDが点灯するとともに画面にdog found : LED ONのメッセージが出力され、dogが検出されていないときはLEDは点灯せず、画面にdog not found : LED OFFのメッセージが出力されます。
YOLO & LED ON
YOLO & LED OFF
8. まとめ
本手順書では、Deep Learningの環境構築とUSBカメラによる映像からYOLO v3による物体検出を行う手順について示しています。
具体的には、手軽に機械学習の環境を開発できる小型ですが処理速度の優れたボードコンピュータであるNVIDIA社のJetson Xavier NXにDeep Learningの環境を構築します。前半ではJetPack JP4.4によるシステムの環境と機械学習のフレームワークのTensorflow 1.5.14の環境を構築し、後半ではYOLO v3とUSB カメラを用いた物体検出を行います。
そして、順番通りに進めることで手順書と同じ環境を構築することができます。
続編 として、Part IIでは、物体検出のweightデータを自前のものとして作成する手順をご紹介します。また、Part IIIでは、Jetson Xavier NXでなく、日常的に利用のWindows 10のパソコンを利用して、Part IIの自前のweightデータの準備を含め、Part Iの内容に対応した手順をご紹介します。
Discussion