- Xcode 9.2+
- iOS 11.0+, 11.2+, 12.0+
- Swift 4
Model | Size (MB) |
Minimum iOS Version |
Download Link |
---|---|---|---|
MobileNet | 17.1 | iOS11 | 머신 러닝 - 모델 실행 - Apple Developer |
MobileNetV2 | 24.7 | iOS11 | Machine Learning - Models - Apple Developer |
MobileNetV2FP16 | 12.4 | iOS11.2 | Machine Learning - Models - Apple Developer |
MobileNetV2Int8LUT | 6.3 | iOS12 | Machine Learning - Models - Apple Developer |
Resnet50 | 102.6 | iOS11 | Machine Learning - Models - Apple Developer |
Resnet50FP16 | 51.3 | iOS11.2 | Machine Learning - Models - Apple Developer |
Resnet50Int8LUT | 25.7 | iOS12 | Machine Learning - Models - Apple Developer |
Resnet50Headless | 94.4 | iOS11 | Machine Learning - Models - Apple Developer |
SqueezeNet | 5 | iOS11 | Machine Learning - Models - Apple Developer |
SqueezeNetFP16 | 2.5 | iOS11.2 | Machine Learning - Models - Apple Developer |
SqueezeNetInt8LUT | 1.3 | iOS12 | Machine Learning - Models - Apple Developer |
Model vs. Device | 12 Pro |
12 | 12 Mini |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 |
---|---|---|---|---|---|---|---|---|---|---|
MobileNet | 17 | 17 | 14 | 13 | 16 | 18 | 19 | 33 | 43 | 35 |
MobileNetV2 | 15 | 15 | 17 | 14 | 21 | 18 | 21 | 46 | 64 | 53 |
MobileNetV2FP16 | 8 | 17 | 14 | 14 | 20 | 19 | 20 | 48 | 65 | 57 |
MobileNetV2Int8LUT | 18 | 16 | 16 | 14 | 21 | 21 | 20 | 53 | 64 | 53 |
Resnet50 | 21 | 18 | 24 | 20 | 27 | 25 | 26 | 61 | 78 | 63 |
Resnet50FP16 | 19 | 18 | 19 | 20 | 26 | 26 | 27 | 64 | 75 | 74 |
Resnet50Int8LUT | 19 | 20 | 20 | 20 | 27 | 25 | 26 | 60 | 77 | 75 |
Resnet50Headless | 11 | 11 | 11 | 13 | 18 | 13 | 18 | 36 | 54 | 53 |
SqueezeNet | 14 | 15 | 17 | 12 | 17 | 17 | 18 | 24 | 35 | 29 |
SqueezeNetFP16 | 13 | 16 | 10 | 13 | 17 | 17 | 18 | 24 | 36 | 29 |
SqueezeNetInt8LUT | 16 | 17 | 15 | 13 | 18 | 19 | 18 | 27 | 34 | 30 |
Model vs. Device | 12 Pro |
12 | 12 Mini |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 |
---|---|---|---|---|---|---|---|---|---|---|
MobileNet | 19 | 18 | 15 | 15 | 18 | 20 | 21 | 35 | 46 | 37 |
MobileNetV2 | 16 | 18 | 19 | 16 | 23 | 21 | 23 | 48 | 67 | 55 |
MobileNetV2FP16 | 8 | 18 | 18 | 15 | 24 | 21 | 23 | 50 | 69 | 60 |
MobileNetV2Int8LUT | 19 | 18 | 17 | 15 | 23 | 23 | 22 | 55 | 67 | 56 |
Resnet50 | 22 | 20 | 25 | 22 | 30 | 28 | 29 | 64 | 82 | 66 |
Resnet50FP16 | 20 | 19 | 20 | 22 | 28 | 28 | 30 | 66 | 78 | 76 |
Resnet50Int8LUT | 21 | 21 | 23 | 22 | 29 | 28 | 28 | 63 | 80 | 78 |
Resnet50Headless | 11 | 11 | 12 | 14 | 19 | 13 | 18 | 36 | 54 | 54 |
SqueezeNet | 15 | 16 | 18 | 14 | 18 | 18 | 20 | 25 | 37 | 31 |
SqueezeNetFP16 | 14 | 17 | 11 | 13 | 18 | 18 | 19 | 26 | 38 | 31 |
SqueezeNetInt8LUT | 18 | 17 | 17 | 14 | 20 | 20 | 19 | 29 | 37 | 32 |
Model vs. Device | 12 Pro |
12 | 12 Mini |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 |
---|---|---|---|---|---|---|---|---|---|---|
MobileNet | 22 | 24 | 24 | 29 | 23 | 23 | 23 | 23 | 20 | 23 |
MobileNetV2 | 25 | 24 | 24 | 29 | 23 | 23 | 23 | 20 | 13 | 17 |
MobileNetV2FP16 | 12 | 24 | 24 | 29 | 23 | 23 | 23 | 18 | 13 | 15 |
MobileNetV2Int8LUT | 23 | 23 | 23 | 29 | 23 | 23 | 23 | 16 | 13 | 16 |
Resnet50 | 23 | 23 | 24 | 29 | 23 | 23 | 23 | 14 | 11 | 14 |
Resnet50FP16 | 23 | 24 | 24 | 29 | 23 | 23 | 23 | 14 | 11 | 12 |
Resnet50Int8LUT | 23 | 24 | 23 | 29 | 23 | 23 | 23 | 15 | 11 | 12 |
Resnet50Headless | 21 | 24 | 23 | 29 | 23 | 23 | 23 | 23 | 16 | 17 |
SqueezeNet | 36 | 24 | 24 | 29 | 23 | 23 | 23 | 23 | 23 | 23 |
SqueezeNetFP16 | 25 | 23 | 24 | 29 | 23 | 23 | 23 | 23 | 22 | 23 |
SqueezeNetInt8LUT | 22 | 23 | 23 | 29 | 23 | 23 | 23 | 23 | 23 | 23 |
Once you import the model, compiler generates model helper class on build path automatically. You can access the model through model helper class by creating an instance, not through build path.
No external library yet.
import Vision
// MARK - Core ML model
typealias ClassificationModel = MobileNet
var coremlModel: ClassificationModel? = nil
// MARK: - Vision Properties
var request: VNCoreMLRequest?
var visionModel: VNCoreMLModel?
override func viewDidLoad() {
super.viewDidLoad()
if let visionModel = try? VNCoreMLModel(for: ClassificationModel().model) {
self.visionModel = visionModel
request = VNCoreMLRequest(model: visionModel, completionHandler: visionRequestDidComplete)
request?.imageCropAndScaleOption = .scaleFill
} else {
fatalError()
}
}
func visionRequestDidComplete(request: VNRequest, error: Error?) {
/* ------------------------------------------------------ */
/* something postprocessing what you want after inference */
/* ------------------------------------------------------ */
}
guard let request = request else { fatalError() }
let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer)
try? handler.perform([request])