OpenPhenom / README.md
recursionaut's picture
Update README.md (#14)
60ef9d5 verified
---
library_name: transformers
tags: []
---
# Model Card for OpenPhenom-S/16
Channel-agnostic image encoding model CA-MAE with a ViT-S/16 encoder backbone designed for microscopy image featurization.
The model uses a vision transformer backbone with channelwise cross-attention over patch tokens to create contextualized representations separately for each channel.
## Model Details
### Model Description
This model is a [channel-agnostic masked autoencoder](https://openaccess.thecvf.com/content/CVPR2024/html/Kraus_Masked_Autoencoders_for_Microscopy_are_Scalable_Learners_of_Cellular_Biology_CVPR_2024_paper.html) trained to reconstruct microscopy images over three datasets:
1. RxRx3
2. JUMP-CP overexpression
3. JUMP-CP gene-knockouts
- **Developed, funded, and shared by:** Recursion
- **Model type:** Vision transformer CA-MAE
- **Image modality:** Optimized for microscopy images from the CellPainting assay
- **License:** [Non-Commercial End User License Agreement](https://huggingface.co/recursionpharma/OpenPhenom/blob/main/LICENSE)
### Model Sources
- **Repository:** [https://github.com/recursionpharma/maes_microscopy](https://github.com/recursionpharma/maes_microscopy)
- **Paper:** [Masked Autoencoders for Microscopy are Scalable Learners of Cellular Biology](https://openaccess.thecvf.com/content/CVPR2024/html/Kraus_Masked_Autoencoders_for_Microscopy_are_Scalable_Learners_of_Cellular_Biology_CVPR_2024_paper.html)
## Uses
NOTE: model embeddings tend to extract features only after using standard batch correction post-processing techniques. **We recommend**, at a *minimum*, after inferencing the model over your images, to do the standard `PCA-CenterScale` pattern or better yet Typical Variation Normalization:
1. Fit a PCA kernel on all the *control images* (or all images if no controls) from across all experimental batches (e.g. the plates of wells from your assay),
2. Transform all the embeddings with that PCA kernel,
3. For each experimental batch, fit a separate StandardScaler on the transformed embeddings of the controls from step 2, then transform the rest of the embeddings from that batch with that StandardScaler.
### Direct Use
- Create biologically useful embeddings of microscopy images
- Create contextualized embeddings of each channel of a microscopy image (set `return_channelwise_embeddings=True`)
- Leverage the full MAE encoder + decoder to predict new channels / stains for images without all 6 CellPainting channels
### Downstream Use
- A determined ML expert could fine-tune the encoder for downstream tasks such as classification
### Out-of-Scope Use
- Unlikely to be especially performant on brightfield microscopy images
- Out-of-domain medical images, such as H&E (maybe it would be a decent baseline though)
## Bias, Risks, and Limitations
- Primary limitation is that the embeddings tend to be more useful at scale. For example, if you only have 1 plate of microscopy images, the embeddings might underperform compared to a supervised bespoke model.
## How to Get Started with the Model
You should be able to successfully run the below tests, which demonstrate how to use the model at inference time.
```python
import pytest
import torch
from huggingface_mae import MAEModel
# huggingface_openphenom_model_dir = "."
huggingface_modelpath = "recursionpharma/OpenPhenom"
@pytest.fixture
def huggingface_model():
# This step downloads the model to a local cache, takes a bit to run
huggingface_model = MAEModel.from_pretrained(huggingface_modelpath)
huggingface_model.eval()
return huggingface_model
@pytest.mark.parametrize("C", [1, 4, 6, 11])
@pytest.mark.parametrize("return_channelwise_embeddings", [True, False])
def test_model_predict(huggingface_model, C, return_channelwise_embeddings):
example_input_array = torch.randint(
low=0,
high=255,
size=(2, C, 256, 256),
dtype=torch.uint8,
device=huggingface_model.device,
)
huggingface_model.return_channelwise_embeddings = return_channelwise_embeddings
embeddings = huggingface_model.predict(example_input_array)
expected_output_dim = 384 * C if return_channelwise_embeddings else 384
assert embeddings.shape == (2, expected_output_dim)
```
We also provide a [notebook](https://huggingface.co/recursionpharma/OpenPhenom/blob/main/RxRx3-core_inference.ipynb) for running inference on [RxRx3-core](https://huggingface.co/datasets/recursionpharma/rxrx3-core).
## Training, evaluation and testing details
See paper linked above for details on model training and evaluation. Primary hyperparameters are included in the repo linked above.
## Environmental Impact
- **Hardware Type:** Nvidia H100 Hopper nodes
- **Hours used:** 400
- **Cloud Provider:** private cloud
- **Carbon Emitted:** 138.24 kg co2 (roughly the equivalent of one car driving from Toronto to Montreal)
**BibTeX:**
```TeX
@inproceedings{kraus2024masked,
title={Masked Autoencoders for Microscopy are Scalable Learners of Cellular Biology},
author={Kraus, Oren and Kenyon-Dean, Kian and Saberian, Saber and Fallah, Maryam and McLean, Peter and Leung, Jess and Sharma, Vasudev and Khan, Ayla and Balakrishnan, Jia and Celik, Safiye and others},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={11757--11768},
year={2024}
}
```
## Model Card Contact
- Kian Kenyon-Dean: kian.kd@recursion.com
- Oren Kraus: oren.kraus@recursion.com
- Or, email: info@rxrx.ai