Как стать автором
Обновить

Автоматический детектор COVID-19 по снимкам флюорографии

Время на прочтение15 мин
Количество просмотров2.3K
Автор оригинала: Adrian Rosebrock


Из этого руководства вы узнаете, как автоматически обнаружить COVID-19 в специально подобранном наборе данных с помощью Keras, TensorFlow и глубокого обучения.

Как и большинство людей в мире прямо сейчас, меня искренне беспокоит COVID-19. Я замечаю, что начал постоянно анализировать своё личное здоровье и подозревать, что я уже заразился.

Чем больше я об этом беспокоюсь, тем больше проявляется болезненное сочетание реальных симптомов с ипохондрией:

  • Проснулся утром, чувствую себя немного разбитым.
  • Когда выбрался из постели, то у меня уже потекло из носа (хотя теперь известно, что насморк не является симптомом COVID-19).
  • Пока добрался до ванной, чтобы взять салфетку, ещё и кашлянул.

Сначала я не придал этому большого значения — у меня аллергия на пыльцу, и из-за тёплой погоды на восточном побережье весна в этом году наступила рано. Скорее всего, просто разыгралась моя аллергия.

Но симптомы не улучшались в течение всего дня.

И вот я сижу здесь, пишу это руководство с термометром во рту; и взгляд вниз показывает 37,4° C. Температура выше моих обычных 36,3° С. Всё, что выше 37,2°C, я уже считаю небольшой лихорадкой.

Кашель и небольшая лихорадка? Это может быть COVID-19… или просто моя аллергия.

Это невозможно узнать без теста, и именно иакое «незнание» делает эту ситуацию настолько опасной для психического равновесия.

Для людей нет ничего более страшного, чем неизвестность.

Несмотря на все опасения, я стараюсь избавиться от них рациональным путём. Мне уже за тридцать, я в отличной форме, моя иммунная система очень сильна. Сяду в карантин (на всякий случай), отдохну и нормально переболею. COVID-19 не пугает меня с точки зрения моего личного здоровья (по крайней мере, я продолжаю говорить это себе).

Тем не менее, я беспокоюсь о своих пожилых родственниках, в том числе о тех, у кого есть хронические заболевания, и о тех, кто находится в доме престарелых или больнице. Они уязвимы, и будет поистине печально, если мы их потеряем из-за этой инфекции.

Чтобы не сидеть сложа руки и не поддаваться слабости (будь то аллергия, COVID-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 и ОРВИ и публиковать их в репозитории на GitHub.

Нам требуется скачать из репозитория файл metadata.csv и выбрать из него строки, где указан

  1. Положительный результат на COVID-19.
  2. Вид лёгких 'posterior-anterior' (PA). Насколько я понимаю, именно такой вид снимка используется на «здоровых» снимках.

В общей сложности нашлось 25 флюорограмм с положительными случаями COVID-19 (рис.2, слева).

Для здоровых пациентов я использовал набор данных Кэггла (пневмония) и отобрал 25 снимков здоровых пациентов (рис.2, справа). У этого набора данных известен ряд проблем, а именно шумные/неправильные метки, но для концептуальной проверки автоматического детектора COVID-19 сойдёт.

Структура проекта


В секции Downloads на моём сайте можно ввести свой адрес электронной почты и узнать ссылку на архив с кодом, скриптами и другими файлами для этого проекта. Извлеките файлы — и увидите структуру каталогов:

$ 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

Флюорограммы лежат в каталоге 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 c разделением данных на наборы для обучения/тестирования:

# 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.

Потом замораживаем веса CONV для VGG16, так что будет обучаться только слой 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", а не перекрёстную энтропию.

Чтобы запустить процесс обучения, вызываем в Keras метод fit_generator, пропуская флюорограммы через наш объект аугментации данных.

Оцениваем модель:

# 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. В настоящее время специалисты по искусственному интеллекту (ИИ) и специалисты по глубокому обучению страдают от недостатка качественных данных для эффективного обучения систем автоматического обнаружения 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 предназначен только для образовательных целей.
Теги:
Хабы:
+3
Комментарии3

Публикации

Изменить настройки темы

Истории

Работа

Data Scientist
60 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн