背景
深層学習を車載SoC向けにリアルタイム処理させるための深層学習のモデル変換
深層学習は、TensorFlowやPyTorchなどの土台となるソフトウェア(深層学習フレームワーク)を使って開発をします。
深層学習フレームワークで学習したモデルをそのまま移植するだけでは、深層学習の推論処理に多大な計算量とメモリ使用量を必要とするため、R-Carのような車載SoC上で、リアルタイムで処理を行うことは、到底不可能です。そこで、学習済みモデルに対して量子化や枝刈りなどの非等価的なモデル圧縮や、深層学習コンパイラによる性能最適化を適用する必要があります。
まず、モデル圧縮について説明します。量子化では、通常浮動小数点で計算される推論処理を8bitなどの整数演算に近似変換します。枝刈りでは、認識結果への寄与度が小さい重みを0にし、その重みに対する計算をスキップすることで、計算量とメモリ使用量を削減します。これらの変換はいずれも元の推論処理とは非等価的なアルゴリズム変換となるため、認識精度の劣化が発生する可能性が高いです。
性能最適化のために深層学習コンパイラは、学習済みモデルの推論処理に対して、深層学習用のアクセラレータに高速処理できるようにプログラムを変換したり、あるレイヤーの出力データに割り当てた高速小容量のSRAMを別のレイヤーの出力データに再利用するようなメモリ最適化を適用したりします。
このような変換処理を適用することで、車載SoC上でリアルタイム処理を行うことが可能となります。
R-CarにおけるRenesasのツール・ソフトウェアを使った推論の流れ
RenesasのR-Carに搭載されているH/WアクセラレータであるCNN-IPは、演算効率上の理由で整数値によって、推論演算を行うことができます。このため、ユーザは、Renesasが提供するR-Car CNN toolを使って、前述のモデル変換の1つである量子化を行う必要があります。
まず実際に量子化を行う前にCalibrationを行い、浮動小数を整数に変換するための量子化パラメータ(ScaleとZero point)を計算する必要があります。このために、ネットワークモデルのフォーマットに応じた外部ツール(TFMOT, ONNX runtimeなど)により、大量の入力画像から各レイヤーの出力の最大/最小値を求めます。この最大/最小値から、scale/zero pointなどの量子化パラメータは計算することができます。R-Car CNN toolは、この量子化パラメータを使って、各レイヤーのパラメータを量子化します。
R-Car CNN toolは、この後、ネットワークモデルおよび量子化済みの各レイヤーのパラメータからCommand Listを作成します。Command ListはCNN-IPに、実行するコマンドや設定するパラメータ(量子化済みの各レイヤーのパラメータ)を指示するためのバイナリデータです。このCommand ListをCNN-IPに与えて動かすことによって、推論を行うことができます。
Command Listは、ネットワークモデルと量子化パラメータから一意に決まるので、事前に1回作成しておくだけ良いです。前述のCommand Listを画像1枚ごとに実行することで、実機上での推論を行うことができます。
R-Car V4Hにおいて、Renesasのツール・ソフトウェアを使って推論をする際のブロック図を図 1に記します。
図 1 Renesasのツール・ソフトウェアを使って推論をする際のブロック図
各シミュレータについて
各シミュレータの概要と特徴
Renesasは、次の2つのユーザの課題を解決するためのシミュレータを用意しました。
A) アプリケーションを開発する前に、量子化による精度の変化を確認したい
B) Command Listを使ったユーザアプリケーションを、実機を用いずに動作確認およびデバッグしたい
Renesasのシミュレータは3種類あり、それぞれ対応する課題や特徴が異なります。 それぞれの特徴は表 1の通りです。それぞれ精度や処理速度などが異なります。それぞれについて、ブロック図を参照しながら、特徴の詳細とユースケースについて紹介します。
表 1 各シミュレータの概要と特徴
課題 | 名前 | 速度 | 精度 | 入力 | 出力 |
---|---|---|---|---|---|
B | Instruction Set Simulator (ISS) | 遅い | デバイスと完全一致 | 入力画像 Command List (*1) |
推論結果 |
A | Accurate Simulator | 中位 | デバイスと完全一致 | 入力画像 ネットワークモデル 各レイヤーの量子化済みパラメータ (*2) |
推論結果 |
Fast Simulator | 早い | 若干の誤差あり | 入力画像 ネットワークモデル 量子化パラメータ |
推論結果 |
(*1) Command Listは、前述の実機上で推論を行う場合と同じ手順で、ネットワークモデルと量子化パラメータを基に、R-Car CNN toolを使って作成します。
(*2) Accurate Simulatorは、R-Car CNN tool内で動作します。ユーザがR-Car CNN toolにネットワークモデルと量子化パラメータを与えることで、ツール内で自動的に、各レイヤーの量子化済みパラメータを計算し、Accurate Simulatorに入力されます。
ISS
実機と極力同じソフトウェア構成、および入力データ(Command List、主にレジスタの設定)を使い、出力結果のデバッグをするためのシミュレータです。タイミングの再現はしておらず、タイミング確認を目的とはしていません。
結果は実機と完全一致であり、命令ベースで出力を再現しているため、速度はAccurate Simulatorと比べて低速です。
図 2 ISSを使うシステムのブロック図
Accurate Simulator
ネットワークモデルを入力とし、実機を使わずに精度検証を行うためのシミュレータです。レイヤー毎に、デバイスの演算アルゴリズムと出力が完全一致するようなアルゴリズムを実装しています。ただし、演算精度に影響しない内部実装については、再現していないため、ISSとは異なりシステムのデバッグには適していません。ISSより実行速度が10倍程度速いため、精度の検証のみを行う場合に、有用です。
図 3 Accurate Simulatorを使うシステムのブロック図
Fast Simulator
大量の画像に対する量子化誤差を確認するためのシミュレータです。
Fast Simulatorは深層学習フレームワーク(R-Car V4HではTensor Flow)に対して、浮動小数点数による各レイヤーの推論演算の後に、疑似量子化機能を拡張しています。疑似量子化とは、浮動小数点数に対して、浮動小数点数のまま量子化による精度劣化と同じ量の誤差を加え、疑似的に量子化誤差を再現する手法です。
高速に動作するTensor Flowに対して、疑似量子化機能のみを追加することで、Tensor Flowに近い速度で高速に動作させることが可能です。
また、深層学習フレームワークと入出力のインタフェースが共通なので、ユーザが深層学習フレームワークと切り替えながら、量子化誤差を確認することが容易です。
ただし、各レイヤーにおける推論演算および疑似量子化で、僅かな浮動小数演算誤差が発生するため、実機の演算結果に対して完全一致ではありません。
図 4 Fast Simulatorを使うシステムのブロック図