Radyoloji, büyük ölçüde yüksek vasıflı profesyonellerin uzmanlığına bağlı bir alandır. Radyologlar, basit kırıklardan kanser gibi karmaşık hastalıklara kadar çeşitli durumları teşhis etmek ve izlemek için tıbbi görüntüleri analiz eder. Ancak tıbbi görüntülemedeki artış ve hızlı, doğru teşhislere duyulan acil ihtiyaç nedeniyle radyologlar büyük bir baskı altındadır. İşte bu noktada yapay zeka (AI) devreye giriyor ve insan yeteneklerini geliştirerek alanı dönüştürüyor. Bu makalenin sonunda, tıbbi görüntülerde zatürreyi tespit etmeye yardımcı olacak kendi görüntü sınıflandırıcı modelinizi oluşturmuş olacaksınız.
Kodlamaya başlamadan önce ortamımızın hazır olduğundan emin olmalıyız. Gerekli kütüphaneleri kurarak başlayacağız:
%pip install --upgrade tensorflow keras numpy pandas sklearn pillow
Bu kütüphaneler modelimizi oluşturmak ve eğitmek için gereklidir:
tensorflow
ve keras
.numpy
.pandas
.sklearn
.pillow
.Kütüphaneler kuruluyken bunları içe aktaralım:
import os from tensorflow import keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten from tensorflow.keras.preprocessing.image import ImageDataGenerator import numpy as np
Görüntü işleme görevleri için bir sinir ağı modeli oluşturmak ve eğitmek için gereken birkaç temel kitaplığı ve modülü içe aktararak başlıyoruz. Derin öğrenme modellerimizi oluşturmak ve yönetmek için TensorFlow'u ve alt modüllerini kullanacağız. Özellikle, Keras'ı üst düzey API'miz olarak kullanmak üzere, doğrusal bir katman yığını oluşturmak için Sequential'ı ve çeşitli sinir ağı katmanlarını oluşturmak ve yapılandırmak için Dense, Conv2D, MaxPool2D ve Flatten gibi modülleri içe aktaracağız. Ayrıca ImageDataGenerator, modelin genelleme yeteneğini geliştirerek görüntü verilerimizi artırmamıza yardımcı olacaktır. Son olarak, özellikle dizileri işlemek ve matematiksel işlevleri gerçekleştirmek için yararlı olan sayısal işlem desteği için numpy'yi içe aktaracağız.
Yapay zeka radyologumuzun öğrenebileceği verilere ihtiyacı var. Eğitim ve doğrulama verilerimizi yüklemek ve artırmak için ImageDataGenerator'ı kullanacağız: verileri indirmek için açık kaynaklı veri dostumuz Kaggle'ı kullanacağız, gidin ve etiketli veri kümesini buradaki bağlantıdan indirin.
Buradaki denetimli öğrenme bağlamında, etiketli veri kümesi, makine öğrenimi modelinin tahmin etmesi gereken temel gerçek olacaktır.
trdata = ImageDataGenerator() traindata = trdata.flow_from_directory(directory="data-task1/train", target_size=(224, 224)) tsdata = ImageDataGenerator() testdata = tsdata.flow_from_directory(directory="data-task1/val", target_size=(224, 224))
Bu kod pasajı, eğitim ve doğrulama veri kümelerimiz için veri oluşturucuları ayarlar. Görüntüler, VGG16 modeli için standart giriş boyutu olan 224x224 piksele yeniden boyutlandırılır.
Şimdi işin eğlenceli kısmı geliyor: VGG16 modelini oluşturmak. VGG16, esas olarak 13 evrişimli katman ve 3 tamamen bağlantılı katman üzerine inşa edilmiş benzersiz mimarisi sayesinde basitliği ve etkinliği ile bilinen popüler bir evrişimli sinir ağı (CNN) mimarisidir. VGG16'yı diğerlerinden ayıran şey, derin bir ağ içinde küçük 3x3 evrişimli filtreler kullanmasıdır. Bu tasarım, hesaplama verimliliği sağlarken görüntülerdeki karmaşık desenleri yakalar. İşte onu nasıl yaratıyoruz:
model = Sequential() model.add(Conv2D(input_shape=(224,224,3), filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=64, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=256, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(Conv2D(filters=512, kernel_size=(3,3), padding="same", activation="relu")) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Flatten()) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=4096, activation="relu")) model.add(Dense(units=2, activation="softmax")) model.summary()
Şimdi parçalayalım:
Model mimarimiz tanımlandıktan sonra onu derlememiz gerekiyor:
opt = keras.optimizers.Adam(learning_rate=0.001) model.compile(optimizer=opt, loss=keras.losses.binary_crossentropy, metrics=['accuracy'])
Burada, kayıp fonksiyonumuz olarak ikili sınıflandırma görevlerine uygun, öğrenme oranı 0,001 olan Adam optimizerini ve ikili çapraz entropiyi kullanıyoruz. bu seçimlerin artılarını ve eksilerini inceleyelim:
Bileşen | Avantajları | Dezavantajları |
---|---|---|
Adam Optimize Edici | 1. Uyarlanabilir öğrenme oranları 2. varsayılan ayarlarla iyi çalışır. | Karmaşık modellerle aşırı uyum potansiyeli. |
İkili Çapraz Entropi Kaybı | İkili sınıflandırma için idealdir | çıktı katmanı aktivasyon fonksiyonumla pek uyumlu değil, neden? (Yorumda yaz!) |
Deneyim kazanmanın harika bir yolu olduğundan, farklı optimize ediciler, öğrenme oranları ve kayıp fonksiyonlarıyla denemeler yapmaktan çekinmeyin.
Yapay zeka radyoloğumuzu eğitmenin zamanı geldi! En iyi modeli kaydetmek ve doğrulama doğruluğunun iyileşmesi durursa erken durmak için geri aramalar ayarladık:
from keras.callbacks import ModelCheckpoint, EarlyStopping checkpoint = ModelCheckpoint("vgg16_1.h5", monitor='val_accuracy', verbose=1, save_best_only=True, save_weights_only=False, mode='auto', period=1) early = EarlyStopping(monitor='val_accuracy', min_delta=0, patience=20, verbose=1, mode='auto') hist = model.fit_generator(steps_per_epoch=20, generator=traindata, validation_data=testdata, validation_steps=10, epochs=10, callbacks=[checkpoint, early])
Modelimizin nasıl çalıştığını görmek için eğitim ve doğrulama kaybını ve doğruluğunu grafiklendirebiliriz:
import matplotlib.pyplot as plt # Training loss plt.plot(hist.history['loss']) plt.legend(['Training']) plt.title('Training loss') plt.ylabel('loss') plt.xlabel('epoch') plt.show() # Validation loss plt.plot(hist.history['val_loss']) plt.legend(['Validation']) plt.title('Validation loss') plt.ylabel('validation loss') plt.xlabel('epoch') plt.show() # Training and validation accuracy plt.plot(hist.history['accuracy']) plt.plot(hist.history['val_accuracy']) plt.legend(['Training', 'Validation']) plt.title('Training & Validation accuracy') plt.xlabel('epoch') plt.show()
Bu grafikler, modelimizin ne kadar iyi öğrendiğini ve aşırı mı yoksa yetersiz mi olduğunu anlamamıza yardımcı olacaktır.
Eğitimin ardından yapay zeka radyoloğumuz tahminlerde bulunmaya hazır. Bir görseli şu şekilde yükleyebilir ve modelin tahminini alabilirsiniz:
from tensorflow.keras.preprocessing import image # Load and preprocess image img_path = 'path_to_your_image.jpg' img = image.load_img(img_path, target_size=(224, 224)) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) # Create batch axis # Make prediction prediction = model.predict(img_array) print('Prediction:', prediction)
Yapay zekalı bir radyolog oluşturmak yalnızca başlangıçtır. Modelinizde ince ayar yapmak ve geliştirmek için birkaç ipucu:
Vay, harika iş! 🎉 Tıbbi görüntüleri analiz edebilen ve tahminlerde bulunabilen bir model yarattınız; ne büyük bir tıbbi başarı! :) Sinir ağı mimarilerinin karmaşıklığının derinliklerine inerek, ince ayarlı bir yapay zeka modelinin ne kadar etkili olabileceğini gördünüz. Sınırları zorlamaya devam edin, denemelere devam edin ve en önemlisi yapay zeka projelerinizle çalışmanın her anının tadını çıkarın!