Skip to main content

Deep learning tools for digital histology

Project description

histox

Python Version License Language Docs

histox is a powerful, open-source deep learning library for digital pathology. Built on top of Slideflow, it provides researchers and AI practitioners with a comprehensive toolkit for analyzing whole slide images (WSI) and building state-of-the-art computational pathology models.

๐ŸŒ Documentation: histox.readthedocs.io

โœจ Key Features

  • End-to-end WSI analysis pipeline - From raw slides to trained models
  • Robust slide processing - Automatic tile extraction with stain normalization
  • Flexible learning paradigms
    • Strongly-supervised and weakly-supervised learning
    • Multiple Instance Learning (MIL) for slide-level labels
    • Self-Supervised Learning (SSL) for representation learning
    • Generative Adversarial Networks (GANs) for data augmentation
  • Pre-trained foundation models - Integrated support for modern architectures
  • Interpretability tools - Generate heatmaps, saliency maps, and mosaic visualizations
  • Layer activation analysis - Understand model decision-making
  • Uncertainty quantification - Measure model confidence

๐Ÿ“‹ Requirements

  • Python: >= 3.7
  • Deep Learning Framework (at least one):
    • PyTorch >= 1.9
    • TensorFlow >= 2.5, < 2.12

๐Ÿ“ฆ Installation

From PyPI (Recommended)

pip install histox

From Source

git clone https://github.com/leicaohmu/histox
cd histox
pip install -e .

With PyTorch Backend

pip install histox[torch]
# or from source
pip install -e ".[torch]"

With TensorFlow Backend

pip install histox[tf]
# or from source
pip install -e ".[tf]"

With cuCIM GPU Acceleration (WSI Reading)

cuCIM provides GPU-accelerated whole slide image reading. First check your CUDA version:

nvidia-smi

Then install the matching extra:

# CUDA 12.x
pip install histox[torch,cucim-cuda12]

# CUDA 11.x
pip install histox[torch,cucim-cuda11]

# cuCIM only (manage cupy manually)
pip install histox[torch,cucim]

โš ๏ธ Important: cupy is tightly coupled to your CUDA version. Do not install multiple cupy-* packages simultaneously, as this will cause conflicts. If you encounter a conflict, clean up first:

pip uninstall cupy cupy-cuda12x cupy-cuda11x -y

Then reinstall the correct version.

Installation Summary

Command Includes
pip install histox Core only
pip install histox[torch] Core + PyTorch
pip install histox[tf] Core + TensorFlow
pip install histox[torch,cucim] Core + PyTorch + cuCIM
pip install histox[torch,cucim-cuda12] Core + PyTorch + cuCIM + CuPy (CUDA 12)
pip install histox[torch,cucim-cuda11] Core + PyTorch + cuCIM + CuPy (CUDA 11)

๐Ÿš€ Quick Start Example

This example demonstrates how to train a lung cancer adenocarcinoma classifier using the included TCGA dataset.

1. Prepare Your Data Structure

project_root/
โ”œโ”€โ”€ slides/                    # WSI files (.svs, .ndpi, etc.)
โ”‚   โ”œโ”€โ”€ TCGA-83-5908-01Z-00-DX1.svs
โ”‚   โ”œโ”€โ”€ TCGA-62-A46V-01Z-00-DX1.svs
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ annotations.csv            # Slide labels
โ””โ”€โ”€ tfrecords/                # Output directory for processed data (auto-created)

2. Create Annotation File

Create annotations.csv with slide-level labels:

patient,subtype,site,slide
TCGA-83-5908,adenocarcinoma,Site-28,TCGA-83-5908-01Z-00-DX1
TCGA-62-A46V,adenocarcinoma,Site-124,TCGA-62-A46V-01Z-00-DX1
TCGA-44-2655,squamous,Site-29,TCGA-44-2655-01Z-00-DX1

(A complete dataset example is available in lung_labels.csv in this repository)

3. Initialize and Train

import histox as hx
import os

# Define paths
project_root = '/path/to/project'
annotations_file = '/path/to/annotations.csv'
slides_directory = '/path/to/slides'
tfrecords_directory = os.path.join(project_root, 'tfrecords')

# Create project
print("[1/5] Creating project...")
project = hx.create_project(
    root=project_root,
    annotations=annotations_file,
    slides=slides_directory,
    tfrecords=tfrecords_directory
)

# Extract tiles from slides
print("[2/5] Extracting tiles...")
project.extract_tiles(
    tile_px=299,        # Tile size in pixels
    tile_um=302,        # Tile size in micrometers
    workers=8           # Number of parallel workers
)

# Define model parameters
print("[3/5] Configuring model...")
params = hx.ModelParams(
    tile_px=299,
    tile_um=302,
    batch_size=32,
    model='xception',            # Base architecture
    learning_rate=0.0001,
    epochs=50,
    validation_fraction=0.2
)

# Train the model
print("[4/5] Training model...")
project.train(
    'subtype',                   # Column name for classification target
    params=params,
    save_predictions=True,
    multi_gpu=True               # Enable multi-GPU training if available
)

# Generate explanations
print("[5/5] Generating interpretations...")
project.generate_heatmaps()      # Attention/saliency visualizations
project.generate_mosaic_maps()   # Tile-level predictions

print("โœ“ Training complete!")

4. Evaluate and Interpret Results

# Access trained models and predictions
results = project.get_results('subtype')

# Generate patient-level predictions
slide_predictions = project.predict_slides('subtype')

# Create visualizations
heatmap = hx.Heatmap.from_project(
    project=project,
    outcome_name='subtype',
    model_idx=0
)
heatmap.save('/path/to/output/heatmap.png')

# Access detailed metrics
print(f"Validation Accuracy: {results['val_accuracy']:.4f}")
print(f"Validation AUC: {results['val_auc']:.4f}")

๐Ÿ“Š Complete Workflow Example (Lung Cancer Dataset)

Here's a ready-to-run example using the included TCGA lung cancer data:

import histox as hx
import pandas as pd
import os

# Configuration
data_root = './datasets/lung_adeno_squam'
project_dir = './lung_project'

annotations_file = os.path.join(data_root, 'lung_labels.csv')
slides_dir = os.path.join(data_root, 'slides')
tfrecords_dir = os.path.join(project_dir, 'tfrecords')

# Check available data
labels_df = pd.read_csv(annotations_file)
print(f"Total slides: {len(labels_df)}")
print(f"Subtypes: {labels_df['subtype'].unique()}")
print(labels_df.head())

# Step 1: Create project
try:
    project = hx.create_project(
        root=project_dir,
        annotations=annotations_file,
        slides=slides_dir,
        tfrecords=tfrecords_dir
    )
    print("โœ“ Project created successfully")
except Exception as e:
    print(f"Project already exists or error: {e}")

# Step 2: Extract tiles (if slides are available)
try:
    project.extract_tiles(
        tile_px=299,
        tile_um=302,
        workers=4,
        verbose=True
    )
    print("โœ“ Tiles extracted")
except Exception as e:
    print(f"Could not extract tiles: {e}")

# Step 3: Configure and train
params = hx.ModelParams(
    tile_px=299,
    tile_um=302,
    batch_size=32,
    model='xception',
    learning_rate=0.0001,
    epochs=30,
    validation_fraction=0.2
)

project.train(
    'subtype',
    params=params,
    save_predictions=True,
    multi_gpu=False
)

print("โœ“ Model training complete!")

๐Ÿ”ง Advanced Features

Multiple Instance Learning (MIL)

Use when you only have slide-level labels, not individual tile annotations:

params = hx.ModelParams(
    tile_px=299,
    model='xception',
    mil=True,
    mil_method='attention',   # 'attention' or 'max-pooling'
    learning_rate=0.0001
)

project.train('diagnosis', params=params)

Self-Supervised Pre-training

Pre-train feature extractors without labeled data:

project.train_ssl(
    method='simclr',
    epochs=100,
    batch_size=64,
    model='xception'
)

# Fine-tune on labeled data
project.train('diagnosis', params=params)

Stain Normalization

Automatic handling of staining variations across labs:

project.extract_tiles(
    tile_px=299,
    tile_um=302,
    stain_norm=True,
    norm_method='macenko'     # 'macenko' or 'reinhard'
)

Generate Heatmaps

Visualize model predictions across slides:

heatmap = hx.Heatmap.from_project(
    project=project,
    outcome_name='diagnosis',
    model_idx=0,
    cmap='RdYlBu_r'
)

heatmap.save(
    '/output/heatmap.png',
    high_res=True,
    stride=32
)

๐Ÿ“š Key Modules

Module Purpose
histox.project Main Project class for pipeline management
histox.dataset Dataset handling and tile management
histox.model Model architecture and training
histox.slide WSI (Whole Slide Image) handling
histox.norm Stain normalization algorithms
histox.heatmap Heatmap generation and visualization
histox.stats Statistical analysis and reporting

๐ŸŽฏ Supported Models

  • CNN Architectures: Xception, ResNet-50, EfficientNet, InceptionV3, DenseNet
  • Vision Transformers: ViT, DeiT
  • Specialized Architectures: Cellpose (instance segmentation)

๐Ÿ“– Documentation

For detailed documentation and API reference:

๐Ÿค Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Commit your changes (git commit -am 'Add feature')
  4. Push to the branch (git push origin feature/your-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the Apache License 2.0. See LICENSE file for details.

Note: This project is built on Slideflow. Please refer to the original project's license for additional terms.

๐Ÿ™ Acknowledgments

  • Slideflow - The powerful foundation this project is built upon
  • TCGA - The Cancer Genome Atlas for dataset resources
  • PyTorch & TensorFlow - Deep learning frameworks

๐Ÿ“ž Support & Contact

๐Ÿ”— Related Resources


Status: Active development
Last Updated: 2026-04-11

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

histox-0.2.1.tar.gz (872.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

histox-0.2.1-py3-none-any.whl (959.3 kB view details)

Uploaded Python 3

File details

Details for the file histox-0.2.1.tar.gz.

File metadata

  • Download URL: histox-0.2.1.tar.gz
  • Upload date:
  • Size: 872.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for histox-0.2.1.tar.gz
Algorithm Hash digest
SHA256 2fec0bdc85206cb5debc697d41a8e3f16cbf677b1a66086c3e5d69d2c3d9305b
MD5 3bccb6d87e1be2fdc4c699d21d6d1b37
BLAKE2b-256 4906fe815f69f9a9576d1374e2b9b99b5d8c02dfbe0105f1c04c84e212499ad9

See more details on using hashes here.

File details

Details for the file histox-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: histox-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 959.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for histox-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ebd890797db7c2d4ec39191ba44cf13fb7140c49d27f3a4d75afd7f5bd8e5773
MD5 15b9afb5e7739bf2996c885416cee376
BLAKE2b-256 815eec966cb2f56fb8001f21ad555e9d871c3acab46415f69613a702d34b3cf1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page