A team of radiologists from New Orleans studied the usefulness of Chest Radiographs for diagnosing COVID-19 compared to the reverse-transcription polymerase chain reaction (RT-PCR) and found out they could aid rapid diagnosis, especially in areas with limited testing facilities [1].
Another study found out that the radiographs of different viral cases of pneumonia are comparative, and they overlap with other infectious and inflammatory lung diseases, making it hard for radiologists to recognize COVID‐19 from other viral pneumonia cases [2].
This project aims to make the former study a reality while dealing with the intricacies in the latter, with the help of Deep Learning.
The project uses the COVID-19 Radiography Database [3] as it's dataset. It has a total of
21165
Chest X-Rays (CXRs) belonging to 4 different classes (COVID-19
,Lung Opacity
,Normal
andViral Pneumonia
).
Three top scoring CNN architectures, VGG-16 [4], ResNet-18 [5] and DenseNet-121 [6], trained on the ImageNet Dataset [7], were chosen for fine-tuning on the dataset.
The results obtained from the different architectures were then evaluted and compared.
Finally, with the help of Gradient weighted Class Activation Maps (Grad-CAM) [8] the affected areas in CXRs were localized.
- Note: The dataset and the trained models can be found in here.
- Dataset Exploration
- Split the dataset
Type COVID-19 Lung Opacity Normal Viral Pneumonia Total Train 3496 5892 10072 1225 20685 Val 60 60 60 60 240 Test 60 60 60 60 240 - Fine-tune VGG-16, ResNet-18 and DenseNet-121
- Define Transformations
- Handle imbalanced dataset with Weighted Random Sampling (Over-sampling)
- Prepare the Pre-trained models
- Fine-tune step with Early-stopping
Hyper-parameters Learning rate 0.00003
Batch Size 32
Number of Epochs 25
Loss Function Optimizer Categorical Cross Entropy
Adam
- Plot running losses & accuracies
- Results Evaluation
- Inference
VGG-16 | ResNet-18 | DenseNet-121 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Confusion Matrices |
- Localization with Gradient-based Class Activation Maps
COVID-19 infected CXR VGG-16 ResNet-18 DenseNet-121
- Clone the repository
git clone 'https://github.com/priyavrat-misra/xrays-and-gradcam.git' && cd xrays-and-gradcam/
- Install dependencies
pip install -r requirements.txt
- Using
argparse
script for inferencepython overlay_cam.py --helpusage: GradCAM on Chest X-Rays [-h] [-i IMAGE_PATH] [-l {covid_19,lung_opacity,normal,pneumonia}] -m {vgg16,resnet18,densenet121} [-o OUTPUT_PATH] Overlays given label's CAM on a given Chest X-Ray. optional arguments: -h, --help show this help message and exit -i IMAGE_PATH, --image-path IMAGE_PATH Path to chest X-Ray image. -l {covid_19,lung_opacity,normal,pneumonia}, --label {covid_19,lung_opacity,normal,pneumonia} Choose from covid_19, lung_opacity, normal & pneumonia, to get the corresponding CAM. If not mentioned, the highest scoring label is considered. -m {vgg16,resnet18,densenet121}, --model {vgg16,resnet18,densenet121} Choose from vgg16, resnet18 or densenet121. -o OUTPUT_PATH, --output-path OUTPUT_PATH Format: "<path> + <file_name> + .jpg"
- An example
python overlay_cam.py --image-path ./assets/original.jpg --label covid_19 --model resnet18 --output-path ./assets/dense_cam.jpgGradCAM generated for label "covid_19". GradCAM masked image saved to "./assets/res_cam.jpg".
- DenseNet-121 having only
7.98 Million
parameters did relatively better than VGG-16 and ResNet-18, with138 Million
and11.17 Million
parameters respectively.- Increase in model's parameter count doesn’t necessarily achieve better results, but increase in residual connections might.
- Oversampling helped in dealing with imbalanced data to a great extent.
- Fine-tuning helped substantially by dealing with the comparatively small dataset and speeding up the training process.
- GradCAM aided in localizing the areas in CXRs that decides a model's predictions.
- The models did a good job distinguishing various infectious and inflammatory lung diseases, which is rather hard manually, as mentioned earlier.
- [1] David L. Smith, John-Paul Grenier, Catherine Batte, and Bradley Spieler. A Characteristic Chest Radiographic Pattern in the Setting of the COVID-19 Pandemic. Radiology: Cardiothoracic Imaging 2020 2:5.
- [2] Hyun Jung Koo, Soyeoun Lim, Jooae Choe, Sang-Ho Choi, Heungsup Sung, and Kyung-Hyun Do. Radiographic and CT Features of Viral Pneumonia. RadioGraphics 2018 38:3, 719-739.
- [3] Tawsifur Rahman, Muhammad Chowdhury, Amith Khandakar. COVID-19 Radiography Database. Kaggle.
- [4] Karen Simonyan, Andrew Zisserman. Very Deep Convolutional Networks for Large-Scale Image Recognition. arxiv:1409.1556v6.
- [5] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Deep Residual Learning for Image Recognition. arxiv:1512.03385v1.
- [6] Gao Huang, Zhuang Liu, Laurens van der Maaten, Kilian Q. Weinberger. Densely Connected Convolutional Networks. arxiv:1608.06993v5.
- [7] Deng, J. et al., 2009. Imagenet: A large-scale hierarchical image database. In 2009 IEEE conference on computer vision and pattern recognition. pp. 248–255.
- [8] Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, Dhruv Batra. Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization. arXiv:1610.02391v4.