Views
No views yet
unsloth/Llama-3.2-11B-Vision-Instruct-bnb-4bit temel modeli üzerine, radyoloji odaklı RadImageNet-VQA veriseti kullanılarak iki aşamalı bir finetuning (ince ayar) stratejisiyle Unsloth kütüphanesi yardımıyla optimize edilmiştir.<|eot_id|>) tamamen engellenmiştir.4.82 seviyesinden başlayan loss değeri, görsel-metin eşleşmesinin hızla kavranmasıyla birlikte 0.35 seviyesine kadar gerilemiş ve başarılı bir plato yakalamıştır.2.81 seviyesinden başlayan loss, modelin karmaşık tıbbi senaryoları ezberlemeden (overfitting olmadan) sindirmesiyle birlikte 0.15 seviyesine kadar düşerek eğitimi kararlı bir şekilde tamamlamıştır.1import torch
2from unsloth import FastVisionModel
3from transformers import TextStreamer
4from PIL import Image
5
6# 1. Modeli ve Tokenizer'ı Yükleme
7model, tokenizer = FastVisionModel.from_pretrained(
8 model_name = "ahmet1338/RadInSight",
9 load_in_4bit = True,
10)
11FastVisionModel.for_inference(model)
12
13# 2. Radyoloji Görüntüsünü Yükleme
14image_path = "YOUR_PIL_IMAGE_PATH" # Test edeceğiniz medikal görselin yolu
15image = Image.open(image_path).convert("RGB")
16
17# 3. Sohbet Geçmişi (Context) Yönetimi
18chat_history = []
19
20print("RadInSight Canlı Test Modu Başlatıldı. Çıkmak için 'exit' yazın.\n" + "="*50)
21
22while True:
23 user_question = input("User: ")
24 if user_question.lower() == 'exit':
25 break
26
27 # İlk adımda görseli ve soruyu birlikte, sonraki adımlarda sadece metni ekliyoruz (Bağlam Koruma)
28 if len(chat_history) == 0:
29 new_message = {
30 "role": "user",
31 "content": [
32 {"type": "image"},
33 {"type": "text", "text": user_question}
34 ]
35 }
36 else:
37 new_message = {
38 "role": "user",
39 "content": [
40 {"type": "text", "text": user_question}
41 ]
42 }
43
44 chat_history.append(new_message)
45
46 # 4. Tokenize ve Girdi Hazırlığı
47 input_text = tokenizer.apply_chat_template(chat_history, add_generation_prompt=True)
48 inputs = tokenizer(
49 [image],
50 input_text,
51 add_special_tokens=False,
52 return_tensors="pt",
53 ).to("cuda")
54
55 # 5. Deterministik Üretim Ayarları (Halüsinasyonu Önleme)
56 outputs = model.generate(
57 **inputs,
58 max_new_tokens=512,
59 use_cache=True,
60 do_sample=False, # En kararlı tıbbi yanıtlar için Greedy Decoding aktiftir
61 temperature=0.0, # Rastgeleliği sıfırlıyoruz
62 )
63
64 # 6. Çıktı Temizleme ve Ekrana Basma
65 input_length = inputs.input_ids.shape[1]
66 response_ids = outputs[0][input_length:]
67 response_text = tokenizer.decode(response_ids, skip_special_tokens=True)
68
69 # Özel belirteç sızıntılarını (<|eot_id|>) temizleme filtresi
70 stop_tokens = ["<|eot_id|>", "<|im_end|>", "<|end_of_text|>", "</s>"]
71 for token in stop_tokens:
72 response_text = response_text.replace(token, "")
73 response_text = response_text.strip()
74
75 print(f"Assistant: {response_text}")
76
77 # Cevabı geçmişe ekle
78 chat_history.append({"role": "assistant", "content": [{"type": "text", "text": response_text}]})
79 print("\n" + "-"*30)