|
|
--- |
|
|
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 |
|
|
|