MoonViT-V2 / README.md
AI4Industry's picture
Update README.md
c5acb88 verified
|
Raw
History Blame Contribute Delete
4.7 kB
---
license: other
license_name: kimi-k3
license_link: LICENSE
pipeline_tag: image-feature-extraction
library_name: transformers
tags:
- vision
base_model:
- moonshotai/Kimi-K3
---
# MoonViT-V2
**MoonViT-V2** is the native-resolution vision backbone of [Kimi K3](https://huggingface.co/moonshotai/Kimi-K3).
| Attribute | Specification |
| --- | --- |
| **Parameters** | ~0.4B |
| **Architecture** | 27-layer ViT · 1024 hidden · 12 heads · 1536 QKV dim |
| **Patch Size** | 14 × 14 |
| **Token Compression** | 2×2 pixel-shuffle + temporal pooling |
| **Max Resolution** | ~3584 × 3584 |
| **Initialization** | From scratch (not SigLIP) |
| **Source Model** | [moonshotai/Kimi-K3](https://huggingface.co/moonshotai/Kimi-K3) |
| **Technical Report** | [Kimi K3 (arXiv:2607.24653)](https://arxiv.org/abs/2607.24653) |
## Overview
MoonViT-V2 encodes images and videos into visual tokens for Kimi K3’s shared multimodal embedding space (via a lightweight MLP projector in the full checkpoint).
Unlike [MoonViT-SO-400M](https://huggingface.co/moonshotai/MoonViT-SO-400M) (SigLIP-initialized), **MoonViT-V2 is randomly initialized and jointly trained** with the language model under next-token prediction.
- **Unified image/video path** — shared parameters with factorized spatial (intra-frame) and temporal (inter-frame) attention.
- **Token compression** — 2×2 pixel-shuffle (~4× fewer spatial tokens) plus temporal pooling, for high-res images and long videos within Kimi K3’s up-to-1M-token context.
- **Training stability** — RMSNorm and bias-free linear/attention projections; from-scratch training avoided gradient spikes seen with contrastive vision initializations at this scale.
## Usage
```python
import torch
from transformers import AutoModel, AutoImageProcessor
model_id = "AI4Industry/MoonViT-V2"
model = AutoModel.from_pretrained(
model_id,
dtype=torch.bfloat16,
trust_remote_code=True,
)
processor = AutoImageProcessor.from_pretrained(model_id, trust_remote_code=True)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
```
### Image input
```python
from PIL import Image
image = Image.open("your_image.png").convert("RGB")
inputs = processor(image, return_tensors="pt") # T=1
pixel_values = inputs["pixel_values"].to(device=device, dtype=model.dtype)
grid_thws = inputs["grid_thws"].to(device=device)
with torch.no_grad():
image_features = model(pixel_values, grid_thws)
print(image_features[0].dtype, image_features[0].shape)
# e.g. torch.bfloat16, torch.Size([N, 4, 1024])
```
### Video input
Pass an ordered list of frames. All frames share the first frame’s resize/pad so spatial grids align. `T` must be ≤ `max_num_frames` (default **4**, matching temporal position embedding).
```python
from PIL import Image
frames = [
Image.open("frame_0.png").convert("RGB"),
Image.open("frame_1.png").convert("RGB"),
Image.open("frame_2.png").convert("RGB"),
Image.open("frame_3.png").convert("RGB"),
]
inputs = processor.preprocess_video(frames, return_tensors="pt") # T=len(frames)
pixel_values = inputs["pixel_values"].to(device=device, dtype=model.dtype)
grid_thws = inputs["grid_thws"].to(device=device) # [[T, H_patches, W_patches]]
with torch.no_grad():
video_features = model(pixel_values, grid_thws)
print(grid_thws.tolist(), video_features[0].shape)
# e.g. [[4, H, W]], torch.Size([N, 4, 1024]) # N after temporal pool + 2×2 merge
```
### Notes
- `pixel_values`: packed patches `(num_patches, 3, 14, 14)`
- `grid_thws`: `(batch, 3)` = `(T, H_patches, W_patches)`; images use `T=1`
- Normalization: mean/std `(0.5, 0.5, 0.5)`
- Optional: `attn_implementation="flash_attention_2"` if [FlashAttention-2](https://github.com/Dao-AILab/flash-attention) is installed (default is SDPA)
## Weight Provenance
Weights (~401M params, `bfloat16`) are taken from `model-00096-of-000096.safetensors` in [moonshotai/Kimi-K3](https://huggingface.co/moonshotai/Kimi-K3).
| Original Kimi K3 Prefix | This Repo |
| --- | --- |
| `vision_tower.*` | `*` (prefix stripped) |
| `mm_projector.*` | omitted |
| `language_model.*` | omitted |
## Training Data & Infrastructure
Per the [technical report](https://arxiv.org/abs/2607.24653), pretraining covers captions, interleaved documents, OCR, video, visual code, grounding (absolute + normalized coords), SVG, 3D assets, web pages, games, and CAD. Training uses context-parallel KV gather, image sharding across devices, and hiding ViT compute in pipeline bubbles. Typical use cases: OCR, visual UI iteration, and video understanding.
## License
Inherits the [Kimi K3 License](https://huggingface.co/moonshotai/Kimi-K3/blob/main/LICENSE)