MedGemma, tıbbi metin ve görsel anlama konusunda üstün performans göstermesi için tasarlanmış Gemma 3 varyantlarının bir koleksiyonudur. Koleksiyonda şu anda iki güçlü varyant bulunmaktadır: 4B çok kipli sürüm ve 27B yalnızca metin sürümü.
MedGemma 4B modeli, göğüs röntgenleri, dermatoloji görselleri, oftalmoloji görselleri ve histopatoloji preparatları gibi çeşitli ve kimliği kaldırılmış tıbbi veri kümeleri üzerinde önceden eğitilmiş SigLIP görüntü kodlayıcısını, kapsamlı bir tıbbi veri yelpazesi üzerinde eğitilmiş büyük bir dil modeli (LLM) ile birleştirir.
Bu öğreticide, MedGemma 4B modelini bir görüntü sınıflandırma görevi için beyin MRI veri kümesi üzerinde nasıl ince ayarla uyarlayacağımızı öğreneceğiz. Amaç, daha küçük MedGemma 4B modelini beyin MRI taramalarını etkili bir şekilde sınıflandıracak ve beyin kanserini daha iyi doğruluk ve verimlilikle tahmin edecek şekilde uyarlamaktır.
Ortamın Hazırlanması
RunPod, JupyterLab desteğine sahip önceden yapılandırılmış ortamlar sunan ve GPU tabanlı iş yüklerini çalıştırmak için mükemmel bir platformdur. Bu sayede bir pod başlatıp tercih ettiğiniz editörle anında kodlamaya başlayabilirsiniz. Ortamınızı şu şekilde kurabilirsiniz:
1. RunPod’un kurulumu
Şuraya giriş yapın: RunPod ve A100 GPU’lu, en güncel PyTorch imajına sahip bir pod oluşturun. Ardından pod’u başlatmak için "Deploy On-Demand" düğmesine tıklayın.
Pod’u düzenleyin ve Hugging Face ile Kaggle entegrasyonu için aşağıdaki ortam değişkenlerini ekleyin:
HF_TOKEN
KAGGLE_USERNAME
KAGGLE_KEY
Veri kümeleri ve model denetim noktalarını barındırmak için depolama kapasitesini 100 GB’a çıkarın
2. Python paketlerinin kurulumu
Pod çalışır durumdayken "Connect" düğmesine tıklayarak JupyterLab oturumunu başlatın. Yeni bir Python not defteri oluşturun ve gerekli Python paketlerini aşağıdaki komutu çalıştırarak kurun:
Veri kümesini bir Hugging Face veri kümesi olarak yükleyin, eğitim ve doğrulama kümelerine ayırın ve yapısını görüntüleyin:
from datasets import load_dataset
data_dir ="./Brain_Cancer raw MRI data/Brain_Cancer"# Define proportions for train and validation splits
train_size =0.8
validation_size =0.2
data = load_dataset("imagefolder", data_dir=data_dir, split="train")# Split the dataset into train and validation sets
data = data.train_test_split(
train_size=train_size,
test_size=validation_size,
shuffle=True,
seed=42,)# Rename the 'test' split to 'validation'
data["validation"]= data.pop("test")# Display dataset detailsprint(data)Altyapı:
Sınıflandırma sürecini iyileştirmek için, bu sınıf etiketlerini bir önek (A, B, C) ekleyerek değiştireceğiz; böylece daha iyi bir düzen sağlanacak ve özel bir istem biçimiyle hizalanacaktır.
Ardından, ince ayar sırasında modeli yönlendirmek için kullanılacak özel bir istem oluşturuyoruz. İstem, güncellenmiş sınıf etiketlerini içerir.
options ="\n".join(BRAIN_CANCER_CLASSES)
PROMPT =f"What is the most likely type of brain cancer shown in the MRI image?\n{options}"Altyapı:
Veri kümesini ince ayara hazırlamak için "messages" adlı yeni bir sütun oluşturacağız. Bu sütun, bir kullanıcı sorgusunu (istem) ve asistan yanıtını (doğru etiket) temsil eden yapılandırılmış veriler içerecek.
defformat_data(example:dict[str,any])->dict[str,any]:
example["messages"]=[{"role":"user","content":[{"type":"image",},{"type":"text","text": PROMPT,},],},{"role":"assistant","content":[{"type":"text","text": BRAIN_CANCER_CLASSES[example["label"]],},],},]return example
# Apply the formatting to the dataset
formatted_data = data.map(format_data)Altyapı:
Biçimlendirmeyi doğrulamak için, ilk örneğin ileti sütununu inceleyebiliriz:
Ortaya çıkan biçimlendirilmiş veri noktası şu şekildedir:
[{'content':[{'text':None,'type':'image'},{'text':'What is the most likely type of brain cancer shown in the MRI image?\nA: brain glioma\nB: brain menin\nC: brain tumor','type':'text'}],'role':'user'},{'content':[{'text':'B: brain menin','type':'text'}],'role':'assistant'}]Altyapı:
Beyin MRI Veri Kümesi Üzerinde MedGemma’nın İnce Ayarı
Bu bölümde, MedGemma 4B Instruct modelini Beyin MRI veri kümesi üzerinde ince ayarla uyarlayacağız. Bu, model ve işlemciyi indirmeyi, LoRA adaptörünü kurmayı, eğitici yapılandırmasını ayarlamayı ve eğitimi başlatmayı içerir.
6. Modeli ve belirteçleyiciyi yükleme
MedGemma kapılı bir model olduğundan, API anahtarınızı kullanarak Hugging Face CLI’a giriş yapmanız gerekir. Bu, ince ayarlı modelinizi Hugging Face Hub’a kaydetmenize de olanak tanır. Tazeleme ihtiyacınız varsa şu kursumuza göz atın: Hugging Face ile Çalışmak: Hub’a Rehberiniz.
from huggingface_hub import login
import os
hf_token = os.environ.get("HF_TOKEN")
login(hf_token)Altyapı:
MedGemma 4B Instruct modelini ve işlemcisini yüklemek için Transformers kütüphanesini kullanıyoruz. Model, GPU’larda verimli hesaplama için bfloat16 hassasiyetini kullanacak şekilde yapılandırılmıştır.
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText, BitsAndBytesConfig
model_id ="google/medgemma-4b-it"# Check if GPU supports bfloat16if torch.cuda.get_device_capability()[0]<8:raise ValueError("GPU does not support bfloat16, please use a GPU that supports bfloat16.")
model_kwargs =dict(
attn_implementation="eager",
torch_dtype=torch.bfloat16,
device_map="auto",)
model = AutoModelForImageTextToText.from_pretrained(model_id,**model_kwargs)
processor = AutoProcessor.from_pretrained(model_id)# Use right padding to avoid issues during training
processor.tokenizer.padding_side ="right"Altyapı:
7. Modelin yapılandırılması
MedGemma 4B Instruct modelini verimli bir şekilde ince ayarlamak için, bir parametre-verimli ince ayar yöntemi olan Low-Rank Adaptation (LoRA) kullanacağız.
LoRA, yalnızca az sayıda ek parametreyi eğiterek büyük modelleri uyarlamamıza olanak tanır; böylece hesaplama maliyetlerini önemli ölçüde düşürürken performansı korur.
Eğitim sırasında hem görsel hem metin girdilerini işlemek için özel bir birleştirme (collation) işlevi tanımlıyoruz. Bu işlev, veri kümesi örneklerini modele uygun bir biçime dönüştürür; metinlerin belirteçlenmesini ve görüntü verilerinin hazırlanmasını içerir.
defcollate_fn(examples:list[dict[str,any]]):
texts =[]
images =[]for example in examples:
images.append([example["image"]])
texts.append(
processor.apply_chat_template(
example["messages"], add_generation_prompt=False, tokenize=False).strip())# Tokenize the texts and process the images
batch = processor(text=texts, images=images, return_tensors="pt", padding=True)# The labels are the input_ids, with the padding and image tokens masked in# the loss computation
labels = batch["input_ids"].clone()# Mask image tokens
image_token_id =[
processor.tokenizer.convert_tokens_to_ids(
processor.tokenizer.special_tokens_map["boi_token"])]# Mask tokens that are not used in the loss computation
labels[labels == processor.tokenizer.pad_token_id]=-100
labels[labels == image_token_id]=-100
labels[labels ==262144]=-100
batch["labels"]= labels
return batchAltyapı:
Eğitim argümanlarını tanımlamak için trl kütüphanesindeki SFTConfig sınıfını kullanıyoruz. Bu argümanlar, toplu iş boyutu, öğrenme oranı ve gradyan biriktirme adımları gibi ince ayar sürecini kontrol eder.
SFTTrainer, modeli, veri kümesini, veri birleştiriciyi, eğitim argümanlarını ve LoRA yapılandırmasını tek bir iş akışında birleştirerek ince ayar sürecini basitleştirir. Bu, süreci daha akıcı ve kullanıcı dostu hale getirir.
Model, veri kümesi ve eğitim yapılandırmaları ayarlandıktan sonra ince ayar sürecine başlayabiliriz. SFTTrainer bu adımı sadeleştirir ve yalnızca tek bir komutla modeli eğitmemizi sağlar:
Eğitim süreci yaklaşık 1 saat 8 dakika sürdü. Bu süre boyunca, eğitim kaybı ve doğrulama kaybı her adımda istikrarlı şekilde azaldı; bu da modelin etkili biçimde öğrendiğini gösteriyor.
Eğitim tamamlandıktan sonra, ince ayarlı model yerel olarak kaydedilebilir ve save_model() yöntemi kullanılarak Hugging Face Hub’a gönderilebilir.
MedGemma 4B modelinin performansını değerlendirmek için, doğrulama veri kümesi üzerinde hem temel modeli hem de ince ayarlı modeli test edeceğiz. Bu süreç; belleği temizlemeyi, test verisini hazırlamayı, yanıt üretmeyi ve doğruluk ile F1 skoru gibi temel metrikleri hesaplamayı içerir.
Değerlendirmeye başlamadan önce, GPU belleğini boşaltmak ve test için temiz bir ortam sağlamak amacıyla eğitim kurulumunu kaldırıyoruz
del model
del trainer
torch.cuda.empty_cache()Altyapı:
9. Model testi için hazırlık
Doğrulama veri kümesini, modelin gerektirdiği girdi yapısına uyacak şekilde biçimlendiriyoruz. Bu, her örnek için kullanıcı istemini içeren bir "messages" sütunu oluşturmayı kapsar.
defformat_test_data(example:dict[str,any])->dict[str,any]:
example["messages"]=[{"role":"user","content":[{"type":"image",},{"type":"text","text": PROMPT,},],},]return example
test_data = data["validation"]
test_data = test_data.map(format_test_data)Altyapı:
Modelin performansını değerlendirmek için, sınıflandırma gibi görevler için önceden hazırlanmış metrikler sunan evaluate kütüphanesini kullanıyoruz. Kütüphaneyi içe aktarıp gerekli metrikleri yükledikten sonra, test veri kümesinden yer-gerçek (ground-truth) etiketleri çıkarıyoruz. Ardından, tahminleri bu etiketlerle karşılaştırarak doğruluk ve F1 skorunu hesaplayan bir yardımcı işlev olan compute_metrics tanımlanır.
Etiket işleme tutarlılığını sağlamak için, veri kümesinin "label" sütununu bir ClassLabel türüne döküyoruz. Bu, etiket dizinleri ile bunların adları arasında verimli eşleme yapılmasını sağlar. Ayrıca, son işlem aşamasında etiket biçimlendirme varyasyonlarını ele almak için alternatif etiket eşlemeleri tanımlıyoruz.
from datasets import ClassLabel
test_data = test_data.cast_column("label",
ClassLabel(names=BRAIN_CANCER_CLASSES))
LABEL_FEATURE = test_data.features["label"]
ALT_LABELS =dict([(label,f"({label.replace(': ',') ')}")for label in BRAIN_CANCER_CLASSES
])Altyapı:
Modelin tahminlerini doğru sınıf etiketleriyle eşlemek için bir postprocess işlevi tanımlıyoruz. Bu işlev, hem standart hem de alternatif etiket biçimlerini hesaba katarak tahminlerin uygun etiketle eşleşmesini sağlar.
defpostprocess(prediction, do_full_match:bool=False)->int:ifisinstance(prediction,str):
response_text = prediction
else:
response_text = prediction[0]["generated_text"]if do_full_match:return LABEL_FEATURE.str2int(response_text)for label in BRAIN_CANCER_CLASSES:# accept canonical or alternative wordingif label in response_text or ALT_LABELS[label]in response_text:return LABEL_FEATURE.str2int(label)return-1Altyapı:
10. Temel modelde model performansı
Temel modelin performansını değerlendirmek için, önceden eğitilmiş modeli ve işlemciyi yüklüyor, üretim ayarlarını yapılandırıyor ve test için istemleri ve görselleri hazırlıyoruz.
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
model_kwargs =dict(
torch_dtype=torch.bfloat16,
device_map="auto",)
model = AutoModelForImageTextToText.from_pretrained(
model_id,**model_kwargs
)from transformers import GenerationConfig
gen_cfg = GenerationConfig.from_pretrained(model_id)
gen_cfg.update(
do_sample =False,
top_k =None,
top_p =None,
cache_implementation ="dynamic")
model.generation_config = gen_cfg
processor = AutoProcessor.from_pretrained(args.output_dir)
tok = processor.tokenizer
model.config.pad_token_id = tok.pad_token_id
model.generation_config.pad_token_id = tok.pad_token_id
defchat_to_prompt(chat_turns):return processor.apply_chat_template(
chat_turns,
add_generation_prompt=True,# tells the model "your turn"
tokenize=False# we want raw text, not ids)
prompts =[chat_to_prompt(c)for c in test_data["messages"]]
images = test_data["image"]# already a list of PIL imagesassertlen(prompts)==len(images),"1 prompt must match 1 image!"Altyapı:
batch_predict adlı, test veri kümesini toplu halde işleyen bir işlev oluşturduk. Bu işlev, her bir istem-görüntü çifti için tahminler üretir ve çıktıları doğru etiketlere eşlemek için son işlem uygular.
import torch
from typing import List, Any, Callable
defbatch_predict(
prompts,
images,
model,
processor,
postprocess,*,
batch_size=64,
device="cuda",
dtype=torch.bfloat16,**gen_kwargs
):
preds =[]for i inrange(0,len(prompts), batch_size):
texts = prompts[i : i + batch_size]
imgs =[[img]for img in images[i : i + batch_size]]
enc = processor(text=texts, images=imgs, padding=True, return_tensors="pt").to(
device, dtype=dtype
)
lens = enc["attention_mask"].sum(dim=1)with torch.inference_mode():
out = model.generate(**enc,
disable_compile=True,**gen_kwargs
)for seq, ln inzip(out, lens):
ans = processor.decode(seq[ln:], skip_special_tokens=True)
preds.append(postprocess(ans))return predsAltyapı:
Temel model için test veri kümesinde tahminler üretmek üzere batch_predict işlevini kullanacağız. Ardından tahminler compute_metrics işleviyle değerlendirilecektir.
Modelin davranışını daha iyi anlamak için, veri kümesinden tek bir örnek için tahmin üretebiliriz. Bu, girdiyi işleyip modelin yanıtını döndüren yardımcı bir işlev oluşturmayı içerir.
predict_one işlevi bir istem ve görüntüyü girdi olarak alır, bunları modelin işlemcisiyle işler ve bir yanıt üretir. İşlev, modelin çıktısının insan tarafından okunabilir metne çözümlenmesini sağlar.
predict_one işlevini veri kümesindeki 11. örnek için bir yanıt üretmek üzere kullanacağız. Bu, istemin hazırlanmasını ve tahmin işlevinin çalıştırılmasını içerir.
Sonuç olarak, neden beyin gliomasının seçildiğini açıklayan uzun bir cümle aldık. Yanıt tamamen yanlış; sınıflandırma dahi hatalı.
Model answer: Based on the MRI image, the most likely type of brain cancer is**A: brain glioma**.
Here's why:***Gliomas** are a common type of brain tumorAltyapı:
11. İnce ayarlı modelde model performansı
İnce ayarlı modeli değerlendirmek için, modeli çıktı dizininden yükleyerek, tahminler üreterek ve metrikleri hesaplayarak süreci tekrarlıyoruz.
Modeli ve işlemciyi çıktı dizininden yüklüyor, batch_predict işlevini çalıştırıyor ve metrikleri hesaplıyoruz.
Bu sonuçlar, ince ayarın etkinliğini vurgulayarak temel modele göre önemli bir iyileşme gösteriyor. Doğruluk yalnızca 1 epok ile %33’ten %89’a sıçradı.
Yukarıdaki kodu çalıştırırken sorun yaşıyorsanız, eşlik eden not defterine bakın: Fine_tuning_MedGemma.ipynb
Sonuç
MedGemma, tıp bilimlerinde yapay zekâ kullanımında önemli bir ileri adıma işaret ediyor. Hekimlere daha hızlı ve daha isabetli yargılarda bulunma imkânı vererek, daha hızlı tanılar ve hastalar için daha etkili tedavi planları sağlar.
MedGemma 4B Instruct gibi görsel-dil modellerinin ince ayarla uyarlanması, görüntü sınıflandırmadan akıl yürütme yeteneklerinin entegrasyonuna kadar çeşitli tıbbi görevlere uyarlanabilirlik sağlar.
Bu öğreticide, bir Beyin MRI veri kümesi üzerinde beyin kanseri sınıflandırması için bir görsel-dil modelinin nasıl ince ayarla uyarlandığını öğrendik. Sonuçlar çarpıcıydı; modelin doğruluğu %33’ten %89’a yükseldi. Bu kayda değer sıçrama, tıbbi yapay zekâ uygulamalarında ince ayarın potansiyelini ortaya koyuyor.
Daha fazlasını öğrenmekle ilgileniyorsanız, şu kaynaklara göz atmanızı öneririm:
Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
MedGemma, tıbbi metin ve görsel anlama konusunda üstün performans göstermesi için tasarlanmış Gemma 3 varyantlarının bir koleksiyonudur. Koleksiyonda şu anda iki güçlü varyant bulunmaktadır: 4B çok kipli sürüm ve 27B yalnızca metin sürümü.
MedGemma 4B modeli, göğüs röntgenleri, dermatoloji görselleri, oftalmoloji görselleri ve histopatoloji preparatları gibi çeşitli ve kimliği kaldırılmış tıbbi veri kümeleri üzerinde önceden eğitilmiş SigLIP görüntü kodlayıcısını, kapsamlı bir tıbbi veri yelpazesi üzerinde eğitilmiş büyük bir dil modeli (LLM) ile birleştirir.
Bu öğreticide, MedGemma 4B modelini bir görüntü sınıflandırma görevi için beyin MRI veri kümesi üzerinde nasıl ince ayarla uyarlayacağımızı öğreneceğiz. Amaç, daha küçük MedGemma 4B modelini beyin MRI taramalarını etkili bir şekilde sınıflandıracak ve beyin kanserini daha iyi doğruluk ve verimlilikle tahmin edecek şekilde uyarlamaktır.
Ortamın Hazırlanması
RunPod, JupyterLab desteğine sahip önceden yapılandırılmış ortamlar sunan ve GPU tabanlı iş yüklerini çalıştırmak için mükemmel bir platformdur. Bu sayede bir pod başlatıp tercih ettiğiniz editörle anında kodlamaya başlayabilirsiniz. Ortamınızı şu şekilde kurabilirsiniz:
1. RunPod’un kurulumu
Şuraya giriş yapın: RunPod ve A100 GPU’lu, en güncel PyTorch imajına sahip bir pod oluşturun. Ardından pod’u başlatmak için "Deploy On-Demand" düğmesine tıklayın.
Pod’u düzenleyin ve Hugging Face ile Kaggle entegrasyonu için aşağıdaki ortam değişkenlerini ekleyin:
Veri kümeleri ve model denetim noktalarını barındırmak için depolama kapasitesini 100 GB’a çıkarın
2. Python paketlerinin kurulumu
Pod çalışır durumdayken "Connect" düğmesine tıklayarak JupyterLab oturumunu başlatın. Yeni bir Python not defteri oluşturun ve gerekli Python paketlerini aşağıdaki komutu çalıştırarak kurun:
Veri Kümesini Yükleme ve İşleme
Kaggle’dan Brain Cancer MRI veri kümesini kullanacağız.
3. Veri kümesini indirme
Kaggle CLI kullanarak veri kümesini indirin ve çıkarın:
4. Veri kümesini yükleme
Veri kümesini bir Hugging Face veri kümesi olarak yükleyin, eğitim ve doğrulama kümelerine ayırın ve yapısını görüntüleyin:
Çıktı:
Eğitim kümesindeki ilk görseli ve karşılık gelen etiketini kontrol edin:
5. Veri kümesini işleme
Veri kümesini işlemeye başlamadan önce, sınıflandırma görevinin doğru ele alınması için etiket adlarını kontrol etmek önemlidir.
Saptanan sınıflar: ['brain_glioma', 'brain_menin', 'brain_tumor'].
Sınıflandırma sürecini iyileştirmek için, bu sınıf etiketlerini bir önek (A, B, C) ekleyerek değiştireceğiz; böylece daha iyi bir düzen sağlanacak ve özel bir istem biçimiyle hizalanacaktır.
Ardından, ince ayar sırasında modeli yönlendirmek için kullanılacak özel bir istem oluşturuyoruz. İstem, güncellenmiş sınıf etiketlerini içerir.
Veri kümesini ince ayara hazırlamak için "messages" adlı yeni bir sütun oluşturacağız. Bu sütun, bir kullanıcı sorgusunu (istem) ve asistan yanıtını (doğru etiket) temsil eden yapılandırılmış veriler içerecek.
Biçimlendirmeyi doğrulamak için, ilk örneğin ileti sütununu inceleyebiliriz:
Ortaya çıkan biçimlendirilmiş veri noktası şu şekildedir:
Beyin MRI Veri Kümesi Üzerinde MedGemma’nın İnce Ayarı
Bu bölümde, MedGemma 4B Instruct modelini Beyin MRI veri kümesi üzerinde ince ayarla uyarlayacağız. Bu, model ve işlemciyi indirmeyi, LoRA adaptörünü kurmayı, eğitici yapılandırmasını ayarlamayı ve eğitimi başlatmayı içerir.
6. Modeli ve belirteçleyiciyi yükleme
MedGemma kapılı bir model olduğundan, API anahtarınızı kullanarak Hugging Face CLI’a giriş yapmanız gerekir. Bu, ince ayarlı modelinizi Hugging Face Hub’a kaydetmenize de olanak tanır. Tazeleme ihtiyacınız varsa şu kursumuza göz atın: Hugging Face ile Çalışmak: Hub’a Rehberiniz.
MedGemma 4B Instruct modelini ve işlemcisini yüklemek için Transformers kütüphanesini kullanıyoruz. Model, GPU’larda verimli hesaplama için bfloat16 hassasiyetini kullanacak şekilde yapılandırılmıştır.
7. Modelin yapılandırılması
MedGemma 4B Instruct modelini verimli bir şekilde ince ayarlamak için, bir parametre-verimli ince ayar yöntemi olan Low-Rank Adaptation (LoRA) kullanacağız.
LoRA, yalnızca az sayıda ek parametreyi eğiterek büyük modelleri uyarlamamıza olanak tanır; böylece hesaplama maliyetlerini önemli ölçüde düşürürken performansı korur.
Eğitim sırasında hem görsel hem metin girdilerini işlemek için özel bir birleştirme (collation) işlevi tanımlıyoruz. Bu işlev, veri kümesi örneklerini modele uygun bir biçime dönüştürür; metinlerin belirteçlenmesini ve görüntü verilerinin hazırlanmasını içerir.
Eğitim argümanlarını tanımlamak için trl kütüphanesindeki SFTConfig sınıfını kullanıyoruz. Bu argümanlar, toplu iş boyutu, öğrenme oranı ve gradyan biriktirme adımları gibi ince ayar sürecini kontrol eder.
SFTTrainer, modeli, veri kümesini, veri birleştiriciyi, eğitim argümanlarını ve LoRA yapılandırmasını tek bir iş akışında birleştirerek ince ayar sürecini basitleştirir. Bu, süreci daha akıcı ve kullanıcı dostu hale getirir.
8. Modelin eğitilmesi
Model, veri kümesi ve eğitim yapılandırmaları ayarlandıktan sonra ince ayar sürecine başlayabiliriz. SFTTrainer bu adımı sadeleştirir ve yalnızca tek bir komutla modeli eğitmemizi sağlar:
Eğitim süreci yaklaşık 1 saat 8 dakika sürdü. Bu süre boyunca, eğitim kaybı ve doğrulama kaybı her adımda istikrarlı şekilde azaldı; bu da modelin etkili biçimde öğrendiğini gösteriyor.
Eğitim tamamlandıktan sonra, ince ayarlı model yerel olarak kaydedilebilir ve
save_model()yöntemi kullanılarak Hugging Face Hub’a gönderilebilir.Model artık burada erişilebilir: kingabzpro/medgemma-brain-cancer · Hugging Face
Kaynak kingabzpro/medgemma-brain-cancer
Model Değerlendirmesi
MedGemma 4B modelinin performansını değerlendirmek için, doğrulama veri kümesi üzerinde hem temel modeli hem de ince ayarlı modeli test edeceğiz. Bu süreç; belleği temizlemeyi, test verisini hazırlamayı, yanıt üretmeyi ve doğruluk ile F1 skoru gibi temel metrikleri hesaplamayı içerir.
Değerlendirmeye başlamadan önce, GPU belleğini boşaltmak ve test için temiz bir ortam sağlamak amacıyla eğitim kurulumunu kaldırıyoruz
9. Model testi için hazırlık
Doğrulama veri kümesini, modelin gerektirdiği girdi yapısına uyacak şekilde biçimlendiriyoruz. Bu, her örnek için kullanıcı istemini içeren bir "messages" sütunu oluşturmayı kapsar.
Modelin performansını değerlendirmek için, sınıflandırma gibi görevler için önceden hazırlanmış metrikler sunan evaluate kütüphanesini kullanıyoruz. Kütüphaneyi içe aktarıp gerekli metrikleri yükledikten sonra, test veri kümesinden yer-gerçek (ground-truth) etiketleri çıkarıyoruz. Ardından, tahminleri bu etiketlerle karşılaştırarak doğruluk ve F1 skorunu hesaplayan bir yardımcı işlev olan
compute_metricstanımlanır.Etiket işleme tutarlılığını sağlamak için, veri kümesinin "label" sütununu bir
ClassLabeltürüne döküyoruz. Bu, etiket dizinleri ile bunların adları arasında verimli eşleme yapılmasını sağlar. Ayrıca, son işlem aşamasında etiket biçimlendirme varyasyonlarını ele almak için alternatif etiket eşlemeleri tanımlıyoruz.Modelin tahminlerini doğru sınıf etiketleriyle eşlemek için bir
postprocessişlevi tanımlıyoruz. Bu işlev, hem standart hem de alternatif etiket biçimlerini hesaba katarak tahminlerin uygun etiketle eşleşmesini sağlar.10. Temel modelde model performansı
Temel modelin performansını değerlendirmek için, önceden eğitilmiş modeli ve işlemciyi yüklüyor, üretim ayarlarını yapılandırıyor ve test için istemleri ve görselleri hazırlıyoruz.
batch_predictadlı, test veri kümesini toplu halde işleyen bir işlev oluşturduk. Bu işlev, her bir istem-görüntü çifti için tahminler üretir ve çıktıları doğru etiketlere eşlemek için son işlem uygular.Temel model için test veri kümesinde tahminler üretmek üzere
batch_predictişlevini kullanacağız. Ardından tahminlercompute_metricsişleviyle değerlendirilecektir.Sonuç etkileyici değil. %33 doğruluk elde ettik; bu oldukça kötü.
Modelin davranışını daha iyi anlamak için, veri kümesinden tek bir örnek için tahmin üretebiliriz. Bu, girdiyi işleyip modelin yanıtını döndüren yardımcı bir işlev oluşturmayı içerir.
predict_oneişlevi bir istem ve görüntüyü girdi olarak alır, bunları modelin işlemcisiyle işler ve bir yanıt üretir. İşlev, modelin çıktısının insan tarafından okunabilir metne çözümlenmesini sağlar.predict_oneişlevini veri kümesindeki 11. örnek için bir yanıt üretmek üzere kullanacağız. Bu, istemin hazırlanmasını ve tahmin işlevinin çalıştırılmasını içerir.Sonuç olarak, neden beyin gliomasının seçildiğini açıklayan uzun bir cümle aldık. Yanıt tamamen yanlış; sınıflandırma dahi hatalı.
11. İnce ayarlı modelde model performansı
İnce ayarlı modeli değerlendirmek için, modeli çıktı dizininden yükleyerek, tahminler üreterek ve metrikleri hesaplayarak süreci tekrarlıyoruz.
Modeli ve işlemciyi çıktı dizininden yüklüyor,
batch_predictişlevini çalıştırıyor ve metrikleri hesaplıyoruz.Bu sonuçlar, ince ayarın etkinliğini vurgulayarak temel modele göre önemli bir iyileşme gösteriyor. Doğruluk yalnızca 1 epok ile %33’ten %89’a sıçradı.
İnce ayarlı modelin performansını daha ayrıntılı analiz etmek için, test veri kümesinden tek bir örnek için tahmin üretiyoruz.
Model, sonucu net ve isabetli bir şekilde üretti; sınıflandırma hem doğru hem de iyi yapılandırılmıştı.
Yukarıdaki kodu çalıştırırken sorun yaşıyorsanız, eşlik eden not defterine bakın: Fine_tuning_MedGemma.ipynb
Sonuç
MedGemma, tıp bilimlerinde yapay zekâ kullanımında önemli bir ileri adıma işaret ediyor. Hekimlere daha hızlı ve daha isabetli yargılarda bulunma imkânı vererek, daha hızlı tanılar ve hastalar için daha etkili tedavi planları sağlar.
MedGemma 4B Instruct gibi görsel-dil modellerinin ince ayarla uyarlanması, görüntü sınıflandırmadan akıl yürütme yeteneklerinin entegrasyonuna kadar çeşitli tıbbi görevlere uyarlanabilirlik sağlar.
Bu öğreticide, bir Beyin MRI veri kümesi üzerinde beyin kanseri sınıflandırması için bir görsel-dil modelinin nasıl ince ayarla uyarlandığını öğrendik. Sonuçlar çarpıcıydı; modelin doğruluğu %33’ten %89’a yükseldi. Bu kayda değer sıçrama, tıbbi yapay zekâ uygulamalarında ince ayarın potansiyelini ortaya koyuyor.
Daha fazlasını öğrenmekle ilgileniyorsanız, şu kaynaklara göz atmanızı öneririm: