説明
Create MLは、AppleがWWDC 2018で発表した機械学習モデル生成ツールです。ユーザーから与えられたデータを受け取り、iOS開発に必要な機械学習モデルを生成します。
WWDC 2019のCreate MLは、使いやすさの点でさらに一歩進んでいます。プログラミングなしで動作し、独立したMac OS Appとして自立し、より多くのデータタイプと使用シナリオをサポートしています。
そのため、陰道士は昨年書いた機械学習のための新しいツール: Create ML App 、機械学習のための新しいツール: Create ML App 使い方を紹介しました。
2020 WWDCはまた、強化されたスタイルの移行などを増加し、同時にAppのインターフェイスを最適化しました:
- Control training in Create ML with Swift
- Build an Action Classifier with Create ML
- Build Image and Video Style Transfer models in Create ML
この記事では、ARKitでCreateMLアプリを試した後、主にイメージ分類と物体検出の機能を試しながら、初心者向けに始めることを中心に少しずつ体験していきます。
基本的な使い方
アプリはXcodeに統合されており、様々なカテゴリで開きます。
イメージ分類器
最初のイメージ分類器を試してみましょう。これはjpg/png/HEICのような一般的なイメージフォーマットをサポートしています。
そのため、最初の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を渡すだけで使用できます。



