🌟 Summary
Lean and polished progress bars, sturdier downloads, and smarter GPU handling. v8.3.186 replaces third‑party tqdm with a fast, zero‑dependency TQDM, improves reliability across downloads and exports, and streamlines CI/docs. 🚀
📊 Key Changes
- Zero‑dependency TQDM progress bars (PR #21790 by @glenn-jocher) ✨
- New
ultralytics.utils.tqdm.TQDM
with iterator/context support and clean single‑line, rich‑style output. - Auto-disables on quiet logs, adapts to terminal width, shows rate/ETA, and throttles in GitHub Actions.
- tqdm is removed from package dependencies; internal code and docs now use
TQDM
. - New docs reference: utils/tqdm.
- Minor UX tweak: zip/unzip units now read “files” for clarity.
- New
- More reliable downloads (PRs #21791, #21794) 🔁
safe_download()
detects partial downloads via Content-Length, logs clear warnings, and cleans incomplete files between retries.
- Smarter DataLoader memory pinning (PR #21807) 🧠
pin_memory
is now enabled only on CUDA systems to avoid unnecessary warnings on CPU-only setups.
- Export stability fix (PR #21802) ⚙️
- Ensures CoreML export tensors are created on the same device as the model (works across CPU/GPU, macOS/Linux).
- Region counting visualization upgrade (PR #21805) 🗺️
- Draws true polygon regions and centers labels at polygon centroids for clearer overlays.
- GPU monitoring package update (PR #21795) 🧩
- Switch from
pynvml
to NVIDIA’s officialnvidia-ml-py
package; CI installs it for GPU tests (PR #21792).
- Switch from
- Faster installs in notebooks/docs (PR #21793) ⚡
- Examples now use
!uv pip install ...
for speed and reliability.
- Examples now use
- Docs/infra cleanups (PRs #21797, #21810 and content/link updates) 🧹
- Dependency simplification in docs build; downloads badge now links to a richer ClickHouse dashboard.
Minimal example with the new progress bar:
from ultralytics.utils import TQDM
for _ in TQDM(range(100), desc="Processing", unit="items"):
...
🎯 Purpose & Impact
- Lighter installs and fewer external dependencies ➜ smaller footprint, fewer warnings, and more predictable behavior. 📦
- Cleaner, consistent progress output across terminals and CI, with better rate/ETA reporting. 📈
- More robust model/dataset downloads; fewer corrupt files and clearer diagnostics on flaky networks. 🌐
- Reduced “pin_memory” warnings and smarter defaults for CPU/GPU environments. 🧘
- Fixes export device mismatches for CoreML, improving cross‑platform stability. ✅
- Better region visualizations improve clarity for zone/region counting solutions. 🎨
- CI and docs improvements don’t change APIs—no user action required for training, inference, or exports. 🙌
See the Ultralytics Docs for details: https://docs.ultralytics.com
What's Changed
- Pre-install
pynvml
on GPU runners by @glenn-jocher in #21792 - Fix
safe_download
for partial downloads by @glenn-jocher in #21791 - Use
!uv pip install
in jupyter notebooks by @glenn-jocher in #21793 - Cleanup
safe_downloads
by @glenn-jocher in #21794 - Remove
click==8.2.1
from docs.yml by @glenn-jocher in #21797 - Replace
pynvml
with NVIDIA officialnvidia-ml-py
package by @onuralpszr in #21795 - Ultralytics Refactor https://ultralytics.com/actions by @pderrenger in #21798
- Update TQDM download.py units to "files" by @glenn-jocher in #21799
- Only pin memory on CUDA systems by @glenn-jocher in #21807
- Fix
region
visualization inzone-counting
solution by @RizwanMunawar in #21805 - Fix
coreml
exportdevice
bug onmacOS
andlinux
by @RizwanMunawar in #21802 - Update pepy.tech links to clickpy by @pderrenger in #21810
- Add https://youtu.be/AvFh-oTGDaw to docs by @RizwanMunawar in #21786
ultralytics 8.3.186
Zero-dependency TQDM progress bars by @glenn-jocher in #21790
Full Changelog: v8.3.185...v8.3.186