iOS에 Edge 배포(Core ML) 가이드

빌드 대상

이 가이드에서는 내보낸 커스텀 Core ML 모델(.mlmodel)을 다운로드합니다. 그런 다음 모델을 사용하여 꽃 이미지를 식별하는 미리 제작된 iOS 앱을 실행합니다.

수정된 앱 이미지

목표

이 입문 내용에서는 코드를 사용해 다음을 수행하는 전반적인 과정을 둘러봅니다.

  • iOS 앱에서 선행 학습된 Core ML 모델을 실행합니다.

개요

Core ML 프레임워크에서는 학습된 머신러닝 모델을 사용하여 입력 데이터를 분류할 수 있습니다. Vision 프레임워크는 Core ML과 함께 작동하여 이미지에 분류 모델을 적용하고 해당 이미지를 사전 처리하여 머신러닝 작업을 더 쉽고 안정적으로 수행합니다.

시작하기 전에

일반 Edge 모델 다운로드

  1. 선행 학습된 Core ML 모델이 포함된 폴더를 다운로드합니다. 이 가이드에서는 해당 모델을 사용합니다.

  2. 다운로드한 ZIP 파일의 압축을 해제합니다.

  3. 가이드를 시작하기 전에 루트 프로젝트 디렉터리로 이동합니다.

    cd ClassifyingImagesWithVisionAndCoreML
    이 디렉터리에서 다음 코드 샘플을 모두 실행합니다.

커스텀 Edge 모델 학습 및 내보내기

계속하려면 다음 수정 사항을 적용하여 Edge 기기 모델 빠른 시작을 완료하세요.

  • 제공된 꽃 데이터 세트를 사용하거나 자체 데이터 세트를 사용합니다.
  • 모델 학습 단계에서 Edge 모델 라디오 옵션을 선택합니다.
  • 모델 내보내기 단계에서 Core ML 모델 내보내기의 방법 안내를 따릅니다.

결과로 생성되는 꽃 Core ML model.mlmodel 파일을 사용하여 기존 iOS 앱의 커스텀 버전을 실행합니다.

iOS 앱 설정

iOS 앱 데모에는 다음과 같은 추가 도구가 필요합니다.

  1. Xcode
  2. Xcode 명령줄 도구

Xcode 다운로드

다음 링크를 사용하여 머신에 Xcode를 다운로드합니다.

Xcode 명령줄 도구 설치

명령줄에서 다음 명령어를 실행하여 Xcode 명령줄 도구를 설치합니다.

xcode-select --install

프로젝트 열기

Xcode로 프로젝트를 엽니다. 명령줄이나 Google Cloud Platform Console을 통해 프로젝트를 열 수 있습니다. 명령줄을 사용하여 프로젝트를 열려면 다음 명령어를 실행합니다.

open ./Vision+ML\ Example.xcodeproj

원래의 앱 실행

시뮬레이터에서 앱을 실행하고 이미지 주석을 가져오려면 다음 단계를 따르세요.

  1. Xcode 창의 왼쪽 상단에 있는 재생 버튼 xcode 재생 아이콘을 선택하여 앱을 실행합니다.
  2. 앱에 예측 이미지를 제공합니다. 다음 두 가지 방법으로 이미지를 제공할 수 있습니다.
    • 기기의 카메라로 사진 촬영 또는
    • 사진을 시뮬레이터 창으로 드래그 앤 드롭하여 사진을 기기의 사진 라이브러리에 추가

앱은 모델이 각각에 할당하는 신뢰도 점수 순으로 상위 2개 분류 카테고리를 표시합니다.

결과에는 다음 이미지와 유사한 주석이 표시되어야 합니다.

원래의 일반 앱을 사용한 분류: 가구, 과일, 식물

맞춤설정된 앱 실행

원래의 앱은 표준 MobileNet을 사용하여 이미지를 1,000개의 일반적인 ImageNet 클래스(동물, 과일, 가구, 식물 등) 중 하나로 분류하는 Core ML 모델을 사용합니다.

다음 커스텀 꽃 이미지 카테고리와 함께 다시 학습된 모델을 사용하도록 앱을 수정합니다.

  • 데이지
  • dandelion
  • roses
  • sunflowers
  • 튤립

모델 파일을 프로젝트에 추가

  1. Edge 기기 모델 빠른 시작을 완료하여 가져오는 커스텀 꽃 모델(내보낸 Core ML model.mlmodel)을 다운로드합니다. Core ML 모델 내보내기의 model.mlmodeldict.txt 파일은 지정된 Google Cloud Storage 위치에 저장됩니다.

  2. 커스텀 모델의 이름을 AutoML.mlmodel로 변경합니다.

  3. 프로젝트에서 기존 모델을 삭제합니다(MobileNet.mlmodel).

  4. Vision+ML Example 폴더의 프로젝트에 커스텀 모델을 추가합니다.

    커스텀 모델을 Xcode 이미지로 드래그

  5. ImageClassificationViewController의 30번 줄을 수정합니다. 다음을 삭제합니다.

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

    이 줄을 다음과 같이 바꿉니다.

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

커스텀 모델 앱 실행

시뮬레이터에서 앱을 다시 실행하려면 Xcode 창의 왼쪽 상단에 있는 재생 버튼 xcode 재생 아이콘을 선택합니다.

수정 사항을 테스트하려면 flower_photos/ 디렉터리의 이미지 파일을 추가하고 예측을 가져옵니다.

결과는 다음과 유사하게 나타납니다.

수정된 앱 이미지

모델을 사용해 보려면 이전에 다운로드한 학습 데이터 이미지를 추가하거나 Google 검색에서 예측에 사용할 이미지를 다운로드하세요.

작동 방식

앱을 실행했으므로 이제 CoreML 및 Vision 프레임워크 관련 코드를 살펴보세요.

Core ML 모델로 비전 설정

Core ML은 ML 모델에 쉽게 액세스할 수 있는 Swift 클래스를 자동으로 생성합니다.

이 샘플의 경우 Core ML은 MobileNetmodel에서 MobileNet 클래스를 자동으로 생성합니다.

  • 다음 코드를 사용하여 모델 인스턴스를 가져옵니다.

    let model = try VNCoreMLModel(for: MobileNet().model)
  • 위의 모델 및 완료 핸들러를 사용하여 Vision 요청을 만듭니다. 완료 핸들러는 모델의 예측 응답을 처리합니다.

  • Google Cloud Platform Console을 기본 스레드에서 업데이트해야 합니다.

    let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in
    DispatchQueue.main.async {
    guard let results = request.results else {
    self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)"
    return
    }
    

이 프로젝트의 Core ML 모델에 지정된 대로 results는 항상 VNClassificationObservation입니다.

let classifications = results as! [VNClassificationObservation]
})

Vision 요청의 완료 핸들러는 요청이 성공했는지 또는 오류가 발생했는지 여부를 나타냅니다. 요청이 성공하면 ML 모델로 식별된 가능한 분류를 설명하는 VNClassificationObservation 객체가 results 속성에 포함됩니다.

  1. ML 모델은 고정된 가로세로 비율로 입력 이미지를 처리하지만, 입력 이미지에는 임의의 가로세로 비율이 있을 수 있으므로 Vision은 이에 맞게 이미지를 확장하거나 잘라야 합니다. 최상의 결과를 얻으려면 모델이 학습을 진행한 이미지 레이아웃과 일치하도록 요청의 imageCropAndScaleOption 속성을 설정합니다.

    request.imageCropAndScaleOption = .centerCrop
  2. 다음 코드를 사용하여 입력 이미지로 VisionRequestHandler를 만듭니다.

    let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
  3. 요청 객체를 전달하여 핸들러의 perform 함수를 호출합니다.

    do {
    try handler.perform([self.classificationRequest])
    } catch {

    이 핸들러는 일반적인 이미지 처리 오류를 포착합니다. classificationRequest의 완료 핸들러 processClassifications(_:error:)는 요청 처리와 관련된 오류를 포착합니다.

    print("Failed to perform classification.\n\(error.localizedDescription)")
    }

다음 단계

AutoML Vision Edge에서 내보낸 Core ML 모델을 사용하여 iOS 꽃 분류 앱을 끝까지 둘러보았습니다. 일반 이미지 분류 앱을 수정하고 꽃의 커스텀 샘플 주석을 가져오기 전에 학습된 Core ML 모델을 사용하여 일반 이미지 분류 앱을 테스트했습니다. 그런 다음 Core ML 관련 코드를 검사하여 기본 기능을 이해했습니다.

다음은 계속해서 Core ML 모델 및 AutoML Vision Edge를 배우는 데 도움이 될 수 있는 리소스입니다.

  • 공식 문서 및 코드 저장소에서 CoreML에 대해 자세히 알아보기
  • 모델의 양자화 버전을 사용하는 데모 앱의 카메라 버전 사용해보기. 이는 더 작고 효율적인 패키지에서 동일한 성능을 제공합니다.
  • 음성 핫 워드 감지기와 스마트 답장의 기기별 버전을 포함하여 다른 TFLite 지원 모델 사용해보기