تصميم التطبيقات الطبية باستخدام Deep Learning وKeras: تحليل صور الأشعة السينية
مقدمة
في هذا الدرس، سنغطي بالتفصيل كيفية بناء تطبيق لتحليل صور الأشعة السينية (X-ray) باستخدام تقنيات التعلم العميق (Deep Learning) وأداة Keras. سنقوم بتطبيق شبكة عصبية تلافيفية (CNN) لتحليل الصور واستخدامها في تصنيف الحالات الطبية مثل الالتهاب الرئوي.
1. مقدمة عن Deep Learning في الطب
التعلم العميق (Deep Learning) هو تقنية تعتمد على الشبكات العصبية العميقة لتحليل البيانات المعقدة. في الطب، يتم استخدامه بشكل متزايد لتسريع عمليات التشخيص، خاصة في تحليل الصور الطبية مثل الأشعة السينية (X-rays)، الرنين المغناطيسي (MRI)، وصور التصوير المقطعي (CT). واحدة من أشهر التطبيقات هي اكتشاف الأمراض في صور الصدر، مثل تشخيص الالتهاب الرئوي أو الكشف عن الأورام.
سنستخدم مكتبة Keras، وهي مكتبة تعتمد على TensorFlow، لتسهيل بناء نماذج التعلم العميق. بالإضافة إلى ذلك، سنستخدم CNNs لأنها تعد من أفضل الشبكات لمعالجة وتحليل الصور.
2. إعداد بيئة العمل
قبل أن نبدأ في بناء النموذج، تأكد من أن بيئة العمل لديك مهيئة بشكل صحيح. يجب عليك تثبيت كل من TensorFlow و Keras. يمكنك تثبيتهما باستخدام الأمر التالي:
pip install tensorflow keras
بالإضافة إلى ذلك، ستحتاج إلى مكتبات إضافية لتحميل البيانات ومعالجتها مثل matplotlib و numpy:
pip install numpy matplotlib
3. تحميل ومعالجة بيانات الأشعة السينية
الخطوة التالية هي الحصول على مجموعة بيانات لصور الأشعة السينية. يوجد العديد من مجموعات البيانات المفتوحة المصدر مثل مجموعة الالتهاب الرئوي على Kaggle، والتي تحتوي على صور الأشعة السينية للحالات السليمة وحالات الالتهاب الرئوي.
بعد تنزيل البيانات، يجب تنظيمها في مجلدات مثل “train” و”test” و”val” كما هو موضح:
- train: يحتوي على صور التدريب
- test: يحتوي على صور الاختبار
- val: يحتوي على صور التقييم
4. بناء نموذج Convolutional Neural Network (CNN)
CNNs هي نوع من الشبكات العصبية المتخصصة في معالجة الصور. تتكون من عدة طبقات تشمل الطبقات التلافيفية (Convolutional Layers)، طبقات التجميع (Pooling Layers)، وطبقات مكتملة الاتصال (Fully Connected Layers).
الخطوة الأولى هي بناء هيكل الشبكة. سنقوم ببناء نموذج باستخدام Keras يحتوي على عدة طبقات تلافيفية لتحديد الأنماط المهمة في صور الأشعة السينية.
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
# إنشاء النموذج
model = Sequential()
# إضافة الطبقات التلافيفية (Convolutional Layers)
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
# Flatten لتحويل المخرجات إلى شكل مسطح
model.add(Flatten())
# الطبقات المكتملة الاتصال (Fully Connected Layers)
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # لتجنب الإفراط في التعميم
model.add(Dense(1, activation='sigmoid')) # استخدام sigmoid لتصنيف ثنائي
# تجميع النموذج
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
هنا، نستخدم ثلاثة طبقات تلافيفية تليها طبقة Flatten لتحويل المصفوفات ثنائية الأبعاد إلى متجه واحد. الطبقة الأخيرة هي طبقة مكتملة الاتصال مع وحدة تنشيط Sigmoid لإنتاج مخرجات بين 0 و1 للتصنيف الثنائي (سليم أو مصاب).
5. تحميل البيانات وتطبيق Data Augmentation
البيانات الطبية عادة ما تكون محدودة، لذا نحتاج إلى تعزيز البيانات (Data Augmentation) لتحسين أداء النموذج. هذا يساعد في توليد بيانات جديدة من خلال التدوير، التكبير، والتقليب الأفقي للصور.
from keras.preprocessing.image import ImageDataGenerator
# إنشاء مولد بيانات مع تطبيق Data Augmentation على مجموعة التدريب
train_datagen = ImageDataGenerator(
rescale=1./255, # إعادة قياس القيم بين 0 و 1
rotation_range=20, # تدوير الصور
zoom_range=0.2, # تكبير الصورة
horizontal_flip=True # التقليب الأفقي
)
# مولد بيانات للاختبار والتقييم (بدون augmentation)
test_datagen = ImageDataGenerator(rescale=1./255)
# تحميل البيانات من المجلدات
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
validation_generator = test_datagen.flow_from_directory(
'data/val',
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
قمنا هنا بتهيئة مولد بيانات لمجموعة التدريب مع تطبيق التحسينات المناسبة. تم ضبط المولد على تقسيم الصور إلى دفعات من 32 صورة بحجم 150×150 بكسل.
6. تدريب النموذج
الآن يمكننا البدء في تدريب النموذج على مجموعة البيانات. سنستخدم الدالة fit
لتدريب النموذج مع تعيين عدد الحلقات (epochs) وتحديد عدد الخطوات في كل حقبة.
history = model.fit(
train_generator,
steps_per_epoch=100, # عدد الخطوات في كل حلقة
epochs=10, # عدد الحلقات
validation_data=validation_generator,
validation_steps=50
)
هنا، نقوم بتدريب النموذج لمدة 10 حلقات (epochs) مع 100 خطوة في كل حلقة. يتم تقييم الأداء باستخدام بيانات التقييم في كل حلقة.
7. تقييم النموذج واختبار الأداء
بعد تدريب النموذج، يجب تقييم أدائه باستخدام مجموعة بيانات الاختبار. هذا يتيح لك معرفة مدى دقة النموذج في تصنيف الصور التي لم يرها من قبل.
test_generator = test_datagen.flow_from_directory(
'data/test',
target_size=(150, 150),
batch_size=32,
class_mode='binary'
)
# تقييم النموذج
test_loss, test_acc = model.evaluate(test_generator, steps=50)
print(f'Test accuracy: {test_acc}')
قمنا هنا بتقييم النموذج باستخدام بيانات الاختبار، والتي تعطي دقة النموذج (accuracy) على البيانات الجديدة.
8. الخاتمة
في هذا الدرس، تعلمنا كيفية بناء تطبيق طبي يعتمد على تحليل صور الأشعة السينية باستخدام تقنيات التعلم العميق وإطار العمل Keras. لقد قمنا بتحميل البيانات، بناء نموذج شبكة عصبية تلافيفية، وتدريب النموذج على بيانات معززة. يمكنك تحسين النموذج بشكل أكبر من خلال زيادة حجم البيانات، تعديل بنية النموذج، أو استخدام تقنيات أخرى لتحسين الأداء.
اترك تعليقاً