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ç
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!