New Release: Ultralytics v8.3.251

:rocket: Ultralytics v8.3.251 is live!

Quick overview: v8.3.251 improves training + integration reliability by initializing Trainer callbacks earlier (so Ultralytics Platform logging can see your original data input like ul://...), while also polishing profiling accuracy, tuning stability, and device/dataset/docs support :puzzle_piece::bar_chart:

Update now with pip install -U ultralytics :hammer_and_wrench:


:glowing_star: New Features & Highlights

:brain: Earlier Trainer callback initialization (better integrations + traceability)

Callbacks now start before dataset resolution (get_dataset()), keeping the original args.data intact (e.g. ul:// URIs) and computing DDP/world-size earlier so integrations start at the right time.
Merged in PR #23155 by @glenn-jocher :white_check_mark:

:thread: Safer Platform logging for concurrent runs

Training callback state moved from global variables to per-trainer fields, reducing cross-talk when multiple trainings run in the same process (notebooks/orchestrators/multi-experiment workflows). Events also capture cleaner trainArgs and can attach a returned modelId for better correlation.
Included in PR #23155 by @glenn-jocher

:satellite: Better support for ul:// weights loading

YOLO(...)._load() now recognizes ul:// as a valid remote source prefix (alongside http(s)://, rtsp://, etc.).
Included in PR #23155 by @glenn-jocher


:straight_ruler: Improvements

:bar_chart: More accurate FLOPs/profiling + benchmark reporting

model.info() now accepts an imgsz argument, and benchmarks use it so FLOPs reflect the actual input size (not always 640).
Merged in PR #23151 by @artest08 :tada: (first contribution!)

:control_knobs: Tuner stability improvements

  • Tuner now passes save_dir into subprocess runs for consistent output paths
  • Plotting warns and safely exits if no valid fitness values exist
  • Removed unreachable code in Ray Tune helper (run_ray_tune) :broom:
    Merged via PR #23147 by @raimbekovm

:pager: Edge hardware compatibility: improved Rockchip detection

is_rockchip() now handles SoC strings with suffixes like rk3588-..., improving detection across more boards.
Merged in PR #23153 by @lakshanthad


:books: Docs & Dataset Updates

  • :desktop_computer::high_voltage: New NVIDIA DGX Spark guide for running Ultralytics YOLO11 (TensorRT tips + benchmarks) in PR #23144 by @onuralpszr
  • :movie_camera: VOC docs add an embedded training video in PR #23154 by @RizwanMunawar
  • :memo: Kaggle docs code-block formatting/clarity improvements in PR #23149 by @glenn-jocher
  • :puzzle_piece: TT100K dataset YAML + conversion script improvements (structure/metadata/stable class mapping) included in this release
  • :wrench: SimpleNamespace task arg fix in PR #23148 by @glenn-jocher

:bug: Bug Fixes / Maintenance


:link: Release Links

Check the GitHub release notes in the official Ultralytics v8.3.251 release, and browse all diffs in the full changelog from v8.3.250 β†’ v8.3.251.


:test_tube: Try it and share feedback

If you run training in notebooks, orchestration systems, or multiple concurrent experiments, this release should feel noticeably more reliable :thread::white_check_mark:

Drop your results, regressions, or questions in the threadβ€”community feedback helps us keep Ultralytics YOLO11 tooling sharp for everyone.