Skip to main content

CoreYOLO
Object detection. Built for Apple.

PyPI Python License: MIT CI

Train an independent detector in Python. Ship Core ML to Apple silicon (ReLU palettes on ANE; SiLU dense FP16 on GPU).
Code is MIT. Weights carry their own license, stated per checkpoint.

Street scene used on the CoreYOLO site

Website · Docs · Models · Deploy · iOS sample · Licenses

Roboflow data.yaml  →  train  →  .coreyolo  →  export  →  Core ML  →  iPhone / Mac

The public type is Detector (YOLO is a compatibility alias). App code loads CoreYOLO files only (.coreyolo, trained best.pt, or .mlpackage).

Install

pip install coreyolo
pip install "coreyolo[video]"   # webcam (`--source 0`)
from coreyolo import Detector

model = Detector("n")              # GELAN n; also "s" / "m" / "l", or family="e2e"
model.train(data="data.yaml", epochs=100, imgsz=640)
model.save("weights/app.coreyolo")
model.export(imgsz=640)            # ReLU → FP16 + palettes + ANE; SiLU convert → dense FP16 GPU

Designed for Apple silicon

Core ML first Fused Conv–BN, inference branch only, cached DFL grids (no meshgrid / arange), host NMS. ReLU: FP16 + 8-bit palettes on the Neural Engine. Converted SiLU: dense FP16 on GPU. iOS 16 and macOS 13.
MIT Code is MIT. Weights are per checkpoint. GELAN files from MultimediaTechLab v9-*.pt are MIT (keep the Wong/Tsui copyright). Ultralytics yolov9*.pt stays AGPL-3.0; converting the file does not change its applicable terms. Choosing a model means choosing its license.
Your labels Drop in a Roboflow YOLO or YOLO-Seg export. Same data.yaml you already have.

ReLU prefers ANE (--device ane). Converted SiLU graphs prefer GPU.

Three graphs. One trainer.

Graph What it is Ship path
GELAN (default) YOLOv9 GELAN. Scales n / s / m / l match public v9-t / s / m / c. Export is the main branch only (no PGI aux). Train ReLU for ANE, or convert MultimediaTechLab v9-*.pt (SiLU, GPU, MIT).
DFL C2f + Distribution Focal Loss. Host NMS. Detect and instance segmentation. --family dfl
E2E Original C3k2 + C2PSA. NMS-free top-300 at inference. Train from scratch (--family e2e or --recipe coco-n-e2e).

n, s, m, and l

Same GELAN trainer. Pick the scale for the device.

Scale Params (detect, nc=80) Typical use Convert (MIT)
n 2.13M GELAN · 3.16M DFL · 2.73M E2E iPhone, real-time camera v9-t.pt
s 7.32M GELAN · 11.17M DFL · 10.65M E2E Mac / iPad v9-s.pt
m 20.22M GELAN · 25.90M DFL · 22.63M E2E Accuracy-biased v9-m.pt
l 25.59M GELAN · 43.69M DFL · 27.17M E2E Offline / max accuracy v9-c.pt
coreyolo convert --weights v9-t.pt --out weights/coreyolo-n-coco.coreyolo
coreyolo convert --weights v9-s.pt --out weights/coreyolo-s-coco.coreyolo
coreyolo convert --weights v9-m.pt --out weights/coreyolo-m-coco.coreyolo
coreyolo convert --weights v9-c.pt --out weights/coreyolo-l-coco.coreyolo

Source: MultimediaTechLab/YOLO v1.0-alpha (copyright Kin-Yiu Wong and Hao-Tang Tsui). Same MIT files LibreYOLO converts. Ultralytics yolov9t.pt is a different dump (AGPL-3.0). Do not pass those pickles into Detector().

Zoo

Binaries live on GitHub Releases, not in git. mAP stays blank until you record COCO val. See weights/manifest.json and weights/LICENSE_NOTICE.txt. Choosing a model means choosing its license.

Id Graph Act Compute How License
coreyolo-n-coco gelan SiLU GPU convert --weights v9-t.pt MIT
coreyolo-s-coco gelan SiLU GPU convert --weights v9-s.pt MIT
coreyolo-m-coco gelan SiLU GPU convert --weights v9-m.pt MIT
coreyolo-l-coco gelan SiLU GPU convert --weights v9-c.pt MIT
coreyolo-n-coco-seg gelan ReLU ANE train --task segment MIT
coreyolo-n-coco-relu gelan ReLU ANE train --recipe coco-n MIT
coreyolo-e2e-n-coco e2e ReLU ANE train --recipe coco-n-e2e MIT

Python SDK

from coreyolo import Detector

model = Detector("n")
model.train(data="datasets/dummy/data.yaml", epochs=20, batch=8, imgsz=320)
model.save("weights/app.coreyolo")

model = Detector("weights/app.coreyolo")  # or a Core ML .mlpackage
results = model.predict("photo.jpg", classes="person", save=True)
results[0].save("out.jpg")
model.export(imgsz=320)

model.val(data="data.yaml") returns mAP. model.predict(0) opens the webcam.

From a clone:

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Apple silicon: PyTorch train / val / predict use MPS (GPU) when it works, then CUDA, then CPU. Core ML .mlpackage inference defaults to GPU (CPU_AND_GPU); --device all adds the Neural Engine, --device ane is ANE-only.

Labels

Roboflow Export → YOLO (detect) or YOLO-Seg (polygons):

dataset/
  data.yaml
  train/images/   train/labels/
  valid/images/   valid/labels/

Detect lines are normalized class xc yc w h. data.yaml may use list or dict names, val or valid.

coreyolo dummy-data --out datasets/dummy
coreyolo train --data datasets/dummy/data.yaml --model n --epochs 20 --imgsz 320
coreyolo export --weights runs/detect/train/weights/best.pt --imgsz 320

Segmentation: --task segment. Mosaic is off. Core ML writes three outputs; NMS and mask assembly stay on the host. iOS sample: examples/ios.

Train on COCO

coreyolo coco --out datasets/coco --download
coreyolo train --recipe coco-n-fast    # 100 epochs
coreyolo train --recipe coco-n         # 300 epochs, ReLU (ANE)
coreyolo train --recipe coco-n-e2e
Recipe Scale Notes
coco-n-fast n First COCO run
coco-n / coco-s / coco-m / coco-l GELAN ReLU Neural Engine path
coco-n-e2e n E2E NMS-free

CLI

coreyolo coco        --out datasets/coco --download [--max-images 512]
coreyolo convert     --weights v9-t.pt --out weights/coreyolo-n-coco.coreyolo
coreyolo train       --recipe coco-n-fast
coreyolo train       --data data.yaml --model n --family e2e --epochs 100 --device gpu
coreyolo val         --data data.yaml --weights best.pt --device gpu
coreyolo predict     --weights best.mlpackage --source photo.jpg --device gpu
coreyolo predict     --weights best.mlpackage --source 0 --device gpu   # webcam; Q quits
coreyolo export      --weights best.pt --imgsz 640 [--int8] [--no-palette]
coreyolo dummy-data  --out datasets/dummy --segment

License

CoreYOLO's code is MIT. It does not require you to open source your application, and it does not change if you sell what you build.

Pretrained weights are separate: each one carries the license of whoever trained it, stated per checkpoint. GELAN COCO files converted from MultimediaTechLab v9-*.pt are MIT (copyright Kin-Yiu Wong and Hao-Tang Tsui). Ultralytics yolov9*.pt converts stay AGPL-3.0. A model you train yourself is yours. Converting a file does not change its applicable terms.

Choosing a model means choosing its license. See docs/licenses.md, weights/LICENSE_NOTICE.txt, and NOTICE. This is a description of the licenses involved, not legal advice. YOLO is a trademark of its owners.

Metadata

Release files for coreyolo 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for coreyolo 0.2.1
File Size Uploaded
coreyolo-0.2.1.tar.gz 84.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for coreyolo 0.2.1
File Interpreter ABI Platform
coreyolo-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 170.6 kB

Release files / coreyolo-0.2.1.tar.gz

Download URL coreyolo-0.2.1.tar.gz
Size 84.5 kB
Tags Source
SHA-256 checksum
How to use checksums
2b9e5694c678a5cc38514f244c1191be0d3f5a69d31b4bbfd3794afbb0f87dd8
BLAKE2b-256 checksum
How to use checksums
a55e25dcc4faaca355e87c35cc7bd4cc2c42f23d2e5a763f23c153283690d471
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release files / coreyolo-0.2.1-py3-none-any.whl

Download URL coreyolo-0.2.1-py3-none-any.whl
Size 86.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
19474848f55b9e2467fbdbb7ca75a11159d6e84a2f0537c92ec4491deeb710ae
BLAKE2b-256 checksum
How to use checksums
f30a2c7de16668a455f664bf2bcb9111b27ab2b3e847b237d8b5d43123f52616
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page