Tags give the ability to mark specific points in history as being important
-
v8.9.15
efa95643 · ·Add opt-in Apple Core AI (.aimodel) backend for iOS 27+ (#319) * Add Apple Core AI (.aimodel) backend for iOS 27+ with Core ML fallback Load .aimodel models through CoreAI.framework on iOS 27+ devices behind canImport(CoreAI) and availability checks, with Swift letterbox preprocessing and the existing task decoders shared through featureArrays. Recognize .aimodel in the path resolver, downloader, caches and app, export and download Core AI assets from the scripts, add an opt-in --benchmark launch argument, and document the backend. Core ML stays the default format. * Default official models to Core AI on iOS 27+ and drop the Swift classify softmax Official model IDs resolve to .aimodel.zip where Core AI can run and to .mlpackage.zip elsewhere; a cached Core ML model is removed only after its Core AI replacement is installed and valid. Classify exports apply softmax in the model, so the raw-tensor path now only selects the top-1/top-5 probabilities. * Auto-format by https://ultralytics.com/actions * Fix Core AI input cost and Neural Engine load failures found on device On an iPhone 17 Pro (iOS 27.0), NDArray(scalars:) copied the 640x640 input element by element and cost about 55 ms per frame; the input tensor is now allocated once and filled in bulk. Preferring the Neural Engine explicitly failed the load of models it cannot compile (_GenericObjCError.nilError), so hardware acceleration now uses the default specialization options and lets Core AI place the model. The benchmark loads a task's models together, times them in interleaved rounds, keeps only timings, and reports what each model found. * Export Core AI assets with the raw head and record on-device results On an iPhone 17 Pro (iOS 27.0) the raw head decoded by the SDK's Swift NMS is about 2x faster in inference than the Core AI end-to-end head and the Core ML INT8 assets, and avoids the FP16 end-to-end pose asset returning no detections. The export script no longer passes nms=False for Core AI and expects end2end False, the docs describe the recipe and hardware acceleration placement, and docs/performance.md replaces the pending table with the measured results. * Remove the in-app benchmark harness The on-device results it produced are recorded in docs/performance.md and the harness source is kept in #320, so the app no longer carries a launch-argument tool, its benchmark image download, or a contiguity check on an input tensor the SDK allocates itself. * Auto-format by https://ultralytics.com/actions * Describe the Core AI release assets as published * Add apples-to-apples Core ML and Core AI on-device benchmarks Same YOLO26n weights per task as Core ML INT8, Core ML FP16 and Core AI FP16, with both heads where the task has one, measured on an iPhone 17 Pro (iOS 27.0) with and without hardware acceleration. End to end the official Core AI raw-head assets are ahead for detect, OBB and classify, tied for segment and pose, and behind for semantic and depth. * Keep a cached Core ML model usable until its Core AI replacement installs After an upgrade to iOS 27 the app still attempts the Core AI download, but loads the Core ML model it cached earlier when that download is not possible. The .aimodel marker is checked before the move, the unused requiresNMS write and its access widening are removed, Core AI metadata is read as strings directly, and docs no longer describe the removed benchmark harness or claim an explicit .aimodel loads without Core AI. * Link the semantic and depth follow-up issues from the performance guide * Recover Core AI loads from a stale specialization cache entry On iOS 27.0 an .aimodel whose cached specialization is stale (the asset was replaced under the same path, or the app was reinstalled) fails to load with _GenericObjCError.nilError instead of being rebuilt. Six of the seven official nano assets hit this on the test device. The loader now evicts the asset's cache entries and retries once, which was verified to recover all of them. Corrects the earlier explanation that blamed an explicit Neural Engine preference. * Make Core AI opt-in and keep Core ML the default everywhere Official model IDs, bare bundle names and the app's bundled and downloaded models resolve to Core ML exactly as before. Core AI is selected only by the .aimodel extension: an explicit path, a bundle name that carries .aimodel, or an .aimodel.zip URL, on iOS 27 and later devices. The availability-based format selection, the Core ML cache replacement and its offline fallback, the dual-format list filter and the download script flag are removed, the app download manager and external display controller return to their previous state, and the docs describe the opt-in with one example and link the measured trade-offs. * Add an app setting to opt in to Core AI models and keep Core ML behavior unchanged The app gains a Settings toggle, Core AI Models (iOS 27+), off by default. When it is on and the device can run Core AI, the app downloads the official .aimodel.zip assets and lists bundled .aimodel models; Core ML and Core AI downloads are cached side by side and the setting is re-read when the app returns to the foreground. The export script exports Core ML by default and Core AI only with --formats coreai, Core ML classify results keep the Swift softmax while Core AI probabilities skip it, a failed cache eviction no longer hides the original load error, and the docs describe the setting and the ultralytics>=8.4.155 floor for the Core AI recipe. * Load the selected format when the Core AI setting changes Returning to the foreground with the Core AI setting changed now relists the models and loads the current task's first model in the new format, so turning the setting on runs a Core AI model and turning it off returns to Core ML; with the setting unchanged the observer does nothing. The listed format changes only on a relist, so a list, its downloads and its cache paths always agree, including when the setting is flipped during a download. The README upload command is Core ML again with an explicit Core AI command beside it, and stale wording, the Settings path and a history sentence in the performance guide are fixed. * Install a downloaded model under its own format The install destination followed the live Core AI setting, so a Core ML download cancelled mid-install and finished after the setting changed was stored under the Core AI name and could never load or re-download. The destination now takes its extension from the installed artifact. --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
-
v8.9.13
69313139 · ·Fix EXC_BAD_ACCESS in ObjectDetector when raw detection tensor isn't .float32 (#303) * Fix crash decoding non-float32 raw detection tensors in ObjectDetector processRawResults() reinterpreted an MLMultiArray's raw buffer as Float32 via assumingMemoryBound without checking dataType. When a model's raw end2end/NMS-free output is backed by another type (e.g. .float16), every stride-based offset lands at roughly the wrong byte position, running past the tensor's actual allocation as detections accumulate and crashing with EXC_BAD_ACCESS. Materialize the tensor into a Float buffer first: a fast direct copy when the array is already .float32, falling back to MLMultiArray's safe per-element accessor otherwise — mirroring the pattern already used in Classifier.softmaxProbs and DepthEstimator.postProcessDepth. Also guard processTraditionalResults against numClasses <= 0 (a malformed/misrouted tensor with too few features), which trapped on `0..<numClasses` with a negative range. * Preserve source tensor layout when materializing float buffer Review feedback: the previous fast path copied count contiguous elements via a flat memcpy whenever dataType == .float32, then indexed into that copy using the source array's own (possibly padded/ non-contiguous) strides. For a valid but non-densely-packed .float32 tensor, that mismatch reads across padding gaps and misaligns every detection after the first. Only take the flat-copy shortcut when the source is verifiably densely packed (its strides already equal the canonical row-major strides for its shape); otherwise fall back to the safe per-element accessor, which already respects the real strides regardless of layout. Always return freshly computed canonical strides alongside the materialized buffer, since the buffer itself is now guaranteed densely packed regardless of the source's original layout. Added a regression test constructing a genuinely padded .float32 MLMultiArray (via the strides: initializer) with two detections, which fails against the unguarded flat-copy and passes with this fix. * Preserve zero-copy float32 detection decoding * Auto-format by https://ultralytics.com/actions * Standardize Core ML mobile assets at 224/640 (#304) * Document shipped Core ML input sizes * Correct Core ML end-to-end contracts * Include depth in export examples * Require a new model release tag * Align release workflow documentation * Standardize Core ML model input sizes * Auto-format by https://ultralytics.com/actions * Support external Core ML output directories * Isolate official Core ML checkpoints * Match Core ML task output contracts * Resume verified Core ML exports * Adopt standard mobile model assets * Enforce standardized Core ML assets * Auto-format by https://ultralytics.com/actions * Refresh model caches by release * Auto-format by https://ultralytics.com/actions * Fix versioned model cache handoff * Separate model paths from display names * Replace existing Core ML assets at standard sizes * Auto-format by https://ultralytics.com/actions * Pass model checkpoint paths directly * Refresh standardized Core ML caches * Use revisioned cache paths consistently * Clarify Core ML asset history * Use the unified mobile benchmark harness * Update standardized Core ML benchmarks * Preserve local export checkpoints * Auto-format by https://ultralytics.com/actions --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com> * Consolidate AGENTS.md Core Principles from eight to five (#305) * Consolidate AGENTS.md Core Principles from eight to five * Address review findings: restore lost content, resolve gate contradiction * Drop the hierarchy gloss; keep each repo's original cleanup wording * Make coverage informational and correct the CI note (#306) * Bump version to 8.9.13 --------- Co-authored-by: Glenn Jocher <glenn.jocher@ultralytics.com> Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.12
ccc01863 · ·Release UltralyticsYOLO 8.9.12 (#297) * Bump UltralyticsYOLO to 9.0.0 * Use patch release 8.9.12
-
v8.9.11
7bb1b4b0 · ·Include segmentation masks and pose in shared images (#291) * Include segmentation masks and pose in shared images renderShareImage froze the camera frame as an opaque layer above the preview layer — which nests the mask, pose, and box overlays — then rebuilt only the bounding boxes on top. Masks and pose skeletons were therefore missing from shared/paused images, and rotated OBB boxes were flattened to axis-aligned rects by the rebuild (path.boundingBox). Lift the real overlay sublayers above the frozen frame and restore them after the snapshot, so every task shares correctly and the shared image matches the live overlay exactly. Removes the parallel box-reconstruction path (BoundingBoxInfo/createBoxView/makeBoundingBoxInfos). * Keep shared overlays below the view controls Lift the overlays just above the frozen frame instead of onto the root layer, so a full-frame mask no longer tints the toolbar/FPS controls in the shared image and the z-order matches the live preview. * Bump version to 8.9.11
-
v8.9.10
2032fe44 · ·Optimize segment mask painting (#290) * Optimize segment mask painting * Document segment mask painting performance * Auto-format by https://ultralytics.com/actions * Bump version to 8.9.10 --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.9
94e6a7fa · ·Clear stale segment mask overlays (#289) * Clear stale segmentation mask overlays * Bump version to 8.9.9
-
v8.9.8
6f269beb · ·Improve segment mask rendering (#288) * Improve segmentation mask rendering * Auto-format by https://ultralytics.com/actions * Improve segmentation mask rendering * Auto-format by https://ultralytics.com/actions * Speed up axis-aligned NMS --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.7
b4aab348 · ·8.9.7 - Keep semantic postprocess fast in debug builds (#278) * 8.9.7 - Keep semantic postprocess fast in debug builds Full-resolution class maps exposed a ~100x Swift -Onone penalty on the per-pixel sweeps: a debug build showed ~90 ms postprocess where release runs 0.8 ms, making the SDK look broken to anyone profiling from Xcode. The class-map gather/clamp and RGBA paint now run through vDSP and vImage lookup tables - vectorized C that is equally fast in any build configuration - and SemanticMask.classMap becomes [Int32] so the conversion vectorizes (and halves its memory). CocoaPods consumers additionally get the pod compiled -O in all configurations via pod_target_xcconfig. * Auto-format by https://ultralytics.com/actions * Address review: 8-bit paint fallback, pixel test, minor version Scalar paint fallback above 256 classes (vImage tables are 8-bit), a pixel-color test proving the planar-to-RGBA byte order, and 8.10.0 instead of a patch bump since the classMap type change is source-breaking. * Adopt Xcode recommended settings, keep script sandboxing off The model-download build phase writes bundled models into the source tree, which user script sandboxing blocks - a sandboxed clean checkout fails the build (verified). Everything else from the Xcode 26.5 recommendations is adopted, and the committed build number catches up with local test builds. * Release as 8.9.7 The classMap dtype correction lands while the semantic class-map API is new enough to have no external consumers of the raw array; treat it as stabilization of the new surface rather than a minor release. --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.6
fc60e08a · ·8.9.6 - Expose capture session preset on YOLOView (#277) * 8.9.6 - Expose capture session preset on YOLOView YOLOView hardcoded the .hd1280x720 capture preset, so models with inputs larger than 720p had no way to request more sensor detail for small objects (the Android plugin gained the symmetric option in ultralytics/yolo-flutter-app#529). captureSessionPreset keeps today's default, falls back through .high/.photo on unsupported devices, and restarts the session when changed at runtime. * Auto-format by https://ultralytics.com/actions --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.5
50e08483 · ·Add pre/inference/post timing breakdown to predictors and YOLOView HUD (#274) * Add pre/inference/post timing breakdown to predictors and YOLOView HUD Each predictor stamps the end of the Vision request and reports the inference/postprocess split through new YOLOResult fields (preMs is zero on iOS since Vision fuses input scaling into the request - documented on the fields). YOLOView shows the breakdown as a smaller caption line under the FPS label, hidden when values are absent. Also fixes single-image predictOnImage measuring speed after annotation drawing: plotting is now excluded from all timings, matching the camera path and the Flutter plugin. * Add standardized per-task CPU vs Neural Engine benchmark table * Auto-format by https://ultralytics.com/actions * Friendlier performance doc headings with emoji, matching the Flutter guide * Distinguish burst single-image latency from sustained camera frame time in benchmark table * Show timing breakdown in the app HUD The app hides YOLOView's built-in labels and renders its own, so add the matching pre/inference/post caption line below the FPS label, fed from the result delegate - parity with the Flutter showcase HUD. * Record cross-platform decode and semantic ArgMax insights * Auto-format by https://ultralytics.com/actions * Accept [1, H, W] class-map semantic outputs In-graph-ArgMax semantic exports emit per-pixel class indices directly instead of float logits; read them through a dtype-indirected pointer and share the existing paint/packaging phase. Legacy 4D logits keep the argmax path unchanged. * Record in-graph ArgMax semantic results in performance doc * Address review: stage timing fixes Mark inference end before parsing in Segmenter's synchronous path so parse cost lands in postprocess, and smooth the camera-path stage breakdown with the same EMA the result speed uses (single-image predicts keep raw per-frame values). * 8.9.5 * Polish HUD and model row layout - Render the stage breakdown as a second line inside the FPS label so it inherits its layout and visibility (no overlap with neighbors, hides during camera switching) - Cover the whole HUD with the camera-switch transition instead of leaving sliders and labels floating over the blur - Cap the model row at portrait-phone width so landscape doesn't stretch it edge to edge, and clear storyboard placeholder text while reserving the two-line HUD height to avoid first-frame layout shift * Auto-format by https://ultralytics.com/actions * Speed up class-map postprocess for full-resolution masks Full-resolution class maps (ultralytics#24799) are ~1M pixels; the per-pixel read closure and byte-wise color writes measured ~130 ms per frame. Typed tight loops and a packed-RGBA LUT bring the sweep back to a few ms. * Auto-format by https://ultralytics.com/actions * Refresh benchmarks with profile-mode and full-resolution semantic * Document profile-mode benchmark invocation * Tighten README tone Replace promotional section titles and claims with factual feature descriptions in both the English and Chinese READMEs, and fold the redundant highlights section into the feature list. --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.9.4
89c8d004 · ·Add camera torch toggle to YOLOView (8.9.4) (#268) * Add camera torch toggle to YOLOView (8.9.4) Ports the torch (flashlight) support from the Flutter plugin (ultralytics/yolo-flutter-app#435, #501) so both frontends stay at feature parity. A torch chip sits directly right of the centered lens pill with a "Torch on" note beside it, using the same visual tokens as the Flutter showcase (bolt glyph in yellow when on, slashed bolt in white when off, black 0.38 chip, 6pt gaps, 11pt semibold note). setTorchMode(_:) is public and returns the actual resulting hardware state (false when the active device has no torch or configuration fails), keeping the chip in sync from a single source of truth. The chip also re-syncs from hardware after camera switches and resets when the capture session stops (pause/stop), since iOS drops the torch with the session. The caption clamps and scales down on narrow triple-lens phones instead of clipping, and the external-display path now refreshes lens-row visibility immediately after hiding the camera controls. Releases 8.9.4 (podspec + MARKETING_VERSION). * Update * Hide the torch chip when the active device has no torch * Relayout YOLOView after external display disconnect restores controls
-
v8.9.3
bdb0c10e · ·Add YOLOView.showOverlays for custom overlay rendering (8.9.3) (#267) * Add YOLOView.showOverlays for custom overlay rendering (8.9.3) Adds a public showOverlays toggle to YOLOView so consumers can disable the built-in prediction overlays (boxes, OBB, masks, pose, classification) and draw their own, while inference and the result callbacks (delegate, onDetection) keep firing. Requested for custom-overlay workflows in ultralytics/yolo-flutter-app#506; matches the semantics the Flutter plugin's iOS view already ships. Releases 8.9.3 (podspec + MARKETING_VERSION), which also ships the unreleased ObbDetector strides fix and the YOLOViewDelegate default. * Skip redundant per-frame overlay clearing when overlays are hidden
-
v8.9.2
1342b872 · ·Add capturesInstanceMasks for live segmentation mask streaming (8.9.2) (#260) The realtime Segmenter path hardcoded `returnIndividualMasks: false`, producing only the combined display mask, so `YOLOResult.masks.masks` was always empty for camera predictions. Consumers streaming per-instance segmentation masks (e.g. the Flutter plugin's `includeMasks` stream option) received none — a regression once the plugin moved off its vendored predictor. Add a public `BasePredictor.capturesInstanceMasks` flag (default false, preserving the current per-frame cost) that gates per-instance mask materialization in `Segmenter.processObservations`. Consumers set it when individual masks are needed.
-
v8.9.1
c7f373c9 · ·Fix YOLOView storyboard module reference (8.9.1) (#258) Main.storyboard pinned the YOLOView to `customModule="YOLO"`, the module name before the rename to `UltralyticsYOLO`. That compiles, so build-only CI passed, but at runtime Interface Builder can't resolve `_TtC4YOLO8YOLOView`, instantiates a fallback, and the app crashes on launch (`-[... sublayers]: unrecognized selector`). Point it at `UltralyticsYOLO` and bump to 8.9.1. Verified by launching YOLOiOSApp on a simulator (not just building) — storyboard loads and the app runs.
-
v8.9.0
2605f6b5 · ·Add shared UltralyticsYOLO inference package (8.9.0) (#257) * Prepare YOLO package as shared inference core Makes the YOLO Swift package the single source of truth for iOS inference so the Flutter plugin (yolo-flutter-app) can depend on it instead of vendoring a diverged copy. The native app and example apps are unaffected. Core merge (ports newer behavior from the Flutter fork, additive/non-breaking): - BasePredictor: useGpu + cpuOnly compute path, numItemsThreshold at create/load, metadata-tolerant label parsing (preserves multi-word labels, sparse names), labelName(for:) fallback, opt-in original-image capture via shared CIContext, shape-based NMS-free (YOLO26 end2end) detection fallback. - YOLO: non-breaking useGpu / numItemsThreshold / returnAnnotatedImage overloads. - YOLOResult: originalImage; Probs top1Label/top5Labels aliases; OBB.toPolygon(in:). - YOLOTask: Equatable + robust fromString bridge-alias parser. - Detector/Segmenter/Pose/OBB/Classifier/Semantic: original-image propagation and label fallback; Plot: original-image-size-aware pose drawing. Distribution + platform: - Lower package deployment target to iOS 13 with availability fallbacks (Logger os_log, UIAction/primaryAction, sheetPresentationController). - Add YOLO.podspec so the package can be consumed via CocoaPods as well as SPM. Tests: add YOLOSSOTMergeTests covering IoU-after-setters, label parsing/fallback, fromString, Probs aliases/originalImage, numItemsThreshold, and per-task output shapes. Suite: 90 tests passing; native app builds; pod lib lint passes. * Auto-format by https://ultralytics.com/actions * Expose detector thresholds as public API The Flutter plugin's real-time YOLOView drives confidence/IoU/numItems on the shared BasePredictor from its UI sliders and reuses cached predictors, so these need to be public. Widen the three threshold setters to public and expose the backing values as public read-only (internal set). No behavior change. * Bump version to 8.9.0 - MARKETING_VERSION 8.8.8 -> 8.9.0 (next release on the v8.x line). - YOLO.podspec to 8.9.0 and align its source tag to the repo's `v{version}` scheme so the pod publishes from the v8.9.0 release tag. * Rename package to UltralyticsYOLO Renames the shared Apple package's public surface (Swift module, SPM product/target, and CocoaPods pod) from `YOLO` to `UltralyticsYOLO`: - `YOLO` is too generic for CocoaPods' global flat namespace and collides as a module name; `Ultralytics` is already an unrelated pod on trunk. `UltralyticsYOLO` is collision-safe, on-brand (matches `ultralytics_yolo`), and leaves `Ultralytics` free as a future umbrella. - The public `YOLO` class and all types (YOLOResult, YOLOTask, YOLOView, …) are unchanged, so usage stays `import UltralyticsYOLO; YOLO(modelPath, task:)`. - Moves Sources/YOLO -> Sources/UltralyticsYOLO, updates Package.swift, the podspec (-> UltralyticsYOLO.podspec), 27 Swift import sites, README examples, and 5 Xcode projects (app + 4 example apps). Version stays 8.9.0. * Update CI scheme and periphery path for UltralyticsYOLO rename * Address review: clarify useGpu docs, drop unused returnAnnotatedImage - useGpu: keep behavior (parity with the shipped Flutter plugin's public `useGpu` option; ANE+CPU with the GPU deliberately excluded for realtime camera stability, CPU-only when false), but document the real semantics so the flag name is no longer misleading. Renaming/remapping would break the Dart API or regress camera latency. - returnAnnotatedImage: remove it. It only discarded the already-rendered annotated image (no compute saving) and had no consumers. Revert to the package's always-annotate single-image behavior; a proper skip-render API can be added later if a consumer needs it. * Auto-publish UltralyticsYOLO pod to CocoaPods trunk on release Adds a `pod` job to the publish workflow that runs after the release job tags v{MARKETING_VERSION}, then `pod trunk push`es UltralyticsYOLO.podspec from that tag so the Flutter plugin's CocoaPods consumers resolve it from trunk. Requires a COCOAPODS_TRUNK_TOKEN repo secret. * Document UltralyticsYOLO installation (SPM + CocoaPods) --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com> -
v8.8.8
af8c754e · ·Capture camera at 720p instead of full-resolution photo (#249) * Capture camera at 720p instead of full-resolution photo `.photo` delivers full-sensor (~2 MP) frames that are downscaled to the 640x640 model input every frame, which is the dominant per-frame preprocessing cost. Capturing at `.hd1280x720` roughly halves per-frame work and doubles sustained throughput on an iPhone 17 Pro (~16 -> 13 ms, 15 -> 30 fps) with no change to detection accuracy, since the model always receives a 640 input regardless of capture resolution. Add docs/performance.md documenting the on-device profiling and the camera/Core ML configuration rationale, including the capture-resolution comparison table, the compute-units and end2end findings, and a note that frame rate is camera-bound rather than inference-bound. Add LetterboxTests covering letterbox/coordinate robustness across camera aspect ratios (16:9 and 4:3, portrait and landscape), since the capture change moves the default from a 4:3 to a 16:9 stream. * Auto-format by https://ultralytics.com/actions * Guard camera preset with canSetSessionPreset and fall back Move the sessionPreset assignment to after the camera input is added so canSetSessionPreset reflects the active device's real capabilities, and fall back to a broadly supported preset ([requested, .high, .photo]) when the requested preset (e.g. 720p) is not supported on a given device or camera position. This avoids a camera-startup regression versus the previously universal .photo preset, and logs when a fallback is used. * Expand performance doc into canonical per-experiment reference Restructure docs/performance.md into self-contained experiment sections with the empirical results from on-device and host profiling: per-frame pipeline decomposition, camera capture resolution, Vision vs manual preprocessing, Core ML compute units (CPU/GPU/ANE), YOLO26 end2end vs legacy head + NMS, YOLO26 vs YOLO11 backbone, quantization and deployment target, and camera-bound frame rate. Adds a methodology table, the host-vs-device caveat, the shipped configuration, and a list of open/untested levers, so the doc is a baseline for future work. * Auto-format by https://ultralytics.com/actions * Bump version to 8.8.8 --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.8.7
44d82bf1 · ·Add YOLO semantic segmentation support (#242) * Add YOLO semantic segmentation support * Auto-format by https://ultralytics.com/actions * Clarify semantic CoreML export output * Align semantic task order * Improve semantic mask upsampling * Auto-format by https://ultralytics.com/actions * Restore fast semantic mask rendering * Cache semantic mask colors * Smooth mask overlays * Restore compact task labels * Align semantic model documentation * Fix app model folder documentation * Harden semantic postprocessing * Tighten semantic release notes and mask rendering * Unify detection label rendering * Auto-format by https://ultralytics.com/actions * Unify classify label rendering * Auto-format by https://ultralytics.com/actions * Keep classify labels visible * Improve classify label readability --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.8.6
e64f84e3 · ·Fix external display orientation and mode setting (#241) * Fix external display orientation and mode toggle * Auto-format by https://ultralytics.com/actions * Polish external display overlays and toggle * Auto-format by https://ultralytics.com/actions * Respect external display setting on restored scenes * Use preview layer geometry for annotations * Simplify external display annotation geometry * Disable dedicated external display by default * Restore aspect-fill box and overlay projection * Delete duplicate external-display state and dead helpers --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
-
v8.8.5
59e6e8ea · ·Fix YOLO aspect-fit preprocessing (#240) * Fix YOLO aspect-fit preprocessing * Auto-format by https://ultralytics.com/actions * Address letterbox review findings * Add letterbox transform tests * Fix invalid letterbox test expectations * Update App Store links and bump version * Use standard App Store links in English docs * Expand supported task table * Auto-format by https://ultralytics.com/actions * Use full task names in supported task table * Auto-format by https://ultralytics.com/actions * Use square Core ML export sizes * Document orientation-specific export shapes * Test non-square letterbox model inputs * Auto-format by https://ultralytics.com/actions * Polish README inference wording --------- Co-authored-by: UltralyticsAssistant <web@ultralytics.com>