Edited at

onnx-go で tiny-yolov2 が動く様になった


はじめに

1ヶ月程前に「Go による機械学習 推論フレームワークの最新動向 2019」という記事を書きました。onnx-go はバックエンドとして gorgonia を使う Pure Go なニューラルネットワークのライブラリなのですが、前回紹介させて頂いた時にはまだ mnist 程度の簡単なモデルしか動作しませんでした。

image.png


tiny_yolov2 が動いた

昨日マージされた変更により、tiny-yolov2 が動く様になりました。

image.png

examples/tiny_yolov2 ディレクトリに移動し go build すると tiny_yolov2 が出来上がります。モデルファイルは以下からダウンロードして下さい。

https://github.com/onnx/models/tree/master/tiny_yolov2

$ ./tiny_yolov2 -img file.jpg -output output.jpg

この様に実行するとマーカーが描画された画像が出力されます。

output.jpg

リアルタイムに推論はまだ遅くて使えないと思いますが、アップロードされた画像から物体を検出して何か処理を行う程度には使える様になりました。


今後の onnx-go

これまで Go で学習済みモデルを使えるニューラルネットワークと言えば TensorFlow の Go binding、TensorFlow Lite の Go binding (go-tflite)、PFN 社の menoh を使うしかなく、またいずれも cgo の為、ビルドのハードルが高いのが問題でした。ですが、onnx-go が Pure Go で実現した事により go get で機械学習ライブラリが手に入れられる様になりました。また Pure Go なのでクロスプラットフォームでビルドできる様になりました。とても良い話です。

とは言え、全てのオペレータが揃ったという事ではありません。まだ足りないオペレータもあります。皆さんからのコントリビュートをお待ちしています。

(僕も onnx-go の push 権限を頂いたので、もっとコントリビュートしようと思います。)