[CoreML] YOLOv3 モデルで手軽に遊んでみる

Apple の提供している物体認識の CoreML サンプルは、BreakfastFinder (朝食探知機) ですが、バナナとか卵しか認識されなくて、CoreML を試している感が少ないです。
80種類ものオブジェクトが特定ができる YOLOv3 を試してみる方法を説明します。

材料のダウンロード

以下の材料が必要です。

  • CoreML サンプルプログラム
  • YOLOv3 モデルファイル

CoreML のサンプルプログラムで使用しているモデルを置き換える形で、YOLOv3 モデルを使うサンプルアプリケーションを作ります。

CoreML サンプルプログラムをダウンロード

Apple の機械学習のページのなかから、YOLOv3 のサンプルプログラムをダウンロードします。

まずは、YOLOv3 の説明ページへジャンプします。

YOLOv3Entrance

表示される YOLOv3 説明ページから、コードダウンロードページへジャンプします。

YOLOv3Detail

“Download” ボタンをおして、サンプルプロジェクトをダウンロードします。

YOLOv3Download

ダウンロードした ZIP ファイルを展開して、BreakfastFinder.xcodeproj を Xcode で開きます。

YOLOv3 モデルをダウンロード

先ほど開いた YOLOv3 の説明ページから、モデルをダウンロードします。

YOLOv3download

2つをダウンロードが終われば、準備は完了です。

モデルの置き換え

ここからは、サンプルプロジェクトを開いた Xcode 上での作業となります。

ファイル追加

まずは、ダウンロードした YOLOv3.mlmodel を Xcode へ追加します。

ファイルナビゲータ上に、ドラッグ&ドロップ(D&D)で追加します。

AddwithUsingDD

ファイルの順番に意味はありませんので、”BreakfastFinder”フォルダ下の適当な場所に追加してください。

入出力の確認

CoreML のモデルは、それぞれ入力と出力が決まっています。

ファイルナビゲータ上でモデルをクリックすると、エディタペーンに表示されます。

ObjectDetector (サンプルプロジェクトのモデル)の入出力
ObjectDetector

YOLOv3 の入出力

YOLOv3Model

比較してみるとわかりますが、同じです。ですので、モデルを取り換えても動作するということになります。

使用モデルの変更(コード修正)

使用する CoreML モデルは、VisionObjectRecognitionViewController.swift の中で読み込まれています。
24行目を以下のように変更することで、ObjectDetector.mlmodel ではなく YOLOv3.mlmodel が読み込まれます。

ReplaceWithYOLOv3OnCode




コンパイルと実行

通常のプロジェクトと同様に、コンパイル後、実機を接続して実行します。

このサンプルプロジェクトは、カメラ機能を使用するので、シミュレータでは動作しません。

実行

以下が、使ってみた結果です。

CoreMLwithBookshelf

以下感想です。
本棚周辺を写してみたのですが、Clock, Backpack, Book が特定されました。

Clock は、正解ですが、Book は、ただの段ボール箱も Book と特定されていますし、手提げ鞄を Backpack と特定するのは正しいのか微妙です。

手提げ鞄を Backpack として特定したときの Confidence は、0.79 なので、理解できなくもないですが、
段ボール箱を Book と特定したものは、Confidence 1.0 なので、フィルター等で取り除くのも難しい気がします。

まとめ: Apple 提供のサンプルプログラムを YOLOv3 と使うことは簡単

上記で書いたように、非常に少しの手間で YOLOv3 を使うことができます。

YOLOv3 は、有名なモデルなので、ML をそのままで使うとどれくらい識別されるのかを確認もできます。

説明は以上です。

コメントを残す

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