The Unified Foundation Model (UFO) task force of Kanana at Kakao developed and released the Kanana-V family of multimodal large language models (MLLMs), a collection of pretrained text/image-to-text (TI2T) models.
kanana-1.5-v-3b-instruct is intended for research and application development in multimodal understanding and text generation tasks. Typical use cases include image captioning, document understanding, OCR-based reasoning, and multimodal instruction following in both English and Korean. The model is optimized for both general-purpose and Korea-specific benchmarks, making it suitable for bilingual environments.
All benchmarks were re-measured under identical software conditions to ensure fair comparison.
-
VLMEvalKit was used for MMMU, MathVista, ScienceQA, MIA-Bench, MM-IFEval and MM-OmniAlign.
-
lmms-eval was employed for DocVQA, ChartQA, OCRBench, InfoVQA, TextVQA, RealWorldQA, MMStar, MMB, and SEED-image.
-
HCX-SEED-Vision-3B was evaluated without the use of any auxiliary tools (e.g., external OCR engines or Lens features), as such tools are not publicly available and therefore not included in our evaluation setup.
-
Important note for ChartQA: It was identified that the original rule-based parser used by lmms-eval marked answers ending with a period (".") as incorrect due to parsing issues. To address this, the parser logic was modified to remove any trailing period before parsing the response. All ChartQA evaluations presented here reflect results obtained after applying this parser adjustment.
The following in-house benchmarks evaluate Korean-language tasks and Korea-specific knowledge:
The following is a code snippet that briefly demonstrates how to load a model and process input data using the AutoClass from transformers.
1from PIL import Image
2import torch
3from transformers import AutoModelForVision2Seq, AutoProcessor
4
5MODEL = "kakaocorp/kanana-1.5-v-3b-instruct"
6
7# Load the model on the available device(s)
8model = AutoModelForVision2Seq.from_pretrained(
9 MODEL,
10 torch_dtype=torch.bfloat16,
11 device_map="auto",
12 trust_remote_code=True
13)
14model.eval()
15
16# Load processor
17processor = AutoProcessor.from_pretrained(MODEL, trust_remote_code=True)
18
19# Prepare input batch
20batch = []
21for _ in range(1): # dummy loop to demonstrate batch processing
22 image_files = [
23 "./examples/waybill.png"
24 ]
25
26 sample = {
27 "image": [Image.open(image_file_path).convert("RGB") for image_file_path in image_files],
28 "conv": [
29 {"role": "user", "content": " ".join(["<image>"] * len(image_files))},
30 {"role": "user", "content": "사진에서 보내는 사람과 받는 사람 정보를 json 형태로 정리해줘."},
31 ]
32 }
33
34 batch.append(sample)
35
36inputs = processor.batch_encode_collate(
37 batch, padding_side="left", add_generation_prompt=True, max_length=8192
38)
39inputs = {k: v.to(model.device) if isinstance(v, torch.Tensor) else v for k, v in inputs.items()}
40
41# Set the generation config
42gen_kwargs = {
43 "max_new_tokens": 2048,
44 "temperature": 0,
45 "top_p": 1.0,
46 "num_beams": 1,
47 "do_sample": False,
48}
49
50# Generate text
51gens = model.generate(
52 **inputs,
53 **gen_kwargs,
54)
55text_outputs = processor.tokenizer.batch_decode(gens, skip_special_tokens=True)
56print(text_outputs) # ['```json\n{\n "보내는분": {\n "성명": "카카오",\n "주소": "경기도 성남시 판교역로 166"\n },\n "받는분": {\n "성명": "카나나",\n "주소": "제주도 제주시 첨단로 242"\n }\n}\n```']