Summary of “Chester: A Web Delivered Locally Computed Chest X-Ray Disease Prediction System” (2019)

Abstract

Deep learning has shown promise to augment radiologists and improve the standard of care globally. Two main issues that complicate deploying these systems are patient privacy and scaling to the global population. To deploy a system at scale with minimal computational cost while preserving privacy we present a web delivered (but locally run) system for diagnosing chest X-Rays. Code is delivered via a URL to a web browser (including cell phones) but the patient data remains on the users machine and all processing occurs locally. The system is designed to be used as a reference where a user can process an image to confirm or aid in their diagnosis. The system contains three main components: out-of-distribution detection, disease prediction, and prediction explanation. The system open source and freely available here: https://mlmed.org/tools/xray/

Keywords: Chest X-Ray, Radiology, Deep Learning

Summary

The paper proposed a free-to-access web-based chest X-ray disease prediction system named Chester. It receives X-Ray image upload, calculates the prediction locally (using TensorFlow.js) and displays the probability of 14 chest diseases (Atelectasis, Cardiomegaly, Effusion, Infiltration, Mass, Nodule, Pneumonia, Pneumothorax, Consolidation, Edema, Emphysema, Fibrosis, Pleural Thickening, and Hernia). The source code is available at https://github.com/mlmed/dl-web-xray.

Chester’s user interface

My first worry when reading about this paper is about the user experience caused by the time required to download the models and computes the predictions. But it turns out to be somehow acceptable:

  1. Initial loading of the models (12±2s)
  2. Computing the ALI and DenseNet computation graphs (1.3±0.5s)
  3. Computing gradients to explain predictions (17±4s)

According to my personal experience (on Chrome, Ubuntu 16.04 LTS, Core i7 5500U, 8 GB RAM, SSD, 30 MBps broadband), the runtime estimations were quite accurate, except for the predictions explanation (last part) which crashed my browser

Chester is composed of three main parts:

  1. Out of distribution (OOD) detection: this part provides ability to reject input image that is considered irrelevant (eg. non-chest X-ray images or even stupid cat images ). It uses ALI (Adversarially Learned Inference) (Dumoulin, Vincent et al., 2016), a GAN-based model, to reconstruct loss (using L1, L2, and SSIM distances as outlier metrics) instead of to estimate density. This model is trained to reject samples from dataset such as musculoskeletal radiographs from MURA dataset (Rajpurkar et al., 2018), real world images from CIFAR-100 (Krizhevsky & Hinton, 2009) and written digits from MNIST (LeCun & Cortes, 1998).
  2. Disease prediction: this part uses CheXnet DenseNet-121 model (Rajpurkar et al., 2017) is used to predict the disease. It is trained using Chest-Xray8 dataset (Wang et al., 2017) and Pneumonia dataset (Kermany et al., 2018). It’s performance (AUC) is around 81% for all diseases (detailed table below).
  3. Prediction explanation: for the last part, it uses basic gradient saliency map approach (Simonyan et al., 2014; Lo & Cohen, 2015): for an input image and the pre-softmax output of a neural network, we can compute the pixel-wise impact on a specific output or over all outputs.
Performance (AUC) of Chester prediction model (right-most) compared to other models

From the engineering point of view, another interesting thing in this research is the use of ONNX to create a pipeline transforming models that are developed using other tools, such as PyTorch, to TensorFlow.js. So in this research, all models are developed with PyTorch, but ported to TensorFlow.js using this pipeline:

PyTorch ➡️ ONNX ➡️ TensorFlow ➡️ TensorFlow.js

About Paper

0 0 votes
Article Rating
yohanes.gultom@gmail.com

Share
Published by
yohanes.gultom@gmail.com

Recent Posts

Get Unverified SSL Certificate Expiry Date with Python

Getting verified SSL information with Python (3.x) is very easy. Code examples for it are…

3 years ago

Spring Data Couchbase 4 Multibuckets in Spring Boot 2

By default, Spring Data Couchbase implements single-bucket configuration. In this default implementation, all POJO (Plain…

3 years ago

Firebase Auth Emulator with Python

Last year, Google released Firebase Auth Emulator as a new component in Firebase Emulator. In…

4 years ago

Google OIDC token generation/validation

One of the authentication protocol that is supported by most of Google Cloud services is…

4 years ago

Fast geolocation query with PostGIS

If you need to to add a spatial information querying in your application, PostGIS is…

4 years ago

Auto speech-to-text (Indonesian) with AWS Transcribe and Python

Amazon Web Service Transcribe provides API to automatically convert an audio speech file (mp3/wav) into…

5 years ago