Image-Text-to-Text
Transformers
Safetensors
English
Korean
qwen3_5_moe
vision-language-model
medical-imaging
brain-ct
stroke
region-classification
lora
conversational
Instructions to use JLKGroup/JOOMED with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use JLKGroup/JOOMED with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="JLKGroup/JOOMED") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForImageTextToText processor = AutoProcessor.from_pretrained("JLKGroup/JOOMED") model = AutoModelForImageTextToText.from_pretrained("JLKGroup/JOOMED") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use JLKGroup/JOOMED with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "JLKGroup/JOOMED" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "JLKGroup/JOOMED", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/JLKGroup/JOOMED
- SGLang
How to use JLKGroup/JOOMED with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "JLKGroup/JOOMED" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "JLKGroup/JOOMED", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "JLKGroup/JOOMED" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "JLKGroup/JOOMED", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use JLKGroup/JOOMED with Docker Model Runner:
docker model run hf.co/JLKGroup/JOOMED
# Load model directly
from transformers import AutoProcessor, AutoModelForImageTextToText
processor = AutoProcessor.from_pretrained("JLKGroup/JOOMED")
model = AutoModelForImageTextToText.from_pretrained("JLKGroup/JOOMED")
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"},
{"type": "text", "text": "What animal is on the candy?"}
]
},
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=40)
print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:]))Quick Links
JOOMED · Brain-CT Lesion Region Classifier
Qwen3.6-35B-A3B(MoE Vision-Language Model)을 LoRA로 파인튜닝한 뇌졸중 특화 영역 분류 모델
CT summary 영상에서 병변이 위치한 해부학적 영역(anatomical) 과 혈관 지배 영역(vascular) 을 좌우(L/R) 구분과 함께 분류하여 구조화 JSON 으로 출력합니다.
{"anatomical_regions": ["basal_ganglia_thalamus_right"],
"vascular_territories": ["MCA_right", "PCA_right"]}
모델 개요
| Base model | Qwen/Qwen3.6-35B-A3B — MoE VLM, 35B total / ~3B active (qwen3_5_moe) |
| Adaptation | LoRA (r=8, α=16, attention q/k/v/o_proj) → 베이스에 병합된 풀모델 |
| Input → Output | PNG (CT summary) → 영역분류 JSON |
| Label space | anatomical 23그룹 · vascular 14그룹 (coarse, 좌우 유지) |
| Project | RQT-25-090047 — 다중 모달 AI 뇌졸중 임상지원 LLM (㈜제이엘케이) |
성능
영역 추출 정확도 (set 기반 per-sample F1, macro 평균):
| 평가셋 | n | Anatomical F1 | Vascular F1 | 평균 |
|---|---|---|---|---|
| 전체 test | 12,140 | 0.741 | 0.802 | 0.771 |
무파인튜닝 Base(0.29 / 0.30) 대비 2.5배 이상 향상. 개선의 핵심은 recall 상승 (anatomical +0.17, vascular +0.13)으로, 누락 병변이 크게 감소했습니다.
보조 텍스트 지표 (영역 라벨을 텍스트로 직렬화해 측정 · 판독문 품질 아님)
| BLEU-1 | METEOR | BERTScore F1 | G-Eval |
|---|---|---|---|
| 0.798 | 0.794 | 0.952 | 3.68 |
출력이 짧은 라벨 문장이라 자유텍스트 판독문 지표와 측정 대상이 다릅니다. 비교 시 주의.
사용법
from transformers import AutoModelForImageTextToText, AutoProcessor
from PIL import Image
model_id = "JLKGroup/JOOMED"
model = AutoModelForImageTextToText.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
img = Image.open("ct_summary.png").convert("RGB")
prompt = "주어진 CT summary 이미지에서 병변이 속하는 anatomical region과 vascular territory를 JSON으로 답하라."
messages = [{"role": "user", "content": [{"type": "image", "image": img}, {"type": "text", "text": prompt}]}]
text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=False # 학습 템플릿과 일치
)
inputs = processor(text=[text], images=[img], return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(processor.tokenizer.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Tip — 추론 시 반드시
enable_thinking=False로 두어야 학습 시 템플릿과 일치합니다.
라벨 체계
| 축 | 그룹 |
|---|---|
| Anatomical (×L/R) | frontal · parietal · temporal · occipital · insula · limbic · basal_ganglia_thalamus · cerebellum · brainstem · ventricle · white_matter_other |
| Vascular (×L/R) | ACA · MCA · PCA · basilar · cerebellar · anterior_choroidal · lateral_ventricle |
한계 및 주의
- 의료 연구용 모델입니다. 임상 의사결정의 단독 근거로 사용하지 마십시오.
라이선스
베이스 모델 Qwen3.6-35B-A3B의 Apache-2.0를 따릅니다.
- Downloads last month
- -
Model tree for JLKGroup/JOOMED
Base model
Qwen/Qwen3.6-35B-A3B
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="JLKGroup/JOOMED") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)