iOS11의 코어ML로 물체 인식(VGG16)을 설치해보세요(3분 요리)

WWDC 2017에서 발표한 코어ML에 VGG16의 학습 모델을 설치하여 최소한의 순서로 물체 식별 응용 프로그램을 만들어 보았기 때문에 공유 방법을 공유했다.도움이 됐으면 좋겠어요.

전제 조건


아래의 준비는 이미 다 되었다.
・Xcode beta9
・iOS11beta
구축을 위한 설정

예제 코드 가져오기


이 페이지 자원에 발표된 예시 코드를 가져옵니다.
https://developer.apple.com/videos/play/wwdc2017/506/

샘플 코드가 변하지 않더라도 MNIST(손으로 쓴 디지털 식별)의 학습 모델을 설정했기 때문에 종이에 쓴 숫자를 사진으로 찍으면 디지털 식별이 가능하다.하지만 숫자만으로도 외롭기 때문에 학습 패턴을 바꿔보자.

학습된 모델 가져오기


이 페이지 아래에서 VGG16을 다운로드하세요.
https://developer.apple.com/machine-learning/

VGG16에 대한 자세한 내용은 이쪽을 봐주세요.
그림에서 1000종의 물체를 분별할 수 있다.
http://aidiary.hatenablog.com/entry/20170104/1483535144

실시


먼저 VGG16에서 학습한 모델을 프로젝트로 드래그합니다.

ViewController.swift의classificationRequest의 학습 모형 파일을 MNISTClassfier에서 VGG16으로 변경합니다.
ViewController.swift
let model = try VNCoreMLModel(for: VGG16().model)//MNISTClassfierからVGG16に書き換え
imagePickerController를 다음과 같이 변경합니다.(난폭하지만)
ViewController.swift
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        picker.dismiss(animated: true)
        classificationLabel.text = "Analyzing Image…"
        correctedImageView.image = nil

        guard let uiImage = info[UIImagePickerControllerOriginalImage] as? UIImage
            else { fatalError("no image from image picker") }
        guard let ciImage = CIImage(image: uiImage)
            else { fatalError("can't create CIImage from UIImage") }
        let orientation = CGImagePropertyOrientation(uiImage.imageOrientation)
        inputImage = ciImage.applyingOrientation(Int32(orientation.rawValue))

        // Show the image in the UI.
        imageView.image = uiImage

        //読み込んだ画像をそのまま推論処理へ
        let handler = VNImageRequestHandler(ciImage: inputImage)
        do {
            try handler.perform([classificationRequest])
        } catch {
            print(error)
        }
/**
         //MNIST用に紙の四隅を検知したり、色を白黒に落としたりの処理。今回とりあえずスキップ
        // Run the rectangle detector, which upon completion runs the ML classifier.
        let handler = VNImageRequestHandler(ciImage: ciImage, orientation: Int32(orientation.rawValue))
        DispatchQueue.global(qos: .userInteractive).async {
            do {
                try handler.perform([self.rectanglesRequest])
            } catch {
                print(error)
            }
        }
 **/
    }
이상이면 완성됩니다.

느끼다


학습 모형만 바꾸면 상당히 간단하게 유행하는'인공지능 응용 프로그램'을 만들 수 있다.단지 추론 특화가 과감하게 끊어졌을 뿐이야!이런 인상.나처럼 깊이 있는 지식이 없는 사람도 간단하게 설치할 수 있고 학습 모형 제작 기법이 앞으로도 더욱 보급될 것을 감안하면 세계에서 기계 학습의 은혜가 가득한 날은 생각보다 가까울 것이다.

좋은 웹페이지 즐겨찾기