supporting models:
YOLOv8
,YOLOv5
,YOLOv3
,MobileNetV2+SSDLite
This project is Object Detection on iOS with Core ML.
If you are interested in iOS + Machine Learning, visit here you can see various DEMOs.
- Xcode 10.3+
- iOS 13.0+
- Swift 4.2
git clone https://github.com/tucan9389/ObjectDetection-CoreML
- You can download COCO models or another model from here
Or if you want to make and use model with custom dataset,
- follow roboflow tutorial from scratch or yolov5 repo's tutorial
- and convert the
.pt
model to.mlmodel
model with our issue.
By default, the project uses the yolov8s
model. If you want to use another model, you can replace the model file in the project.
At this moment(23.04.08), there is error when converting yolov8 models to Core ML. Once ultralytics/ultralytics#1791 is merged, you can use the following steps. (Or you can use this PR alternatively.)
pip install ultralytics
pip install coremltools
yolo export model=yolov8n.pt format=coreml nms
# mian.py
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO("yolov8n.pt", task='detect') # load a pretrained model
model.overrides['nms'] = True
success = model.export(format="coreml") # export the model to CoreML format
# in terminal
python main.py
# then you can see the `.mlpackage` or `.mlmodel` file in your current directory
# (btw you can check your current directory with `pwd` command)
Model | Size (MB) |
Minimum iOS Version |
Download Link |
Trained Dataset |
---|---|---|---|---|
yolov8n | 12.7 | iOS14 | Link | |
yolov8s | 44.7 | iOS14 | Link | |
yolov8m | 52.1 | iOS14 | Link | |
yolov8l | 87.8 | iOS14 | Link | |
yolov8x | 272.9 | iOS14 | Link | |
yolov5n.mlmodel | 7.52 | iOS13 | Link | COCO |
yolov5s.mlmodel | 28.0 | iOS13 | Link | COCO |
yolov5m.mlmodel | 81.2 | iOS13 | Link | COCO |
yolov5l.mlmodel | 178.0 | iOS13 | Link | COCO |
yolov5x.mlmodel | 331.0 | iOS13 | Link | COCO |
yolov5n6.mlmodel | 12.8 | iOS13 | Link | COCO |
yolov5s6.mlmodel | 48.5 | iOS13 | Link | COCO |
yolov5m6.mlmodel | 137.0 | iOS13 | Link | COCO |
yolov5l6.mlmodel | 293.0 | iOS13 | Link | COCO |
yolov5x6.mlmodel | 537.0 | iOS13 | Link | COCO |
YOLOv3.mlmodel | 248.4 | iOS12 | Link | COCO |
YOLOv3FP16.mlmodel | 124.2 | iOS12 | Link | COCO |
YOLOv3Int8LUT.mlmodel | 62.2 | iOS12 | Link | COCO |
YOLOv3Tiny.mlmodel | 35.5 | iOS12 | Link | COCO |
YOLOv3TinyFP16.mlmodel | 17.8 | iOS12 | Link | COCO |
YOLOv3TinyInt8LUT.mlmodel | 8.9 | iOS12 | Link | COCO |
MobileNetV2_SSDLite.mlmodel | 9.3 | iOS12 | Link | COCO |
ObjectDetector.mlmodel | 63.7 | iOS12 | Link | 6 Label Dataset |
COCO Dataset
6 Label Dataset(Apple's DEMO)
- Bagel
- Banana
- Coffee
- Croissant
- Egg
- Waffle
Build Setting:
Xcoede > Build Settings > Apple Clang - Code Generation > Optimization Level > Fastest [-O3]
Model vs. Device | 14 Pro |
13 Pro |
12 Pro |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 |
---|---|---|---|---|---|---|---|---|---|---|
yolov8n | 15 | |||||||||
yolov8s | 29 | |||||||||
yolov8m | 37 | |||||||||
yolov8l | 45 | |||||||||
yolov8x | 51 | |||||||||
yolov5n | 24 | |||||||||
yolov5s | 29 | |||||||||
yolov5m | 39 | |||||||||
yolov5l | 38 | |||||||||
yolov5x | 69 | |||||||||
yolov5n6 | 24 | |||||||||
yolov5s6 | 34 | |||||||||
yolov5m6 | 39 | |||||||||
yolov5l6 | 41 | |||||||||
yolov5x6 | 57 | |||||||||
YOLOv3 | 45 | 83 | 108 | 93 | 100 | 356 | 569 | 561 | ||
YOLOv3FP16 | 44 | 84 | 104 | 89 | 101 | 348 | 572 | 565 | ||
YOLOv3Int8LUT | 53 | 86 | 101 | 92 | 100 | 337 | 575 | 572 | ||
YOLOv3Tiny | 36 | 44 | 46 | 41 | 47 | 106 | 165 | 168 | ||
YOLOv3TinyFP16 | 33 | 44 | 51 | 41 | 44 | 103 | 165 | 167 | ||
YOLOv3TinyInt8LUT | 39 | 44 | 45 | 39 | 39 | 106 | 160 | 161 | ||
MobileNetV2_SSDLite | 17 | 18 | 31 | 31 | 31 | 109 | 141 | 134 | ||
ObjectDetector | 13 | 18 | 24 | 26 | 23 | 63 | 86 | 84 |
Model vs. Device | 14 Pro |
13 Pro |
12 Pro |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 | |
---|---|---|---|---|---|---|---|---|---|---|---|
yolov8n | 15 | ||||||||||
yolov8s | 31 | ||||||||||
yolov8m | 39 | ||||||||||
yolov8l | 47 | ||||||||||
yolov8x | 52 | ||||||||||
yolov5n | 26 | ||||||||||
yolov5s | 31 | ||||||||||
yolov5m | 41 | ||||||||||
yolov5l | 39 | ||||||||||
yolov5x | 72 | ||||||||||
yolov5n6 | 25 | ||||||||||
yolov5s6 | 36 | ||||||||||
yolov5m6 | 41 | ||||||||||
yolov5l6 | 42 | ||||||||||
yolov5x6 | 59 | ||||||||||
YOLOv3 | 46 | 84 | 108 | 93 | 100 | 357 | 569 | 561 | |||
YOLOv3FP16 | 45 | 85 | 104 | 89 | 101 | 348 | 572 | 565 | |||
YOLOv3Int8LUT | 54 | 86 | 102 | 92 | 102 | 338 | 576 | 573 | |||
YOLOv3Tiny | 37 | 45 | 46 | 42 | 48 | 106 | 166 | 169 | |||
YOLOv3TinyFP16 | 35 | 45 | 51 | 41 | 44 | 104 | 165 | 167 | |||
YOLOv3TinyInt8LUT | 41 | 45 | 45 | 39 | 40 | 107 | 160 | 161 | |||
MobileNetV2_SSDLite | 19 | 19 | 32 | 31 | 32 | 109 | 142 | 134 | |||
ObjectDetector | 14 | 18 | 25 | 26 | 23 | 64 | 87 | 85 |
Model vs. Device | 14 Pro |
13 Pro |
12 Pro |
11 Pro |
XS | XS Max |
XR | X | 7+ | 7 | |
---|---|---|---|---|---|---|---|---|---|---|---|
yolov8n | 38 | ||||||||||
yolov8s | 14 | ||||||||||
yolov8m | 14 | ||||||||||
yolov8l | 14 | ||||||||||
yolov8x | 13 | ||||||||||
yolov5n | 19 | ||||||||||
yolov5s | 14 | ||||||||||
yolov5m | 13 | ||||||||||
yolov5l | 14 | ||||||||||
yolov5x | 7 | ||||||||||
yolov5n6 | 19 | ||||||||||
yolov5s6 | 14 | ||||||||||
yolov5m6 | 13 | ||||||||||
yolov5l6 | 14 | ||||||||||
yolov5x6 | 13 | ||||||||||
YOLOv3 | 12 | 9 | 8 | 10 | 9 | 2 | 1 | 1 | |||
YOLOv3FP16 | 13 | 9 | 9 | 10 | 8 | 2 | 1 | 1 | |||
YOLOv3Int8LUT | 14 | 9 | 9 | 10 | 9 | 2 | 1 | 1 | |||
YOLOv3Tiny | 14 | 14 | 21 | 22 | 20 | 8 | 5 | 5 | |||
YOLOv3TinyFP16 | 14 | 14 | 19 | 23 | 21 | 9 | 5 | 5 | |||
YOLOv3TinyInt8LUT | 11 | 14 | 21 | 24 | 23 | 8 | 5 | 5 | |||
MobileNetV2_SSDLite | 19 | 29 | 23 | 23 | 23 | 8 | 6 | 6 | |||
ObjectDetector | 17 | 29 | 23 | 23 | 24 | 14 | 10 | 11 |
- motlabs/awesome-ml-demos-with-ios
: The challenge using machine learning model created from tensorflow on iOS - Machine Learning - Models - Apple Developer
- hollance/coreml-survival-guide
- vonholst/SSDMobileNet_CoreML
: iOS project for object detection(SSDMobileNet V1) using Core ML. - ultralytics/ultralytics
: YOLOv8 repository - ultralytics/yolov5
: YOLOv5 repository