前回の続き。
デモ (の続き)
前回はプロジェクトにONNXファイルを追加し、コードが自動生成されることを確認しました。
あと、前回記述を忘れましたが、アプリは .NET Core 3.0 です。
パッケージ追加
生成されたコードは様々なパッケージに依存しています。
これを解決するために、nugetで下記のパッケージを追加します。
- Microsoft.Windows.SDK.Contracts
- 10.0.17763.1000
これでビルドが通ります。
画像の読み込み処理の下準備
1 | public sealed class Input |
Parserの作成
先に、YOLOの出力をBoundingBoxに変換するパーサーを作ります。
幸いにして偉大なる先人が既に作成していらしたので、クラス名などを手直ししてプロジェクトに追加します。
上から下記の2つを移植します。
- YoloBoundingBox.cs
- YoloWinMLParser.cs
推論処理
モデルファイル、画像ファイルを読みこんで推論します。
コンソールなので引数にモデルファイルと画像ファイルのパスを渡します。
また、画像に対して結果を描画したいので、下記のパッケージを追加します。
- System.Drawing.Common
そして出来上がったのが下記。
1 | using System; |
結果の閾値は少し恣意的に選定しましたが、結果の画像は下記です。
なお、入力画像は、本家YOLOのリポジトリにあるサンプル画像です。
自転車が領域に対して矩形が大きすぎますが、他は概ね正しいです。
実際のYOLO v3は正しく認識できていた記憶があるので、Tiny故の精度の低さでしょうか?
まとめ
C#だけでYOLOを使うことができました。
モデルファイルの推論処理周りはだいぶ楽ですが、画像の読み書きは完全にUWPの世界で正直面倒….