All Projects → BMIRDS → Deepslide

BMIRDS / Deepslide

Licence: gpl-3.0
Code for the Nature Scientific Reports paper "Pathologist-level classification of histologic patterns on resected lung adenocarcinoma slides with deep neural networks." A sliding window framework for classification of high resolution whole-slide images, often microscopy or histopathology images.

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to Deepslide

Gradient-Samples
Samples for TensorFlow binding for .NET by Lost Tech
Stars: ✭ 53 (-83.17%)
Mutual labels:  resnet
i3d-tensorflow
Inflated 3D ConvNets for video understanding
Stars: ✭ 46 (-85.4%)
Mutual labels:  resnet
Awesome Computer Vision Models
A list of popular deep learning models related to classification, segmentation and detection problems
Stars: ✭ 278 (-11.75%)
Mutual labels:  resnet
wideresnet-tensorlayer
Wide Residual Networks implemented in TensorLayer and TensorFlow.
Stars: ✭ 44 (-86.03%)
Mutual labels:  resnet
flexible-yolov5
More readable and flexible yolov5 with more backbone(resnet, shufflenet, moblienet, efficientnet, hrnet, swin-transformer) and (cbam,dcn and so on), and tensorrt
Stars: ✭ 282 (-10.48%)
Mutual labels:  resnet
jax-resnet
Implementations and checkpoints for ResNet, Wide ResNet, ResNeXt, ResNet-D, and ResNeSt in JAX (Flax).
Stars: ✭ 61 (-80.63%)
Mutual labels:  resnet
pyro-vision
Computer vision library for wildfire detection
Stars: ✭ 33 (-89.52%)
Mutual labels:  resnet
Deepxi
Deep Xi: A deep learning approach to a priori SNR estimation implemented in TensorFlow 2/Keras. For speech enhancement and robust ASR.
Stars: ✭ 304 (-3.49%)
Mutual labels:  resnet
alpha-zero
AlphaZero implementation for Othello, Connect-Four and Tic-Tac-Toe based on "Mastering the game of Go without human knowledge" and "Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm" by DeepMind.
Stars: ✭ 68 (-78.41%)
Mutual labels:  resnet
Pytorch Image Classification
Tutorials on how to implement a few key architectures for image classification using PyTorch and TorchVision.
Stars: ✭ 272 (-13.65%)
Mutual labels:  resnet
DE resnet unet hyb
Depth estimation from RGB images using fully convolutional neural networks.
Stars: ✭ 40 (-87.3%)
Mutual labels:  resnet
Retinal-Disease-Diagnosis-With-Residual-Attention-Networks
Using Residual Attention Networks to diagnose retinal diseases in medical images
Stars: ✭ 14 (-95.56%)
Mutual labels:  resnet
Grad Cam Tensorflow
tensorflow implementation of Grad-CAM (CNN visualization)
Stars: ✭ 261 (-17.14%)
Mutual labels:  resnet
RMNet
RM Operation can equivalently convert ResNet to VGG, which is better for pruning; and can help RepVGG perform better when the depth is large.
Stars: ✭ 129 (-59.05%)
Mutual labels:  resnet
Shake Shake
2.86% and 15.85% on CIFAR-10 and CIFAR-100
Stars: ✭ 291 (-7.62%)
Mutual labels:  resnet
Keras-CIFAR10
practice on CIFAR10 with Keras
Stars: ✭ 25 (-92.06%)
Mutual labels:  resnet
Class-Activation-Mappings
Visualizing where the Convolution Network is looking through CAM.
Stars: ✭ 20 (-93.65%)
Mutual labels:  resnet
Tianchi Medical Lungtumordetect
天池医疗AI大赛[第一季]:肺部结节智能诊断 UNet/VGG/Inception/ResNet/DenseNet
Stars: ✭ 314 (-0.32%)
Mutual labels:  resnet
Segmentation models
Segmentation models with pretrained backbones. Keras and TensorFlow Keras.
Stars: ✭ 3,575 (+1034.92%)
Mutual labels:  resnet
Resnetcam Keras
Keras implementation of a ResNet-CAM model
Stars: ✭ 269 (-14.6%)
Mutual labels:  resnet

DeepSlide: A Sliding Window Framework for Classification of High Resolution Microscopy Images (Whole-Slide Images)

This repository is a sliding window framework for classification of high resolution whole-slide images, often called microscopy or histopathology images. This is also the code for the paper Pathologist-level Classification of Histologic Patterns on Resected Lung Adenocarcinoma Slides with Deep Neural Networks. For a practical guide and implementation tips, see the Medium post Classification of Histopathology Images with Deep Learning: A Practical Guide.

We have made 143 digitized high-resolution histology slides of lung adenocarcinoma in the test set and their predominant subtypes according to the consensus opinion of three pathologists at Dartmouth-Hitchcock Medical Center publicly available. More information about this dataset and instructions on how to download are provided on the dataset webpage.

For questions about our code, please open an issue on this code repository.

alt text

Requirements

Usage

Take a look at code/config.py before you begin to get a feel for what parameters can be changed.

1. Train-Val-Test Split:

Splits the data into a validation and test set. Default validation whole-slide images (WSI) per class is 20 and test images per class is 30. You can change these numbers by changing the --val_wsi_per_class and --test_wsi_per_class flags at runtime. You can skip this step if you did a custom split (for example, you need to split by patients).

python code/1_split.py

If you do not want to duplicate the data, append --keep_orig_copy False to the above command.

Inputs: all_wsi

Outputs: wsi_train, wsi_val, wsi_test, labels_train.csv, labels_val.csv, labels_test.csv

Note that all_wsi must contain subfolders of images labeled by class. For instance, if your two classes are a and n, you must have a/*.jpg with the images in class a and n/*.jpg with images in class n.

Example

python code/1_split.py --val_wsi_per_class 10 --test_wsi_per_class 20

2. Data Processing

  • Generate patches for the training set.
  • Balance the class distribution for the training set.
  • Generate patches for the validation set.
  • Generate patches by folder for WSI in the validation set.
  • Generate patches by folder for WSI in the testing set.
python code/2_process_patches.py

Note that this will take up a significant amount of space. Change --num_train_per_class to be smaller if you wish not to generate as many windows. If your histopathology images are H&E-stained, whitespace will automatically be filtered. Turn this off using the option --type_histopath False. Default overlapping area is 1/3 for test slides. Use 1 or 2 if your images are very large; you can also change this using the --slide_overlap option.

Inputs: wsi_train, wsi_val, wsi_test

Outputs: train_folder (fed into model for training), patches_eval_train (for validation, sorted by WSI), patches_eval_test (for testing, sorted by WSI)

Example

python code/2_process_patches.py --num_train_per_class 20000 --slide_overlap 2

3. Model Training

CUDA_VISIBLE_DEVICES=0 python code/3_train.py

We recommend using ResNet-18 if you are training on a relatively small histopathology dataset. You can change hyperparameters using the argparse flags. There is an option to retrain from a previous checkpoint. Model checkpoints are saved by default every epoch in checkpoints.

Inputs: train_folder

Outputs: checkpoints, logs

Example

CUDA_VISIBLE_DEVICES=0 python code/3_train.py --batch_size 32 --num_epochs 100 --save_interval 5

4. Testing on WSI

Run the model on all the patches for each WSI in the validation and test set.

CUDA_VISIBLE_DEVICES=0 python code/4_test.py

We automatically choose the model with the best validation accuracy. You can also specify your own. You can change the thresholds used in the grid search by specifying the threshold_search variable in code/config.py.

Inputs: patches_eval_val, patches_eval_test

Outputs: preds_val, preds_test

Example

CUDA_VISIBLE_DEVICES=0 python code/4_test.py --auto_select False

5. Searching for Best Thresholds

The simplest way to make a whole-slide inference is to choose the class with the most patch predictions. We can also implement thresholding on the patch level to throw out noise. To find the best thresholds, we perform a grid search. This function will generate csv files for each WSI with the predictions for each patch.

python code/5_grid_search.py

Inputs: preds_val, labels_val.csv

Outputs: inference_val

Example

python code/5_grid_search.py --preds_val different_labels_val.csv

6. Visualization

A good way to see what the network is looking at is to visualize the predictions for each class.

python code/6_visualize.py

Inputs: wsi_val, preds_val

Outputs: vis_val

You can change the colors in colors in code/config.py

alt text

Example

python code/6_visualize.py --vis_test different_vis_test_directory

7. Final Testing

Do the final testing to compute the confusion matrix on the test set.

python code/7_final_test.py

Inputs: preds_test, labels_test.csv, inference_val and labels_val (for the best thresholds)

Outputs: inference_test and confusion matrix to stdout

Example

python code/7_final_test.py --labels_test different_labels_test.csv

Best of luck.

Quick Run

If you want to run all code and change the default parameters in code/config.py, run

sh code/run_all.sh

and change the desired flags on each line of the code/run_all.sh script.

Pre-Processing Scripts

See code/z_preprocessing for some code to convert images from svs into jpg. This uses OpenSlide and takes a while. How much you want to compress images will depend on the resolution that they were originally scanned, but a guideline that has worked for us is 3-5 MB per WSI.

Known Issues and Limitations

  • Only 1 GPU supported.
  • Should work, but not tested on Windows.
  • In cases where no crops are found for an image, empty directories are created. Current workaround uses try and except statements to catch errors.
  • Image reading code expects colors to be in the RGB space. Current workaround is to keep first 3 channels.
  • This code will likely work better when the labels are at the tissue level. It will still work for the entire WSI, but results may vary.

Still not working? Consider the following...

  • Ask a pathologist to look at your visualizations.
  • Make your own heuristic for aggregating patch predictions to determine the WSI-level classification. Often, a slide thats 20% abnormal and 80% normal should be classified as abnormal.
  • If each WSI can have multiple types of lesions/labels, you may need to annotate bounding boxes around these.
  • Did you pre-process your images? If you used raw .svs files that are more than 1GB in size, its likely that the patches are way too zoomed in to see any cell structures.
  • If you have less than 10 WSI per class in the training set, obtain more.
  • Feel free to view our end-to-end attention-based model in JAMA Network Open: https://jamanetwork.com/journals/jamanetworkopen/fullarticle/2753982.

Future Work

  • Contributions to this repository are welcome.
  • Code for generating patches on the fly instead of storing them in memory for training and testing would save a lot of disk space.
  • If you have issues, please post in the issues section and we will do our best to help.

Citations

DeepSlide is an open-source library and is licensed under the GNU General Public License (v3). If you are using this library please cite:

Jason Wei, Laura Tafe, Yevgeniy Linnik, Louis Vaickus, Naofumi Tomita, Saeed Hassanpour, "Pathologist-level Classification of Histologic Patterns on Resected Lung Adenocarcinoma Slides with Deep Neural Networks", Scientific Reports;9:3358 (2019).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].