ESP32-P4で手書き数字を99%の精度でリアルタイム認識するチュートリアルを公開

FabScene(ファブシーン)

マイコンでディープラーニングを動かすには「学習」と「推論」という2つの工程をまたぐ必要がある。学習はPCで行うが、推論をマイコン上で動かすには量子化と呼ばれる変換処理が壁になる。Harald Kreuzer氏はこの一連のパイプラインを、ESP32-P4を対象に丁寧に解説したチュートリアルをGitHubで公開した。

題材は機械学習の「Hello World」ともいえる手書き数字認識(MNIST)だ。PCでPyTorchを使ってモデルを学習させ、ESP-PPQで32ビット浮動小数点数から8ビット整数(Int8)に量子化したうえで、ESP-DLを使ってESP32-P4上で動かすまでの全工程を扱っている。

注目すべきは、学習データの扱い方だ。MNISTには6万枚の学習画像が含まれるが、アメリカ式の数字が中心で、欧州式の「1」(斜め上へのはね)や「7」(横線入り)では誤認識が起きやすい。Kreuzer氏はタブレットで集めた欧州式の手書きサンプルを追加し、50倍の重み付け(オーバーサンプリング)で学習に反映させた。さらにランダムな回転(最大10度)と平行移動(最大10%)によるデータ拡張を組み合わせ、29エポック時点で99.46%の認識精度を達成している。

量子化後のモデルはESP32-P4のSIMD命令拡張(PIE)と組み合わせることで、128ビット幅のQレジスターに16個のInt8パラメーターを同時に格納し、1命令で16回の積和演算を実行できる。実際の推論時間は約20ミリ秒だ。

実行環境としてCrowPanel Advance 7インチ(ESP32-P4搭載)を使用しており、タッチパネルに数字を描くと確率がリアルタイムでバーグラフ表示される。448×448ピクセルのキャンバス画像を28×28ピクセルに縮小する処理には、ESP32-P4内蔵のPixel Processing Accelerator(PPA)のハードウェアスケーリングを活用することで、描画中の遅延を回避している。

PCでのPyTorchコードとESP-IDFのC++コードはGitHubで公開されており、ESP-IDF環境があれば手順に沿って再現できる。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!
目次