Visitar URL original
Merge pull request #3496 from DeepLabCut/release/3.0.2 · DeepLabCut/DeepLabCut@4dcb9a7 · GitHub
Skip to content

Commit 4dcb9a7

Browse files
authored
Merge pull request #3496 from DeepLabCut/release/3.0.2
Version 3.0.2
2 parents 93427e9 + f4e8f83 commit 4dcb9a7

4 files changed

Lines changed: 156 additions & 3 deletions

File tree

‎changelog/3_0_2/v3_0_2.md‎

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
# DeepLabCut 3.0.2
2+
3+
4+
DeepLabCut 3.0.2 is a patch release bringing several PyTorch workflows fixes,
5+
improved config handling and export reliability, broadened compatibility for newer
6+
NumPy / Matplotlib versions, and adding a machine-readable docs/API index for
7+
agent-assisted interactions with the library.
8+
9+
10+
## Highlights
11+
12+
- Forward-compatibility work for NumPy 2, pandas 3 CoW, and Matplotlib 3.9,
13+
including releasing core NumPy / Matplotlib upper bounds (#3420, #3498,
14+
#3502, #3508, #3499, #3445, #3394).
15+
- More reliable COCO training: `model_cfg.metadata` is authoritative, with
16+
fail-fast validation against annotation JSON (#3435).
17+
- Safer legacy project configs: empty / `null` top-level YAML fields are treated
18+
as unset; `ignore_empty` is removed (#3439).
19+
- Normalized `export_model` pickles for downstream / real-time consumers (#3473).
20+
- Detector `null` thresholds resolve to field defaults instead of crashing
21+
(#3470, #3475).
22+
- PyTorch `analyze_videos` / auto-track honor the `overwrite` argument instead of
23+
hard-coding `overwrite=False` (#3514).
24+
- Public LLM-friendly knowledge index (`llms.txt`, `docs.jsonl`, `api.jsonl`)
25+
plus hardening follow-up and `AGENTS.md` (#3453, #3494, #3483).
26+
27+
28+
## Important changes
29+
30+
### NumPy / Matplotlib dependency bounds (#3420, #3498, #3502, #3508, #3499)
31+
32+
33+
Core installs no longer pin `numpy<2` or a Matplotlib upper bound. Also added
34+
`numba>=0.60` and an explicit OpenCV dependency. TensorFlow extras still keep a
35+
NumPy `<2` ceiling where the corresponding TensorFlow build requires it.
36+
37+
38+
- #3420 — Prepare for NumPy 2 forward compatibility (including dense SVD for
39+
tracklet ranking instead of randomized interpolative SVD)
40+
- #3498 — Fix broken NumPy 2.0 compatibility in `crossvalutils` and
41+
`predict_multianimal`
42+
- #3502 — NumPy 2 + numba: take the real part of eig eigenvectors in
43+
`EllipseFitter`
44+
- #3508 — Follow-up NumPy 2 fixes (PyTorch snapshot metric loading /
45+
`Assembly.affinity` typing; raise `numba` floor; declare OpenCV)
46+
- #3499 — Remove core NumPy and Matplotlib upper bounds (NumPy `<2` remains
47+
only where TensorFlow extras still require it; exclude broken Matplotlib
48+
3.7 / 3.7.1)
49+
- #3445 — Guard pandas 3 Copy-on-Write read-only `.to_numpy()` / `.values`
50+
mutations
51+
- #3394 — Matplotlib v3.9 compatibility
52+
- #3509 — Tighten strict canary CI handling (`strict_cells` for same-repo
53+
pushes/PRs; fork PRs stay non-blocking)
54+
55+
56+
### COCOLoader (#3435)
57+
58+
59+
`bodyparts` / individuals capacity now come from `model_cfg.metadata`, matching
60+
`DLCLoader`. Construction validates `train.json` and `test.json` and raises
61+
`ValueError` if an image exceeds configured capacity or bodyparts do not match.
62+
Projects that previously relied on capacity inferred only from the busiest
63+
training image should set `max_individuals` (and bodyparts) explicitly.
64+
65+
66+
### ProjectConfig empty / null fields (#3439)
67+
68+
69+
Empty top-level YAML fields are treated as unset and emit an actionable warning.
70+
`DLCBaseConfig.from_yaml(..., ignore_empty=...)` no longer accepts `ignore_empty`
71+
(breaking for that optional parameter). Lower-level `read_config(..., ignore_empty=...)`
72+
deprecates the argument.
73+
74+
75+
### Exported models (#3473)
76+
77+
78+
`export_model` now calls `PoseConfig.to_dict(normalize=True)`, so pickles store
79+
primitives (`Path` → `str`, enums → `str`, etc.). Prefer re-exporting models for
80+
consumers that load the pickled config.
81+
82+
83+
### `overwrite` in PyTorch video analysis (#3514)
84+
85+
86+
`analyze_videos` and the auto-track path now forward the caller’s `overwrite`
87+
flag instead of always behaving as `overwrite=False`. Existing prediction files
88+
are skipped only when `overwrite` is false.
89+
90+
91+
## Features and enhancements
92+
93+
94+
- #3436 — Add `detector_eval_interval` to `train_from_coco`
95+
- #3475 — Add `DefaultIfNone` config validator (`null` → field default)
96+
- #3481 — Harden wandb logger error handling (validate before `wandb.init`)
97+
98+
### Agentic interaction
99+
100+
101+
Coding agents and LLM tools can now discover DeepLabCut knowledge without
102+
scraping HTML.
103+
104+
105+
CI builds and deploys a structured index with the docs site:
106+
107+
108+
- `llms.txt` — [llmstxt.org](https://llmstxt.org)-style entry point at the docs
109+
root ([published here](https://deeplabcut.github.io/DeepLabCut/llms.txt)
110+
after deploy)
111+
- `knowledge/manifest.json` — which API versions are indexed and which is current
112+
- `knowledge/main/docs.jsonl` — one JSON object per user-docs page and heading
113+
- `knowledge/<version>/api.jsonl` — one JSON object per documented API symbol
114+
115+
116+
Also added: [`AGENTS.md`](https://github.com/DeepLabCut/DeepLabCut/blob/main/AGENTS.md),
117+
shared guidance for humans and coding agents.
118+
119+
- #3453 — Knowledge indexing generator + CI deploy (`tools/knowledge_indexing`)
120+
- #3494 — Follow-up hardening for the LLM knowledge index (dependency bounds,
121+
stable vs `main` API links in `llms.txt`, safer skip/empty-dir publish
122+
behavior, anchor/regression fixes)
123+
- #3483 — Add `AGENTS.md` for AI-assisted development
124+
125+
## Bug fixes
126+
127+
128+
- #3419 — Skip TensorFlow-backed tests cleanly when the `tf` extra is absent
129+
- #3435 — Fix `COCOLoader`: treat `model_cfg.metadata` / `max_individuals` as
130+
authoritative instead of inferring solely from `train.json`
131+
- #3439 — Update `None`-type validation for legacy `ProjectConfig` templates;
132+
remove `ignore_empty`
133+
- #3441 — GUI config editor crash + shared deferred reload on `DefaultTab`
134+
- #3447 — Evaluation visualization fixes, clean-up, and coverage improvements
135+
- #3449 — Fix frame extraction failure with pathlib video selections
136+
- #3452 — Fix incorrect SuperAnimal HumanBody rename mapping in ModelZoo /
137+
Hugging Face download
138+
- #3467 — Fix faulty `str` / `Path` conversions
139+
- #3468 — Fix latent bugs and misleading errors in GUI `create_videos`
140+
- #3469 — Fix `WandbLoggerConfig` so extra wandb kwargs validate (scoop into
141+
`wandb_kwargs`)
142+
- #3470 — Fix Faster R-CNN detector inference crashing on
143+
`box_score_thresh: null`
144+
- #3473 — Fix `export_model` dumping unnormalized objects in pickle
145+
- #3480 — Fix GUI tests: use `config_path` after rename
146+
- #3484 — Fix `tools` imports under a plain `pytest` invocation
147+
- #3486 — Docs: fix dead Model Zoo link in `examples/README.md`
148+
- #3514 — Fix hard-coded `overwrite=False` in PyTorch `analyze_videos` /
149+
auto-track path
150+
151+
152+
Please let us know if you face any issues with this release, especially related
153+
to the latest forward compatibility efforts, we appreciate any issues or reports!

‎deeplabcut/version.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@
99
# Licensed under GNU Lesser General Public License v3.0
1010
#
1111

12-
__version__ = "3.0.1"
12+
__version__ = "3.0.2"
1313
VERSION = __version__

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ requires = [ "setuptools>=61" ]
44

55
[project]
66
name = "deeplabcut"
7-
version = "3.0.1"
7+
version = "3.0.2"
88
description = "Markerless pose-estimation of user-defined features with deep learning"
99
readme = { file = "README.md", content-type = "text/markdown" }
1010
keywords = [

‎uv.lock‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)