この章は試験中です。 学習済みのモデルを、実行時に読み込むのではなくコンパイルの時点でコードへ焼き込みます(読み込む処理も、同時に配布するファイルも不要です)。
ジェスチャの判定のように値を読んで分岐するなら前者、絵を作り替えるようにそのまま画面へ出すなら後者を選びます。
| モデルのファイル名 | 先頭に付く名前 |
|---|
gesture.onnx | Gesture |
hand_pose.onnx | HandPose |
下線と拡張子は落ちます。
- 書き出した
.onnx を、属性を書くスクリプトと同じフォルダへ置きます
- クラスに
partial を付け、属性だけを書いて保存します
- Unity へ戻るとインポートが実行され、スクリプトの隣に生成されたファイルが現れます
- 生成された名前を使う処理を書きます
| |
|---|
| 同時に書いたとき | 手順 2 と 4 を 1 度に書くと、生成される名前がまだ無いためコンパイルのエラーになります |
| エラーになったとき | 前に生成したファイルと重みのテクスチャは残り、隣に Judge.Gesture.Failed.Model.cs のような小さなファイルが書かれます。その中の #error 1 件が理由を示してコンパイルを止めるので、前の重みのまま実行されることも、アップロードされることもありません。モデルを直すか属性を削除すると、このファイルは消えます(一度も生成できていないモデルには前のファイルが無いので、生成される名前を使う処理もエラーになります) |
| モデルを差し替えたとき | 手順 3 が自動でやり直され、要素数の定数も新しい値になります |
| Safe Mode を尋ねられたとき | 生成されたファイルが無い(同時に書いた・手で消したなど)と、起動したときにコンパイルのエラーになり、Safe Mode に入るかを尋ねられます。Ignore を選ぶと、読み込みが終わったところでファイルが生成され、コンパイルが通ります |
| |
|---|
| 名前 | スクリプトとモデルの名前をつないだものです。Judge.cs に gesture.onnx の属性を書くと Judge.Gesture.Model.cs になります |
| 配置先 | 属性を書いたスクリプトと同じフォルダです |
| モデルの探し先 | 属性に書いた経路を、スクリプトの隣・プロジェクトのフォルダの順に探します |
| 再生成 | スクリプトかモデルのどちらかが変わると生成し直され、属性を削除すると消えます。手で編集しないでください。 |
| 大きさ | 重みがそのままコードになるので、重みの数より多い行数になり、コンパイルのたびに全部読まれます |
| 記述の順序 | 属性と、生成される名前を使う処理を同時に書くとコンパイルのエラーになります。先に属性だけを保存してください。 |
| |
|---|
| 演算 | 受け取る演算と、その条件はONNX モデルの演算(試験中)にあります。そこに無い演算を含むモデルは、コンパイルの時点でエラーになります |
| 層の順 | モデルの層は実行する順に並んでいなくてもかまいません(元の実行環境と同じく、変換が並べ直します)。互いの出力を輪になって読む層はそのように並べられないので、層を示してエラーになります(元の実行環境もそのようなモデルをエラーにします) |
元のモデルと同じ結果になるとは限りません。8 ビットへ量子化する時点で値が丸まり、半精度で運ぶ値は GPU が半精度で格納するときの丸め方(PC のグラフィックスカード 1 台で測ると、0 の方向への切り捨て)に従うので、書き出し元の実行環境で計算した値とはその分だけ違います(実数のモデルでは 16 ビットへ丸める分です)。