ufukuyan's picture
Initial release
3520a83
|
Raw
History Blame Contribute Delete
15.1 kB
---
license: cc-by-4.0
pipeline_tag: image-text-to-text
language:
- tr
- en
base_model:
- OpenGVLab/InternVL3_5-1B-Instruct
model_type: vision-language-model
tags:
- computer-vision
- multimodal
- e-commerce
- catalog-moderation
- vision-language-model
- product-understanding
library_name: transformers
---
# Trendyol-Vision-Flash
_Trendyol-Vision-Flash is a fine-tuned **vision-language model (VLM)** built on [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct) for Trendyol catalog quality and moderation workflows. It is the lightweight Flash-tier VLM in the Trendyol-Vision family — built for production serving under high traffic, with low-latency inference on a single GPU for brand detection, product similarity, attribute extraction, title generation, content moderation, product captioning, and other **e-commerce catalog operations**._
**Trendyol-Vision-Flash vs Master:** Flash is the production-tier VLM for day-to-day, high-traffic catalog workloads on a single GPU. [Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master) is the larger expert VLM for critical or harder cases (e.g. category detection) and retains stronger general capabilities.
## Model Details
- **Architecture**: InternVL3.5-1B (InternViT-300M + Qwen3-0.6B LLM backbone)
- **Base model**: [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct)
- **Training**: Full SFT on Trendyol catalog multimodal data
- **Languages**: Turkish (primary), English (secondary)
- **Modalities**: Image + text (up to 16 images per prompt)
- **Serving**: Single GPU
## Intended Use
- Detect product brands from images with category context.
- Determine whether two product listings represent the same SKU.
- Extract structured attributes, titles, and captions from product images.
- Moderate unsafe or policy-violating product content.
- Run low-latency catalog enrichment on a single GPU under high-traffic production load.
- Support research and evaluation use cases in e-commerce catalog operations.
**Not intended for** Master-tier category detection, general open-domain chat, medical/legal advice, surveillance, or any use described under Ethical Considerations. Optimized for production catalog workflows rather than general-purpose assistance. For category detection at scale, use [Trendyol/Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master).
## Supported Use Cases
Specialized for **e-commerce catalog operations** (moderation and enrichment). The tasks below are the primary, production-validated workloads; related catalog workflows can be prompted similarly, with best results on these patterns.
- **Brand detection** — Infer the brand from product images with optional category context.
- **Product similarity** — Decide whether two listings (images and titles) refer to the same product.
- **Attribute extraction** — Extract structured product attributes from image and title/description.
- **Title generation** — Produce a clean catalog title from the product image and a reference title.
- **Product caption** — Generate a grounded product description from the image and optional metadata.
- **Content safety classification** — Classify product image and title for catalog content safety (`0` = Forbidden, `1` = Fantasy, `2` = Safe). **Fantasy** means content that may be published but should be treated as adult (+18).
- **Per-pack quantity extraction** — Extract pack quantity and unit from image and long title.
See **Task Prompts** below for per-task prompt templates.
---
## Quickstart
Install dependencies:
```bash
pip install "transformers==4.56.2" accelerate sentencepiece torch torchvision pillow requests
```
Load the model, preprocess images from URLs, and run inference with the native InternVL `model.chat()` API:
```python
import torch
import requests
from PIL import Image
from io import BytesIO
from torchvision import transforms as T
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer
MODEL_ID = "Trendyol/Trendyol-Vision-Flash"
IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)
model = AutoModel.from_pretrained(
MODEL_ID,
trust_remote_code=True,
dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_flash_attn=False,
).eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(
MODEL_ID,
trust_remote_code=True,
use_fast=False,
)
def build_transform(input_size=448):
return T.Compose([
T.Lambda(lambda img: img.convert("RGB") if img.mode != "RGB" else img),
T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
T.ToTensor(),
T.Normalize(mean=IMAGENET_MEAN, std=IMAGENET_STD),
])
def load_image_from_url(url, input_size=448):
response = requests.get(url, timeout=30)
response.raise_for_status()
image = Image.open(BytesIO(response.content)).convert("RGB")
return build_transform(input_size)(image).unsqueeze(0)
urls = [
"https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/a77c7933-c626-3753-9cad-fbb7388bff45/1_org_zoom.jpg",
"https://cdn.dsmcdn.com/mnresize/620/920/ty1569/prod/QC/20240924/23/356395c3-c71c-37c5-88c4-5ef97899b3d8/1_org_zoom.jpg",
"https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/112305b3-ba5d-3a28-8fd3-b1857749afca/1_org_zoom.jpg",
]
pixel_values = torch.cat([load_image_from_url(url) for url in urls], dim=0)
pixel_values = pixel_values.to(dtype=torch.bfloat16, device="cuda")
question = """<image>
Görsellerden, Eldiven kategorisinde yer alan ürünün markasını çıkar.
Sadece verilen görsellerde doğrulanabilen bilgilere dayan.
Emin olmadığında "Unknown" şeklinde cevap ver.
Sadece marka adını döndür."""
generation_config = {"max_new_tokens": 32, "do_sample": False}
response = model.chat(tokenizer, pixel_values, question, generation_config)
print(response) # Adidas
```
**Image ordering:** concatenate `pixel_values` in the same order as `<image>` placeholders in the prompt. For a single `<image>` token with multiple product photos, pass all images in one batch (default behavior).
> **GPU note:** Trendyol-Vision-Flash is designed for **single-GPU** inference. No tensor parallelism required.
---
## Serving (vLLM)
Trendyol-Vision-Flash can be served with vLLM as an OpenAI-compatible API on a **single GPU**.
```bash
vllm serve Trendyol/Trendyol-Vision-Flash \
--trust-remote-code \
--max-model-len 16384 \
--structured-outputs-config.backend xgrammar \
--served-model-name Trendyol-Vision-Flash \
--interleave-mm-strings \
```
When calling the vLLM OpenAI API, use `image_url` content blocks:
```bash
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer EMPTY" \
-d '{
"model": "Trendyol-Vision-Flash",
"temperature": 0.0,
"max_tokens": 32,
"messages": [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/a77c7933-c626-3753-9cad-fbb7388bff45/1_org_zoom.jpg"}},
{"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1569/prod/QC/20240924/23/356395c3-c71c-37c5-88c4-5ef97899b3d8/1_org_zoom.jpg"}},
{"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/112305b3-ba5d-3a28-8fd3-b1857749afca/1_org_zoom.jpg"}},
{"type": "text", "text": "Görsellerden, Eldiven kategorisinde yer alan ürünün markasını çıkar.\nSadece verilen görsellerde doğrulanabilen bilgilere dayan.\nEmin olmadığında \"Unknown\" şeklinde cevap ver.\nSadece marka adını döndür."}
]
}
]
}'
```
---
## Task Prompts
Pass any prompt below to `model.chat()` using the same image-loading flow from Quickstart. Replace `{placeholders}` with your data. Use one `<image>` per image group; for tasks with multiple image slots, pass `num_patches_list` (e.g. `[1, 1]` for before/after).
### 1. Brand Detection
**Images:** product photos (1–16)
**Output:** brand name or `Unknown`
```
<image>
Görsellerden, {category} kategorisinde yer alan ürünün markasını çıkar.
Sadece verilen görsellerde doğrulanabilen bilgilere dayan.
Emin olmadığında "Unknown" şeklinde cevap ver.
Sadece marka adını döndür.
```
### 2. Product Similarity
**Images:** before listing images, then after listing images
**Output:** `1` (same SKU) or `0` (different)
```
E-ticaret kataloğundaki ürün benzerliği konusunda uzmansınız.
İki ürünün önceki ve sonraki başlık/görsellerini karşılaştırarak aynı ürün olup olmadığını belirle.
Ambalaj, arka plan veya model farkları tek başına fark sayılmaz; renk, boyut, miktar veya varyant farkları fark sayılır.
Sadece "1" veya "0" döndür.
Önceki Ürün Başlığı:
{before_title}
Önceki Ürün Resimleri:
<image>
Sonraki Ürün Başlığı:
{after_title}
Sonraki Ürün Resimleri:
<image>
```
### 3. Attribute Extraction
**Images:** 1 product image
**Output:** JSON object
```
<image>
Bu görseldeki, başlığı '{title}' ve açıklaması '{description}' olan ürünün {attribute_list} bilgilerini json formatında çıkarır mısın?
```
Example:
```
<image>
Bu görseldeki, başlığı 'Helen Bar Sandalyesi-mavi-9519q0119' ve açıklaması 'Maksimum kargolanma süresi: Sipariş tarihinden sonraki 7. gün Ortalama montaj süresi: 1 dakika Genişlik: 62cm Derinlik: 52cm Yükseklik: 96cm Oturak Yüksekliği: 44cm Ürün Ağırlığı: 10kg Kullanılan malzeme: Metal Kullanılan sünger: Yüksek yoğunluklu gri sünger Kullanılan kol: Metal Kollu Kullanılan ayak: Metal Ayaklı + Kromajlı Garanti süresi - Menşei: 24 Ay - Yerli Sipariş bazlı üretim-tedarik yapıldığından sipariş iptali yapılamamaktadır Anlaşmalı olunan ambar ve kargolarla bina kapısında teslimat yapılmaktadır' olan ürünün Garanti Süresi, Materyal, Model, Sandalye Kumaşı, Sandalye Sayısı, Tema / Stil bilgilerini json formatında çıkarır mısın?
```
Image URL: `https://cdn.dsmcdn.com/ty1325/product/media/images/prod/QC/20240522/17/f63a7316-5998-3c7d-b45f-93ff8e9c34a2/1_org_zoom.jpg`
Expected output:
```json
{
"Garanti Süresi": "2 Yıl",
"Materyal": "Metal",
"Model": "Bar Sandalyesi",
"Sandalye Kumaşı": "çıkarılamadı",
"Sandalye Sayısı": "1",
"Tema / Stil": "Modern"
}
```
### 4. Title Generation
**Images:** 1 product image
**Output:** plain-text title
```
<image>
Ürün fotoğrafı ile '{reference_title}' bilgisini karşılaştırıp, Trendyol katalog moderasyon kurallarına göre yanıltıcı ifadelerden kaçınarak net bir başlık üret; çıktıyı düz metin ver.
```
### 5. Product Caption
**Images:** 1 product image
**Output:** English product description
```
<image>
Without speculating about details you cannot see, describe this product based on the image and the information provided.
Product title: {title}
Brand: {brand}
First decide which object is the product, review OCR for brand/model/title clues, then analyze colors, shape, material, pattern, and other grounded details.
```
### 6. Content Safety Classification
**Images:** 1 product image
**Labels:** `0` (Forbidden) = not publishable, `1` (Fantasy) = publishable but adult (+18) content, `2` (Safe) = publishable without restriction.
```
<image>
Ürün Başlığı: {title}
Bu ürün görselini ve başlığını inceleyerek moderasyon sınıflandırması yap. Sonucu 0 (Forbidden), 1 (Fantasy) veya 2 (Safe) olarak ver.
```
### 7. Per-Pack Quantity Extraction
**Images:** 1 product image
**Output:** `{"amount": <number|null>, "unit": "KG"|"L"|"PIECE"|null}`
```
<image>
Extract total product quantity from the title and image. Title is the primary source; use the image only when the title is missing or ambiguous.
Return only JSON: {"amount": <number|null>, "unit": "KG"|"L"|"PIECE"|null}
Convert g→KG, ml/cc→L, counts→PIECE. Ignore model numbers, storage, wattage, and dimensions. If unclear, return {"amount": null, "unit": null}.
Product Title: {title}
```
---
## Limitations
- **Domain specificity**: Optimized for Trendyol e-commerce product images and Turkish catalog text; may not generalize to other domains.
- **Not for Master-tier category detection**: Category detection at taxonomy scale is handled by [Trendyol/Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master).
- **Multi-image tasks**: Product similarity and brand detection may use multiple images; ensure all images are included in the prompt.
- **Language bias**: Turkish prompts and outputs are primary; English performance varies by task.
- **Not a general assistant**: Fine-tuned for structured catalog tasks in production settings; open-domain chat is out of scope, and quality is strongest on the production-validated tasks above.
## Ethical Considerations
- Designed for catalog quality and moderation workflows.
- Ensure compliance with data protection regulations when processing product and user-generated content.
- Monitor for biased decisions across product categories and brands.
- Not intended for surveillance, misinformation, or harmful content generation.
- Safety and moderation labels reflect training for catalog workflows and may not match every jurisdiction or platform policy; human review is recommended for high-impact decisions.
## Citation
```bibtex
@misc{trendyol-vision-flash,
title={Trendyol-Vision-Flash: Lightweight Catalog Quality Vision-Language Model (VLM)},
author={Trendyol Data Science Team},
year={2026},
howpublished={\url{https://huggingface.co/Trendyol/Trendyol-Vision-Flash}}
}
```
```bibtex
@article{zhu2025internvl3_5,
title={InternVL3.5: Advancing Open-Source Multimodal Models},
author={Zhu, Weiyun and others},
year={2025},
url={https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct}
}
```
## Model Card Authors
- Trendyol Data Science Team
## License
This model is licensed under the [Creative Commons Attribution 4.0 International License (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
You are free to share and adapt the model for any purpose, even commercially, as long as you give appropriate credit and indicate if changes were made.
This release is a fine-tune of [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct), which is licensed under [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) (including its Qwen3 language-model component). Redistribution of this derivative continues to satisfy Apache-2.0 notice and attribution requirements for the base model; retain the Apache-2.0 license text and any NOTICE attributions shipped with InternVL3.5 when redistributing.
For the full CC BY 4.0 license text, see: https://creativecommons.org/licenses/by/4.0/legalcode
---
_Released by the Trendyol Data Science Team._