こんにちは。本日はSTM32マイコン体験実習 組み込みAI編 設計ヒント編のプレゼンテーションをご覧いただきありがとうございます。本プレゼンテーションでは、組み込みAI開発における注意点や参考になる情報を紹介します。ここで、本実習のプログラム構成について説明いたします。本実習は全部で8つのパートに分かれております。1つ目のAI解説と2つ目のツール解説は座学の内容になります。3つ目のツール動作確認、4つ目のデータ収集学習、5つ目のニューラルネットワーク実装は実機を用いたハンズオンの実習となります。6つ目の設計のヒントと7つ目のパイソンスクリプトは再び座学となります。本実習にて使用する統合開発環境がIAR社のEWARMになりますが、EWARMの代わりに弊社のSTM32 Cube IDEをご使用になる場合に、8つ目のパートのSTM32 Cube IDEもご覧いただく必要があります。こちらも実習形式となります。以上がSTM32マイコン体験実習、組み込みAI編のプログラム構成になります。本プレゼンテーションは6つ目の設計のヒントのパートとなります。組み込みAI開発では、組み込みAIを使って解決しようとしている問題に対して、最適なニューラルネットワークモデルと最適なデバイスを選択する必要があります。ここでは最適なモデルやデバイスを選択するためのポイントについてご説明いたします。通常のAIと比べて、組み込みAIにはいくつかの制約事項があります。1つ目はメモリーの制約です。フラッシュ内蔵マイコンを使用する場合、内蔵メモリーの制約があります。内蔵メモリーとしては、フラッシュメモリーとラムがあります。ここで、STM32QVAIの分析機能を使用して、インポートした学習済みニューラルネットワークモデルがどれぐらいのメモリーが必要になるか、指定したマイコンの内蔵メモリーに収まるかどうかを確認する必要があります。内蔵メモリーに収まらない場合、外付のメモリーが必要になります。なお、本実習では32ビットのケラスの学習モデルを使用しましたが、最近では8ビットの量子化モデルの対応もあり、モデルサイズの削減を見込むことができます。特に画像認識などのアプリケーションなどでよく使われており、量子化による精度の低下は限定的と言われています。もう一つは、時間的制約です。時間的制約の厳しいアプリケーションで組み込みAIを使用する場合、指定したマイコンのCPUで時間内に水論実行が終わるかどうかを判断する必要があります。もし、制約時間内に処理が終わらない場合、より周波数の高いCPUのマイコンを選択する必要があります。弊社のSTM32ファミリーは、マイコン製品では最大550メガヘルツ、プロセッサ製品では最大800メガヘルツで動作する製品を用意しております。より早い水論実行が求められるアプリケーションを開発される際、ぜひ弊社のSTM32ファミリーをご検討いただければと思います。ここで、新総学習を使った設計プロセスについてご説明いたします。新総学習の設計を考える場合、まずはアイデアがあり、そのアイデアに沿って行動を作り、その後実験をしてアイデアを更新するという一連のサイクルを繰り返します。一回のサイクルで完璧なモデルができることはなく、このサイクルを何度も繰り返すことによって最適なモデルへと改善していきます。また、このような一連のプロセスを複数のユーラルネットワークのアーキテクチャーに対して行い、解決しようとしている問題にはどのアーキテクチャーが適しているかを調べる必要があります。では、複数のユーラルネットワークのアーキテクチャーがある場合、どのように選べばいいのでしょうか。これにはいくつかの方法があります。まずは精度に着目する方法です。これは考えているアプリケーションではどれくらいの精度が必要か、それに対して複数のアーキテクチャーではそれぞれどれくらいの精度が出ているかを比較する方法です。次に実行時間に着目する方法です。時間制約が厳しい場合、例えば50ミリ秒以下、30ミリ秒以下といった推論時間が必要な場合、できるだけ実行時間が短いアーキテクチャーを選ぶ必要があります。どのアーキテクチャーも希望の推論時間を実現できない場合、高いパフォーマンスのCPUを搭載したマイコンを選択し直す必要があるかもしれません。また、メモリーサイズに着目する方法もあります。メモリーサイズが大きくなると、マイコンコストにも影響があります。その他、ニューラルネットワークの入力サイズやクラス数などのパラメータも検討対象に上がります。画像認識の場合ですと、入力画像サイズが32×32ピクセルなのか100×100ピクセルなのか、また、識別する画像のクラスは何種類にするかを決める必要があります。クラス数が10から100に増えると、ニューラルネットワークはかなり大きくなり、その分メモリーサイズも大きくなります。このように精度だけではなく、さまざまなパラメータを見て、自分のアプリケーションではどのパラメータが一番優先度が高いかを判断して、最適なアーキテクチャを選ぶ必要があります。ニューラルネットワークのアーキテクチャを選ぶ上で、注目するべきパラメータについていくつか紹介しましたが、ここでは画像認識における入力画像サイズの影響について説明いたします。左側に2つの犬の写真があります。上の方は64×64ピクセルで12キロバイトの画像。下の方は1000×1000ピクセルで3MBの画像になります。当然ですが、下の画像の方がはっきりとした、鮮明な写真になりますが、このような画像を入力画像として使用しますと、かなり大きなニューラルネットワークモデルとなってしまいます。フリーコネクテットの一番簡単なアーキテクチャを使った場合、ウェイトの数が増えて大きなメモリーが必要になります。一方、上の画像を使った場合、画像としては不鮮明ですが、それでも犬であることは判断できます。こちらを使用する場合、メモリーの使用を大幅に抑えることができます。アーキテクチャが変われば、重みの数なども変わりますが、いずれの場合でも、入力のデータサイズは、ニューラルネットワークモデルの大きさに大きく影響を与えます。先ほど、組み込みAIの制約についてご説明いたしましたが、では、マイコンを使った組み込みAIでは、どのようなニューラルネットワークモデルが利用できるのでしょうか。まず、加速度センサーやジャイロセンサーなど、50Hzから100Hz程度の高くないデータレートのセンサーの場合、データの量が多くないため、数キロバイトのフラッシュメモリーとラブメモリーで簡単なニューラルネットワークのモデルが実装できます。また、セキュアエンザンスも多くないため、CPUのパフォーマンスもそこまで高いものは要求されません。一方、オーディオに関しましては、センサーのデータレートに比べて16kHzなどより高いデータレートとなりますので、その分、必要なメモリーサイズも大きくなります。また、セキュアエンザンスも多くなりますので、ある程度のCPUのパフォーマンスが必要になります。これらのセンサーやオーディオなどの組み込みAIアプリケーションの場合、CPUとしましては、ARMのコアテックスM4クラスで十分に処理できる範囲であると考えています。次に、画像系の組み込みAIですが、こちらになりますとセンサーやオーディオ系の組み込みAIと比べて、ニューラルネットワークモデルの大きさが大きくなります。ここでは、いくつかのデモを挙げておりますが、入力データとどのような認識をしたいかによって、ニューラルネットワークモデルが変わってきます。例えば、手書き文字認識の場合、フラッシュメモリーは300キロバイト程度、ラムは30キロバイト程度が必要になります。また、セキュアエンザンスは7万3000回となっておりまして、こちらはコアテックスM4コアのパフォーマンスでも処理可能ですが、水論実行時間を短縮されたい場合は、より上位のCPUを使用する必要があります。一方、画像認識のアプリケーションになりますと、例えば18クラスの分類で、224×224ピクセルの入力データの場合、手書き文字認識の場合に比べて、メモリーの使用量が大幅に増えます。また、セキュアエンザンスが大幅に増えますので、コアテックスM7コアなどの高いパフォーマンスのコアが必要になります。水論実行時間も、コアテックスM4ですと数秒かかるところ、コアテックスM7ですと100ミリ秒程度で完了することができます。さらに、画像認識の場合、8ビットのモデルを使用してもあまり精度が悪くならないため、必要なメモリーサイズを減らすことができます。ちなみに、先ほどのモーションセンサーやオーディオセンサーのモデルの場合、8ビットモデルを使用しますと精度がかなり落ちてしまいます。弊社では、組み込みAIを使用したさまざまなサンプルプログラムを用意しております。各サンプルでは、どのようなアーキテクチャーが使われているか、どれくらいのメモリーが必要か、ニューラルネットワークモデルの規模はどれくらいか、どのようなハードウェアが必要かなどの情報を記載しています。ここで注意点ですが、通常、水論実行時間よりも前処理の時間の方が大きくかかります。一声10倍くらいの時間がかかるとお考えいただければと思います。従いまして、水論時間だけではなくて、ご検討中のアプリケーションでどのような前処理が使われているか、という点も念頭においてご検討いただく必要があります。こちらも人の活動認識のサンプルになりますが、先ほどとは異なるデータセットが使われているサンプルとなります。その結果、パフォーマンスやメモリーサイズも先ほどとは異なっております。こちらも同じく人の活動認識のサンプルになります。使用しているモデルは先ほどと同じモデルになりますが、先ほどは弊社独自のデータセットを使用したサンプルでしたが、こちらは一般公開されているデータセットが使われています。次は環境温分類のサンプルになります。こちらのニューラルネットワークモデルは大きく、ログメルスペクトログラムという特別な前処理が必要になるため、人の活動認識に比べて高いパフォーマンスのCPUが必要になり、メモリーサイズも大きいものが必要になります。こちらは先ほどご紹介しました手書き文字認識のサンプルになります。32×32ピクセルの入力を認識する使用となりますが、比較的小さなニューラルネットワークモデルで実現しています。こちらも手書き文字認識のサンプルですが、こちらは先ほどと同じニューラルネットワークモデルと同じデータセットを使用して、異なるデバイスで水論実行するサンプルとなります。STM32MP1というプロセッサを使用しています。こちらは現在リリースされているサンプルの中で、一番規模の大きい食品分類のサンプルになります。ニューラルネットワークモデルとしては、FDモバイルネットというモデルが使われておりまして、18種類の食品を分類します。デバイスとしましては、STM32ファミリーでは最もパフォーマンスの高いマイコンのSTM32H7シリーズが使われております。このサンプルでは、カメラの画像はもともとVGAの画像ですが、ニューラルネットワークモデルに入力する前に、クロップとリサイズの処理を行って、224×224ピクセルのRGB8ビットのフォーマットに変換しています。以上で本プレゼンテーションを終わります。プレゼンテーション最後までご覧いただきましてありがとうございました。