画像
Shingo Kojima
小嶋 伸吾
シニアプリンシパル・スペシャリスト
掲載: 2022年2月15日

「わが社の〇△システム、AIを使ったらもっと高性能にならんか」
「うちの□×装置にもAIを搭載して高付加価値化してくれ」
というような無茶ぶり、されていませんか?

人工知能、ディープラーニング、ニューラルネットワーク‥。これらの言葉を見ない日は無いくらいAIの応用範囲が広がっている昨今、
「興味はあるけど、なんとなく勉強はしてみたけど、いま一つどう使ったら良いのかわからない。自分の仕事の中でどんな価値につながるのか実感が沸かない‥」
と感じておられる方々も少なくないのではないでしょうか?

そんなみなさま向けに、今回はルネサスの組み込みAIプロセッサRZ/Vシリーズ用ソフトウェアパッケージを使ったAI評価についてご紹介させて頂こうと思います。

AIってなに?

すでにAIやディープラーニングに詳しい方には不要かと思いますが、まずはAIについての基本的な事柄をおさらいしておきますね。

人工知能 (Artificial Intelligence)。いろいろな書籍やWebコンテンツで、様々な形で説明されているかと思います。プロ顔負けの将棋を指したり、声でお願いするだけで部屋の電気を点けてくれたりするのもAIと言われていますが、ここでは最も狭い定義でのAIとして、ニューラルネットワークという技術を使った人工知能、特に画像に対する様々な認識・判断を行う「画像AI」に絞ってご紹介させて頂きたいと思います。

ニューラルネットワーク。日本語では神経網となるでしょうか。
生物の脳神経は、図1のように他の複数の神経細胞からの入力を受けて次の神経細胞へ伝達する仕組みになっています。この入力側からの信号をどのくらいの強さで使うか(重み付け)、その重み付け後の各入力の合計をどのように出力側に伝えるか(活性化関数)の2種類の組み合わせで記憶や認識・判断をするということが分かっています。

画像
figure1 Connections between Neurons

図1:神経細胞同士のつながり

ニューラルネットワークを使ったAIはこの仕組みを真似して、複数の入力それぞれに重み付けをしてから総和を取り、その結果を活性化関数に通して次段へ伝える、という演算処理を膨大に行う事により様々な認識や判断を行います。
画像AIでよく使われる3x3畳み込み演算を例に説明すると、入力された画像の特徴を数値化するためにまず画像を3ピクセル×3ピクセルの画像に細分化し、それぞれの値(ピクセルの濃さ)に重み付けをしてその総和を活性化関数で出力値にして次段へ送る、という仕組みです。(図2)

画像
figure2 3x3 Convolutional Operation Example

図2: ニューラルネットワークによる3x3畳み込み演算の例

この処理を、入力画像の全面にわたって行い、さらにその出力で作られた次の画像(正確にはすでに画像として確認できるデータになってはいないため、「入力画像の特徴を抽象化したデータ」=特徴量と言います)を次のニューラルネットワークに送って同様の処理を行います。
数字や文字を区別するような簡単な画像認識でもこの層を数層、一般的な物体認識では数十層にもわたってこのような膨大な演算を繰り返すことにより、数字の5を5だと判断したり、犬が写っている画像から犬の位置を特定するといった画像認識を実現しています。

誤解を恐れずに一言で説明するなら、AIではない従来のコンピュータソフトウェアが
「処理したい内容(アルゴリズム)を人が考えてプログラムを組み立てる」
のに対して、ニューラルネットワークを使ったAIでは
「大量の入力を使って、その処理に必要な内部データ(重み付けパラメータ)を自動的に整える」
つまり主役がプログラムではなくデータになる、という点が最も大きな違いです。
このため、従来のソフトウェア開発ではプログラミングが中心だったのに対して、AIの開発では認識・判断させたいものを必要な精度と速度で処理できるようにこの重み付けパラメータを整えていく工程(学習)が最も重要であり、かつ最も時間のかかる部分になります。

今回ご紹介するAI評価用のソフトウェアパッケージは、PyTorchなどのAIフレームワークから提供されている学習済みモデルを使用しますので、手間のかかる学習工程を省略してAIによる画像の推論実行を評価することができます。

前置きが長くなりましたが、ここからは本題の画像AI評価についてみていきましょう。

必要なもの

最初から評価ボードを購入する必要はありません。今回のブログでは、無償のオープンソースソフトウェア(以下OSS)とルネサスエレクトロニクスがWebにて無償提供しているソフトウェアパッケージだけを使い、組み込みAIプロセッサRZ/Vシリーズを使った画像AIの実装フローを体験してみようと思います。

画像
figure3 RZ/V2L AI Implementation Tool Flow-jp
*1 PyTorch, the PyTorch logo and any related marks are trademarks of Facebook, Inc.
*2 TensorFlow, the TensorFlow logo and any related marks are trademarks of Google Inc.
*3 DRP-AI Translator: ルネサスエレクトロニクス製ONNX変換ツール

図3:RZ/V2L AI実装ツールフローの全体構成

ツールフローの全体像を図3に示します。AI学習用のフレームワークは様々な種類のものがあり、すでに何かのAIフレームワークでAIを試されている方も少なからずいらっしゃると思います。それらに加えてまた新しいルネサス製AI環境を勉強して頂くのはハードルが高いと考え、RZ/Vシリーズでは

「AI学習は使い慣れた既存のAIフレームワークをそのままご活用頂き、ONNXという共通のフォーマットで学習済のニューラルネットワークモデルをルネサス製のツールにつなげる」

というAI開発フローにしました。ONNXは広く採用されているフォーマットであり、大半のAIフレームワークが直接もしくは変換ツールなどでONNXフォーマットでの出力ができるようになっていますが、ここではその中のPyTorchというAIフレームワークを例として用いています。

一つだけハードルがあるとすればPCのOSかもしれません。AIの世界ではWindowsではなくLinuxがデファクトスタンダードになっており、ここで使用するOSSやSWパッケージもすべてLinux (Ubuntu)をインストールしたPCが必要となります。

Windows上で仮想OSとしてLinuxを動作させるWSL2という技術もありますが、ルネサスの評価用パッケージはWSL2での動作を保証していないため、お手数ですがUbuntuをインストールしたPCをご用意ください。AI学習をさせるのでなければ高い性能は必要ないので、お手元にある古いPCを再利用するのもおすすめです。

まずはLinux PCとDRP-AI Support Package

Linux PCの準備

ハードウェアとしてはx86系64ビットCPUとメモリ6GB以上を搭載したお手持ちのPCでよいのですが、OSはWindowsではなくLinuxディストリビューションの一つであるUbuntu のバージョン20.04を使います。
Ubuntu20.04を公開しているWebページの中にある ubuntu-20.04.6-desktop-amd64.isoからISOファイルをダウンロードします。
Windows用のRufusというツールを使うとISOファイルをブータブルUSBメモリにできますので、Ubuntu をインストールする対象のPCをそのUSBメモリで起動すればUbuntu20.04をインストールできます。
(Rufusの使い方自体は省略しますので、https://www.archlinux.site/2018/03/windows-10ubuntuusb.html などをご参照ください。)

ソフトウェアの準備

ソフトウェアは、まずルネサスのWebから「RZ/V2L DRP-AI Support Package」というSWパッケージをダウンロードしてください。2GB以上ある大きなZIPファイルなので高速なインターネット接続でのダウンロードをお勧めします。

このZIPファイルを解凍すると、rzv2l_ai-implementation-guide というフォルダの中に
rzv2l_ai-implementation-guide_jp_rev5.00.pdf
が入っています。(以下「インプリガイド」と表記します。)

このガイドは一歩ずつ進められる実習形式になっており、この通りに進めれば同梱してある学習済ニューラルネットワークモデルの変換から評価ボードでの実動作まで評価できるように書かれています。ここからは実際にこのガイドを使って評価を進めていく上でのポイントを紹介させて頂こうと思います。

画像
figure4 DRP-AI Support Package-jp

図4: DRP-AI Support Packageの内容

ONNXファイルを作ろう

ここからはLinuxを使ったコマンドラインでの操作になります。
(Linux自体が始めてという方はOS自体の基本的なコマンドを習得して頂く必要があります。)

AIフレームワークであるPyTorchやtorchvisionもLinuxのコマンドラインからpip3というコマンドでインストールします。(インプリガイド2.2章, page26参照)

ダウンロードしたDRP-AI Support Packageの中にあるrzv2l_ai-implementation-guide_ver5.00.tar.gz
という圧縮ファイルをインプリガイドの通りに解凍します。(同page30)

同様に、rzv2l_ai-implementation-guideの下のpytorch_mobilenetというフォルダの中にある
pytorch_mobilenet_jp_rev5.00.pdf(以下MobileNetガイドと表記)と、
pytorch_mobilenet_ver5.00.tar.gz
という圧縮ファイルをインプリガイドの通りに展開しておきます。

MobileNetとは、モバイル機器や組み込み機器向けに開発された、軽量かつ高速な画像認識用のニューラルネットワークであり、写っている物体に対して正解となる候補の確率を出力します。例えば図5の例では、ベーグル犬である確率が93.53%と出力されており正しく判定できていることがわかります。

画像
figure5 Image Recognition-jp

図5: MobileNetによる画像認識のイメージ

pytorch_mobilenet_jp_rev5.00.pdfの2章に沿って進めると、mobilenet_v2.onnxというファイルができます。これは、事前学習された重み付けパラメータ付きのMobileNet v2のニューラルネットワークモデルをONNXフォーマットで表現したものです。

さて、ここまでで学習済のONNXファイルができあがりましたので、次はDRP-AI用DRP-AI Object filesの作成と性能見積もりを行うフェーズに進みましょう。

DRP-AI TranslatorでDRP-AI Object filesに変換

ここからはルネサス製のONNX変換ツールDRP-AI Translator を使います。
まずルネサスのWebからDRP-AI Translatorをダウンロードしてください。

解凍してできたインストーラを、インプリガイドの3.1章に沿ってインストールします。
インプリガイドおよびMobileNetガイドの手順通りに進めると、図6のようなディレクトリ構造になっているはずなのでご確認ください。

画像
figure6 ONNX Files and DRP-AI Directory Structure-jp

図6: ONNXファイルとDRP-AI Translatorのディレクトリ構造

この後、DRP-AI Translatorに入力するファイルをサンプルからのコピー/リネームおよび編集により用意します。詳しい手順はMobineNetガイドの3.3~3.5章をご参照ください。

準備ができたら、ONNXの変換自体はコマンド一つで完了します。RZ/V2Lの場合は

$ ./run_DRP-AI_translator_V2L.sh mobilenet_v2 -onnx ./onnx/mobilenet_v2.onnx

とシェルを実行すると、作業ディレクトリの下output/mobilenet_v2/というディレクトリに、実チップでMobileNetを動作させるために必要なバイナリファイルが生成されます。(図7)

画像
figure7 File list after DRP-AI Translator-jp

図7: DRP-AI Translator実行後のファイル一覧

性能見積もりExcelの読み方

DRP-AI Translatorは実機評価のために必要なオブジェクトの他に、ONNXから変換したニューラルネットワークモデルのサマリをExcelフォーマットで出力します。(図8)
このExcelにはニューラルネットワークモデルの構造情報の他に、そのモデルの各層(各関数)毎の処理時間の概算(LSI内部バスや外部DRAM帯域による制約を除いたDRP-AI単体性能)が含まれており、おおよその性能を見積もることができます。

画像
figure8 mobilenet v2 summary example-jp

図8: mobilenet_v2_summary.xlsxの例

まとめ

「AIに興味はあるが何から手を付けていいのかわからない」というみなさま向けに、ルネサスエレクトロニクスが提供する無償のソフトウェアパッケージだけを使ってお試し頂ける事を紹介させて頂きました。
このブログで作成したオブジェクトファイルがあれば、実チップを使ったAI性能評価まであと一歩です。今回題材にしたRZ/V2Lの評価ボードキットも購入可能ですので、ぜひ実機でのAI性能と消費電力の低さ・発熱の少なさを実感して頂ければと思います。

また、ルネサスの組み込みAIプロセッサRZ/Vシリーズには今回ご紹介したRZ/V2Lの約1.5倍のAI性能を持つRZ/V2Mもラインナップしており、同様の手順で使えるRZ/V2M DRP-AI Support Packageを用意してありますので、こちらも併せてよろしくお願い致します。

この記事をシェアする