Views
No views yet
Qwen/Qwen3-VL-2B-Instruct
for continuous American Sign Language (ASL) to English translation.| Metric | Value |
|---|---|
| Test loss | 2.7896 |
| Perplexity | 16.28 |
| BLEU-1 | 19.76 |
| BLEU-2 | 6.95 |
| BLEU-4 | 1.64 |
| chrF | 17.42 |
| ROUGE-L | 10.43 |
| METEOR | 9.71 |
| WER (%) | 112.51 |
| Distinct-2 | 0.103 |
1adapter/
2 adapter_config.json PEFT / LoRA configuration
3 adapter_model.safetensors LoRA weights + saved embedding & output-head modules
4 README.md PEFT auto-generated card
5training_state.pt optimizer + scheduler states (per tier),
6 InfoNCE projection-head weights,
7 InfoNCE MoCo queues, RNG snapshots,
8 phase / step / epoch bookkeepingtraining_state.pt is required only for resuming training or for reusing
the InfoNCE alignment. It is not needed for inference; loading the
adapter/ folder on top of the base model is sufficient to generate.1import torch
2from transformers import AutoProcessor, AutoModelForImageTextToText
3from peft import PeftModel
4
5REPO_ID = "mamounyosef/sign-language-bridge"
6BASE = "Qwen/Qwen3-VL-2B-Instruct"
7
8processor = AutoProcessor.from_pretrained(BASE)
9base = AutoModelForImageTextToText.from_pretrained(
10 BASE, torch_dtype=torch.bfloat16, device_map="auto",
11)
12model = PeftModel.from_pretrained(base, REPO_ID, subfolder="adapter")
13model.eval()
14
15# `video` should be a tensor / list of frames preprocessed by `processor`.
16# For best results, replicate the training-time preprocessing:
17# 1) pose-guided signer crop (MediaPipe pose bbox)
18# 2) CLAHE on L-channel in LAB (clip limit 2.0, 8x8 tile grid)
19# 3) MediaPipe landmark overlay (21 keypoints/hand + 6 upper-body joints)
20# See https://github.com/mamounyosef/sign-language-bridge for the exact code.
21
22messages = [{
23 "role": "user",
24 "content": [
25 {"type": "video", "video": video},
26 {"type": "text", "text": "Translate the signed sentence to English."},
27 ],
28}]
29inputs = processor.apply_chat_template(
30 messages, add_generation_prompt=True, return_tensors="pt", tokenize=True,
31).to(model.device)
32
33out = model.generate(
34 **inputs,
35 max_new_tokens=32,
36 num_beams=5,
37 length_penalty=0.6,
38 no_repeat_ngram_size=4,
39 repetition_penalty=1.1,
40)
41print(processor.batch_decode(out, skip_special_tokens=True)[0])Qwen/Qwen3-VL-2B-Instruct (2B parameters: 24-layer vision
tower, 28-layer Qwen3 decoder, M-RoPE, DeepStack mergers at vision layers
5 / 11 / 17).modules_to_save)| Parameter | Value |
|---|---|
| Beam size | 5 |
| Length penalty | 0.6 |
| No-repeat n-gram | 4 |
| Repetition penalty | 1.1 |
| Max new tokens | 32 |
Qwen/Qwen3-VL-2B-Instruct
is also under Apache 2.0 (upstream LICENSE).
Use of this adapter, together with the base model, remains subject to
Qwen's Apache 2.0 terms.peft and
🤗 transformers.1@misc{yosef2026signbridge,
2 author = {Ma'moun Yosef},
3 title = {sign-language-bridge: Fine-Tuning Qwen3-VL-2B for ASL to
4 English Translation},
5 year = {2026},
6 howpublished = {\url{https://github.com/mamounyosef/sign-language-bridge}}
7}1@article{qwen3vl2025,
2 author = {{Qwen Team}},
3 title = {{Qwen3-VL} Technical Report},
4 journal = {arXiv preprint arXiv:2511.21631},
5 year = {2025}
6}