paint-brush
Yapay Zeka Radyoloğunuzu Oluşturma: VGG16 ile Pnömoni Dedektörü Oluşturmak İçin Eğlenceli Bir Kılavuzile@kisican
565 okumalar
565 okumalar

Yapay Zeka Radyoloğunuzu Oluşturma: VGG16 ile Pnömoni Dedektörü Oluşturmak İçin Eğlenceli Bir Kılavuz

ile Can Kisi5m2024/07/09
Read on Terminal Reader

Çok uzun; Okumak

Radyoloji, büyük ölçüde yüksek vasıflı profesyonellerin uzmanlığına bağlı bir alandı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ülerdeki pnömoniyi analiz etmek ve tespit etmek için kendi görüntü sınıflandırıcı modelinizi oluşturmuş olacaksınız!
featured image - Yapay Zeka Radyoloğunuzu Oluşturma: VGG16 ile Pnömoni Dedektörü Oluşturmak İçin Eğlenceli Bir Kılavuz
Can Kisi HackerNoon profile picture
0-item
1-item

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.

1. Adım: Ortamınızı Ayarlama

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:

  • Sinir ağlarını oluşturmak ve eğitmek için tensorflow ve keras .
  • sayısal işlemler için numpy .
  • veri manipülasyonu için pandas .
  • Verilerin ön işlenmesi için sklearn .
  • görüntü işleme için pillow .

Adım 2: Kitaplıkları İçe Aktarma

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.

Adım 3: Verileri Hazırlama

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.


Adım 4: VGG16 Modelini Oluşturma

Ş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:

  • Conv2D katmanları: Bunlar, kenarlar ve dokular gibi özellikleri algılamayı öğrenen evrişimli katmanlardır.
  • MaxPool2D katmanları: Bunlar, önemli özellikleri koruyarak mekansal boyutları azaltır.
  • Düzleştir katmanı: Bu, 2B özellik haritalarını 1B vektöre dönüştürür.
  • Yoğun katmanlar: Bunlar sınıflandırma için tamamen bağlantılı katmanlardır.

Adım 5: Modelin Derlenmesi

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.

Adım 6: Modeli Eğitmek

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])


  • ModelCheckpoint: Doğrulama doğruluğuna göre en iyi modeli kaydeder.
  • EarlyStopping: Modelin performansı belirli sayıda dönem boyunca iyileşmezse eğitimi durdurur.



Adım 7: Eğitim İlerlemesini Görselleştirme

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.

Adım 8: Tahminlerde Bulunmak

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)

Adım 9: İnce Ayar ve Deneme

Yapay zekalı bir radyolog oluşturmak yalnızca başlangıçtır. Modelinizde ince ayar yapmak ve geliştirmek için birkaç ipucu:

  • Veri Arttırma: Döndürme, çevirme ve yakınlaştırma gibi tekniklerle egzersiz verilerinizin çeşitliliğini artırın.
  • Öğrenimi Aktarın: Başlangıç noktası olarak VGG16 gibi önceden eğitilmiş modelleri kullanın ve bunlara özel veri kümenizde ince ayar yapın.
  • Hiperparametre Ayarlama: En iyi kombinasyonu bulmak için farklı öğrenme oranları, parti boyutları ve optimize edicilerle denemeler yapın.


Çözüm

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!