--- pipeline_tag: image-classification license: other base_model: timm/mobilevitv2_050.cvnets_in1k library_name: zeromodels tags: - keras - zeromodels - image-classification - mobilevitv2 - backbone - arxiv:2206.02680 - pytorch - jax - tf --- ## ***See [our collection](https://huggingface.co/collections/zeromodels/mobilevit-v2-6a8eae53d6249f084e6875fe) for all versions of MobileViT-V2.*** # Run MobileViT-V2 with Keras 3: JAX, PyTorch, or TensorFlow [![GitHub](https://img.shields.io/badge/GitHub-ZeroModels-black?logo=github)](https://github.com/IMvision12/ZeroModels) [![Docs](https://img.shields.io/badge/Docs-MobileViT--V2-blue)](https://imvision12.github.io/ZeroModels/mobilevitv2/) [![Collection](https://img.shields.io/badge/HF-MobileViT--V2%20collection-yellow)](https://huggingface.co/collections/zeromodels/mobilevit-v2-6a8eae53d6249f084e6875fe) # zeromodels/mobilevitv2_050_cvnets_in1k Paper: [Separable Self-attention for Mobile Vision Transformers (arXiv:2206.02680)](https://arxiv.org/abs/2206.02680) · [HF Papers](https://huggingface.co/papers/2206.02680) MobileViTV2 replaces MHSA with separable self-attention (O(k)) and scales width via a single multiplier. Classification at 256/384; DeepLabV3 segmentation is a separate script/collection. For more details on the model, please go to the upstream [model card](https://huggingface.co/timm/mobilevitv2_050.cvnets_in1k). Pure-**Keras 3** conversion of [`timm/mobilevitv2_050.cvnets_in1k`](https://huggingface.co/timm/mobilevitv2_050.cvnets_in1k) for [zeromodels](https://github.com/IMvision12/ZeroModels). One implementation runs unmodified on **TensorFlow / Torch / JAX**. This is an **image-classification / backbone** checkpoint (`MobileViTV2ImageClassify` / `MobileViTV2Model`). ## ✨ Quick start ```python import os os.environ["KERAS_BACKEND"] = "torch" # or "jax" / "tensorflow" from PIL import Image from zeromodels.models.mobilevitv2 import MobileViTV2ImageClassify, MobileViTV2Model, MobileViTV2ImageProcessor model = MobileViTV2ImageClassify.from_weights("zeromodels/mobilevitv2_050_cvnets_in1k") processor = MobileViTV2ImageProcessor.from_weights("zeromodels/mobilevitv2_050_cvnets_in1k") image = Image.open("your_image.jpg").convert("RGB") pixels = processor(image) # resize + normalize (normalization lives in the processor) logits = model(pixels, training=False) print(logits.shape) # (1, num_classes) # Feature extraction: the backbone without the classifier head backbone = MobileViTV2Model.from_weights("zeromodels/mobilevitv2_050_cvnets_in1k", as_backbone=True) features = backbone(pixels, training=False) ``` Load any MobileViT-V2 variant the same way with `from_weights("zeromodels/")`: | Variant | Hub | |---|---| | `mobilevitv2_050_cvnets_in1k` | [`zeromodels/mobilevitv2_050_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_050_cvnets_in1k) | | `mobilevitv2_075_cvnets_in1k` | [`zeromodels/mobilevitv2_075_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_075_cvnets_in1k) | | `mobilevitv2_100_cvnets_in1k` | [`zeromodels/mobilevitv2_100_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_100_cvnets_in1k) | | `mobilevitv2_125_cvnets_in1k` | [`zeromodels/mobilevitv2_125_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_125_cvnets_in1k) | | `mobilevitv2_150_cvnets_in1k` | [`zeromodels/mobilevitv2_150_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_150_cvnets_in1k) | | `mobilevitv2_150_cvnets_in22k_ft_in1k` | [`zeromodels/mobilevitv2_150_cvnets_in22k_ft_in1k`](https://huggingface.co/zeromodels/mobilevitv2_150_cvnets_in22k_ft_in1k) | | `mobilevitv2_150_cvnets_in22k_ft_in1k_384` | [`zeromodels/mobilevitv2_150_cvnets_in22k_ft_in1k_384`](https://huggingface.co/zeromodels/mobilevitv2_150_cvnets_in22k_ft_in1k_384) | | `mobilevitv2_175_cvnets_in1k` | [`zeromodels/mobilevitv2_175_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_175_cvnets_in1k) | | `mobilevitv2_175_cvnets_in22k_ft_in1k` | [`zeromodels/mobilevitv2_175_cvnets_in22k_ft_in1k`](https://huggingface.co/zeromodels/mobilevitv2_175_cvnets_in22k_ft_in1k) | | `mobilevitv2_175_cvnets_in22k_ft_in1k_384` | [`zeromodels/mobilevitv2_175_cvnets_in22k_ft_in1k_384`](https://huggingface.co/zeromodels/mobilevitv2_175_cvnets_in22k_ft_in1k_384) | | `mobilevitv2_200_cvnets_in1k` | [`zeromodels/mobilevitv2_200_cvnets_in1k`](https://huggingface.co/zeromodels/mobilevitv2_200_cvnets_in1k) | | `mobilevitv2_200_cvnets_in22k_ft_in1k` | [`zeromodels/mobilevitv2_200_cvnets_in22k_ft_in1k`](https://huggingface.co/zeromodels/mobilevitv2_200_cvnets_in22k_ft_in1k) | | `mobilevitv2_200_cvnets_in22k_ft_in1k_384` | [`zeromodels/mobilevitv2_200_cvnets_in22k_ft_in1k_384`](https://huggingface.co/zeromodels/mobilevitv2_200_cvnets_in22k_ft_in1k_384) | ## Tips - Set `KERAS_BACKEND` **before** importing Keras / zeromodels. - `MobileViTV2ImageClassify` returns class logits; `MobileViTV2Model` returns features (`as_backbone=True` for multi-scale stages). - See [docs](https://imvision12.github.io/ZeroModels/mobilevitv2/) and [Loading Weights](https://imvision12.github.io/ZeroModels/loading_weights/). - Upstream / timm checkpoints: `MobileViTV2ImageClassify.from_weights("hf:timm/mobilevitv2_050.cvnets_in1k")`. ## Special Thanks A huge thank you to the MobileViT-V2 authors and the timm / Hub communities for creating and releasing these models. License: see YAML `license` (usually matches the upstream checkpoint).