rwightman's picture
Add native timm DeepSeek vision weights, model card, and license attribution
2cf4313 verified
|
Raw History Blame Contribute Delete
4.95 kB
---
tags:
- image-feature-extraction
- timm
- transformers
pipeline_tag: image-feature-extraction
library_name: timm
base_model: deepseek-ai/DeepSeek-V4-Flash-Vision-Exp
license: mit
---
# Model card for deepseek_vit_412m_enc.deepseek_v4_flash_vision_exp
> **NOTE:** This checkpoint is a native timm remap of the original vision weights, with no additional training. It contains no language-model weights or trained image-classification head.
A DeepSeek ViT image feature model extracted from [DeepSeek-V4-Flash-Vision-Exp](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp). This is the native vision encoder, including the 3×3 spatial aligner and projection to the source LLM width.
## Model Notes
* The backbone uses 14×14 patches, SwiGLU MLPs, RMSNorm and axial 2D RoPE, with no learned absolute position embeddings. The original linear patch projection is reshaped into a Conv2d without changing its computation.
* The native aligner groups 3×3 patch tokens in channel-major order and uses a two-layer GELU MLP to project to the source LLM width. Incomplete groups are zero-padded on the bottom/right. It is retained in `_enc` and `_align` variants and omitted from the plain classifier.
* RGB inputs use `mean=(0.5, 0.5, 0.5)` and `std=(0.5, 0.5, 0.5)`, matching the original. The default timm evaluation transform uses `crop_mode="border"`, `crop_pct=1.0` and bicubic resizing to preserve aspect ratio on a fixed, gray-padded canvas. The original processor selects variable canvas dimensions and uses gray 127 padding; timm uses gray 128.
* Rectangular inputs are supported. Dimensions must be divisible by 14 by default. Pass `dynamic_img_pad=True` at model creation to zero-pad normalized inputs on the bottom/right to a patch-size multiple. This does not reproduce the original adaptive resize policy.
* `forward_features()` returns final-RMSNorm NHWC backbone features. `forward()` returns projected NLC tokens for the `_enc` variant, or pooled image embeddings for the classifier variant until a classification head is added.
* Intermediate backbone maps are available through `forward_intermediates()` and `features_only=True`; these do not include the aligner. Use `norm=True` to apply the encoder's final RMSNorm to intermediate maps.
## Model Details
- **Model Type:** Image Feature Encoder
- **Model Stats:**
- Params (M): 466.4
- GMACs: 368.5
- Activations (M): 611.8
- Image size: 392 x 392
- **Source revision:** [6821d6ad3681a4b137b066b76094fa82ebd0a380](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/tree/6821d6ad3681a4b137b066b76094fa82ebd0a380)
- **License source:** https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/blob/6821d6ad3681a4b137b066b76094fa82ebd0a380/LICENSE
- **Original code:** https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/blob/6821d6ad3681a4b137b066b76094fa82ebd0a380/inference/vision.py
- **Original preprocessing:** https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/blob/6821d6ad3681a4b137b066b76094fa82ebd0a380/inference/image_processor.py
- **Original:** https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp
- **License:** [MIT](https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp/blob/6821d6ad3681a4b137b066b76094fa82ebd0a380/LICENSE)
- **Backbone width:** 1024
- **Projection width:** 4096
- **Papers:**
- DeepSeek-V4-Flash-Vision-Exp: https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp
- PyTorch Image Models: https://github.com/huggingface/pytorch-image-models
## Model Usage
### Image Features
```python
import torch
import timm
from PIL import Image
model = timm.create_model('hf-hub:timm/deepseek_vit_412m_enc.deepseek_v4_flash_vision_exp', pretrained=True).eval()
data_config = timm.data.resolve_model_data_config(model)
transform = timm.data.create_transform(**data_config, is_training=False)
image = Image.open('image.jpg').convert('RGB')
x = transform(image).unsqueeze(0)
with torch.inference_mode():
output = model(x) # (1, 100, 4096): projected spatial tokens
features = model.forward_features(x) # (1, 28, 28, 1024): final-RMSNorm backbone features (NHWC)
```
### Intermediate Feature Maps
```python
with torch.inference_mode():
maps = model.forward_intermediates(
x, indices=3, norm=True, output_fmt='NCHW', intermediates_only=True,
)
for feature_map in maps:
print(feature_map.shape) # (1, 1024, 28, 28)
```
## Citation
```bibtex
@misc{deepseekai2026deepseekv4flashvisionexp,
title={DeepSeek-V4-Flash-Vision-Exp},
author={DeepSeek-AI},
year={2026},
url={https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Vision-Exp},
}
```
```bibtex
@misc{rw2019timm,
author = {Ross Wightman},
title = {PyTorch Image Models},
year = {2019},
publisher = {GitHub},
journal = {GitHub repository},
doi = {10.5281/zenodo.4414861},
howpublished = {\url{https://github.com/huggingface/pytorch-image-models}}
}
```