0️⃣ mlmodel 컨버팅 시

아래 코드와 같이 classifier_config를 설정해주지 않으면,

(아래 코드는 pytorch모델을 mlmodel로 convert하는 코드)

mlmodel = ct.convert(
    trace,
    inputs=[ct.ImageType(name="Image", shape=input_batch.shape)],
)

mlmodel output은 classification 결과가 아닌 모델이 return한 multiArray를 result로 받게 된다.

이 result는 다운캐스팅할 때 VNClassificationObservation이 아닌 VNCoreMLFeatureValueObservation 타입으로 가능하다.

1️⃣ result 처리 코드

prediction 값에 따른 ui 뷰 설정을 여기서 해줄거기 때문에, main 비동기처리

DispatchQueue.main.async {
            let resultVC = self.storyboard?.instantiateViewController(identifier: "ResultViewController") as! ResultViewController
            guard let results = request.results else {
                self.result = "분류 불가"
                self.present(resultVC, animated: false, completion: nil)
                return
            }
            let classifications = results as! [VNCoreMLFeatureValueObservation]
            if classifications.isEmpty {
                self.result = "알 수 없음"
            } else {
                let topClassification = classifications.first?.featureValue.multiArrayValue
                var maxValue: Float32 = 0
                var prediction: Int = -1
                for i in 0..<topClassification!.count {
                    if maxValue < topClassification![i].floatValue {
                        maxValue = topClassification![i].floatValue
                        prediction = i
                    }
                }
                // prediction에 따른 뷰처리코드
            }