كاشف COVID-19 الآلي من صور فلوروغرافيا



في هذا الدليل ، ستتعلم كيفية اكتشاف COVID-19 تلقائيًا في مجموعة بيانات مختارة خصيصًا باستخدام Keras و TensorFlow والتعلم العميق.

مثل معظم الناس في العالم الآن ، أنا قلق بصدق حول COVID-19. لاحظت أنني بدأت في تحليل صحتي الشخصية باستمرار وأظن أنني أصاب بالفعل.

كلما زاد القلق بشأن هذا الأمر ، كلما ظهرت مجموعة مؤلمة من الأعراض الحقيقية مع hypochondria:

  • استيقظت في الصباح ، أشعر بالإرهاق قليلاً.
  • عندما خرجت من السرير ، كان لدي بالفعل تسرب من أنفي (على الرغم من أنه من المعروف الآن أن سيلان الأنف ليس من أعراض COVID-19).
  • بينما وصل إلى الحمام لأخذ منديل ، سعل أيضًا.

في البداية لم أعلق أهمية كبيرة على ذلك - لدي حساسية من حبوب اللقاح ، وبسبب الطقس الدافئ على الساحل الشرقي ، جاء الربيع في وقت مبكر من هذا العام. على الأرجح ، اندلعت حساسيتي للتو.

لكن الأعراض لم تتحسن طوال اليوم.

وها أنا جالس هنا أكتب هذا الدليل بميزان الحرارة في فمي. ويظهر أسفل إلى أسفل 37.4 درجة مئوية.درجة الحرارة أعلى من المعتاد 36.3 درجة مئوية.كل شيء فوق 37.2 درجة مئوية ، أعتبر بالفعل حمى طفيفة.

سعال وحمى صغيرة؟ يمكن أن يكون COVID-19 ... أو حساسيتي فقط.

من المستحيل أن تكتشف بدون اختبار ، وهذا "الجهل" بالتحديد هو الذي يجعل هذا الوضع خطيرًا جدًا على التوازن العقلي.

بالنسبة للناس ، لا يوجد شيء أكثر فظاعة من المجهول.

على الرغم من كل المخاوف ، أحاول التخلص منها بطريقة عقلانية. لقد تجاوزت الثلاثين من العمر ، وأنا في حالة جيدة ، ونظام المناعة لدي قوي للغاية. سأذهب إلى الحجر الصحي (فقط في حالة) ، سأستريح وأتعافى بشكل طبيعي. لا يخيفني COVID-19 من حيث صحتي الشخصية (على الأقل ما زلت أقول ذلك لنفسي).

ومع ذلك ، أنا قلق بشأن أقاربي المسنين ، بمن فيهم أولئك الذين يعانون من أمراض مزمنة ، وأولئك في دار رعاية أو مستشفى. إنهم ضعفاء ، وسيكون من المحزن حقًا أن نفقدهم بسبب هذه العدوى.

لكي لا أجلس مكتوفي الأيدي ولا أستسلم للضعف (سواء كان حساسية ، أو كفيد -19 أو مجرد قلق) ، قررت أن أفعل ما أفعله بشكل أفضل -خدمة المجتمع بأكمله من رؤية الآلة والتعلم العميق من خلال كتابة التعليمات البرمجية وإجراء التجارب وتعليم الآخرين كيفية استخدام رؤية الكمبيوتر والتعلم العميق في التطبيقات العملية في العالم الحقيقي .

ومع ذلك ، لنكون صادقين ، هذه ليست أكثر مقالة علمية كتبتها على الإطلاق. في الواقع ، أبعد ما يكون عن الأكثر. الأساليب ومجموعات البيانات المستخدمة لا تستحق النشر. لكنها يمكن أن تكون نقطة البداية لأولئك الذين يريدون المساعدة.

لكني أريد أن أفعل كل ما في وسعي. هذه المقالة هي ببساطة طريقي للتغلب عقليًا على الأوقات الصعبة وفي نفس الوقت مساعدة الآخرين في موقف مماثل.

آمل أنك تفهمني.

في درس اليوم سنقوم بما يلي:

  1. سنقوم بجمع مجموعة من البيانات المفتوحة من أجهزة فلوروجرام للمرضى الذين لديهم اختبار إيجابي لـ COVID-19.
  2. نجمع مجموعة مختارة من الفلوروجرام للمرضى الأصحاء.
  3. سنقوم بتدريب الشبكة العصبية التلافيفية للكشف تلقائيًا عن COVID-19 في الصور من المجموعة التي تم إنشاؤها.
  4. سنقيم النتائج التي تم الحصول عليها من وجهة نظر تعليمية.

تنويه: لقد ألمحت بالفعل ، ولكن سأقولها بصراحة. الأساليب والتقنيات في هذه المقالة هي لأغراض تعليمية فقط. هذه ليست دراسة علمية حقيقية ، ولن يتم نشرها في مجلة. المقالة مخصصة للقراء المهتمين بـ (1) رؤية الكمبيوتر / التعلم العميق ويريدون التعلم باستخدام الأساليب العملية ، و (2) مهتمون بالأحداث الجارية. أتوسل إليك أن تتصل بهذا الأمر.

COVID-19 على الفلوروجرام


في الجزء الأول ، نناقش كيف يمكن الكشف عن COVID-19 على الصور الشعاعية للصدر.

ثم ضع في اعتبارك مجموعة البيانات الخاصة بنا.

ثم سأوضح لك كيفية تدريب نموذج التعلم العميق باستخدام Keras و TensorFlow لتحديد COVID-19 في مجموعة بيانات الصورة.

مهمتي هي إلهامك وإظهار أن دراسة رؤية الكمبيوتر / التعلم العميق ، ثم تطبيق هذه المعرفة في المجال الطبي يمكن أن يكون لها تأثير كبير على العالم.

ببساطة: أنت لا تحتاج إلى شهادة طبية للمساهمة في الطب. يمكن لمتخصصي التعلم العميق الذين يعملون بشكل وثيق مع الأطباء ومقدمي الرعاية الصحية حل المشكلات المعقدة وإنقاذ الأرواح وجعل العالم مكانًا أفضل.

آمل أن يلهمك هذا الدليل للقيام بذلك.

ولكن مع كل ما قيل ، فإن المجلات العلمية ونظم تقييم الخبراء مليئة بالمواد ذات نماذج التنبؤ لـ COVID-19 ذات الجودة المشكوك فيها. من فضلك لا تأخذ الكود / النموذج من هذه المقالة ولا ترسله إلى المجلة أو تضعه في المجال العام على المواقع العلمية - ستضيف فقط بعض الضجيج.

بالإضافة إلى ذلك ، إذا كنت تنوي استخدام هذه المقالة (أو أي مقالة COVID-19 أخرى من الإنترنت) في بحثك الخاص ، فتأكد من مراجعة قواعد TRIPOD لإنشاء نماذج إعداد التقارير المتوقعة .

كما تعلم على الأرجح ، يؤدي استخدام الذكاء الاصطناعي في الطب إلى عواقب حقيقية للغاية . نشر أو استخدام هذه النماذج فقط بعد التشاور الوثيق مع خبير طبي.


تين. 1. مثال على مخطط الفلور من مريض باختبار إيجابي لـ COVID-19. باستخدام Keras و TensorFlow في مثل هذه الصور ، من الممكن تدريب المصنف على اكتشاف COVID-19. من

الصعب حاليًا العثور على اختبارات COVID-19 - فهي ببساطة ليست كافية ولا يمكن إجراؤها بسرعة كافية ، مما يسبب الذعر.

عندما يكون هناك ذعر ، يستغل بعض الناس الحقير ويبيعون مجموعات الاختبار المزيفة COVID-19 ، ويجدون الضحايا على الشبكات الاجتماعية والمراسلات الفورية .

بالنظر إلى أن عدد مجموعات اختبار COVID-19 محدود ، يجب عليك الاعتماد على طرق التشخيص الأخرى.

لتشخيص الالتهاب الرئوي والالتهاب الرئوي و / أو الخراجات و / أو تضخم الغدد الليمفاوية ، يعتمد الأطباء غالبًا على الأشعة السينية للصدر (تسمى عادةً الفلوروجرام).

يهاجم COVID-19 ظهارة الجهاز التنفسي ، وتساعد الأشعة السينية على فحص حالة رئة المريض. يتم تركيب أجهزة الأشعة السينية في معظم المستشفيات ، لذلك فمن المنطقي استخدام التصوير بالفلور لاختبار COVID-19 بدون مجموعات اختبار خاصة. العيب هو أن مثل هذا التحليل يتطلب متخصصًا في الأشعة ويستغرق وقتًا طويلاً. لذلك ، سيكون تطوير نظام آلي ذو قيمة كبيرة لتوفير الوقت الثمين للمهنيين الطبيين في جميع أنحاء العالم.

ملحوظة. تشير بعض المنشورات الأحدث إلى أن التصوير المقطعي المحوسب أفضل لتشخيص COVID-19 ، ولكننا في هذا الدرس لا نعمل إلا باستخدام برامج الفلوروجرام.

مجموعة البيانات



تين. 2. على اليسار عينات إيجابية (من المرضى المصابين) ، وعلى اليمين سلبية. يتم استخدام هذه الصور لتدريب نموذج للتنبؤ تلقائيًا بوجود المرض ،

وقد تم تجميع مجموعة البيانات الخاصة بنا من قبل الدكتور جوزيف كوهين ، وهو طالب دراسات عليا في جامعة مونتريال. في أوائل شهر مارس ، بدأ في جمع مخططات الفلور للمرضى الذين يعانون من COVID-19 و MERS و SARS و SARS ونشرها في المستودع على GitHub .

نحتاج إلى تنزيل ملف من المستودعmetadata.csvوتحديد الخطوط منه حيث يشار إليه

  1. نتيجة إيجابية على COVID-19.
  2. نوع الرئتين الأمامية والخلفية (PA). بقدر ما أفهم ، هذا هو نوع الصورة المستخدمة في الصور "الصحية".

تم العثور على ما مجموعه 25 fluorograms مع حالات إيجابية من COVID-19 (الشكل 2 ، اليسار).

بالنسبة للمرضى الأصحاء ، استخدمت مجموعة بيانات Cuggle (الالتهاب الرئوي) واخترت 25 صورة للمرضى الأصحاء (الشكل 2 ، على اليمين). تحتوي مجموعة البيانات هذه على عدد من المشاكل ، وهي التسميات الصاخبة / غير الصحيحة ، ولكنها ستفعل من أجل الفحص المفاهيمي للكشف الآلي COVID-19.

هيكل المشروع


في قسم التنزيلات على موقع الويب الخاص بي ، يمكنك إدخال عنوان بريدك الإلكتروني ومعرفة ارتباط للأرشيف مع التعليمات البرمجية والنصوص والملفات الأخرى لهذا المشروع. استخرج الملفات وسترى بنية الدليل:

$ tree --dirsfirst --filelimit 10
.
├── dataset
│   ├── covid [25 entries]
│   └── normal [25 entries]
├── build_covid_dataset.py
├── sample_kaggle_dataset.py
├── train_covid19.py
├── plot.png
└── covid19.model
3 directories, 5 files

Fluorograms في الدليل dataset/حيث يتم تقسيم فئتي البيانات إلى الدلائل covid/و normal/.

كلا النصين مقدمان لبناء مجموعة بيانات ، لكننا لن ننظر فيها اليوم. بدلاً من ذلك ، ضع في اعتبارك نصًا train_covid19.pyيعلمنا كاشف COVID-19.

التنفيذ


دعنا ننتقل إلى إنشاء شبكة عصبية تلافيفية. افتح الملف train_covid19.pyوالصق الرمز التالي:

# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import cv2
import os

يستخدم هذا البرنامج النصي عددًا من مكتبات التعلم العميق من TensorFlow 2.0 و Keras. بالإضافة إلى ذلك ، نستخدم scikit-learn ومكتبة Python القياسية لتعلم الآلة و matplotlib للرسم البياني و OpenCV لتحميل الصور ومعالجتها.

لتثبيت TensorFlow 2.0 (بما في ذلك مكتبات scikit-Learn المناسبة ، و OpenCV ، ومكتبات matplotlib) ، ما عليك سوى اتباع التعليمات الخاصة بـ Ubuntu أو macOS .

بعد ذلك ، سنحلل وسيطات سطر الأوامر ونهيئ المعلمات الزائدة:

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", required=True,
	help="path to input dataset")
ap.add_argument("-p", "--plot", type=str, default="plot.png",
	help="path to output loss/accuracy plot")
ap.add_argument("-m", "--model", type=str, default="covid19.model",
	help="path to output loss/accuracy plot")
args = vars(ap.parse_args())
# initialize the initial learning rate, number of epochs to train for,
# and batch size
INIT_LR = 1e-3
EPOCHS = 25
BS = 8

ثلاث حجج سطر الأوامر :

  • --dataset: المسار إلى مجموعة بيانات الإدخال
  • --plot: مسار اختياري لجدول الخروج لسجل التعلم. الافتراضي ما لم يتم تحديد خلاف ذلكplot.png
  • --model: مسار اختياري لنموذج المخرجات ؛ إفتراضيcovid19.model

تعمل السطور التالية على تهيئة سرعة التعلم الأولية وعدد العصور والمعلمات الفائقة لحجم الحزمة.

نحن الآن جاهزون لتنزيل الفلوروجرام ومعالجته مسبقًا:

# grab the list of images in our dataset directory, then initialize
# the list of data (i.e., images) and class images
print("[INFO] loading images...")
imagePaths = list(paths.list_images(args["dataset"]))
data = []
labels = []
# loop over the image paths
for imagePath in imagePaths:
	# extract the class label from the filename
	label = imagePath.split(os.path.sep)[-2]
	# load the image, swap color channels, and resize it to be a fixed
	# 224x224 pixels while ignoring aspect ratio
	image = cv2.imread(imagePath)
	image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
	image = cv2.resize(image, (224, 224))
	# update the data and labels lists, respectively
	data.append(image)
	labels.append(label)
# convert the data and labels to NumPy arrays while scaling the pixel
# intensities to the range [0, 1]
data = np.array(data) / 255.0
labels = np.array(labels)

لتحميل البيانات ، نلتقط جميع المسارات للصور في الكتالوج --dataset. ثم لكل منها imagePath:

  • نقوم باسترداد تسمية الفئة ( covidأو normal) من المسار .
  • نقوم بتحميله imageومعالجته مسبقًا ، وتحويله إلى RGB وتغيير حجمه إلى 224 × 224 بكسل ، ليكون جاهزًا للشبكة العصبية.
  • تحديث القوائم dataو labels.

ثم قم بقياس كثافة البكسل إلى النطاق [0 ، 1] وقم بتحويل البيانات والتسميات إلى تنسيق الصفيف NumPy.

بعد ذلك ، نقوم بتنفيذ التشفير المباشر labelsبتقسيم البيانات إلى مجموعات للتدريب / الاختبار:

# perform one-hot encoding on the labels
lb = LabelBinarizer()
labels = lb.fit_transform(labels)
labels = to_categorical(labels)
# partition the data into training and testing splits using 80% of
# the data for training and the remaining 20% for testing
(trainX, testX, trainY, testY) = train_test_split(data, labels,
	test_size=0.20, stratify=labels, random_state=42)
# initialize the training data augmentation object
trainAug = ImageDataGenerator(
	rotation_range=15,
	fill_mode="nearest")

الترميز المباشر يعني أن البيانات يتم تحويلها إلى التنسيق التالي:

[[0. 1.]
 [0. 1.]
 [0. 1.]
 ...
 [1. 0.]
 [1. 0.]
 [1. 0.]]

يتكون كل ملصق مشفر من مصفوفة ذات عنصرين: "hot" (1) أو "not" (0).

ثم تفصل الأسطر التالية بياناتنا ، تاركة 80٪ للتدريب و 20٪ للاختبار.

للتأكد من تعميم النموذج ، نقوم بإجراء زيادة البيانات عن طريق تعيين الصورة لتدويرها عشوائيًا بمقدار 15 درجة باتجاه عقارب الساعة أو عكس اتجاه عقارب الساعة.

تقوم الأسطر الثلاثة الأخيرة بتهيئة كائن مولد زيادة البيانات.

الآن تهيئة نموذجنا VGGNet و صقل ذلك :

# load the VGG16 network, ensuring the head FC layer sets are left
# off
baseModel = VGG16(weights="imagenet", include_top=False,
	input_tensor=Input(shape=(224, 224, 3)))
# construct the head of the model that will be placed on top of the
# the base model
headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(4, 4))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(2, activation="softmax")(headModel)
# place the head FC model on top of the base model (this will become
# the actual model we will train)
model = Model(inputs=baseModel.input, outputs=headModel)
# loop over all layers in the base model and freeze them so they will
# *not* be updated during the first training process
for layer in baseModel.layers:
	layer.trainable = False

ينشئ أول سطرين مثيلًا لشبكة VGG16 بأوزان تم تدريبها مسبقًا على ImageNet دون لمس الطبقة المتصلة بالكامل (FC).

ثم نقوم ببناء طبقة جديدة متصلة بالكامل ، تتكون من طبقات POOL => FC = SOFTMAX، ونضيفها فوق VGG16.

ثم نقوم بتجميد أوزان CONVVGG16 ، لذلك سيتم تدريب طبقة FC فقط . هذا يكمل الإعداد.

نحن الآن على استعداد لتجميع وتدريب نموذج التعلم العميق الخاص بنا لـ COVID-19:

# compile our model
print("[INFO] compiling model...")
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="binary_crossentropy", optimizer=opt,
	metrics=["accuracy"])
# train the head of the network
print("[INFO] training head...")
H = model.fit_generator(
	trainAug.flow(trainX, trainY, batch_size=BS),
	steps_per_epoch=len(trainX) // BS,
	validation_data=(testX, testY),
	validation_steps=len(testX) // BS,
	epochs=EPOCHS)

تجمع الخطوط الأولى الشبكة العصبية مع خيار تقليل سرعة التعلم والمحسن Adam. بالنظر إلى أن هذه مشكلة من فئتين ، فإننا نستخدم الخسارة "binary_crossentropy"بدلاً من الانتروبيا المتقاطعة.

لبدء عملية التعلم ، نطلق على طريقة fit_generator في Keras ، بتمرير الرسوم الفلورية من خلال كائن زيادة البيانات.

نقوم بتقييم النموذج:

# make predictions on the testing set
print("[INFO] evaluating network...")
predIdxs = model.predict(testX, batch_size=BS)
# for each image in the testing set we need to find the index of the
# label with corresponding largest predicted probability
predIdxs = np.argmax(predIdxs, axis=1)
# show a nicely formatted classification report
print(classification_report(testY.argmax(axis=1), predIdxs,
	target_names=lb.classes_))

للتقييم ، نقوم أولاً بعمل تنبؤات على مجموعة الاختبار ، مع الحفاظ على مؤشرات التنبؤ. ثم ننشئ ونعرض تقرير تصنيف باستخدام scikit-learn ، حيث توجد مثل هذه الوظيفة المساعدة.

بعد ذلك ، نحسب مصفوفة عدم الدقة لمزيد من التقييم الإحصائي:

# compute the confusion matrix and and use it to derive the raw
# accuracy, sensitivity, and specificity
cm = confusion_matrix(testY.argmax(axis=1), predIdxs)
total = sum(sum(cm))
acc = (cm[0, 0] + cm[1, 1]) / total
sensitivity = cm[0, 0] / (cm[0, 0] + cm[0, 1])
specificity = cm[1, 1] / (cm[1, 0] + cm[1, 1])
# show the confusion matrix, accuracy, sensitivity, and specificity
print(cm)
print("acc: {:.4f}".format(acc))
print("sensitivity: {:.4f}".format(sensitivity))
print("specificity: {:.4f}".format(specificity))

هنا نقوم بما يلي:

  • نحن نولد مصفوفة من عدم الدقة.
  • بمساعدتها ، نحسب الدقة والحساسية والخصوصية عن طريق طباعة جميع هذه المقاييس.

للاختبار الذاتي ، نقوم بإنشاء رسم بياني له تاريخ دقة وخسائر في التدريب ، ونخرجه في ملف رسومي:

# plot the training loss and accuracy
N = EPOCHS
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["accuracy"], label="train_acc")
plt.plot(np.arange(0, N), H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy on COVID-19 Dataset")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig(args["plot"])

أخيرًا ، احفظ نموذج المصنف tf.kerasعلى القرص:

# serialize the model to disk
print("[INFO] saving COVID-19 detector model...")
model.save(args["model"], save_format="h5")

تدريب الكاشف


بعد تنزيل جميع الملفات من الأرشيف مع المصادر والنصوص المذكورة أعلاه ، افتح وحدة التحكم وقم بتشغيل الأمر التالي لتدريب الكاشف:

$ python train_covid19.py --dataset dataset
[INFO] loading images...
[INFO] compiling model...
[INFO] training head...
Epoch 1/25
5/5 [==============================] - 20s 4s/step - loss: 0.7169 - accuracy: 0.6000 - val_loss: 0.6590 - val_accuracy: 0.5000
Epoch 2/25
5/5 [==============================] - 0s 86ms/step - loss: 0.8088 - accuracy: 0.4250 - val_loss: 0.6112 - val_accuracy: 0.9000
Epoch 3/25
5/5 [==============================] - 0s 99ms/step - loss: 0.6809 - accuracy: 0.5500 - val_loss: 0.6054 - val_accuracy: 0.5000
Epoch 4/25
5/5 [==============================] - 1s 100ms/step - loss: 0.6723 - accuracy: 0.6000 - val_loss: 0.5771 - val_accuracy: 0.6000
...
Epoch 22/25
5/5 [==============================] - 0s 99ms/step - loss: 0.3271 - accuracy: 0.9250 - val_loss: 0.2902 - val_accuracy: 0.9000
Epoch 23/25
5/5 [==============================] - 0s 99ms/step - loss: 0.3634 - accuracy: 0.9250 - val_loss: 0.2690 - val_accuracy: 0.9000
Epoch 24/25
5/5 [==============================] - 27s 5s/step - loss: 0.3175 - accuracy: 0.9250 - val_loss: 0.2395 - val_accuracy: 0.9000
Epoch 25/25
5/5 [==============================] - 1s 101ms/step - loss: 0.3655 - accuracy: 0.8250 - val_loss: 0.2522 - val_accuracy: 0.9000
[INFO] evaluating network...
              precision    recall  f1-score   support
       covid       0.83      1.00      0.91         5
      normal       1.00      0.80      0.89         5
    accuracy                           0.90        10
   macro avg       0.92      0.90      0.90        10
weighted avg       0.92      0.90      0.90        10
[[5 0]
 [1 4]]
acc: 0.9000
sensitivity: 1.0000
specificity: 0.8000
[INFO] saving COVID-19 detector model...

التشخيص التلقائي لـ COVID-19 وفقًا لنتائج التصوير بالفلور


: , «» COVID-19. . , , , ( , ). , / COVID-19.

كما يتبين من النتائج المذكورة أعلاه ، فإن الكاشف الأوتوماتيكي لدينا لديه دقة حوالي 90-92٪ على مجموعة عينات موجودة. يعتمد هذا التصنيف على تحليل الصور فقط. أثناء التدريب ، لم يتم استخدام المزيد من البيانات ، بما في ذلك الموقع الجغرافي ، الكثافة السكانية ، إلخ.

كانت الحساسية 100٪ ، وكانت النوعية 80٪ ، مما يعني:

  • يتم التعرف على المرضى المصابين بالفعل في 100 ٪ من الحالات.
  • يتم التعرف على المرضى الأصحاء على أنهم يتمتعون بصحة جيدة مع احتمال بنسبة 80 ٪.

كما يوضح الرسم البياني لسجل التدريب ، فإن شبكتنا ليست متدربة للغاية ، على الرغم من مجموعة بيانات محدودة للغاية : تعد



القدرة على التعرف على COVID-19 بدقة مطلقة رائعة ، على الرغم من أن معدل الإيجابيات الخاطئة مقلق قليلاً ، لأنه سيتم إرسال العديد من الأشخاص الأصحاء إلى الحجر الصحي مع المرضى المصابين حقا.

إن موازنة الحساسية والخصوصية أمر صعب للغاية عندما يتعلق الأمر بالتطبيقات الطبية ، خاصة في حالة الأمراض المعدية.

عندما يتعلق الأمر برؤية الكمبيوتر والتدريب العميق في الطب ، يجب أن تتذكر دائمًا أن نماذجنا التنبؤية يمكن أن يكون لها عواقب حقيقية للغاية - يمكن أن يكلف التشخيص الفائت لقمة العيش.

مرة أخرى ، يتم جمع هذه النتائج للأغراض التعليمية فقط. هذه المقالة والنتائج المصاحبة لها غير معدة للنشر في مجلة علمية ولا تتوافق مع قواعد TRIPOD لإنشاء نماذج تقارير تنبؤية .

القيود والتحسينات والعمل في المستقبل



تين. 4. في الوقت الحالي ، يعاني أخصائيو الذكاء الاصطناعي (AI) ومتخصصو التعلم العميق من نقص في بيانات الجودة من أجل التدريب الفعال لأنظمة الكشف الآلي COVID-19 على الصور ( مصدر الصورة )

واحدة من القيود الرئيسية لإنشاء مثل هذه الأنظمة هي البيانات. ببساطة ليس لدينا ما يكفي من البيانات (الموثوقة) لتدريب كاشف COVID-19. تزدحم المستشفيات بمرضى COVID-19 ، ولكن بالنظر إلى حقوقهم وخصوصيتهم ، يصبح من الصعب جمع مجموعات عالية الجودة من الصور الطبية في الوقت المناسب.

أفترض أنه في الأشهر الـ 12 إلى الـ 18 المقبلة سيتم حل المشكلة ، ولكننا الآن راضون بما لدينا. لقد بذلت قصارى جهدي (مع مراعاة حالتي العقلية والبدنية الحالية) لرسم دليل لأولئك المهتمين باستخدام رؤية الكمبيوتر والتعلم العميق في مكافحة COVID-19 ، مع مراعاة قيود الوقت والموارد. ولكن يجب أن أذكرك بأنني لست خبيرًا طبيًا.

يجب أن يخضع كاشف COVID-19 الحقيقي لاختبار صارم من قبل أطباء مدربين يعملون جنبًا إلى جنب مع ممارسي التعلم العميق ذوي الخبرة. الطريقة الموصوفة هنا ، بالطبع ، ليست مناسبة للاستخدام العملي ومخصصة للأغراض التعليمية فقط.

بالإضافة إلى ذلك ، يجب أن نتساءل عما "يتعلمه" هذا النموذج بالفعل. كما قلت فيمن خلال دليل Grad-CAM الأسبوع الماضي ، من الممكن تمامًا أن يدرس نموذجنا أنماطًا لا تتعلق بـ COVID-19 ، ولكنها ببساطة اختلافات بين مجموعتين من البيانات (أي بين المرضى الذين يعانون من COVID-19 أو بدونه). لتأكيد النتائج ، يلزم إجراء اختبار شامل ومساعدة الخبراء.

أخيرًا ، ستكون أجهزة الكشف المستقبلية (والأفضل) متعددة الوسائط.

الآن نحن نفكر فقط في الصور (على سبيل المثال ، الأشعة السينية). يجب أن تستخدم أفضل أجهزة الكشف الآلي COVID-19 عدة مصادر بيانات ، على سبيل المثال لا الحصر ، الصور ، بما في ذلك العلامات الحيوية للمريض ، والكثافة السكانية ، والموقع الجغرافي ، وما إلى ذلك.

آمل أن يكون هذا الدليل بمثابة نقطة بداية لأي شخص مهتم باستخدام رؤية الكمبيوتر والتعلم العميق للكشف تلقائيًا عن COVID-19.

ماذا بعد؟


عادةً ما أنهي مقالات مدونتي بتوصية من أحد كتبي أو دوراتي حتى تتمكن من معرفة المزيد حول استخدام رؤية الكمبيوتر والتعلم العميق. احتراما لخطورة الفيروس التاجي ، لن أقوم بذلك - الآن ليس الوقت أو المكان.

بدلاً من ذلك ، سأقول أننا الآن في فترة رهيبة للغاية من الحياة. مثل المواسم ، سوف يمر كل شيء ، ولكن في الوقت الحالي تحتاج إلى الجلوس والاستعداد للشتاء البارد - من المحتمل أن الأسوأ لم يأت بعد.

تلقيت عدة رسائل من قراء PyImageSearch الذين يرغبون في استخدام فترة التوقف هذه لدراسة رؤية الكمبيوتر والتعلم العميق ، بدلاً من الجنون في منازلهم. هذه فكرة مفيدة.

ملخص


في هذا الدليل ، تعلمت كيفية استخدام Keras و TensorFlow لتدريب جهاز الكشف الآلي COVID-19 على مجموعة فلوروغرام.

لا توجد مجموعات بيانات صور عالية الجودة ومراجعة من قبل النظراء لـ COVID-19 (حتى الآن) ، لذلك كان علينا العمل مع ما كان لدينا ، أي مستودع جوزيف كوهين على GitHub :


استخدمنا Keras و TensorFlow لتدريب كاشف COVID-19 ، الذي يوضح دقة 90-92٪ وحساسية 100٪ وخصوصية 80٪ على مجموعة الاختبار (نظرًا لمجموعة البيانات المحدودة لدينا).

ضع في اعتبارك أن كاشف COVID-19 الموصوف للأغراض التعليمية فقط.

All Articles