• Stars
    star
    253
  • Rank 155,220 (Top 4 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 5 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An example running Object Detection using Core ML (YOLOv8, YOLOv5, YOLOv3, MobileNetV2+SSDLite)

ObjectDetection-CoreML

supporting models: YOLOv8, YOLOv5, YOLOv3, MobileNetV2+SSDLite

platform-ios swift-version lisence

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.
SSDMobileNetV2-DEMO

Requirements

  • Xcode 10.3+
  • iOS 13.0+
  • Swift 4.2

How To Build and Run the Project

1. Clone the project

git clone https://github.com/tucan9389/ObjectDetection-CoreML

2. Prepare Core ML model

  • You can download COCO models or another model from here

Or if you want to make and use model with custom dataset,

  1. follow roboflow tutorial from scratch or yolov5 repo's tutorial
  2. and convert the .pt model to .mlmodel model with our issue.

3. Add the model to the project

By default, the project uses the yolov8s model. If you want to use another model, you can replace the model file in the project.

Screen Shot 2022-09-03 at 9 48 43 AM

Screen Shot 2022-09-03 at 9 46 19 AM

4. Set model name properly in ViewController.swift

image

5. Build and Run

How To Run with your own model

1. Convert your model to Core ML

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.)

Pre-requirements

pip install ultralytics
pip install coremltools

Option 1) With shell

yolo export model=yolov8n.pt format=coreml nms

Option 2) With python script

# 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)

2. Follow the steps above from Step 3

Models

Model Matadata

image

Model Size, Minimum iOS Version, Download Link

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

Trained Dataset Infos

COCO Dataset
6 Label Dataset(Apple's DEMO)
  • Bagel
  • Banana
  • Coffee
  • Croissant
  • Egg
  • Waffle

Performance

Build Setting:
Xcoede > Build Settings > Apple Clang - Code Generation > Optimization Level > Fastest [-O3]

Screen Shot 2022-09-05 at 4 31 08 PM

Infernece Time (ms)

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

Total Time (ms)

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

FPS

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

See also

More Repositories

1

awesome-ml-demos-with-ios

The challenge projects for Inferencing machine learning models on iOS
Python
1,133
star
2

PoseEstimation-CoreML

The example project of inferencing Pose Estimation using Core ML
Swift
664
star
3

SemanticSegmentation-CoreML

The example project of inferencing Semantic Segementation using Core ML
Swift
296
star
4

tf2-mobile-2d-single-pose-estimation

๐Ÿ’ƒ Pose estimation for iOS and android using TensorFlow 2.0
Python
167
star
5

PoseEstimation-TFLiteSwift

The baseline project for inferencing various Pose Estimation tflite models with TFLiteSwift on iOS
Swift
144
star
6

DepthPrediction-CoreML

The example of running Depth Prediction using Core ML
Swift
131
star
7

TextRecognition-MLKit

Swift
85
star
8

TextDetection-CoreML

Swift
74
star
9

FingertipEstimation-CoreML

Detect fingertip by using machine learning for pose estimation
Swift
70
star
10

KeypointAnnotation

Swift
42
star
11

TFLiteSwift-Vision

Swift
36
star
12

ImageClassification-CoreML

The example of running Image Classification using Core ML
Swift
31
star
13

FaceDetection-MLKit

Swift
20
star
14

PoseEstimation-MLKit

The example of running Pose Estimation using ML Kit
Swift
17
star
15

SimpleClassification-CreateML-CoreML

Create ML๋กœ ๋‚˜๋งŒ์˜ Classifier ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  Core ML๋กœ ์•ฑ์—์„œ ์‚ฌ์šฉํ•ด๋ณด๋Š” End-to-End ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
Swift
13
star
16

InstanceSegmentation-CoreML

Swift
11
star
17

MobileNet-MLKit

MLKit์„ ์‚ฌ์šฉํ•˜์—ฌ MobileNet.tflite๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณธ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
Swift
9
star
18

GyroMaze-STM32

์ž„๋ฒ ๋””๋“œ ์‹คํ—˜์—์„œ ํ…€ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค.
C
7
star
19

pytorch-Korean-NER

Python
5
star
20

HangeulClock-iOS

Objective-C
5
star
21

MNIST-TFLiteSwift

Swift
4
star
22

MyBookshelf-iOS

The assignment is to see code design, code accuracy, data structure, algorithms, and learning abilities, as well as the ability to implement your app.
Objective-C
4
star
23

excel-example-ios

libxlsxwriter(C๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ iOS์—์„œ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
Swift
4
star
24

image-clustering-browser

Python
3
star
25

WordRecognition-CoreML-MLKit

Detect character, find a word what I point and then recognize the word using Core ML and ML Kit.
3
star
26

ZoomableScrollView

Simple Zoomable Scroll View inherited from UIScrollView
Swift
3
star
27

tc-stock-management-system

1
star
28

async-filtering-photo-album-ios

Swift
1
star
29

MLProblem-MLFramework-for-iOS-template-project

Swift
1
star
30

tucan9389.github.io

HTML
1
star
31

mnist-ml-to-mobile

Python
1
star