tissue-detector / README.md
Aakash-Tripathi's picture
Update README.md
a139385 verified
---
license: gpl-3.0
tags:
- histopathology
- tissue-detection
- whole-slide-imaging
- pathology
- medical-imaging
- densenet
- image-classification
- computational-pathology
- cancer-research
library_name: pytorch
pipeline_tag: image-classification
---
# Deep Tissue Detector - DenseNet121
A deep learning model for detecting tissue regions in Whole Slide Images (WSI) of histopathology slides.
## Model Description
This is a DenseNet121-based tissue detector trained to classify image patches into three categories for histopathology analysis. The model is specifically designed to identify tissue-containing regions in H&E (Hematoxylin and Eosin) stained whole slide images, enabling efficient processing of large pathology datasets.
### Model Details
- **Architecture**: DenseNet121
- **Input Size**: 224x224 RGB images
- **Number of Classes**: 3
- Class 0: Background/Non-tissue
- Class 1: Artifact/Low-quality
- Class 2: Tissue (high quality)
- **Parameters**: ~7M
- **Model Size**: 28MB
- **Framework**: PyTorch
- **License**: GPL-3.0
### Intended Use
This model is designed for:
- Filtering tissue-containing patches from whole slide images
- Quality control in computational pathology pipelines
- Preprocessing for downstream cancer analysis tasks
- Reducing computational burden by identifying regions of interest
**Recommended Usage**: Accept patches where class 2 (tissue) probability ≥ 0.8
## Usage
### Installation
```bash
pip install torch torchvision huggingface_hub pillow
```
### Basic Usage
```python
from tissue_detector import TissueDetector
from PIL import Image
# Initialize detector (automatically downloads weights from HuggingFace)
detector = TissueDetector(device='cuda')
# Load and process an image
image = Image.open('patch.png')
patch_transformed = detector.transforms(image)
patch_batch = patch_transformed.unsqueeze(0).to(detector.device)
# Get predictions
import torch
with torch.no_grad():
prediction = detector.model(patch_batch)
probabilities = torch.nn.functional.softmax(prediction, dim=1).cpu().numpy()[0]
tissue_class = probabilities.argmax()
# Check if patch contains tissue (class 2 with threshold 0.8)
is_tissue = tissue_class == 2 and probabilities[2] >= 0.8
print(f"Tissue detected: {is_tissue} (confidence: {probabilities[2]:.3f})")
```
### Integration with HoneyBee Framework
```python
from honeybee.models import TissueDetector
from honeybee.processors.wsi import SimpleSlide
# Initialize tissue detector
detector = TissueDetector(device='cuda')
# Load whole slide image
slide = SimpleSlide(
slide_path='path/to/slide.svs',
tile_size=512,
max_patches=100,
tissue_detector=detector
)
# Extract tissue patches (automatically filtered)
patches = slide.load_patches_concurrently(target_patch_size=224)
```
### Manual Download
```python
from huggingface_hub import hf_hub_download
# Download PyTorch weights
model_path = hf_hub_download(
repo_id="Lab-Rasool/tissue-detector",
filename="deep-tissue-detector_densenet_state-dict.pt"
)
# Or download SafeTensors format (recommended)
model_path = hf_hub_download(
repo_id="Lab-Rasool/tissue-detector",
filename="model.safetensors"
)
```
## Model Performance
The model has been extensively used in cancer classification, survival analysis, and multimodal integration tasks within the HoneyBee framework. It effectively filters:
- **Background regions**: Glass slide backgrounds, whitespace
- **Artifacts**: Pen marks, dust, blur, fold artifacts
- **Tissue regions**: High-quality H&E stained tissue for analysis
**Recommended threshold**: 0.8 probability for class 2 provides a good balance between recall and precision for tissue detection.
## Training Data
The model was originally trained as part of the [SliDL](https://github.com/markowetzlab/slidl) project for tissue detection in histopathology whole slide images. Training details include H&E stained tissue sections with annotations for tissue/non-tissue regions.
## Preprocessing
The model expects images preprocessed with standard ImageNet normalization:
```python
from torchvision import transforms
preprocessing = transforms.Compose([
transforms.Resize(224),
transforms.ToTensor(),
transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
```
## Limitations and Biases
- **Stain Variation**: Performance may vary with different staining protocols or scanners
- **Tissue Types**: Primarily validated on H&E stained tissue; may not generalize to other stains
- **Resolution**: Designed for patches at standard WSI resolution (~0.5 µm/pixel)
- **Artifacts**: May misclassify unusual artifacts not seen during training
- **Medical Use**: This model is for research purposes only and not intended for clinical diagnosis
## Applications in Research
This tissue detector has been used in:
- **Cancer Classification**: TCGA multi-cancer type classification (BRCA, BLCA, KIRC, LIHC, etc.)
- **Survival Analysis**: Cox proportional hazards and deep survival models
- **Stain Normalization Studies**: Evaluating impact of Macenko/Reinhard normalization
- **Multimodal Integration**: Combining pathology with clinical, radiology, and molecular data
- **Foundation Model Evaluation**: Preprocessing for UNI, UNI2, Virchow2 embeddings
## Citation
If you use this model, please cite the HoneyBee framework and the original SliDL project:
```bibtex
@software{honeybee2024,
title={HoneyBee: A Scalable Modular Framework for Multimodal AI in Oncology},
author={Lab-Rasool},
year={2024},
url={https://github.com/lab-rasool/HoneyBee}
}
@software{slidl,
title={SliDL: A Python library for deep learning on whole-slide images},
author={Markowetz Lab},
url={https://github.com/markowetzlab/slidl}
}
```
## Model Card Authors
Lab-Rasool
## Model Card Contact
For questions or issues, please open an issue on the [HoneyBee GitHub repository](https://github.com/lab-rasool/HoneyBee).
## Additional Resources
- **HoneyBee Framework**: [https://github.com/lab-rasool/HoneyBee](https://github.com/lab-rasool/HoneyBee)
- **Documentation**: [https://lab-rasool.github.io/HoneyBee](https://lab-rasool.github.io/HoneyBee)
- **Original Model Source**: [SliDL GitHub](https://github.com/markowetzlab/slidl)
## Version History
- **v1.0** (2024): Initial release with DenseNet121 architecture
- PyTorch state dict format
- SafeTensors format for improved loading
- Integration with HuggingFace Hub