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에 따른 뷰처리코드
}