blog

CreateMLアプリのミニマリスト手順

Create MLは、AppleがWWDC 2018で発表した機械学習モデルを生成するためのツールです。ユーザーから与えられたデータを受け取り、iOS開発に必要な機械学習モデルを生成します。 WWDC...

Jul 20, 2020 · 6 min. read
シェア

説明

Create MLは、AppleがWWDC 2018で発表した機械学習モデル生成ツールです。ユーザーから与えられたデータを受け取り、iOS開発に必要な機械学習モデルを生成します。

WWDC 2019のCreate MLは、使いやすさの点でさらに一歩進んでいます。プログラミングなしで動作し、独立したMac OS Appとして自立し、より多くのデータタイプと使用シナリオをサポートしています。

そのため、陰道士は昨年書いた機械学習のための新しいツール: Create ML App機械学習のための新しいツール: Create ML App 使い方を紹介しました。

2020 WWDCはまた、強化されたスタイルの移行などを増加し、同時にAppのインターフェイスを最適化しました:

この記事では、ARKitでCreateMLアプリを試した後、主にイメージ分類と物体検出の機能を試しながら、初心者向けに始めることを中心に少しずつ体験していきます。

基本的な使い方

アプリはXcodeに統合されており、様々なカテゴリで開きます。

イメージ分類器

最初のイメージ分類器を試してみましょう。これはjpg/png/HEICのような一般的なイメージフォーマットをサポートしています。

インタフェースの中央に、Training Data、Validation Data、Testing Dataの3つのボタンがあります。データが少ない場合、2番目の項目は使用できません。

そのため、最初のTraining DataフォルダとTesting Dataフォルダを選択し、前者は必要で、後者は省いてもモデルを訓練することができます。

基本的なワークフローは、Training Dataから特徴量を抽出し、その抽出した特徴量の正誤をValidation Dataで確認し、正しいものを残し、間違ったものを再抽出するというものです。

データセットはMicrosoftCat and Dog 犬と猫の分類データセット使用でき、クリックすると無料でダウンロードでき、速度も非常に速いです。ダウンロードしたフォルダの形式は以下のとおりで、フォルダ名は分類後のラベルとして使用されます:

フォルダの一部は手動で分離され、学習済みモデルの品質を素早くチェックするためのテストデータとして使用されます。
一般的には,デフォルトの最大反復回数で十分です.イメージデータセットが小さい場合は、下の「拡張」を選択して回転や反転の効果を追加することもできます。

左上にある「Train」ボタンをクリックすると、学習が開始されます。 一般的に、イメージ分類の学習プロセスは非常に高速で、数千枚のイメージのモデルを取得するのに10分もかかりません。

学習したモデルをエクスポートするには、「取得」または「共有」をクリックします。また、パッケージの内容が表示されるプロジェクトを見つけ、そこに移動してモデルを取得することもできます。

Xcode

  • モデルの読み込み
let model = try VNCoreMLModel(for: MyImageClassifier_1().model)
 
let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in
 self?.processClassifications(for: request, error: error)
})
request.imageCropAndScaleOption = .centerCrop
  • 処理リクエストの開始
let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: orientation, options: [:])
 do {
 try handler.perform([classificationRequest])
 } catch {
 /*
 This handler catches general image processing errors. The `classificationRequest`'s
 completion handler `processClassifications(_:error:)` catches errors specific
 to processing that request.
 */
 print("Failed to perform classification.
\(error.localizedDescription)")
 }
  • 結果の取得と表示
guard let results = request.results else {
 self.classificationLabel.text = "Unable to classify image.
\(error!.localizedDescription)"
 return
}
// The `results` will always be `VNClassificationObservation`s, as specified by the Core ML model in this project.
let classifications = results as! [VNClassificationObservation]
self.classificationLabel.text = classifications.first?.identifier

オブジェクト検出

jpg/pngのような一般的なイメージ形式をサポートしていますが、HEICオブジェクト検出の使用はサポートしていません。違いは、フォルダとして分類されなくなったことです。しかし、イメージの名前、ラベルの名前、ラベルの座標を含む以下のフォーマットの.jsonファイルを与える必要があり、1つのイメージに複数の異なるオブジェクトが存在する可能性があります:

[{
	"image": "IMG_2447.png",
	"annotations": [{
		"label": "B",
		"coordinates": {
			"y": 1871,
			"x": 727,
			"width": 1441,
			"height": 2141
		}
	}]
}, {
	"image": "IMG_2449.png",
	"annotations": [{
		"label": "G",
		"coordinates": {
			"y": 1029,
			"x": 1606,
			"width": 326,
			"height": 565
		}
	}, {
		"label": "R",
		"coordinates": {
			"y": 1067,
			"x": 1277,
			"width": 369,
			"height": 612
		}
	}, {
		"label": "H",
		"coordinates": {
			"y": 2441,
			"x": 1301,
			"width": 1265,
			"height": 1766
		}
	}]
}]

.jsonファイルの名前に制限はありません。学習プロセスはイメージ分類に似ていますが、非常に時間がかかり、数百のイメージが1日実行されます。

json ファイル生成

他のイメージアノテーションツールを使ってイメージにアノテーションを付け、他のモデルに適したjsonファイルやxmlファイルを生成し、pythonを使ってターゲットフォーマットに加工することができます。Macプラットフォームでは、1ヶ月間無料で試用できるRectlabelを使うこともできます。

ラベリング後、CreateMLにエクスポートします。

Xcode

  • モデルの読み込み
  • 処理リクエストの開始
  • 結果の取得と表示

そして最後に

このように、Appleが紹介したツールは、サポートする種類は多くなく、性能も最高とは言えないかもしれませんが、非常にシンプルで使いやすいものばかりです。CreateMLはモデルをトレーニングし、Xcodeにインポートして使用します。ARKitとの統合も非常に簡単で、VisionモデルはCVPixelBufferを渡すだけで使用できます。

Read next

JavaScriptリボーン

ステータスの変更は、resolve 関数と reject 関数が実行されたときにトリガされます。 resolveがトリガーされてステータスが変更されると、対応する値が.thenの関数に渡されます。 このとき、thenには2つのパラメータがあり、1つは成功したときに呼び出される関数、もう1つは成功しなかったときに呼び出される関数であることに注意してください。 一般的には、Promiseの方が過去のものより優れているようですが...。

Jul 20, 2020 · 6 min read