えいあーるれいの(技術)日記

Ar-Ray (Ar-Ray-code) のつぶやきなど。

お前らに国産(CPU)MNISTがどんなものか見せてやるよ🙃

今年は「国産〇〇」という単語を多く見かけた気がします。

国内外の様々な要因が絡んだ上での人々の想いが込められたトレンドではある一方で、その言葉がかなり安易に消費されている気もします。


このトレンド、、、

乗っかるしか無いよね?🙃

今回は、国産CPUであるRA4M1を搭載したArduino UNO R4を使って、MNISTを移植しました。

これで今日から国産(CPU)MNIST芸人✨


MNISTとは?

言わずと知れたAI界のHelloWorld的存在です。

データサイズがとても小さく、CPUで学習・推論ができます。

解説記事はたくさんありますし、おそらくChatGPTに訊けばとてもわかりやすく解説してくれることでしょう。

Arduino R4とは?

主に教育分野やアート分野で根強い人気を持つ、組み込みマイコンを搭載した開発エコシステムです。

Arduino R4はそのマイコンルネサスマイコンを搭載したものです。

ルネサスは日本の半導体企業なので、ここでは国産CPUと呼んでいます。


早速動かす

解説を書くより動かして実際の動きを見てもらうのが良いと思うので手順を記載します。

使用パーツ

大体の通販サイトでそろうと思います。

  • Arduino R4 Minima (¥3500くらい)
  • SSD 1306 (¥600くらい)
  • ブレッドボードジャンパー 4本
  • ブレッドボード
  • USB type C <--> PCのUSBポートに合うコネクタ を持つデータ送受信可能なケーブル 1本
  • DockerとPlatformIOが動作するスペックを持つ開発用PC

コードは以下のURLにあります。

github.com


使用ソフトウェア

  • PlatformIO
  • Docker


筆者はUbuntu22.04上に上記の環境を構築して作業しました。


モデルの作成

今回作成するモデルは、784->10 の単層Denseとなっています。

EK-RAxMx-examples/misc/nn/mnist/train に入って次のコマンドを実行します。

docker compose build
docker compose run --rm mnist python train_dense_model.py

モデル作成が始まります。ほとんどの場合、1分も経たずに学習が終わります。

学習の様子


モデルの変換

作成した dense_model.h5C/C++ヘッダーファイルに変換します。

docker compose run --rm mnist python convert_to_header.py --model dense_model.h5 --out ../src/mnist_model.h

書き込み

次に、Arduino R4 minimaを使って書き込みを行います。

まずは配線です。ArduinoとSSD1306について、それぞれのSCL・SDA・GNDをジャンパーで繋ぎ、VCCをArduino側の3.3Vと接続します。

ArduinoのUSBポートはPCと接続します。


EK-RAxMx-examples/misc/nn/mnist/ に移動してPlatformIOビルド&書き込みコマンドを実行します。

pio run -t upload

推論がArduino R4上で動く様子が確認できます。1枚あたり2ms程度で推論します。

ちなみに、1問間違っているようです。MNISTにはどちらなのか判別が難しいものも含まれるので仕方ない(と思いたい)😵‍💫‥



2026年も元気に開発を続けていきます!よいお年を👋