😽

M5Stack LLM630 Compute Kit でJupyter Notebook

2025/01/23に公開

はじめに

LLM630にプリインされてるJupyter Notebookを動かします。
公式のドキュメント

LLM630のJupyter Notebookにアクセス

LLM630をEthernetに接続して、IPアドレスを調べてからWebブラウザでアクセスします# はじめに
LLM630にプリインされてるJupyter Notebookを動かします。
公式のドキュメントに沿って動かすだけ

必要ファイルをDL&UL

YOLO11推論セット(llm630_compute_kit_jupyter_project_for_yolo11s_v1.0.zip)がDLできるので、DLして解凍してLLM630にULします。

解凍すると、以下の3ファイル。
ax_yolo11s_en_US.ipynb
dog.jpg
yolo11s.axmodel

LLM630のJupyter Notebookにアクセス

LLM630をEthernetに接続して、IPアドレスを調べてからWebブラウザでアクセスします。

右にUploadボタンがあるので、先ほどの3ファイルをアップロード。

アップロードしたファイルは /opt/jupyterにあります。

root@m5stack-kit:/opt/jupyter# ls -ll
total 10928
-rw-r--r-- 1 root root 1113161 Jan 22 21:17 ax_yolo11s_en_US.ipynb
-rw-r--r-- 1 root root  163759 Jan 22 21:10 dog.jpg
-rw-r--r-- 1 root root 9908739 Jan 22 21:10 yolo11s.axmodel

ax_yolo11s_en_US.jpynbをクリックすると、新しいタブにオープンされます。

勝手に実行されてた。。

実行結果

[INFO] Using provider: AxEngineExecutionProvider
[INFO] Chip type: ChipType.MC20E
[INFO] VNPU type: VNPUType.DISABLED
[INFO] Engine version: 2.6.3sp
[INFO] Model type: 1 (full core)
[INFO] Compiler version: 3.3 3cdead5e
Processing head with stride 8, grid_size 80x80, output shape (1, 80, 80, 144)
bbox_part shape: (1, 80, 80, 64), class_part shape: (1, 80, 80, 80)
After reshaping, bbox_part shape: (6400, 4, 16), class_part shape: (1, 6400, 80)
Processing head with stride 16, grid_size 40x40, output shape (1, 40, 40, 144)
bbox_part shape: (1, 40, 40, 64), class_part shape: (1, 40, 40, 80)
After reshaping, bbox_part shape: (1600, 4, 16), class_part shape: (1, 1600, 80)
Processing head with stride 32, grid_size 20x20, output shape (1, 20, 20, 144)
bbox_part shape: (1, 20, 20, 64), class_part shape: (1, 20, 20, 80)
After reshaping, bbox_part shape: (400, 4, 16), class_part shape: (1, 400, 80)

BB描画後の画像。正解。

簡単。

ちょこっとコードを覗く

コードブロックを見ていくと、[5.define Post-processing Function]のところだけがちょっと特異な構造になっています。outoputが単純なlabel,probability,座標になってなくてpostprocessでごそごそ処理してますね。
これはYOLOのモデルをINT8量子化する際の劣化を防ぐための処理の一環で、オリジナルのYOLOではモデル内で処理している最終段のオペレーションをFP16で実行するためにpythonコード内で実行する為です。INT8プロセッサしか持ってないNPUで、少しでも精度劣化を防ぐための処理だそうです。
自分でも好きなモデルをAX630で実行したいと考えている場合、このあたりのテクニックも磨く必要がありそうです。

Discussion