Detectar COVID-19 em raios-X com Keras, TensorFlow e Deep Learning


Com a ajuda deste guia, com a ajuda de Keras, TensorFlow e aprendizado profundo, aprenderemos como determinar automaticamente o COVID-19 a partir de um conjunto de dados de raio-x manualmente

Como tantos outros, estou sinceramente preocupado com o COVID-19. Percebi que estou constantemente analisando minha condição e me perguntando se vou pegar a doença e quando ela acontecerá. E quanto mais me preocupo com isso, mais ele se transforma em um jogo doloroso da mente, no qual a sintomatologia é combinada com hipocondria:

  • Acordei de manhã, sentindo alguma dor e fraqueza.
  • Quando me arrastei para fora da cama, encontrei um corrimento nasal (embora já se saiba que um corrimento nasal não é um sintoma do COVID-19).
  • Quando cheguei ao banheiro para pegar um lenço de papel, eu já estava tossindo.

No começo, não prestei muita atenção: sou alérgico ao pólen e, devido ao clima quente na costa leste dos Estados Unidos, a primavera foi um começo de primavera. Muito provavelmente, esses são sintomas alérgicos. Mas durante o dia minha condição não melhorou. Sento e escrevo este manual com um termômetro na boca. Olho para baixo e vejo 37,4 ° C. Minha temperatura corporal normal é um pouco mais baixa que outras, a 36,3 ° C. Tudo acima de 37,2 ° C já é um pouco de calor para mim.

Tosse e febre leve? Pode ser COVID-19 ... ou apenas minha alergia. É impossível descobrir sem testar, e é precisamente essa "ignorância" que torna a situação tão intimidadora no nível humano.

Minuto de Cuidados com OVNI


COVID-19 — , SARS-CoV-2 (2019-nCoV). — , /, .



, .

, , .

: |

Apesar dos meus medos, tento pensar racionalmente. Tenho pouco mais de 30 anos, estou em ótima forma e minha imunidade é forte. Vou me colocar em quarentena (apenas no caso), descansar e lidar com tudo. O COVID-19 não me assusta do ponto de vista da saúde pessoal (pelo menos eu o suportarei).

Então, eu me preocupo com meus parentes idosos, incluindo todos aqueles que já foram diagnosticados com a doença, bem como aqueles que estão em lares e hospitais. Essas pessoas são vulneráveis ​​e será terrível se elas morrerem devido ao COVID-19.

Em vez de não fazer nada e deixar minha doença me manter em casa (seja alergia, COVID-19 ou meus medos), decidi fazer o que podia:Escreverei o código, conduzirei experimentos e, usando exemplos práticos, ensinarei outras pessoas a usar a visão computacional e o aprendizado profundo .

Devo dizer imediatamente que este não é o artigo mais científico escrito por mim. Ela não é científica. Os métodos e conjuntos de dados usados não valem a pena publicar. Mas eles servem como ponto de partida para quem quer pelo menos algo para ajudar.

Estou preocupado com você e esta comunidade. Quero ajudar o que posso: este artigo é minha maneira de lidar mentalmente com os tempos difíceis, enquanto ajuda os outros em uma situação semelhante.

Neste guia, você aprenderá:

  1. Como coletar um conjunto de dados de código-fonte aberto de imagens de raios-X de pacientes com COVID-19 detectado.
  2. «» ( ) .
  3. COVID-19 .
  4. .

Nota: Eu já sugeri isso, mas agora vou dizer diretamente. As técnicas descritas aqui são apenas para fins educacionais. Este não é um estudo científico rigoroso, não será publicado em periódicos. Este artigo é para leitores interessados ​​em visão computacional e aprendizado profundo, que desejam aprender na prática, bem como para aqueles que são inspirados pelos eventos atuais. Peço que você leve tudo isso em consideração.

Na primeira parte do manual, discutiremos como detectar o COVID-19 em radiografias pulmonares. Em seguida, discutimos o próprio conjunto de dados. Depois, mostrarei como treinar o modelo usando Keras e TensorFlow para prever o COVID-19 em nossas imagens.

Explicação


Este artigo de detecção automática COVID-19 foi escrito apenas para fins educacionais. Ele não descreve um sistema de diagnóstico confiável e preciso COVID-19, não foi testado nem do ponto de vista profissional nem acadêmico.

Meu objetivo é inspirá-lo e mostrar como o estudo da visão computacional e do aprendizado profundo, com a subsequente aplicação desse conhecimento na área médica, pode ter um grande impacto no mundo.

Imagine: você não precisa de educação médica para influenciar a medicina . Hoje, profissionais de treinamento profundo trabalham em estreita colaboração com médicos e outros médicos na solução de problemas complexos, salvam vidas e tornam o mundo um lugar melhor.

Espero que minha liderança inspire você a fazê-lo.

Porém, considerando tudo o exposto, pesquisadores, curadores de revistas e o sistema de revisão já estão sobrecarregados com trabalhos que descrevem modelos de previsão de qualidade duvidosa do COVID-19. Por favor, não envie o código e o modelo deste artigo para uma revista ou alguma publicação científica - você apenas aumentará o caos .

Além disso, se você deseja realizar pesquisas com base neste artigo (ou em qualquer outra publicação sobre o COVID-19), siga o guia TRIPOD para descrever modelos preditivos.

Como você entende, o uso da inteligência artificial na área médica pode ter consequências muito graves. Publique e use esses modelos somente se você for um especialista médico ou se tiver sido aconselhado em detalhes por esses especialistas.

Como o COVID-19 pode ser detectado em raios-x?



Figura 1: Exemplo de radiografia de um paciente diagnosticado com COVID-19. Nestas imagens, você pode ensinar o classificador usando Keras e TensorFlow para determinar o COVID-19.

Testar o COVID-19 agora é difícil - não há testes suficientes , mas é impossível produzi-los rapidamente, o que só aumenta o pânico. E em pânico, há patifes que estão tentando lucrar com os outros e vender testes falsos no COVID-19 , encontrando-se vítimas inocentes em redes sociais e mensageiros instantâneos.

Dado o número limitado de testes, precisamos confiar em outros métodos de diagnóstico.

Decidi estudar os raios-X, porque os médicos costumam usá-los e tomografias para diagnosticar pneumonia, inflamação pulmonar, abscessos e linfonodos aumentados. Como o vírus ataca as células epiteliais que revestem o trato respiratório, podemos usar raios-X para estudar a condição dos pulmões humanos. E como as máquinas de raio-X estão em quase toda parte, usando as imagens você pode detectar o COVID-19 sem kits de teste.

As desvantagens do método incluem a necessidade de radiologistas, bem como um tempo de processamento significativo. E o tempo é especialmente caro quando as pessoas estão doentes em todo o mundo. E para economizar tempo dos médicos, você precisa criar um sistema de análise automática .

Nota: , , COVID-19 . . , , , , COVID-19, .

COVID-19



Figura 2: à esquerda, imagens de pessoas com resultado positivo (infectado), à direita - com negativo. Nestas imagens, ensinaremos o modelo usando TensorFlow e Keras para prever automaticamente a presença de COVID-19 (ou seja, uma doença resultante de coronavírus).

O conjunto de dados de imagens de pacientes usado com o COVID-19 usado aqui foi compilado sob a supervisão do Dr. Joseph Cohen , um estudante de graduação da Universidade de Montreal. Alguns dias atrás, Cohen começou a coletar imagens de raios-X de pacientes com COVID-19 e enviá-las para o repositório GitHub. Lá você encontrará exemplos não apenas desta doença, mas também de MERS, SARS e SDRA.

Para criar um conjunto de dados I:

  1. Analise o arquivo metadata.csv no repositório.
  2. Selecionadas todas as linhas:

No total, foram obtidas 25 fotos com resultados positivos no COVID-19 ( Figura 2 , esquerda ).

Agora escolha as fotos de pessoas saudáveis.

Para fazer isso, peguei um conjunto de dados de raios-X do pulmão de Kaggle (pneumonia) e selecionei 25 imagens de pessoas saudáveis ( Figura 2 , à direita ). Esse conjunto de dados possui várias desvantagens, incluindo etiquetas com preenchimento incorreto ou incorreto, mas é adequado como ponto de partida para testar a hipótese do detector COVID-19.

Como resultado, recebi 50 injeções: 25 pacientes com COVID-19 e 25 saudáveis. Você pode baixar o conjunto de dados no link. Além disso, adicionei scripts Python com os quais gerei o conjunto de dados, mas neste artigo não os considerei.

Estrutura do projeto


Faça o download do código e dos dados. Retire os arquivos de lá e você obtém a seguinte estrutura de diretórios:

$ 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

Três diretórios, cinco arquivos. O conjunto de dados está no diretório / conjunto de dados e é dividido em duas classes - covid / e normal /. Abaixo, examinamos o script train_covid19.py que treina nosso detector COVID-19.

Implementação do script de treinamento


Vamos prosseguir com o ajuste fino da rede neural convolucional, que diagnosticará automaticamente o COVID-19 usando Keras, TensorFlow e aprendizado profundo.

Abra o arquivo train_covid19.py e cole o seguinte código:

# 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

Este script tira proveito das bibliotecas TensorFlow 2.0 e Keras selecionando importações tensorflow.keras. Também usamos:

  • scikit-learn , esta é uma biblioteca de aprendizado de máquina Python de fato ,
  • matplotlib para gráficos,
  • OpenCV para upload e pré-processamento de imagens em um conjunto de dados.

Para aprender a instalar o TensorFlow 2.0 (incluindo scikit-learn, OpenCV e matplotlib), confira meus tutoriais para Ubuntu ou macOS .

Agora analisamos os argumentos para a linha de comando e inicializamos os hiperparâmetros:

# 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

Nossos três argumentos de linha de comando ( linhas 24-31 ) incluem:

  • --dataset: caminho para o conjunto de dados de entrada.
  • --plot: caminho opcional para o planejamento de saída do histórico de aprendizado. Por padrão, o gráfico é chamado plot.png, a menos que um nome diferente seja especificado na linha de comando.
  • --model: caminho opcional para o nosso modelo de definição COVID-19 de saída. Por padrão, é chamado covid19.model.

Agora, inicializamos a frequência inicial de aprendizado, o número de eras de treinamento e os hiperparâmetros do tamanho do pacote ( linhas 35-37 ).

Em seguida, baixe e pré-processe os raios-x:

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

Para carregar os dados, pegamos todos os caminhos para as imagens no diretório --dataset ( linha 42 ) e, em seguida, para cada imagePath:

  • Extraímos do caminho ( linha 49 ) o rótulo da classe (covid ou normal).
  • Carregamos a imagem, convertemos em canais RGB e a reduzimos para um tamanho de 224x224 pixels para alimentar uma rede neural convolucional ( linhas 53-55 ).
  • Atualização de listas de dados e etiquetas ( linhas 58 e 59 ).

Em seguida, escalamos a intensidade do pixel em um intervalo [0, 1]e convertemos os dados e os rótulos no formato de matriz NumPy ( linhas 63 e 64 ).

Em seguida, executaremos uma codificação de hot label de nossos rótulos e dividiremos o conjunto de dados em conjuntos de treinamento e teste:

# perform one-hot encoding on the labels
lb = LabelBinarizer()
labels = lb.fit_transform(labels)
labels = to_categorical(labels); print(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")

A codificação unitária de etiquetas é realizada nas linhas 67-69 : os dados serão apresentados neste formato:

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

Cada etiqueta codificada dessa maneira consiste em uma matriz de dois elementos, na qual um dos elementos é "quente" (1) e o segundo é "não" (0). Nas linhas 73 e 74, o conjunto de dados é dividido em duas partes: 80% para treinamento e 20% para teste.

Para generalizar o modelo, realizamos a expansão dos dados (aumento dos dados), definindo uma rotação aleatória da imagem em 15 graus no sentido horário ou contra-atacando. O objeto de geração de extensão é inicializado nas linhas 77-79 .

Agora, inicialize o modelo VGGNet e prepare-o para o ajuste fino :

# 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

Nas linhas 83 e 84 , uma instância da rede neural VGG16 é criada com os pesos obtidos previamente no ImageNet sem uma camada totalmente conectada.

Em seguida, criaremos uma camada totalmente conectada, consistindo de camadas POOL => FC = SOFTMAX ( linhas 88-93 ) e colocá-la sobre o VGG16 ( linha 97 ).

Agora congele pesos CONV para que apenas uma camada totalmente conectada seja treinada ( linhas 101-102 ). Isso termina a sintonia.

Agora estamos prontos para compilar e treinar nosso modelo de aprendizado profundo:

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

Nas linhas 106-108, compilamos o treinamento e o otimizador de velocidade de atenuação da rede Adam. Dado que essa é uma tarefa de classificação de duas classes, usamos a função de perda de entropia cruzada binária (binary_crossentropy), não a entropia cruzada categórica (entropia cruzada categórica).

Para iniciar o treinamento, chamamos Keras-method fit_generator e fornecemos a ele nossos raios-X através de uma extensão de objeto de dados ( linhas 112-117 ).

Agora vamos avaliar o modelo:

# 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_))

Para fazer isso, primeiro executamos a previsão com base no conjunto de testes e obtemos os índices de previsão ( linhas 121-125 ). Em seguida, geraremos e exibiremos o relatório de classificação ( linhas 128 e 129 ) usando o utilitário scikit-learn .

Agora vamos calcular a matriz de confusão para estimativa estatística futura:

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

Estamos aqui:

  • gerar uma matriz de imprecisões ( linha 133 ),
  • usamos essa matriz para determinar a precisão, sensibilidade e especificidade ( linhas 135-137 ) e, em seguida, derivamos todas essas métricas ( linhas 141-143 ).

Em seguida, para análises subsequentes, exibimos na forma de gráfico em um arquivo o histórico de alterações de precisão e perda:

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

E, finalmente, serializamos o modelo do classificador tf.keras em disco:

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

Treinamos nosso detector com Keras e TensorFlow


Após a implementação do script train_covid19.py, podemos treinar o detector automático.

Faça o download do código fonte, conjunto de dados e modelo pré-treinado. Abra um terminal e execute o comando para treinar o detector:

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

Diagnóstico automático de raios-X


Nota: nesta parte, não "resolvemos" o problema de determinar o COVID-19. Está escrito no contexto da situação atual e apenas para fins educacionais. Este é um exemplo da aplicação prática da visão computacional e do aprendizado profundo, para que você se familiarize com diferentes métricas, incluindo a precisão, sensibilidade e especificidade usuais (e trade-offs que devem ser considerados ao trabalhar com dados médicos). Repito, não resolvemos o problema de determinar o COVID-19.

Assim, nosso detector automático mostrou uma precisão de ~ 90-92% em amostras deimagens de raios-X sozinho . Nenhuma outra informação foi usada para treinar o modelo, incluindo localização geográfica, densidade populacional etc.

Também recebemossensibilidade de 100% e especificidade de 80% , o que significa:

  • Dos pacientes com COVID-19 (casos positivos verdadeiros), usando o modelo, conseguimos identificar com precisão como "positivo para COVID-19" em 100% dos casos.
  • Dos pacientes que não tiveram COVID-19 (casos negativos verdadeiros), usando o modelo, conseguimos identificar com precisão como "COVID-19 negativo" em apenas 80% dos casos.

Como mostra o gráfico do histórico de treinamento, a rede neural não é treinada novamente, apesar do tamanho muito pequeno dos dados de treinamento:


Figura 3: Este gráfico de precisão e perda demonstra que nosso modelo não é treinado novamente.

É ótimo termos alcançado 100% de precisão ao detectar o COVID-19. No entanto, a situação com casos verdadeiramente negativos é embaraçosa: não queremos atribuir a "COVID-19-negativo" aqueles que são realmente "COVID-19-positivos".

Nós menos queremos deixar pacientes doentes irem para casa, para famílias e amigos, contribuindo para a disseminação da doença.

Você também precisa ter muito cuidado com a parcela de casos falso-positivos: não queremos contar erroneamente alguém como doente e colocá-lo em quarentena com outros pacientes para que ele seja infectado por eles .

Encontrar um equilíbrio entre sensibilidade e especificidade -uma tarefa extremamente difícil , especialmente quando se trata de medicamentos e principalmente quando se trata de doenças infecciosas que se espalham rapidamente.

Falando sobre visão computacional médica e aprendizado profundo, você deve sempre lembrar que o trabalho de nossos modelos preditivos pode ter consequências muito graves: diagnósticos errôneos podem custar vidas .

Repito, os resultados deste artigo são apresentados apenas para fins educacionais . Esta não é uma publicação de periódico, esses dados não atendem aos critérios do TRIPOD para a publicação de modelos de previsão.

Limitações, melhorias e trabalho adicional



Figura 4: Atualmente, os profissionais de IA e de aprendizado profundo não têm dados COVID-19 de qualidade para treinar efetivamente sistemas de reconhecimento automático de imagem.

Uma das principais limitações do método descrito neste manual são os dados.

Não temos dados suficientes (confiáveis) para treinar detectores COVID-19.

Os hospitais já possuem muitos casos clínicos com esse vírus, mas, dada a privacidade e os direitos humanos, fica ainda mais difícil reunir rapidamente um conjunto de dados de alta qualidade a partir de imagens médicas. Acredito que nos próximos 12 a 18 meses teremos mais dados de qualidade. Mas, por enquanto, você precisa usar o que possui.

Eu tentei (dada minha condição física e mental), nas condições de tempo e recursos limitados, escrever este guia para aqueles que estão interessados ​​no uso da visão computacional e no aprendizado profundo. Mas deixe-me lembrá-lo de que não sou um médico profissional .

Para usar o detector COVID-19 na vida real, ele deve ser rigorosamente testado por médicos reais, trabalhando lado a lado com especialistas em aprendizado profundo. O método que descrevi não é adequado para isso.

Além disso, é preciso ter cuidado com o que exatamente o modelo “aprende”.

Como escrevi no manual Grad-CAM, é provável que o modelo aprenda padrões que não são relevantes para o COVID-19, mas seja capaz de distinguir apenas duas amostras de dados (ou seja, diagnósticos positivos e negativos). Os resultados do nosso detector precisarão ser rigorosamente testados e verificados pelos médicos.

E, finalmente, os detectores futuros (e mais avançados) serão multimodais.

Agora usamos apenas dados visuais (raios-x). Os melhores detectores devem usar outros dados: indicadores vitais do paciente, densidade populacional, localização geográfica, etc. Dados visuais por si só geralmente não são suficientes para essas tarefas .

Por essas razões, quero enfatizar novamente: este guia desempenha apenas o papel de material de treinamento - não pode ser considerado como um detector COVID-19 confiável.

Se você acha que você ou alguém próximo ao COVID-19, siga as recomendações do seu sistema de saúde.

Espero que este guia tenha sido útil para você. Espero também que seja para alguém um ponto de partida na busca de métodos de uso da visão computacional e aprendizado profundo determinar automaticamente o COVID-19.

Sumário


Neste guia, você aprendeu como usar o Keras, o TensorFlow e o aprendizado profundo para criar um detector automático COVID-19 em um conjunto de dados a partir de imagens de raios-x.

Hoje (ainda) não existem conjuntos de dados de imagem verificados e de alta qualidade para esta doença, então você precisa trabalhar com o repositório Joseph Cohen :


Depois, com a ajuda de Keras e TensorFlow, treinamos o detector COVID-19, que mostrou uma precisão de 90 a 92 % em nossa amostra de teste, com uma sensibilidade de 100% e uma especificidade de 80% (em nosso pequeno conjunto de dados).

Lembre-se de que o detector descrito aqui é apenas para fins educacionais (consulte a Nota no texto). Eu queria inspirar outras pessoas a usar o aprendizado profundo, para mostrar que, em combinação com a visão computacional, isso pode ter um grande impacto em nossas vidas.

Espero que tenha gostado.

All Articles