[CoreML] CoreMLのサンプルモデルを使ってみる(YOLOv3)

コーヒーと起床時間のモデルの使い方は分かったので、Appleのページにあるサンプルモデルを使ってみます。

この分野の常識がよく見えないので、とりあえずということで、面白そうなYOLOv3を使ってみようかと思います。

以下、使い方の説明です。

Create MLは使わなくて良い

すでに、CreateMLで生成されたmlmodelファイルが置いてあるので、とくに、”Create ML”アプリケーションを使う必要はありません。

Input/Outputは?

Xcodeでプロジェクトを作って、mlmodelをD&Dすると、モデルのインプットやアウトプットがわかります。

XcodeへD&Dした

  • 入力1:画像
    416×416の画像情報
  • 入力2:画像の圧縮情報?
    画像処理にも疎いので、不明

  • 入力3:出力データの閾値
    画像認識して出力するときに、自信(confidence)がどれくらいあるときに出力してくるかの設定
  • 出力1;自信の値
    80種類のオブジェクトに分類してくるので、その分の配列込み
  • 出力2:座標値
    認識されたオブジェクトの(x,y,w,h)の値。(の配列)

と書いてありますが、なんとなくしか意味が分からないので、作って理解してみましょう。




Macアプリプロジェクトの作成

試しに使ってみるために、アプリを作ってみました。(なぜ、お試しアプリを公開してくれないのか不思議です)

Macアプリプロジェクトの準備

いろいろな画像に対して使ってみたくなるはずで、作業の効率を考えるとMacアプリとして作った方が良さそうなので、Macアプリとしてプロジェクトを作ります。

mlmodelの使い方

mlmodelをプロジェクトにD&Dするとモデルも作成されて、その情報によると、inputはYOLOv3Inputで、outputはYOLOv3Outputです。
それぞれ、以下のような情報を含みます。

YOLOv3Input

YOLOv3Output

あとは、とりあえず、動くものを作って、出てきたものをみてみることにしました。

CVPixelBuffer

入力のCVPixelBufferって、なんでしょうか?32-bit BGRAとのことですが、それって何??

Appleの周辺ドキュメントを読んでいくと、どうやら、Core Videoで扱うことのできるフォーマットっぽい。(CoreImageでも扱えるみたいです)

CVPixelBufferというそのままのクラスがあって、以下のメソッドを使えば良いみたいです。

コード

# がっつりObjective-CというかメモリアロケーションしてそうなCのAPIですが、しょうがないのかな?

MEMO
自分向けにメモです。(Swiftでポインタ扱うのにはいまだに慣れません)

  • UnsafeMutablePointer<Type> は、Type* のこと

と調べていたのですが、GitHubで便利なNSImageのextensionが公開されているのを見つけて、そのextensionを使って、PixelBufferに変換してます。

サイズ変換についても便利なExtensionがあったので、使いました。結局自分のコードはほぼ0になりました・・・

コードは、以下。評価したい画像をD&Dするとサイズを変更して読み込まれて、ボタンを押すと評価します。

コード

上記以外のコードに、上の方に記載したNSImageのextensionが必要となります。

認識が微妙・・・

自分のサンプルでは何も認識されず焦ったのですが、適切な画像を評価させると認識されるようです。

きちんと識別される画像を用意して動作確認しないと、何がいけないかわからなくなりそうです。

認識結果のデータの読み方は別記事で。

説明は以上です。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です