IMvision12's picture
Fix Collection badge link to the current zeromodels collection slug
dfaa194 verified
|
Raw
History Blame Contribute Delete
4.41 kB
metadata
pipeline_tag: image-text-to-text
license: apache-2.0
base_model: Qwen/Qwen3-VL-8B-Thinking
library_name: zeromodels
language:
  - en
tags:
  - keras
  - zeromodels
  - qwen3_vl
  - qwen3-vl
  - multimodal
  - vision
  - image-text-to-text
  - pytorch
  - jax
  - tf

Run Qwen3-VL with Keras 3: JAX, PyTorch, or TensorFlow

GitHub Docs HuggingFace

zeromodels/qwen3-vl-8b-thinking

Pure-Keras 3 conversion of Qwen/Qwen3-VL-8B-Thinking for zeromodels. One implementation runs unmodified on TensorFlow / Torch / JAX. This is the 8B variant, served here as image + text -> text via Qwen3VLProcessor; weights are stored in bfloat16.

For model details, license, and usage terms, see the upstream model card.

Paper: Qwen3 Technical Report (arXiv:2505.09388) · HF Papers

Paper: Qwen2.5-VL Technical Report (arXiv:2502.13923) · HF Papers

Paper: Qwen2-VL: Enhancing Vision-Language Model's Perception of the World at Any Resolution (arXiv:2409.12191) · HF Papers

Paper: Qwen-VL: A Frontier Large Vision-Language Model with Versatile Abilities (arXiv:2308.12966) · HF Papers

✨ Quick start

Text-only

import os
os.environ["KERAS_BACKEND"] = "torch"  # or "jax" / "tensorflow"

from zeromodels.models.qwen3_vl import Qwen3VLTextGenerate, Qwen3VLProcessor

model = Qwen3VLTextGenerate.from_weights("zeromodels/qwen3-vl-8b-thinking")
processor = Qwen3VLProcessor.from_weights("zeromodels/qwen3-vl-8b-thinking")

inputs = processor(conversation=[
    {"role": "user", "content": [{"type": "text", "text": "Hello, who are you?"}]}
])
outputs = model.generate(**inputs, max_new_tokens=64)
print(processor.decode(outputs[0]))

Image + text

import os
os.environ["KERAS_BACKEND"] = "torch"  # or "jax" / "tensorflow"

from PIL import Image
from zeromodels.models.qwen3_vl import Qwen3VLConditionalGenerate, Qwen3VLProcessor

model = Qwen3VLConditionalGenerate.from_weights("zeromodels/qwen3-vl-8b-thinking")
processor = Qwen3VLProcessor.from_weights("zeromodels/qwen3-vl-8b-thinking")

inputs = processor(conversation=[
    {"role": "user", "content": [
        {"type": "image", "image": Image.open("photo.jpg")},
        {"type": "text", "text": "Describe this image in one sentence."},
    ]}
])
outputs = model.generate(**inputs, max_new_tokens=64)
print(processor.decode(outputs[0]))

Load any Qwen3-VL variant the same way with from_weights("zeromodels/<variant>"):

Variant Hub
qwen3-vl-2b-instruct zeromodels/qwen3-vl-2b-instruct
qwen3-vl-2b-thinking zeromodels/qwen3-vl-2b-thinking
qwen3-vl-4b-instruct zeromodels/qwen3-vl-4b-instruct
qwen3-vl-4b-thinking zeromodels/qwen3-vl-4b-thinking
qwen3-vl-8b-instruct zeromodels/qwen3-vl-8b-instruct
qwen3-vl-8b-thinking zeromodels/qwen3-vl-8b-thinking
qwen3-vl-32b-instruct zeromodels/qwen3-vl-32b-instruct
qwen3-vl-32b-thinking zeromodels/qwen3-vl-32b-thinking

Special Thanks

A huge thank you to the Qwen team at Alibaba for creating and releasing these models.

License: Apache 2.0.