Qwen3-VL-2B Aftermarket Auto Parts Detector
LoRA-адаптер для Qwen3-VL-2B-Instruct, обученный определять производителя автозапчасти по фото и тексту объявления.
Задача
Модель анализирует фотографию детали и текст объявления (заголовок + описание), находит бренд производителя и сравнивает его с маркой автомобиля.
Три класса:
- ORIGINAL — бренд производителя совпадает с маркой авто (оригинальная деталь)
- AFTERMARKET — бренд производителя отличается от марки авто (неоригинал)
- UNKNOWN_BRAND — бренд производителя не удалось определить
Как это работает
Модель обучена логике сравнения, а не запоминанию брендов:
- Находит бренд производителя на фото (логотип, упаковка) или в тексте
- Различает контексты: марка авто (совместимость) vs название магазина vs бренд детали
- Сравнивает: совпадает с маркой авто → ORIGINAL, не совпадает → AFTERMARKET
Использование
from unsloth import FastVisionModel
from peft import PeftModel
from PIL import Image
model, tokenizer = FastVisionModel.from_pretrained(
"unsloth/Qwen3-VL-2B-Instruct-bnb-4bit",
load_in_4bit=True,
)
model = PeftModel.from_pretrained(model, "Stepan222/qwen3vl-2b-aftermarket-detector")
FastVisionModel.for_inference(model)
img = Image.open("part_photo.jpg").convert("RGB")
messages = [
{"role": "system", "content": (
"По фото и тексту объявления определи производителя детали. "
"Найди бренд производителя, сравни с маркой автомобиля. "
"Не путай: марка авто = совместимость, название магазина = не бренд. "
"Ответь кратко: бренд, сравнение, вывод."
)},
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": "Радиатор охлаждения BMW G30. Производитель Nissens."},
]},
]
input_text = tokenizer.apply_chat_template(messages, add_generation_prompt=True, enable_thinking=False)
inputs = tokenizer(img, input_text, add_special_tokens=False, return_tensors="pt").to("cuda")
output = model.generate(**inputs, max_new_tokens=128, temperature=0.1, min_p=0.1)
print(tokenizer.decode(output[0][inputs.input_ids.shape[1]:], skip_special_tokens=True))
# → "Производитель детали — Nissens, марка авто — BMW. Nissens и BMW не совпадают → AFTERMARKET"
Обучение
| Параметр | Значение |
|---|---|
| Base model | Qwen3-VL-2B-Instruct |
| Method | QLoRA (4-bit) via Unsloth |
| LoRA rank | 16 |
| LoRA alpha | 16 |
| Train samples | 316 |
| Val samples | 56 |
| Epochs | 5 |
| Batch size | 1 (grad accum 16) |
| Learning rate | 1e-4 |
| Max seq length | 1024 |
| Image size | 512x512 |
Данные
- Объявления автозапчастей с Avito (фото + текст)
- Разметка: ORIGINAL / AFTERMARKET / UNKNOWN_BRAND
- Chain-of-thought рассуждения (2-3 предложения)
- Валидация на held-out брендах (бренды, которых нет в train)
Ограничения
- Не знает о корпоративных группах (VAG ≠ Audi → ошибочно AFTERMARKET)
- Обучена на ~300 примерах — может ошибаться на редких кейсах
- Оптимизирована для российского авторынка (русский текст)
- Downloads last month
- 2
Model tree for Stepan222/qwen3vl-2b-aftermarket-detector
Base model
Qwen/Qwen3-VL-2B-Instruct