Skip to content

[TAO-2511][Feature] Support frozen DINOv3 backbones in Visual ChangeNet - #95

Merged
vpraveen-nv merged 1 commit into
mainfrom
TAO-2511-frozen-dinov3-aoi
Aug 11, 2026
Merged

[TAO-2511][Feature] Support frozen DINOv3 backbones in Visual ChangeNet#95
vpraveen-nv merged 1 commit into
mainfrom
TAO-2511-frozen-dinov3-aoi

Conversation

@nnagrajrao

Copy link
Copy Markdown
Contributor

What changes are proposed in this pull request?

Add frozen DINOv3 backbone support to the existing Visual ChangeNet classification and segmentation paths with minimal changes to the AOI architecture.

  • Supports ViT-S, S+, B, L, H+, and 7B through the existing ViT adapter and task heads.
  • Keeps the DINOv3 ViT frozen while the AOI adapter and classification or segmentation head remain trainable.
  • Gives an explicit converted TAO checkpoint precedence; when no checkpoint is configured, frozen DINOv3 loads matching timm/Hugging Face weights.
  • Routes explicit euclidean checkpoints through the existing AOI parser and state-dict loader, including actionable rejection of raw SSL checkpoints.
  • Adds the 7B channel map and 40-block adapter partition.
  • Preserves existing C-RADIO behavior and defaults.

Example:

model:
  backbone:
    type: vit_large_dinov3
    pretrained_backbone_path: /data/pretrained_models/dinov3_vit_l_backbone.safetensors
    freeze_backbone: true

Set pretrained_backbone_path: null to use the matching timm/Hugging Face pretrained weights.

Why are the changes needed?

DEFT AOI needs to reuse DINOv3 SSL features without updating the backbone. This keeps the established Visual ChangeNet task-level fine-tuning design while allowing either a converted TAO DINOv3 checkpoint or the compatible public timm/Hugging Face weights.

Related issues

JIRA: TAO-2511.

Companion changes are in tao-core and tao-skill-bank on the same TAO-2511 branch.

Does this PR introduce any user-facing change?

Yes. Visual ChangeNet users can select all six DINOv3 variants and freeze the ViT. Existing backbone types, C-RADIO behavior, and defaults are unchanged.

How was this patch tested?

  • Required TAO image, focused DINOv3 and config parity suite: 12 passed.
  • Required TAO image, broader Visual ChangeNet model suite: 66 passed, 2 skipped.
  • Exact PR-range CI hooks: license, pylint, pydocstyle, and flake8 passed.
  • Confirmed timm 1.0.26 exposes all six configured model names.
  • Independent architecture, correctness, and MR-readiness panel: 3/3 READY.
  • git diff --check and no-Markdown checks passed.

Was this patch authored or co-authored using generative AI tooling?

Generated-by: OpenAI Codex

Release note

Visual ChangeNet classification and segmentation now support frozen DINOv3 ViT-S, S+, B, L, H+, and 7B backbones using converted TAO checkpoints or compatible timm/Hugging Face pretrained weights.

Checklist

  • My commits are signed off per the DCO (git commit -s)
  • I have read the contributing guidelines
  • The code follows the project style, and lint and format checks pass locally
  • I added or updated tests covering this change
  • All applicable tests pass locally
  • I updated inline configuration documentation and docstrings
  • A version or changelog update is not required for this patch
  • Optional imports remain guarded
  • No secrets, credentials, proprietary data, or customer data are included
  • I understand the contribution is licensed under the repository license

Notes for reviewers

No Markdown files are changed. Start with cv/backbone_v2/dino_v3.py, then the two Visual ChangeNet model constructors and the focused regression test. The change deliberately reuses existing AOI adapters and heads instead of introducing a parallel task package.

@nnagrajrao
nnagrajrao requested a review from a team as a code owner August 11, 2026 05:46
@tao-pr-bot

tao-pr-bot Bot commented Aug 11, 2026

Copy link
Copy Markdown

For security reasons, CI does not run automatically on NVIDIA's runners — it must be triggered per commit.

  • Comment /build to run CI on your latest commit, and make sure blossom-ci is green before merging.
  • Re-run /build after each new push — CI is pinned to the head commit, so a stale run won't count.

Tip

Should this fix also ship in a release? Add a release/X.Y.Z label (matching the target release branch) and tao-cherry-pick-bot will backport it after merge.

Important

Before merging: every file needs a license header and every commit must be DCO signed-off — see the 📖 Contribution guide for details.

@nnagrajrao

Copy link
Copy Markdown
Contributor Author

/build

@vpraveen-nv vpraveen-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — the 7B wiring (40-block partition, 4096 channel maps) checks out against timm, the raw-SSL rejection matches the converter's remap table, and the C-RADIO/FAN paths are untouched. A few non-blocking questions inline. One sequencing note: please land the tao-core companion (NVIDIA-TAO/tao-core#31) in lockstep so schema validation doesn't reject vit_7b_dinov3 in the window between merges.

Comment thread nvidia_tao_pytorch/cv/visual_changenet/classification/models/changenet.py Outdated
Comment thread nvidia_tao_pytorch/cv/backbone_v2/dino_v3.py Outdated
@hqtran-nv

Copy link
Copy Markdown
Contributor

/build

Signed-off-by: Nikhil <nnagrajrao@nvidia.com>
@nnagrajrao
nnagrajrao force-pushed the TAO-2511-frozen-dinov3-aoi branch from 5f03cfb to 8cbbcf6 Compare August 11, 2026 13:12
@nnagrajrao

Copy link
Copy Markdown
Contributor Author

/build

1 similar comment
@hqtran-nv

Copy link
Copy Markdown
Contributor

/build

@vpraveen-nv
vpraveen-nv merged commit e9c4303 into main Aug 11, 2026
5 checks passed
@vpraveen-nv
vpraveen-nv deleted the TAO-2511-frozen-dinov3-aoi branch August 11, 2026 18:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants