Create MLで自作のモデルを作成して画像認識する

前回の記事でApple公式の画像認識のサンプルを動かしてみました。

公式のサンプルにはトレーニング(学習)済みの機械学習のモデルが含まれていますが、利用するモデルによって認識(分類)するオブジェクトが決まります。例えば、犬や猫の画像を認識するアプリを作りたいときは犬や猫の画像を使ってトレーニングしたモデルを用意する必要があります。

Xcodeに付属しているCreate MLを使うとGUIでモデルを作成することができます。

スクリーンショット 2020-07-23 23.59.57

今回は犬と猫の画像を認識するためのモデルを作成してみます。

画像18

想定ユーザー、開発環境

この記事の想定読者は次のような初学者です。

・iOSの機械学習で使うモデルを作ってみたい
・モデルを使ってカメラの画像認識(クラス分け)をやってみたい
・機械学習やAPIの細かいところは後回しで良い
・チュートリアル形式で知りたい

使用した環境は以下の通りです。

macOS 10.15.6
Xcode 11.6
iPhone 11 (iOS 13.6)

データセットの準備

犬と猫の画像を認識するためにはお手本となる画像を使ってモデルをトレーニングする必要があります。必要な画像の数、種類についてはApple公式サイトの Creating an Image Classifier Model に記載があります。

スクリーンショット 2020-07-24 0.02.43

・カテゴリ毎に最低10枚は必要(今回であれば犬10枚、猫10枚)
・カテゴリの枚数は均等に、一方が10枚でもう一方が1000枚などは避ける
・JPEGやPNGなどのQuicktime Playerで開くことができる形式にする、特定のサイズである必要はない、同じサイズである必要もない、ただし299 x 299ピクセル以上の画像を使用することを推奨
・実際にアプリを使用するときにモデルに渡すのと同等の条件の画像を使う、例えば野外で撮影した画像を認識させるのであれば野外で撮影した画像を使ってモデルをトレーニングする

トレーニング用の画像は各自で用意する必要があります。学習(自学)用途で使用できる画像を探してみたところマイクロソフトが犬と猫の画像データを配布していました。

ファイルサイズが780MByteもありかなり大きいのですがこちらをダウンロードします。

スクリーンショット 2020-07-24 0.10.54

ダウンロードしたファイルを展開します。CatとDogのフォルダに画像があることを確認しておきます。利用規約と思われるファイルもあるので各自で内容を確認しておきましょう。

Create MLでモデルを作成する

Xcodeを起動して左上のメニューのOpen Developer ToolからCreate MLを起動します。

スクリーンショット 2020-07-24 0.28.43

アプリが立ち上がるので左下のNew Documentを選択します。モデルのテンプレート画面が表示されます、今回は画像を分類するので左側のリストでImageを選択してからImage Classifierを選んでNextを押します。

スクリーンショット 2020-07-24 0.31.10

プロジェクト(モデル)の情報を入力する画面が表示されるので、Project Nameを分かりやすい名前に変更します。今回はAnimalClassifierとします。Nextを押すと保存先を聞かれるので選択してCreateを押しましょう。

スクリーンショット 2020-07-24 0.44.33

以下のような画面が立ち上がり空(から)のモデルが作成されました。

スクリーンショット 2020-07-24 0.45.14

左側のModel Sourcesの下の名前がAnimalClassifier 1になっていると思いますがDogCatClassifierに変えておきます。

トレーニング用の画像を準備します。Create MLは分類するクラス毎にフォルダを用意してトレーニング画像をセットする必要があります。今回の例では猫と犬を分類するので2つフォルダを用意する必要があります。ここで重要なポイントがありフォルダ名が推論(分類)結果の出力値(クラス名)になるので注意が必要です、Dogというフォルダを作ると分類名もDogになります。

今回は以下のようにフォルダを作成しました。Training Dataがトレーニング用のフォルダでその中にあるCatとDogのフォルダにそれぞれ10枚画像を入れてあります。写真では展開していませんが同様にTesting Dataのフォルダの中にもCatとDogの画像が10枚ずつ入っています。

スクリーンショット 2020-07-24 0.51.35

準備が整ったのでトレーニングしてみます。先ほどの画面の赤枠の部分にTraining Dataフォルダをドラッグ&ドロップします。

スクリーンショット 2020-07-24 0.45.14

成功すると次のような画面になります。

スクリーンショット 2020-07-24 0.55.25

この状態で画面上部のTrainボタンを押すとトレーニングが始まります。トレーニングが終了したらMetricsの画面でTrainingを選択しましょう。以下のような画面が表示されます。トレーニングに使用した画像の内容や数によってグラフの表示は変わります。

スクリーンショット 2020-07-24 0.57.10

この状態で既にモデルが作成されています。右上のOutputの下に表示されているファイルのアイコンがモデルファイルです、この例だとわずか17KByteです。アイコンを画面外にドラッグするとファイルとして保存することができます。

Testing Dataを用意している場合はMetricsからTesting Dataに先ほどと同じようにテスト用画像のフォルダをドラッグ&ドロップします。Test Modelを押すとテスト結果が表示されます。

スクリーンショット 2020-07-24 1.11.33

更にMetricsからOutputを開くとモデルを実際に使ったテストができます。左側のペインに任意の画像をドロップするとテスト結果が表示されます、期待通りに分類されているかを確認することができます。

スクリーンショット 2020-07-24 1.37.04

以上でモデルの作成は終了です。右上のOutputの下にあるアイコンのファイルをドラッグして適当な場所に保存して終了します。

スクリーンショット 2020-07-24 1.40.38

自作のモデルを使ってカメラ画像を認識する

先ほど作成したモデルを使って犬や猫の画像を認識させてみます。モデルを利用する為にはアプリが必要です。前回の記事で使ったApple公式のサンプルアプリに自作のモデルを組み込んで使うことにします。

サンプルアプリのプロジェクトをXcodeで開いたら、先ほど保存したCatDogClassifier.mlmodelをドラッグ&ドロップしてプロジェクトに追加します。

スクリーンショット 2020-07-24 14.03.26

モデルが正常に読み込まれると詳細が表示されます。NameやAuthorを確認して自分で作成したモデルあることを確認します。Model ClassがCatDogClassifierであることを確認します。

スクリーンショット 2020-07-24 14.05.36

ImageClassificationViewController.swiftを開いてモデル名を先ほどのCatDogClassifierに変更します。

//         let model = try VNCoreMLModel(for: MobileNet().model)
           let model = try VNCoreMLModel(for: CatDogClassifier().model)

ビルドして実行します。猫の写真を撮影してみます。

画像17

Catとして認識されました。

参考資料

Create MLを使うにあたって下記のサイト、記事を参考にしました。


この記事が気に入ったらサポートをしてみませんか?