DETECCIÓN DE NEUMONÍA EN RADIOGRAFÍAS: 7 – USO EN PREDICCIÓN Y CONCLUSIONES

Publicado por @JoseMa_deCuenca el March 8, 2020, 9:30 p.m.
Para finalizar, en un cuaderno aparte se simula el uso de la herramienta en predicción. Para ello se cargan los modelos seleccionados ya entrenados, con la técnica apropiada según sean clásicos o de aprendizaje profundo, y se realiza la predicción sobre uno de los archivos del conjunto de entrenamiento que fue descartado durante el remuestreo, de manera que nunca se ha utilizado. ## ANALISIS DE COMPONENTES PRINCIPALES PCA PARA 2 CLASES # Cargo extractor de componentes principales para la imagen pca2 = joblib.load('./data/chest_xray/pca2.pkl') # Proyeccion para 2 clases print("\nProyectando los datos de entrada sobre la base ortonormal de los eigenfaces") X_train2_pca = pca2.transform(X_train2_svm) print(X_train2_pca.shape) # Cargo el clasificador SVM para 2 clases clf2 = joblib.load('./data/chest_xray/clf2.pkl') # Uso el modelo para predecir el diagnostico en el conjunto de prueba tras PCA y_pred2 = clf2.predict(X_train2_pca) # Informe de prediccion con este modelo print("\nPrediccion con SVM 2 clases:", y_pred2) #Formato de imagenes en los conjuntos de carga print("Formato imagenes en conjuntos de carga 2 clases") print(img_array.shape) # Aseguro las dimensiones del array como imagenes de entrada para el modelo X_train2=img_array.reshape(1,3,150,150) # Compruebo print("Formato imagenes para entrada del modelo 2 clases") print(X_train2.shape) ## CARGO MODELO ENTRENADO DE 2 CLASES with open('./data/chest_xray/model_basico2.json','r') as f: json_string = f.read() model_basico2 = model_from_json(json_string) model_basico2.load_weights('./data/chest_xray/model_basico2.h5') # Carlo modelo con sus pesos # model_basico2 = load_model('./data/chest_xray/model_basico2.h5') # Resumen del modelo print(model_basico2.summary()) # Uso el modelo para predecir el diagnostico print(model_basico2.predict(X_train2)) y_mod_bas_2 = np.round_((model_basico2.predict(X_train2)[:,1]), decimals=0).astype(int) # Informe de prediccion con este modelo print("\nPrediccion con modelo basico 2 clases:", y_mod_bas_2) Los códigos completos pueden descargarse el repositorio https://github.com/watershed-lab/pneumo-detector En conclusión, la herramienta obtenida se ha diseñado seleccionando los mejores modelos de manera que cometa el mínimo número de errores de predicción (falsos negativos) tanto en el diagnóstico (2 clases) como en la determinación del patógeno (3 clases). Esto se ha logrado mediante el ajuste de los modelos seleccionados, y el ensemble final de los mismos, que se realiza de forma manual al tener formatos diferentes de entrada en sus datos. Este ensemble es de tipo voting, basado en la clasificación única realizada por cada modelo sobre un dataframe que vá recogiendo los resultados, sin considerar las probabilidades asignadas a cada clase por algunos modelos. De esta manera se logra un control absoluto del ensemble y se mejoran aún más los resultados finales. Con este método se ha alcanzado un 100% de identificación correcta de los enfermos (diagnósticos positivos) con el conjunto de prueba (carpeta VAL del dataset), evitando que un enfermo quede sin diagnóstico. Este ratio de clasifiación se extiende también a la identificación del patógeno (100% identificados correctamente), si bien en este caso no resulta tan determinante, al no haber radiografías de enfermos con virus en el dataset de prueba. Por otra parte, la herramienta (cuaderno 8) comete el error de clasificar incorrectamente dos individuos sanos como enfermos, ambos infectados con bacteria. Los intentos de reducir esta cifra han resultado infructuosos, debido a que tras diferentes entrenamientos realizados no se ha logrado una combinación de los pesos que permitiese un ensemble más ajustado de unos modelos con otros. O más claramente, que presentase este fallo en los mismos individuos, en vez de fallar en individuos diferentes según el tipo de modelo. En cualquier caso, la solución alcanzada tiene una precisión muy aceptable, superior a otras publicadas anteriormente para este tipo de problema, y se logra con algoritmos clásicos muy sencillos, y de aprendizaje profundo muy livianos, demostrando que no siempre es necesario elevadas potencias de máquina o grandes redes neuronales (o incluso medias como CheXNet de Rajpurkar et al.) para desarrollar soluciones de inteligencia artificial con buenos resultados. Además la herramienta se ha creado principalmente con un hardware moderado (PC con i7) y utilizando únicamente software OpenSource (Anaconda) instalado totalmente en local, sin tener que recurrir a soluciones en la nube y/o de pago. Esto refuerza la demostración acerca de que no siempre sea imprescindible implicar grandes medios en este tipo de proyectos. Con todo, la presente herramienta se puede mejorar mediante: - Utilizando los datos de entrada a mayor resolución, para incrementar el grado de detalle y permitir una probablemente mejor diferenciación de componentes a los modelos. - Incrementar el número de imágenes del conjunto de entrenamiento, al menos hasta igualar todas las clases (en 2 y 3 tipos de etiquetas), en vez de resamplear con submuestreo. - La prueba de modelos con mayor capacidad de aprendizaje, especialmente de aprendizaje profundo con redes convolucionales, algo necesario si se utilizan imágenes a mayor resolución. Y que conllevaría mayores necesidades de hardware. Además, otras mejoras futuras que podrían optimizar la herramienta, aunque con mayor desarrollo, con: - Probablemente se pueden conseguir mejoras muy notables si se completa el conjunto de datos de entrada con los medios diagnósticos complementarios que a menudo ya utilizan los médicos: cuestionario inicial, sonidos de aoscultación de cada paciente, resultados analíticos de fluídos corporales, etc. La incorporación de estos datos podría implementarse de manera simple sobre el mismo dataframe de datos que se crea para la exploración estadística; y analizarse mediante modelos similares, principalmente SVM para los datos alfanuméricos, y de aprendizaje profundo para los sonidos aoscultados; y combinarse en el ensemble final con las imágenes radiográficas. No se ha realizado una simulación debido al estreho plazo de tiempo disponible para crear esta herramienta, pero se ha localizado un dataset de sonidos respiratorios (“Respiratory Sound Database” en Kaggle con sonidos que permiten identificar la presencia de infección y su posición en el tracto respiratorio), y artículos que relatan su utilización aislada, con buenos resultados para SVM (Aykanat et al.). - Por otra parte, las imágenes el dataset utilizado proceden de un conjunto previamente homogeneizado. La herramienta puede mejorar con estudios futuros que impliquen el uso de imágenes más diversas, de diferentes fabricantes de aparatos de rayos X en los conjuntos de datos de entrenamiento y de prueba para asegurar que el sistema proyectado resulta universalmente útil. - Además, dado que existe un considerable interés por la aplicación de la inteligencia artificial y el análisis de datos a la medicina, se ha detectado un elevado número de investigaciones centradas en los diagnósticos mediante rayos x. Muchas de ellas publican sus datos, por lo que la herramienta se puede mejorar aplicando técnicas de aprendizaje por transferencia y nuevos modelos pre entrenados, que se incorporen fácilmente al ensemble. Idealmente se podría crear un espacio colaborativo donde se puedan clasificar y publicar modelos preentrenados y sus condiciones de entrada, para que sea la propia herramienta la que les pueda incorporar y evaluar automáticamente según se publican (auto evolución de la inteligencia artificial). - Para finalizar, una mejora sustancial de esta herramienta consistiría en su incorporación en los nuevos aparatos de rayos X de manera que estos sean capaces de proporcionar una primera ayuda al diagnóstico. Otro posible campo de desarrollo consistiría en su incorporación a los sistemas de gestión documental médica utilizados en hospitales (preferiblemente libres como OpenKM o similares, ya que toda la herramienta parte de recusos libres). Sin descartar soluciones mixtas de utilización en un aparato de rayos a través de su integración en un sistema de gestión documental.