画像
Hirofumi Ohta
Hirofumi Ohta
Principal Software Engineer
掲載: 2023年6月12日

背景

R-Car SoCは当社が提案する高性能・低消費電力なSoCですが、お客様がPyTorch, TensorFlowなどの一般的な深層学習フレームワークで訓練した学習済みモデルをR-Car SoC上で実行するためには、枝刈り(*1)・量子化(*2)といった非等価的近似モデル圧縮が必要になります。当社はR-Car CNN toolを提供しており、上記近似手続きを実施してR-Car SoC上でお客様の学習済み深層学習モデルを動作させるだけでなく、R-Car SoCハードウェアをお持ちでない状況でも動作検証・性能見積もりを体験いただけるよう、用途に合わせて精度・速度別のシミュレーターも提供させていただいています。(*3)
本稿では、これらシミュレーターの中でも特にR-Car SoC実機での演算と等価な出力結果を得られるよう設計されたAccurate Simulatorを用いたモデルのデバッグ解析と精度改善についてご提案いたします。R-Car SoC実機では確認できないモデル中の中間出力を逐次追うことで、結果が思わしくない原因を特定し、精度を改善する手法を紹介します。

 

想定ケース

お客様の学習済み深層学習モデルをR-Car SoC上で実行できる形式に変換するためには、枝刈り・量子化といった非等価的近似モデル圧縮が必要になります。量子化は浮動小数点演算を前提に記述されている学習済みモデルを整数演算モデルに近似する手法ですが、その過程で複数枚の入力画像から各レイヤーの出力テンソルの最大/最小値を推定し、各レイヤーの重みパラメータの最大/最小値と合わせて量子化パラメータ(scaleとzero point)を決めることになります(calibration)。この量子化されたモデルをR-Car SoC実機あるいはシミュレーター(*4)上でvalidationする場合に、入力画像によっては元の学習済みモデルとの比較で思わしくない結果を得ることがあるかもしれません。そのような場合にはR-Car SoC実機では確認できないモデル中の中間出力を直接見ることができるAccurate Simulatorを用いたモデル解析が有効です。

 

Accurate Simulatorを用いたモデル解析の流れ

上記のような場合、calibration時の入力画像データの質あるいは量が十分でなかったことが原因で、(a)calibrationが上手くできていない、あるいは(b)中間出力の振れ幅が大きいレイヤーで量子化が破綻している、ことが考えられます。このような場合、まずは原因が(a)(b)どちらかを特定し、(a)入力画像データを追加・更新しcalibrationを再度行うか、(b)問題が発生しているレイヤーを特定し、そのレイヤーのビット幅を大きくすることが有効で、量子化されたモデルの精度を改善することができます。
Accurate SimulatorはR-Car SoC実機と出力結果が完全一致するように設計されたシミュレーターです。実機ではモデル内部の各レイヤーでの中間出力を直接取り出して確認することはできませんが、本シミュレーターを利用することで可能になります。Accurate Simulatorを用いて画像データが入力されるレイヤー側から1層ずつレイヤーの中間出力を取り出していって、元の学習済みモデルの中間出力と比較していくことで誤差を確認していくという流れになります。

 

実施例

当社R-Car SoCをご利用いただく場合、お客様は学習済みモデルを当社R-Car CNN toolを用いてR-Car SoC実行フォーマットに変換し実行することになります。以下は、実行時に元の学習済みモデル(TensorFlowとします)とR-Car SoCの出力結果が合わず、原因の特定と解決を行うことを想定しています。元のTensorFlowモデルとR-Car実行フォーマットモデルのモデル中の中間出力をAccurate Simulatorを用いて直接比較することで量子化誤差を見積もる方法を説明します。

①    お客様の学習済みTensorFlowモデルをonnxに変換し、量子化条件と十分な枚数のcalibration用画像と共に当社R-Car CNN toolを用いてAccurate Simulatorで実行可能なフォーマットに変換します。
②    お客様のTensorFlowモデルを実行して比較したいレイヤーの中間出力を取り出します。
③    ①で作成したAccurate Simulator用の実行フォーマットモデルをR-Car SDK runtimeを用いて実行します。比較したいレイヤーの中間出力を取り出すことができます。
④    ②と③で得た中間出力の成分を比較します。Accurate Simulatorの出力結果は量子化前提で整数表現になっていますが、逆量子化ツールも用意されています。図中のグラフはTensorFlowとAccurate Simulatorで生成された中間出力テンソル成分を直接比較したものです。この例では比較結果はほぼ一致しておりこのレイヤーに問題はありません。
⑤    ①から④を繰り返し、近似が破綻しているレイヤーを特定します。当該レイヤーの量子化パラメータの表示ビット幅を広げる(例えば8bit→16bit)することで量子化されたモデルの出力結果精度の改善が見込めます。

画像
Figure 1 Flow of intermediate output comparison between TensorFlow and Accurate Simulator
図1:TensorFlowとAccurate Simulatorの中間出力比較のフロー

 

まとめ

本稿ではお客様の学習済みモデルを当社R-Car SoCで動作させてみて出力結果が思わしくない場合に、Accurate Simulatorを用いて原因の特定とモデル精度の改善を行う方法について紹介いたしました。R-Car SoC実機と等価な演算結果が得られるように設計されたAccurate Simulatorを用いることで、実機では確認できないモデルの中間出力を調べることが可能です。モデルのデバッグ評価・精度改善にご活用いただければと思います。今後もRenesasはお客様のモデル評価・validationにお使いいただけるようR-Car CNN toolを充実させるよう努めていく所存です。


(*1) 認識結果への寄与度が小さい重みを0にし、その重みに対する計算をスキップすることで、計算量とメモリ使用量を削減します。
(*2) 通常浮動小数点で計算される推論処理を8bitなどの整数演算に近似変換します。ここで言う量子化はPTQ(post training quantization)と呼ばれるもので、複数枚の入力画像を使ってCalibrationを行うことで量子化パラメータ(scaleとzero point)を最適化します。
(*3) blog記事「R-Car DNNシミュレータの紹介
(*4) RenesasではAccurate Simulator以外にも実機と等価な演算精度を得られるよう設計されたInstruction Set Simulator (ISS)を提供しています。ISSは演算精度のみならず実機の演算プロセスそのものを模擬しており、実機に非常に近い条件でモデルの挙動を試すことができます。

この記事をシェアする