15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CreateMLでiOSイケメン分類器をつくる。ドラッグ&ドロップのみ。

Last updated at Posted at 2020-07-20

#ディープラーニングをかんたんにできるCreateML
IMG_0574.jpeg
数学などの専門知識は不要です。
AppleのツールCreateMLで、あなたも簡単にディープラーニングのモデルを学習させることができます。
そして、そのモデルはiOSアプリでつかうことができます。

#データをあつめましょう
##トレーニング・データ
イケメンの画像100枚と、イケメンではない画像100枚をあつめました。
そして、それらをフォルダわけしました。
スクリーンショット 2020-07-21 5.18.06.png
イケメンフォルダ
スクリーンショット 2020-07-21 5.19.46.png
イケメンじゃないフォルダ
スクリーンショット 2020-07-21 5.18.41.png
##テスティング・データ
トレーニング・データと同じフォルダ構成で、テスティング・データのフォルダもつくります。
イケメン、イケメンじゃない、10枚ずつです。
トレーニング・データに含まれない画像を用意する必要があります。
分類の子フォルダ名(この場合、「ikemen」と「ikemennot」)はトレーニング・データと同じであることが要求されます。
スクリーンショット 2020-07-21 5.37.33.png

#CreateMLを起動
XcodeをControllキーを押しながらクリック、そしてOpenDeveloperTools、CreateMLを選択。
スクリーンショット 2020-07-21 5.27.36.png
CreateMLのメニューからImage Classification(画像分類)を選びます。
スクリーンショット 2020-07-21 5.30.47.png
それから、好きなプロジェクト名を入力します。
#CreatMLで画像分類モデルを学習させる

Training DataとTesting Dataの+ボタンをクリックして、用意したフォルダを指定します。
スクリーンショット 2020-07-21 5.34.57.png

それから、▶️Trainボタンを押すと学習が開始されます。
スクリーンショット 2020-07-21 6.10.15.png

あっという間に終わります。
スクリーンショット 2020-07-21 5.45.15.png

テスティング・データでテストした結果を表示してくれます。
スクリーンショット 2020-07-21 5.46.45.png
イケメンのPrecision89%、Recall80%。
モデルがイケメンと予測した画像の89%が正解。
イケメン画像の80%がイケメンと予測されました。

Previewを選択してオリジナル画像をドロップすると、その画像でテストできます。
スクリーンショット 2022-07-18 2.28.51.png
99%の確信でイケメンではない、と予測されました。
#モデルをiOSモバイルアプリでつかう
##mlmodelをゲット
Outputタブを選択すると、学習したモデルが表示されます。
これはCoreMLモデル形式です。
Getボタンを押して、モデルを保存します。
スクリーンショット 2020-07-21 6.01.45.png
保存されたモデルを、Xcodeプロジェクトにドラッグ&ドロップします。
スクリーンショット 2020-07-21 6.07.15.png
##Visionフレームワークでモデルをつかう
Visionフレームワークでmlmodelを手軽に使えます。
VNCoreMLRequestで、CoreMLモデルの推論リクエストをつくります。

ViewController.swift
func setupVision() -> NSError? {
        // Setup Vision parts
        let error: NSError! = nil
        
        guard let modelURL = Bundle.main.url(forResource: "ikemenclasifier 1", withExtension: "mlmodelc") else {
            return NSError(domain: "VisionObjectRecognitionViewController", code: -1, userInfo: [NSLocalizedDescriptionKey: "Model file is missing"])
        }
        do {
            let visionModel = try VNCoreMLModel(for: MLModel(contentsOf: modelURL))
            let objectRecognition = VNCoreMLRequest(model: visionModel, completionHandler: { (request, error) in
                DispatchQueue.main.async(execute: {
                    // perform all the UI updates on the main queue
                    if let results = request.results {
                        self.mlCompletion(results)
                    }
                })
            })
            self.mlRequest = [objectRecognition]
        } catch let error as NSError {
            print("Model loading went wrong: \(error)")
        }
               return error
    }

VNImageRequestHandlerを使って、用意した画像でCoreMLリクエストを実行します。

ViewController.swift
let imageRequestHandler = VNImageRequestHandler(ciImage: image, orientation: exifOrientation, options: [:])
            do {
                try imageRequestHandler.perform(self.mlRequest)
            } catch {
                print(error)
            }

リクエストは結果をVNClassificationObservationとして返します。
identifierは結果の分類名です。それは、データのフォルダ名と同じになります。この場合、「ikemen」か「ikemennot」です。
confidenceはパーセンテージの確信度です。

ViewController.swift
    func mlCompletion(_ results: [Any])  {
        guard let observation = results.first as? VNClassificationObservation else {
            print("its not ml observation")
            return
        }
        print(observation.identifier,observation.confidence)
        if observation.identifier == "ikemen" {
            resultLabel.text = "イケメン\n\(floor(observation.confidence * 100))"
            ikemenCount += 1
        } else {
            resultLabel.text = "イケメンではない\n\(floor(observation.confidence * 100))"
        }
    }
IMG_0574.jpeg

##実際のアプリはこちら
GitHubにアプリ置いときます。
https://github.com/john-rocky/HandsomeClassifier

ぼくのTwitterをフォローしてください。お願いします。
https://twitter.com/JackdeS11

お仕事のご依頼をこのメールにお願いします。
rockyshikoku@gmail.com

あと、Looks Good For Me(わるくないね)、押してください。
        ここです ↓
チャオ🐣!

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?