Dr. Kubilay Erişlik

Derin Öğrenme ile Mamografi Görüntülerinden Meme Kanseri Tespiti

7 Mayıs 2025 Dr. Kubilay Erişlik Sağlıkta Yapay Zeka
derin öğrenme meme kanseri mamografi makine öğrenmesi görüntü işleme
Derin Öğrenme ile Mamografi Görüntülerinden Meme Kanseri Tespiti

Derin Öğrenme ile Mamografi Görüntülerinden Meme Kanseri Tespiti

Derin öğrenme yöntemlerini kullanarak araştırmacılar, mamografi ve diğer tıbbi görüntüler aracılığıyla meme kanserini tespit etmeyi başarmıştır. Bu yöntemlerde yapay sinir ağları kullanılarak görüntüler analiz edilir ve potansiyel kanser vakaları belirlenir. Meme kanserinin erken teşhisinde bu tekniklerin kullanılması, başarılı tedavi olasılığını artırmaktadır.

Gerekli Paketlerin Eklenmesi

import glob
from PIL import Image
import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

from keras.models import Sequential
from keras.layers import Dense
from tensorflow.keras.utils import to_categorical

Modül Açıklamaları

  • glob: Dosya ve dizin arama işlemlerini kolaylaştırır.
  • PIL (Python Image Library): Görüntü dosyalarını okuma, düzenleme ve oluşturma işlemlerini sağlar.
  • NumPy: Büyük veri setleri üzerinde hızlı matematiksel işlemler yapılmasını sağlar.
  • Pandas: Veri setlerini okuma, yazma ve analiz etme işlemleri için kullanılır.
  • scikit-learn (sklearn): Makine öğrenmesi algoritmaları ve model değerlendirme araçları sunar.
  • Keras: Derin öğrenme modellerinin oluşturulmasını kolaylaştırır.

Görüntü Dosyası Adını Ayıran Fonksiyon

def image_name_split(filename):
  filename = filename.split("\\")
  filename = filename[1]
  filename = filename.split(".")
  filename = filename[0]
  return filename

Görsel Verinin Hazırlanması

  • Toplam 54.706 mamografi görüntüsü kullanılmıştır: 1.158 kanserli, 53.548 sağlıklı.
  • Görüntüler klasörlere göre ayrılmıştır: “0” (sağlıklı), “1” (kanserli).
  • Görüntüler 256x256 boyutunda olup, analiz kolaylığı açısından 64x64 boyutuna yeniden boyutlandırılmıştır.
# Sağlıklı görüntülerin işlenmesi
image0_list = []
filename0_list = []
for filename in glob.glob("0/*.png"):
  im = Image.open(filename)
  filename = image_name_split(im.filename)
  im = im.resize(size=(64,64))
  data = np.array(im.getdata()).reshape(64,64)
  image0_list.append(data)
  filename0_list.append(filename)
  im.close()
image0_array = np.array(image0_list)

# Kanserli görüntülerin işlenmesi
image1_list = []
filename1_list = []
for filename in glob.glob("1/*.png"):
  im = Image.open(filename)
  filename = image_name_split(im.filename)
  im = im.resize(size=(64,64))
  data = np.array(im.getdata()).reshape(64,64)
  image1_list.append(data)
  filename1_list.append(filename)
  im.close()
image1_array = np.array(image1_list)

Görüntü Vektörlerinin Birleştirilmesi

image_array = np.concatenate((image0_array, image1_array), axis=0)
image_array = image_array.reshape(54706, 4096)

Verilerin DataFrame’e Dönüştürülmesi

image_dataframe = pd.DataFrame(image_array)
filename_array = filename0_list + filename1_list
filename_dataframe = pd.DataFrame(filename_array, columns=["filename"])
dataframe = pd.concat([filename_dataframe, image_dataframe], axis=1)

df_info = pd.read_csv("train.csv")
df_info["filename"] = df_info["patient_id"].astype(str) + "_" + df_info["image_id"].astype(str)
df_input = dataframe.merge(df_info, on="filename")

Eğitim Verisinin Dengelenmesi

df_input_0 = df_input[0:1800]
df_input_1 = df_input[-1259:-1]
df_train = pd.concat([df_input_0, df_input_1])

Değişkenlerin Dönüştürülmesi

df_input = df_input.replace({"laterality": {"L": 0, "R": 1}})
df_train = df_train.replace({"laterality": {"L": 0, "R": 1}})
df_train = df_train.sample(frac=1)

Giriş ve Hedef Değişkenlerin Ayrılması

target_column = ["cancer"]
predictors = list(set(df_input.columns) - set(target_column))

df_train[predictors] = df_train[predictors] / df_train[predictors].max()
df_input[predictors] = df_input[predictors] / df_input[predictors].max()

X_train = df_train[predictors].values
y_train = df_train[target_column].values
y_train_categorical = to_categorical(y_train)

X = df_input[predictors].values
y = df_input[target_column].values

Derin Öğrenme Modelinin Oluşturulması

model = Sequential()
model.add(Dense(250, activation='relu', input_dim=4099))
model.add(Dense(100, activation='relu'))
model.add(Dense(50, activation='relu'))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

Modelin Eğitimi ve Değerlendirilmesi

Model 60 iterasyon ile eğitilmiştir. Eğitim ve test verisi üzerinden başarı oranları hesaplanmıştır.

# Eğitim verisinin sınıflandırma sonuçları
pred_train = model.predict(X_train)
y_classes_train = pred_train.argmax(axis=-1)
disp = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix(y_train, y_classes_train, labels=[0, 1]), display_labels=[0, 1])
disp.plot()

# Test verisinin sınıflandırma sonuçları
pred_test = model.predict(X)
y_classes = pred_test.argmax(axis=-1)
disp = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix(y, y_classes), display_labels=[0, 1])
disp.plot()

Sonuç

Sonuç Görseli Bu çalışmada, 1.158 kanserli ve 53.548 sağlıklı mamografi görüntüsü kullanılarak meme kanserinin sınıflandırılması hedeflenmiştir. Derin öğrenme modeli eğitim verisinde %85,78, test verisinde ise %84,06 doğruluk oranına ulaşmıştır. Bu sonuçlar, derin öğrenme tekniklerinin mamografi görüntülerinden meme kanseri teşhisinde etkili bir yöntem olabileceğini göstermektedir.


Bu yazının sizler için faydalı ve ilgi çekici olduğunu umuyorum. Benzer içeriklerden haberdar olmak için blogumu takip edebilirsiniz. Sağlıklı ve güzel günler dilerim!