여러가지 iOS+ML예제는 iOS Projects with ML Models 저장소에 모아져있습니다.
이 프로젝트는 Core ML을 사용하여 Pose Estimation을 실행시켜본 예제입니다.
Jointed Keypoints | Concatenated heatmap |
---|---|
비디오 출처: https://www.youtube.com/watch?v=EM16LBKBEgI
- Xcode 9.2+
- iOS 11.0+
- Swift 4
Core ML용 Pose Estimation 모델(model_cpm.mlmodel
)
☞ Core ML 모델을 여기서 다운받으세요(model_cpm.mlmodel 혹은 hourglass.mlmodel).DEPRECATED
위 저장소는 닫혔습니다. 우선 아래 모델을 사용해주세요.
input_name_shape_dict = {"image:0":[1,224,224,3]} image_input_names=["image:0"]
output_feature_names = ['Convolutional_Pose_Machine/stage_5_out:0']
cpm | hourglass | |
---|---|---|
Input shape | [1, 192, 192, 3] |
[1, 192, 192, 3] |
Output shape | [1, 96, 96, 14] |
[1, 48, 48, 14] |
Input node name | image |
image |
Output node name | Convolutional_Pose_Machine/stage_5_out |
hourglass_out_3 |
Model size | 2.6 MB | 2.0 MB |
cpm | hourglass | |
---|---|---|
iPhone X | 51 ms | 49 ms |
iPhone 8+ | 49 ms | 46 ms |
iPhone 6+ | 200 ms | 180 ms |
모델을 넣으셨으면 자동으로 모델 이름의 파일이 빌드경로 어딘가에 생성됩니다. 모델을 사용할때는 경로로 접근하는 것이 아니라 모델 클래스로 객체를 생성하여 접근할 수 있습니다.
import Vision
typealias EstimationModel = model_cpm // model name(model_cpm) must be equal with mlmodel file name
var request: VNCoreMLRequest!
var visionModel: VNCoreMLModel!
override func viewDidLoad() {
super.viewDidLoad()
visionModel = try? VNCoreMLModel(for: EstimationModel().model)
request = VNCoreMLRequest(model: visionModel, completionHandler: visionRequestDidComplete)
request.imageCropAndScaleOption = .scaleFill
}
func visionRequestDidComplete(request: VNRequest, error: Error?) {
/* ------------------------------------------------------ */
/* something postprocessing what you want after inference */
/* ------------------------------------------------------ */
}
// on the inference point
let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer)
try? handler.perform([request])
You can download cpm or hourglass model for Core ML from edvardHua/PoseEstimationForMobile repo.
모델 이름 변경(PoseEstimation_CoreMLTests.swift
)
단축키로는 ⌘ + U
를 누르거나 Build for Testing
아이콘을 누르세요.
- motlabs/iOS-Proejcts-with-ML-Models
: TensorFlow로 만든 머신러닝 모델을 iOS에서 사용해보는 프로젝트 모음 edvardHua/PoseEstimationForMobile->DEPRECATED
: 모바일용 Pose Estination TensorFlow 프로젝트- tucan9389/FingertipEstimation-CoreML
: edvardHua/PoseEstimationForMobile를 이용해 데이터셋만 Fingertip으로 바꾸어 학습시킨 모델을 CoreML에 맞춰 구현한 iOS 프로젝트