こんにちは。本日は、STM32マイコン体験学習、組み込みAI編、AI解説編のプレゼンテーションをご覧いただき、ありがとうございます。本プレゼンテーションでは、組み込みAIの開発を進める上で必要なAIの基礎について説明します。また、後半では、組み込みAIの概要と、組み込みAIを実現するためのフローについてご紹介いたします。それでは、プレゼンテーションの方に入りたいと思いますが、最初に本実習の目的について簡単に説明いたします。本実習の目的ですが、一番の狙いは、弊社の組み込みAIのディープラーニングソリューションを体験していただき、組み込みAIに必要なニューラルネットワーク設計のフローを学習していただくことになります。このフローには、既存の水論モデルのマイコンへの実装、学習用データの収集、学習用データのラベリング、パイソンスクリプトを使用したニューラルネットワークモデルの学習、および、学習済みのニューラルネットワークモデルのマイコンへの実装が含まれます。ここで注意点ですが、本実習はニューラルネットワークモデル自体の設計やチューニングなどは目的としておりません。また、本実習ではパイソンを使用しますが、パイソンプログラミング自体の解説は含まれませんのでご了承ください。ここで、本実習のプログラム構成について説明いたします。本実習は全部で8つのパートに分かれております。1つ目のAI解説と2つ目のツール解説は座学の内容になります。3つ目のツール動作確認、4つ目のデータ収集、学習、5つ目のニューラルネットワーク実装は実機を用いたハンズオンの実習となります。6つ目の設計のヒントと7つ目のパイソンスクリプトは再び座学となります。本実習にて使用する統合開発環境がIAR社のEW-ARMになりますが、EW-ARMの代わりに弊社のSTM32 Cube IDEをご使用になる場合に、8つ目のパートのSTM32 Cube IDEもご覧いただく必要があります。こちらも実習形式となります。以上がSTM32マイコン体験実習組み込みAI編のプログラム構成になります。本プレゼンテーションは1つ目のAI解説のパートとなります。では初めにAIの概要について説明いたします。最近、さまざまなところでAIや機械学習、新総学習といった言葉を耳にすることが多くなってきております。そこで、ここではこれらの用語について簡単に説明いたします。AI、すなわち人工知能は、もともと数十年前から存在する技術で、人間の考え方を模仿するコンピュータのアルゴリズムになります。人工知能には広い意味がありますが、その中に含まれる分野の1つが機械学習になります。機械学習は、いろいろなデータを集めて、集めたデータから繰り返し学習して、アルゴリズムを形成していく技術になります。次に、新総学習というキーワードがあります。新総学習は機械学習に含まれる1つの分野で、人間の脳を模仿して特別の構造を作ります。その構造をニューラルネットワークと呼びます。テレビなどによく出てくるAIという言葉の90%程度は、この新総学習を意味しており、今一番注目されている技術になります。では、実際AIはどのようなところで使用されているのでしょうか?実はAIは、すでに数年前から我々の身近なところで使われています。代表的な用途としては自動車の自動運転が挙げられます。また、パソコンやスマートフォンの中では、検索エンジンや翻訳エンジン、おすすめの商品やコンテンツの紹介、クラウドをベースとした音声サービスなどが挙げられます。その他、ドローンで使用されていたり、医療分野では感染症などのデータ分析に使用されています。さらに、スマート農業やスマートビル、スマート工場などでもAIの活用が進んでいます。ここで機械学習について説明いたします。機械学習の技術では、実際のデータを用いて学習を行い、予測のアルゴリズムを改善していく手法を取ります。これは標準的な異風前エルスなどの明治的なプログラミングが不要で、従来のプログラミングが実行できない場合に採用されたりしています。このような機械学習ですが、機械学習にはさまざまな種類があります。一番簡単なものは、決定技学習です。右上の図に該当します。その他、クラスタリング分析やルールベース学習、機能論理プログラミングなどのアルゴリズムがありますが、その中の一つに新総学習という技術があります。弊社では、決定技学習をハードウェアで実行できるメムスモーションセンサーを用意しております。こちらは、低消費電力設計のためIoT機器に最適なセンサーとなります。次に、新総学習ですが、現在一番注目されているAIの技術が新総学習になります。新総学習はベースにニューラルネットワークを使用した機械学習の技術です。このニューラルネットワークのニューラルは、ニュー論を意味しており、人間の脳を模範しています。一つのニュー論にさまざまなデータが入力されて、演算されて、その結果がつながっている他のニュー論に伝達されていきます。人間の脳内のニュー論は、人口ニュー論と比べて数もずっと多く。もっと難しい処理が可能ですが、基本的には同じように動作します。では、なぜ今この新総学習が注目されているのでしょうか?新総学習は、数ある機械学習の種類の中の一つと説明しましたが、他の機械学習ですとデータを増やしていくと、最初のうちは精度が上がっていくのですが、ある程度増やすと精度が上がらなくなってしまいます。一方、新総学習の場合、データを増やせば増やすほど精度が上がっていきます。それにより、今まで解決ができなかった問題を新総学習の技術を使って解決できるようになってきています。このように、新総学習ではデータを増やすことで精度を上げることができる反面、精度を上げるためにどうしてもデータの量が多くなってしまうという決点があります。また、ニューラルネットワークがブラックボックスのため、得られた結果がどうしてそのような結果になったのかの解析が難しいという側面もあります。新総学習はデータの量を増やすことで、他のアルゴリズムと比べて高い精度を実現できることを説明しましたが、ここでは様々な課題に対して、従来の方法を使用した場合の精度と新総学習を使用した場合の精度を比較しております。例えば、物体検出の場合、従来法では34.3%の精度しか出せなかったところが、新総学習では60.9%の精度と大幅な改善が見られます。一方、顔認識のように課題によっては数%の改善しか見られない場合もあります。このように、どの用途でも新総学習が最適な選択であるということではなく、用途に応じて新総学習が得意とする課題なのか、他の方法が適しているのかが異なります。従いまして、AIの導入をご検討される際、アプリケーションに応じて新総学習とそのアウルゴリズムとの間にどれくらいのパフォーマンスの改善があるかを見て、採用する手法を判断する必要があります。ここで、機械学習の必要性について説明いたします。こちらは3次元の物体を検出する例ですが、3次元の物体を検出するには、物体の形や大きさ、明るさや奥行き、全体化、断片化などの情報を使って検出する必要があります。これらの判断を人間が行う場合、比較的簡単に検出することができます。一方で、これをコンピューターに判断させようとした場合、複数のパラメータを基に総合的に判断する必要があり、プログラムを書くことが難しく、アルゴリズムも複雑になります。もう一つの例として、手書き文字認識の例を紹介します。人間が書く文字は、各人によって一つずつ異なります。特定の人の文字だけを認識するということであれば、その人の特徴を踏まえたルールを作ることはできるかもしれません。しかし、不特定多数の人が書いた文字を認識する必要がある場合、そこから汎用的なルールを作ることは容易ではありません。このような場合、新総学習を使用することで、ルール作りの作業が不要となり、データの学習を通してニューラルネットワークを構成することができるため、比較的簡単に解決することができます。ここでAIの進化について見ていきたいと思います。もともとAIの技術は1950年代ごろから、学問としての研究が始まりました。その後、ブームと冬の時代を繰り返し、2000年ごろから新たなブームが始まり、現在に至っています。では、なぜ最近になって、再びAIのブームが訪れているのでしょうか?実は、最近のAIのブームは、新総学習の登場が密接に関係しています。先ほど説明しましたように、新総学習では精度を上げるため、ニューラルネットワークを学習させるための大量のデータが必要になります。一方、現在のAIのブームの少し前の90年代にインターネットブームがあり、いろいろな企業で大規模なデータベースが作られてきました。世界中の大学や研究機関がそのデータベースをもとにAIの研究を重ね、2010年ごろから新総学習の技術が使えるようになってきたことがブームの背景にあります。もう一つのブームの要因は、新総学習を処理するハードウェアのパフォーマンスの登場です。パソコンやCPU、GPUのパフォーマンスが年々高くなってきており、新総学習に必要なパフォーマンスが確保できるようになってきたこともブームの背景としてあげられます。一つのニューラルネットワークには何百万ものニューロンがあり、その演算にはパフォーマンスの高いハードウェアがないと時間がかかりすぎてしまいます。特にニューラルネットワークの学習時に高いパフォーマンスが必要になりますが、大規模なニューラルネットワークとなるとサーバーや高いパフォーマンスのCPU、GPUが必須となります。このように新総学習に必要なデータベースとパフォーマンスの高いハードウェアが普及してきたことが今日のAIブームにつながっているということが言えます。このように現在大変注目されている新総学習ですが、新総学習によって作られたニューラルネットワークは、迷惑メールの認識、自動翻訳、画像認識、株価の動向分析などさまざまなところで使用されております。ここで実際にIoTの分野でAIを使ったシステムを実現する場合の課題について見ていきたいと思います。まずIoT端末ですが、複数ありますが、ネザーから読み取った生のデータを全て無線や優先などのネットワークを返してゲートAへアップロードします。ゲートAは受け取ったデータをクラウドに送信し、クラウド側ではデータに対してAIの処理を施します。一見問題のないシステムに見えますが、実はこの中にはいくつかの課題が潜んでいます。まずIoT端末ですが、センサーから読み取った生のデータを全てゲートAに送るため、送信時間が長くなり、IoT端末としての消費点力が大きくなります。ゲートAとしては通信量が大きくなるため、その分通信費が高くなります。また、クラウドに関しては生データのAI処理を全て行わなければならないので、負荷が高くなり、クラウドの使用量も高くなります。そこで、組み込みAIを導入するとどうなるのでしょうか。IoT端末に組み込みAIを導入した場合、クラウドで行っていたAI関連の処理を端末側に分散させることで、クラウドの負荷を下げることができます。IoT端末ではセンサーデータを取得し、簡単なAI処理を個々の端末が行います。その結果をゲートAに転送することで、全体的に通信するデータ量を抑えることができます。IoT端末での処理は増えますが、処理に用する消費点力よりも通信時の消費点力の方が圧倒的に大きいため、結果としてIoT端末の消費点力を提言することができます。また、ネットワークとしては通信量が小さくなるので、通信費が安くなりますし、クラウドはクラウドにしかできないビッグデータの処理などに集中できるため、負荷及び使用量を削減できます。このようにIoTの分野でAIを使ったシステムを実現する場合、組み込みAIを導入することでさまざまな問題が解決できると考えています。次にニューラルネットワークについて説明いたします。ニューラルネットワークは神経細胞を意味するニューロンで構成されたネットワークを意味します。人間のニューロンは樹上突起、細胞体、軸作端子という3つの要素で構成されています。樹上突起は他の神経細胞からの信号が入力される機構になります。細胞体は入力信号に対して演算が行われ、出力内容を決める機構になります。軸作端子は決まった出力内容を他の神経細胞へ送る機構になります。従いまして、個々の神経細胞ではデータが入力され、演算され、出力が決定されて出力されるという一連の処理を行います。ちなみにAIの分野に出てくるニューロンは人間の神経細胞を模仿した人口ニューロンを意味します。人口ニューロンも神経細胞と同じように考えることができます。神経細胞の樹上突起と同じように、まず最初にX1からXMまでの複数のデータが入力されますが、それぞれの入力に対して異なる重み付けが行われます。重み付けされた各データは、その後加算されてバイアスが加えられます。この演算が完了すると、アクティベーション段へ移ります。アクティベーションでは、演算結果から出力するべき内容を判断します。例えば、演算結果があらかじめ決められた式一を超えていたら、1を出力、超えていなければ0を出力するといった処理になります。以上が、人口ニューロンの基本原理になります。では、人口ニューロンをハードウェアで実現する場合、どのようにしたらいいのでしょうか。組み込みAIの場合、使用できるハードウェアは限られていますので、どのような点に注意して実現したらいいかをここで説明いたします。先ほどご説明しましたように、ウェイトの値は入力ごとに異なる値が決められています。この値は、もともと学習されて得られた値となります。この値をどこかに保存しておく必要がありますが、通常マイコンのフラッシュメモリなどの不気発性メモリに保存します。もう1つの注意するべき点は、演算を行う部分になります。演算の内容は、席は演算となりますが、これをマイコン、CPU、GPU、DSPなどを使用して処理を行います。組み込みAIでは、この演算速度が非常に重要な要素になります。使用するハードウェアでは、演算にどれくらい時間がかかるか、その時間は開発中のアプリケーションで許容できるかどうかを判断する必要があります。場合によっては、使用するハードウェアの見直しが必要になることも考えられます。先ほどの説明で、個々のニューロンの出力結果は、つながっている他のニューロンに入力されると説明しましたが、そこにはレイヤーという概念があります。ニューラルネットワークには、主に入力レイヤー、隠れレイヤー、出力レイヤーの3種類のレイヤーがあります。入力レイヤーは、他のニューロンからの入力や、ある特徴量が入力されるレイヤーです。隠れレイヤーは、ネットワークの中数となる最も重要なレイヤーです。実現されたい内容によってレイヤーの構成が異なります。出力レイヤーは、隠れレイヤーの出力を基に予測したい出力を提供します。ここで、ニューラルネットワークの処理の例を1つ紹介します。住宅の賃料を予測するシステムを考えます。まず、入力のデータとしては、住宅の大きさ、部屋の数、駅からの距離などが考えられます。また、それぞれの入力には異なる重みの値が付け加えられます。この重み付けでどれぐらいの金額になるかが決まりますが、重みの値は都市部と郊外とでは大きく異なります。例えば、都市部の住宅を考えた場合、借骨付の物件と借骨なしの物件とでは大きく賃料が変わるため、重みの値は大きくなりますが、郊外では借骨のありなしの差は賃料に大幅に影響がないため、重みの値は小さくなると考えられます。このように、重みの値は都市部の野心データベース、郊外の野心データベースなど、学習に使用するデータベースによって大きく異なってきますので、目的にあったデータベースを用意することが重要になります。次に、ニューラルネットワークの学習について説明します。例えば、画像が犬かどうかを判断するニューラルネットワークを作る場合、まず最初にニューラルネットワークに入力する犬の画像を大量に用意する必要があります。また、その画像が犬であるということを明示するためにラベルをつける必要があります。このようにしてできたデータとラベルの組み合わせをデータセットと呼びます。データセットの準備ができたら、画像をニューラルネットワークに入力するのですが、ニューラルネットワークは最初は全く情報を持っていませんので、子供の脳みたいにまっさらな状態です。まっさらというのは、重みの値がゼロかランダムの状態を意味します。この状態から犬の画像を入力して、犬ではないと出力されたら、出力結果とラベルを比較します。ラベルは、ここではYに相当しますが、比較結果はエラーとしてニューラルネットワークに反映され、異なる重み値を設定する必要があると判断して調整を行います。この作業を繰り返し行うことで、犬の写真を入力したら、犬の出力が得られるようになります。この繰り返し作業を学習と言います。それが終わったら、次の写真でも同じ作業を続け、目的にあった制度に近づけていきます。こうして最終的に犬かどうかを高い制度で判断できるようになります。ここで、組み込みAIを実現するための流れについて見ていきたいと思います。組み込みAIを作る場合、まずニューラルネットワークのモデル作成をして、それをマイコンに実装する必要があります。モデルの作成は一般的に学習フェーズと呼ばれますが、学習させるための学習用データの収集、学習用データのラベリング、そしてニューラルネットワークモデルの学習という3つのステップに分けることができます。通常のAIですと、この後学習済みモデルをクラウドやPC上で水論実行するという流れになりますが、組み込みAIの場合、学習済みモデルをマイコンなどのハードウェアへ実装する必要があります。学習済みのモデルは一般的にはパイソンなどの高級言語で書かれていますので、これをマイコンに実装する場合、マイコンが解釈できるC言語などの組み込み用の言語に変換する必要があります。また、マイコンが持つメモリーサイズに収まるようにモデルの圧縮も必要になります。マイコン用のコードへの変換及び圧縮が完了すると、学習済みモデルをマイコンへ実装してマイコン上で水論実行が行われます。このように、組み込みAIを実現するためには、学習用データの収集、学習用データのラベリング、ニューラルネットワークモデルの学習、マイコン用コードへの変換及び圧縮、そして水論モデルの実行という5つのステップを踏む必要があります。この5つのステップのうち、弊社が提供するソリューションは、3番目のニューラルネットワークモデルの学習以外の4つのステップをもうらしております。ここで、弊社の組み込みAIソリューションに対応するハードウェアをいくつか紹介します。1つ目は、小型のセンサー評価キットのセンサータイルになります。こちらは、温度、湿度、待機圧、加速度、ジャイロ、指示器、マイクなどの様々なセンサーと、ブルートゥースローエナジーのモジュールを搭載した小型の評価キットです。ボードには、超低消費電力マイコンのSTM32L476が搭載されています。また、マイクロSDカードのスロットも搭載しているため、学習用データの収集のために取得したデータをCSVファイルやウェイブファイルの形式で取り出すことが可能です。もう1つのハードウェアがIoT評価ボードになります。こちらは、温度、湿度、待機圧、加速度、ジャイロ、指示器、マイクなどのセンサーに加え、即居センサー、およびWi-Fi、サブギガヘルツタイ、ブルートゥースローエナジー、NFCなどの各種通信機能を搭載したIoT開発に最適なAll-in-oneタイプの評価ボードです。マイコンは、超低消費電力マイコンのSTM32L475が搭載されています。このボードには先ほどのセンサータイルのようなマイクロSDカードのスロットはありませんが、オンボードのフラッシュメモリーが搭載されているため、学習用データの収集のために取得したデータをUSB端子経有でマスストレージデバイスとして取り出すことが可能です。最後に、組み込みAIのソフトウェアツールを1つ紹介します。組み込みAIには、学習済みのニューラルネットワークモデルの組み込み系言語への変換及び、サイズの圧縮が必要であると説明しましたが、その処理を行ってくれるツールが、こちらのSTM32 Cube AIになります。STM32 Cube AIは、STM32マイコン用の初期化コード生成ツール、STM32 Cube MXにSTM32専用の組み込みAIライブラリーであるX Cube AIを組み合わせた組み込みAI専用の開発環境です。こちらのツールは、現在、ONIX、KERAS、転送フローライト、カフェ、ラザーニャ、コンプネットJSといったディープラーニングフレームワークに対応しています。また、IARのEWアーム、カイルのMDKアーム、弊社のSTM32 Cube IDEなどの各種統合開発環境のプロジェクトファイルに変換済みモデルを含む形でプロジェクトファイルを生成することができます。以上で、本プレゼンテーションを終わります。プレゼンテーション最後までご覧いただきましてありがとうございました。