ドキュメント

画像分類モデルの作成

画像を分類する機械学習モデルをトレーニングして、Core ML Appに追加します。

概要

画像分類器は、画像を認識する機械学習モデルです。画像分類器に画像を渡すと、画像分類器はその画像のカテゴリラベルを返します。

画像分類器がキリンの画像から「Giraffe」というラベルを予測することを示す図。

画像分類器をトレーニングするには、すでにラベル付けされた画像サンプルを多数見せます。たとえば、ゾウ、キリン、ライオンなどの様々な写真を見せることによって、野生動物を識別する画像分類器をトレーニングできます。

動物の画像がCreate MLに取り込まれて、動物分類器用のCore MLモデルファイルが生成されるプロセスを示すフロー図。

画像分類器のトレーニングが終了したら、モデルの精度を評価し、モデルのパフォーマンスが十分である場合は、結果をCore MLモデルファイルとして保存します。次に、このモデルファイルをXcodeプロジェクトにインポートすると、Appで画像分類器を使うことができます。

データの収集

カテゴリごとに少なくとも10枚以上の画像を使いますが、画像分類器のパフォーマンスは、使用される画像が多様なほど(さまざまなアングルや撮影時の照明条件など)向上することに留意してください。

カテゴリごとの画像数のバランスにも配慮してください。たとえば、あるカテゴリで10枚の画像を使い、別のカテゴリでは1000枚使うようなことは避けてください。

画像の形式は、JPEGやPNGなど、Quicktime Playerで開くことができれば何でもかまいません。画像は特定のサイズにする必要はなく、それぞれを同じサイズにする必要もありません。ただし、299x299ピクセル以上の大きさの画像を使うことをおすすめします。

可能であれば、そのモデルをAppで使うときに想定される画像にできるだけ近い画像を収集してください。たとえば、デバイスのカメラで屋外の設定で撮影された画像を分類するAppの場合は、同じようなタイプのカメラで屋外撮影された画像を使ってモデルをトレーニングします。

トレーニングデータの整理

画像をサブフォルダに分類することでトレーニングデータセットを準備します。各サブフォルダに、格納される画像のカテゴリを示す名前を付けます。たとえば、すべてのチーターの画像にはCheetahというラベルを使います。

「Training Data」フォルダにサブフォルダがあり、そこに含まれる画像のカテゴリに対応するラベルがサブフォルダ名になっていることを示す図。たとえば、チーターの画像はすべて、「Cheetah」というサブフォルダに入れます。

テスト用データの整理

テスト用のデータセットを使ってモデルをテストすると、トレーニング済みモデルの実稼働環境でのパフォーマンスを簡単に確認できます。

十分な数の画像(たとえば、カテゴリごとに25枚以上)がある場合、トレーニングデータセットのフォルダ構造を複製してテスト用のデータセットを作成します。次に、各カテゴリの画像の約20%をテスト用データセットの対応するカテゴリフォルダに移動します。

画像分類プロジェクトの作成

Create MLを使って、画像分類プロジェクトを作成します。Xcodeを開いた状態で、Controlキーを押しながらDock内の「Xcode」アイコンをクリックし、「Open Developer Tool」>「Create ML」の順に選択します(または、Xcodeのメニューから、「Open Developer Tool>「Create ML」の順に選択します)。

Create MLで、「File」>「New Project」の順に選択して、モデルテンプレートのリストを表示します。「Image Classification」を選択し、「Next」をクリックします。

「Image Classification」、「Object Detection」、「Style Transfer」という名前のCreate MLプロジェクトテンプレートのスクリーンショット。

プロジェクトのデフォルト名をよりわかりやすい名前に変更します。該当する場合は、このプロジェクトに付属するモデルに関する追加情報(1人または複数の作成者や簡単な説明など)を入力します。

「Project Name」、「Author」、「License」、「Description」といったテキストフィールドが表示された新規プロジェクトのオプションウィンドウのスクリーンショット。最初のテキストフィールドにはそれぞれ、値として「Animal Classifier」、「Jamie Appleseed」、「No license provided」が示されています。説明のテキストフィールドには「A machine learning model trained to recognize wild animals」と表示されています。

トレーニングセッションの構成

トレーニング用のデータセットを含むフォルダをプロジェクトウィンドウの「Training Data」にドラッグします。

プロジェクトウィンドウの「Settings」タブのスクリーンショット。「Training Dataset」という名前のFinderフォルダが「Training Data」にドラッグアンドドロップされています。

該当する場合は、テスト用のデータセットを含むフォルダをプロジェクトウィンドウの「Testing Data」にドラッグします。

プロジェクトウィンドウの「Settings」タブのスクリーンショット。「Training Dataset」という名前のFinderフォルダが「Testing Data」にドラッグアンドドロップされています。

トレーニングセッションで使うトレーニングイテレーションの数がわかっている場合は、「Maximum Iterations」のデフォルト値を変更します。さらに、一部または全部の画像データ拡張(水増し)をオンにすることもできます。

トレーニングの「Parameters」および「Augmentation」設定を強調表示しているCreate ML Appのスクリーンショット。「Maximum Iterations」パラメータが25に設定されています。データ拡張(水増し)設定には、「Add Noise」、「Blur」、「Crop」、「Expose」、「Flip」、「Rotate」 という6つのチェックボックス(すべてが選択解除されている)があります。

それぞれのデータ拡張(水増し)ではサンプル画像をコピーし、それに変換を加えるかフィルタを適用することでより多様なデータセットが生成されるため、収集するサンプルの数を増やす必要がなくなります。

画像分類器のトレーニング

「Train」ボタンをクリックして、トレーニングセッションを開始します。Create MLは、トレーニングデータセットの一部を検証データセットに即時に分離することでセッションを開始します。次に、Create MLは、エッジ、コーナー、テクスチャ、色の領域などの特徴を残りのトレーニング画像から抽出します。Create MLは画像の特徴を使って、モデルを繰り返しトレーニングし、検証データセットによってモデルの精度をチェックします。

プロジェクトウィンドウの「Training」タブのスクリーンショット。モデルの精度とトレーニングイテレーションの数を比較した折れ線グラフが表示されています。一般的に、この折れ線グラフは100%に達するまで上方向に伸びていきます。現在のところ、(25回中の)10回のイテレーション後に、トレーニングの精度と検証の精度はそれぞれ97.7%と90%に達しています。

Create MLはグラフによってモデルの進行状況を示します。黒色の線とグレーの線はそれぞれ、トレーニング用のデータセットと検証用のデータセットによるモデルの精度を表しています。

モデルの精度の評価

Create MLは、モデルのトレーニングを終了すると、テスト用のデータセットを使ってモデルをテストします。モデルのテストが終了したら、Create MLはトレーニング、検証、テストの精度のスコアを「Evaluation」タブに表示します。通常、モデルは、トレーニングデータセットの画像から学習しているため、トレーニングデータセットに関する精度のスコアがより高く表示されます。この例では、画像分類モデルの精度が、トレーニング用の画像では100%、検証用の画像では95%、テスト用の画像では97%と正確に認識されています。

プロジェクトウィンドウの「Evaluation」タブのスクリーンショット。「class」、「item count」、「precision」、「recall」という列が存在するテスト用データセットのテーブルが表示されています。このテーブルは「precision」列の昇順でソートされており、最初の行には値として「Leopard」、5、83%、100%がそれぞれ示されています。

「precision」は、真陽性の数を、真陽性と偽陽性の合計値で割った数値です。「recall」は、真陽性の数を、真陽性と偽陰性の合計値で割った数値です。

評価のパフォーマンスが不十分な場合は、より多様なトレーニングデータを使って再トレーニングを行う必要があります。たとえば、画像分類器の画像データ拡張(水増し)オプションを有効にすることができます。より詳細なモデルの評価、およびモデルのパフォーマンスを高める方法については、モデルの精度の向上を参照してください。

モデルのプレビュー

「Preview」タブをクリックして、これまでに利用されていない画像を使ってモデルを試してみましょう。モデルの予測を確認するには、「Train」ボタンの下の列に画像ファイルをドラッグします。

プロジェクトウィンドウの「Preview」タブのスクリーンショット。

モデルの保存

モデルのパフォーマンスが十分になったら、Xcodeプロジェクトに追加できるよう、モデルをファイルシステムに(Core MLの.mlmodel形式で)保存します。「Output」タブで、次の操作を実行できます。

  • 「Save」ボタンをクリックして、モデルをファイルシステムに保存する

  • 「Export」ボタンをクリックして、モデルをXcodeで開く

  • 「Share」ボタンをクリックして、メールやメッセージなどを使ってモデルを他のユーザーに送信する

  • ファイルを受け入れる任意の場所にモデルのアイコンをドラッグする

プロジェクトウィンドウの「Output」タブのスクリーンショット。ユーザーが「Get」ボタンをクリックした後のモデルの保存用ダイアログが表示されています。「Get」ボタンのアイコンは下矢印付きのボックスです。

モデルのAppへの追加

最後に、トレーニング済みのモデルをXcodeプロジェクトに追加します。たとえば、VisionとCore MLでの画像の分類(英語)のサンプルのXcodeプロジェクトに付属のモデルを、この画像分類モデルに置き換えることができます。

サンプルをダウンロードして、プロジェクトをXcodeで開きます。モデルファイルをナビゲーションペインにドラッグします。Xcodeで、モデルがプロジェクトに追加され、モデルのメタデータ、オペレーティングシステムの可用性、クラスラベルなどが表示されます。

Xcodeで開いたサンプルコードプロジェクトのスクリーンショット。動物分類モデルがエディタービューに表示されています。

作成したモデルをコードで使うには、1行を変更するだけです。プロジェクトに付属のMobileNetモデルは、ImageClassificationViewControllerクラス内の一箇所のみでインスタンス化されます。


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

この行を、作成したモデルのクラスに変更します。


						let model = try VNCoreMLModel(for: AnimalClassifier().model)
						

どちらのモデルも入力に画像、出力にラベル文字列を扱うので、これらのモデルは相互に入れ替えが可能です。モデルを入れ替えると、サンプルAppは以前と同じように画像を分類しますが、ユーザーのモデルとそれに関連付けられたラベルを使う、という点が異なります。

モデルのトレーニングと評価の自動化

上記のセクションで説明したように、Create MLを使うと、わずかなコードで、機械学習の専門知識がなくても、有用な画像分類器をトレーニングすることができます。ただし、MLImageClassifier(英語)インスタンスを使って、モデルのトレーニングプロセスをスクリプト化することもできます。一般的なタスクは同じで、データを準備し、モデルをトレーニングし、パフォーマンスを評価し、Core MLモデルファイルに保存します。異なるのは、すべてをプログラムで行う、という点です。

たとえば、2つのMLImageClassifier.DataSource(英語)インスタンスを初期化して、1つはトレーニング用のデータセット、もう1つはテスト用のデータセットに使うことができます。トレーニング用のデータソースを使ってinit(trainingData:parameters:)(英語)で、画像分類器を初期化します。次に、テスト用のデータソースのevaluation(on:)(英語)メソッドを使って、返されるMLClassifierMetrics(英語)インスタンスの値を評価します。

関連項目

画像モデル