🌟 Summary
v8.4.164 makes FLOPs reporting more efficient and improves export, video inference, dataset validation, and reliability—without changing model architectures or predictions.
📊 Key Changes
- Faster FLOPs counting (PR #26373): Delegates FLOPs estimation to THOP 2.2.0, which supports attention operations and profiles at smaller strides. This replaces full-size profiling for attention-based models such as YOLO11, YOLO12, and YOLO26, as well as RT-DETR. The PR depends on
ultralytics-thop2.2.0. - More efficient exports: CoreML export skips redundant trace checking, with reported trace times around 2.8–3× faster. The exporter also removes a duplicate setup forward pass.
- Improved video prediction: CUDA prediction can prefetch video frames while the GPU processes the current batch. Batches now stay within one video, also fixing an FPS mix-up when processing videos with different frame rates.
- More reliable data handling: Dataset scans now catch malformed OBB labels and fractional class IDs earlier. They also accept pose datasets for detection training and correctly parse multi-row prediction CSV files.
- Bug fixes and stability: Fixes include memory growth in PIL-based annotation, cleanup when prediction streams end early, tracker callbacks affecting plain prediction, and YOLOv9 distillation across different head layouts.
- Clearer deployment guidance: Documentation adds and updates guidance for Core AI, Rust inference options, export formats, datasets, and deployment workflows.
🎯 Purpose & Impact
- Less overhead when checking model information or starting training: FLOPs reporting no longer needs a full-resolution forward pass for the affected models, which can make
model.info()and training startup logging lighter. - Faster and smoother deployment workflows: Export setup does less redundant work, and CUDA video prediction can overlap frame loading with GPU inference.
- Earlier, clearer feedback on dataset problems: Invalid labels are more likely to produce helpful errors during scanning rather than confusing failures later in training or validation.
- More dependable runs: Fixes reduce resource leaks, incorrect tracker behavior, and failures in distillation and prediction-source handling.
What's Changed
- Ride out PyPI outages when publishing and alert Slack once by @glenn-jocher in #26340
- Speed up CoreML export by disabling redundant trace checking by @amanharshx in #26337
- Update Platform docs to 21 export formats by @glenn-jocher in #26344
- Update ultralytics-inference version to 0.0.48 and add quantize in documentation by @onuralpszr in #26345
- Fix memory growth in
Annotator(pil=True)from a font reference cycle by @Y-T-G in #26346 - Return early from segment2box for segments fully outside the image by @raimbekovm in #26331
- Document Core AI export on Linux and Platform, and 409 on duplicate resource names by @raimbekovm in #26343
- Reject box-only labels for OBB datasets at load time like segment datasets by @Nicholas022400701 in #26330
- Run the exporter dry-run forward pass once by @amanharshx in #26334
- Keep the checkpoint dataset on resume and omit host paths from the export validate hint by @raimbekovm in #26335
- Prefetch video frames during CUDA prediction by @JESUSROYETH in #26349
- Restore Conv.default_act after parse_model overrides it by @cainiao33 in #26347
- Release prediction writers and sources when stream runs end early by @cainiao33 in #26348
- Fix YOLOv9 distillation across teacher and student head layouts by @Nikhi00718 in #26338
- Fix multi-row CSV prediction sources by @Nikhi00718 in #26360
- Fix tracker callbacks running during plain prediction by @aswanth-07 in #26352
- Drop the keypoints in verify_image_label so a detect task can train on a pose dataset by @Nicholas022400701 in #26357
- Isolate Jetson CI settings per runner by @glenn-jocher in #26366
- Apply format-specific export options for mixed-case and alias formats by @MohammadHijjawi97 in #26358
- Join bracketed CLI values after '=' merging in merge_equals_args by @MohammadHijjawi97 in #26365
- Route tar-family dataset download URLs through safe_download by @cainiao33 in #26361
- Remove unused
labelsautolabel path fromnon_max_suppressionby @cainiao33 in #26356 - Fix ObjectCropper crash with OBB models by @MohammadHijjawi97 in #26359
- 86% faster SAM
batched_mask_to_boxon CPU by @Y-T-G in #26364 - Fix valid .jp2 images dropped as corrupt in dataset scans by @cainiao33 in #26355
- Reduce Jetson CI time and cancel superseded hardware runs by @glenn-jocher in #26369
- Re-derive teacher feature indices when unpickling distillation checkpoints by @cainiao33 in #26362
- Reject fractional class IDs during dataset scans by @Nikhi00718 in #26367
- Fix docstrings, export docs/args, and bugs found in a full package audit by @glenn-jocher in #26370
- Fix stale TensorRT INT8 calibration cache reuse by @amanharshx in #26368
- Add lite, openapi, and skills to CI status table by @glenn-jocher in #26372
- Auto-select idle GPUs at DDP launch in test_train by @glenn-jocher in #26374
- Delegate FLOPs counting to THOP 2.2.0 stride profiling by @glenn-jocher in #26373
Full Changelog: v8.4.163...v8.4.164