CrysMTM is a comprehensive multiphase, temperature-resolved, multimodal dataset for crystalline materials research, specifically focused on titanium dioxide (TiO₂) polymorphs. The dataset is designed primarily for regression tasks to predict 9 key material properties from multimodal inputs. It contains three crystalline phases of TiO₂ (anatase, brookite, and rutile) across a temperature range of 0-1000K, with multiple data modalities including atomic coordinates, visual representations, and textual descriptions.
Supported Tasks and Leaderboards
The dataset primarily supports regression tasks for materials property prediction:
Main Task - Regression: Predict 9 material properties from multimodal inputs
HOMO energy, LUMO energy, band gap, Fermi energy, total energy, energy per atom, atomic displacement, volumetric expansion, and bond length changes
Main Task - LLM Property Prediction: Zero-shot and few-shot prediction of the 9 material properties using large language models
Secondary Task - LLM Summary Generation: Generate textual summaries of crystal structures and properties using large language models
Tertiary Task - Classification: Predict the crystalline phase (anatase, brookite, or rutile) from multimodal inputs
Languages
The dataset contains English text descriptions of crystal structures and properties.
Dataset Structure
Data Instances
Each data instance represents a TiO₂ crystal structure at a specific temperature and rotation, containing:
Phase: One of three TiO₂ polymorphs (anatase, brookite, rutile)
Temperature: Temperature in Kelvin (0-1000K, in 50K increments)
Rotation: Rotation index for the crystal structure
Modalities: Multiple data representations of the same structure
Data Fields
Core Metadata
phase (string): Crystal phase - "anatase", "brookite", or "rutile"
temperature (integer): Temperature in Kelvin (0, 50, 100, ..., 1000)
rotation (integer): Rotation index for the crystal structure
Multimodal Data
image (PIL.Image): Visual representation of the crystal structure (PNG format)
xyz (torch.Tensor): Atomic coordinates in XYZ format (N×3 tensor)
text (string): Textual description of the crystal structure and properties
element (list): List of element symbols for each atom
Labels
Primary Labels - Regression:
regression_label (torch.Tensor): 9-dimensional tensor containing the main prediction targets:
HOMO (float): HOMO energy (E_H) in eV
LUMO (float): LUMO energy (E_L) in eV
Eg (float): Band gap energy (E_g) in eV
Ef (float): Fermi energy (E_f) in eV
Et (float): Total energy of the system (E_T) in eV
Eta (float): Total energy per atom (E_Ta) in eV
disp (float): Maximum atomic displacement (Δr_max) in Å
vol (float): Volumetric expansion (ΔV) in ų
bond (float): Ti-O bond length change (Δd_Ti-O) in Å
1@dataset{crysmtm2024,
2 title={CrysMTM: A Multiphase, Temperature-Resolved, Multimodal Dataset for Crystalline Materials},
3 author={Can Polat and Erchin Serpedin and Mustafa Kurban and Hasan Kurban},
4 year={2024},
5 url={https://github.com/KurbanIntelligenceLab/CrysMTM}
6}
1# Download load_dataset.py from the repository and place it in your data directory2from load_dataset import load_dataset
34# Load the dataset5dataset = load_dataset(".")67# Access splits8train_dataset = dataset["train"]# 5,064 samples9test_id_dataset = dataset["test_id"]# 1,380 samples10test_ood_dataset = dataset["test_ood"]# 6,588 samples1112# Get a sample13sample = train_dataset[0]14print(f"Phase: {sample['phase']}")15print(f"Temperature: {sample['temperature']}K")16print(f"Image: {sample['image']}")17print(f"Regression labels: {sample['regression_labels']}")
Option 2: Use with Original Dataloaders
python
1from dataloaders.regression_dataloader import RegressionLoader
23# Load dataset for regression (main task)4dataset = RegressionLoader(5 label_dir="data",6 modalities=["image","xyz","text"],7 normalize_labels=True8)910# Get a sample11sample = dataset[0]12print(f"Target Properties: {sample['regression_label']}")13print(f"Temperature: {sample['temperature']}K")14print(f"Phase: {sample['phase']}")15print(f"Image shape: {sample['image'].size}")16print(f"XYZ coordinates shape: {sample['xyz'].shape}")
Main Task - LLM Property Prediction
python
1from dataloaders.llm_regression_dataloader import LLMLoader
23# Load dataset for LLM property prediction (main task)4dataset = LLMLoader(5 label_dir="data",6 modalities=["text","image"]7)89# Get a sample for zero-shot/few-shot property prediction10sample = dataset[0]11print(f"HOMO: {sample['HOMO']}")12print(f"LUMO: {sample['LUMO']}")13print(f"Band gap: {sample['Eg']}")14print(f"Temperature: {sample['temperature']}K")15print(f"Phase: {sample['phase']}")
Secondary Task - LLM Summary Generation
python
1from dataloaders.llm_regression_dataloader import LLMLoader
23# Load dataset for LLM summary generation (secondary task)4dataset = LLMLoader(5 label_dir="data",6 modalities=["text","image"]7)89# Get a sample for summary generation10sample = dataset[0]11print(f"Input text: {sample['text'][:200]}...")12print(f"Target properties: {sample['HOMO']}, {sample['LUMO']}, {sample['Eg']}")
Tertiary Task - Classification
python
1from dataloaders.classification_dataloader import ClassificationLoader
23# Load dataset for classification (tertiary task)4dataset = ClassificationLoader(5 base_dir="data",6 modalities=["image","xyz","text"],7 max_rotations=108)910# Get a sample11sample = dataset[0]12print(f"Phase: {sample['label']}")13print(f"Image shape: {sample['image'].size}")14print(f"XYZ coordinates shape: {sample['xyz'].shape}")15print(f"Text: {sample['text'][:100]}...")
PyTorch Geometric Integration
python
1# For graph neural networks2dataset = ClassificationLoader(3 base_dir="data",4 modalities=["xyz","element"],5 as_pyg_data=True6)78# Returns PyG Data objects9sample = dataset[0]10print(f"Node features: {sample.z}")11print(f"Positions: {sample.pos}")12print(f"Label: {sample.y}")
Language Models: LLMs for zero-shot/few-shot learning
Multimodal Models: CLIP, Pure2DopeNet, ViSNet
Performance Metrics
Primary Task - Regression
Mean Absolute Error (MAE)
Root Mean Square Error (RMSE)
R² score
Per-property evaluation metrics
Primary Task - LLM Property Prediction
Property prediction accuracy
Zero-shot vs few-shot performance comparison
Out-of-distribution generalization
Per-property evaluation metrics
Secondary Task - LLM Summary Generation
The nanoparticle summary task requires domain-specific evaluation beyond traditional string-based metrics like ROUGE or BLEU, which do not penalize incorrect numerical values. A more meaningful strategy is to extract structured key–value pairs-such as particle size, center of mass, coordination numbers, or bond angles-and compare them to ground truth using:
Information-level F₁ score that accepts only values within defined tolerances (e.g., 0.1 Å or 1 degree)
MAPE over all numeric entries
Factual consistency score like BERTScore or QA-based faithfulness after masking numeric values
Optional assessments of readability and clarity using expert judgment or coherence-based metrics (e.g., Coh-LM)
Tertiary Task - Classification
A three-class classification task to distinguish among the TiO₂ polymorphs. While overall accuracy provides a general overview, it is important to also report:
Class-wise precision, recall, and their harmonic mean (F₁ score), followed by macro-averaging to account for class imbalance
Full 3×3 confusion matrix to identify systematic misclassifications between phase pairs
Matthews correlation coefficient (MCC) and Cohen's κ statistic for chance-adjusted evaluations
Cross-entropy loss and macro-averaged area under the ROC curve (AUROC) when class probabilities are available
Known Limitations
Limited Chemical Space: Only covers TiO₂ polymorphs
Temperature Range: Limited to 0-1000K
Computational Data: All properties are from DFT calculations
Modality Dependencies: Some modalities may not be available for all samples