A certain engineer "COMPLEX"

.NETで機械学習を試してみる ML.NET編 第2回

前回の続き。

デモ (の続き)


前回はプロジェクトにONNXファイルを追加し、コードが自動生成されることを確認しました。
あと、前回記述を忘れましたが、アプリは .NET Core 3.0 です。

パッケージ追加

生成されたコードは様々なパッケージに依存しています。

これを解決するために、nugetで下記のパッケージを追加します。

  • Microsoft.Windows.SDK.Contracts
    • 10.0.17763.1000

これでビルドが通ります。

画像の読み込み処理の下準備

前回生成した自動生成の Input クラス を下記のように修正。

Parserの作成

先に、YOLOの出力をBoundingBoxに変換するパーサーを作ります。
幸いにして偉大なる先人が既に作成していらしたので、クラス名などを手直ししてプロジェクトに追加します。

Source code to support some of my Blog entries. Contribute to elbruno/Blog development by creating an account on GitHub.

上から下記の2つを移植します。

  • YoloBoundingBox.cs
  • YoloWinMLParser.cs

推論処理

モデルファイル、画像ファイルを読みこんで推論します。
コンソールなので引数にモデルファイルと画像ファイルのパスを渡します。
また、画像に対して結果を描画したいので、下記のパッケージを追加します。

  • System.Drawing.Common

そして出来上がったのが下記。

結果の閾値は少し恣意的に選定しましたが、結果の画像は下記です。
なお、入力画像は、本家YOLOのリポジトリにあるサンプル画像です。

自転車が領域に対して矩形が大きすぎますが、他は概ね正しいです。
実際のYOLO v3は正しく認識できていた記憶があるので、Tiny故の精度の低さでしょうか?

まとめ


C#だけでYOLOを使うことができました。
モデルファイルの推論処理周りはだいぶ楽ですが、画像の読み書きは完全にUWPの世界で正直面倒....

Source


Sample source code for Demonstration, Experiment and Test - takuya-takeuchi/Demo

コメントを残す

メールアドレスが公開されることはありません。

%d人のブロガーが「いいね」をつけました。