Self-supervised learning for BIM element classification using a joint embedding predictive architecture
Created by Jack Wei Lun Shi*, Wawan Solihin, Yufeng Weng, Yimin Zhao, Leong Hien Poh, Justin K.W. Yeoh
[Automation in Construction] [Project Page] [Model Weights]
This repository contains BIM-JEPA implementation for Self-supervised learning for BIM element classification using a joint embedding predictive architecture.
The development of scalable models for automated Building Information Modeling (BIM) element classification is hindered by the reliance on supervised learning, which requires expensive and laborious manual data annotation. This paper introduces a pre-trained model that leverages a Joint Embedding Predictive Architecture for self-supervised learning on unlabeled 3D point cloud representations of individual BIM elements. By predicting the latent representations of masked regions of element geometry, the proposed model learns rich geometric features that achieve competitive accuracy on a downstream classification task, outperforming existing supervised methods without heavy data augmentation, while excelling in data-scarce scenarios. This paper mitigates the data annotation bottleneck and establishes a path toward developing a foundation model for BIM geometry, enabling more scalable, data-efficient, and generalizable representation learning in the Architecture, Engineering, and Construction domain.
All model weights are available on HuggingFace.
| model | dataset | config | url |
|---|---|---|---|
| BIM-JEPA-pretrained | IFC-884K; IFCNet; BIMGEOM | config | HuggingFace |
| model | dataset | Overall Acc | Mean Acc | config | url |
|---|---|---|---|---|---|
| BIM-JEPA-IFCNetCore | IFCNetCore | 89.37 | 86.63 | config | HuggingFace |
| BIM-JEPA-BIMGEOM | BIMGEOM | 92.43 | 89.53 | config | HuggingFace |
- PyTorch >= 2.4.1
- python == 3.11
- CUDA >= 12.1
- torchvision
- PyTorch3D
Option A (Recommended) -> You can create conda environment using:
conda env create -f environment.yml
conda activate bimjepa
Option B -> Create environment:
conda create -n bimjepa \
python=3.11 \
pytorch=2.4.1 \
torchvision=0.19.1 \
pytorch-cuda=12.1 \
cudatoolkit \
-c pytorch -c nvidia -y
After that, install PyTorch3D (https://github.com/facebookresearch/pytorch3d):
export FORCE_CUDA=1
conda install pytorch3d::pytorch3d
Finally, install the remaining miscellaneous/visualization packages:
pip install transformers accelerate "pytorch-lightning>=2.0" "jsonargparse[signatures]" trimesh scikit-learn h5py matplotlib wandb timm lightning-bolts fvcore pandas seaborn plotly
The details of raw data can be found in DATASET.md. After downloading the raw data, please run data_convert.ipynb to convert all raw data into NPY point clouds.
All checkpoints are hosted on HuggingFace (see the table above). First install the HuggingFace CLI:
pip install -U "huggingface_hub[cli]"
To fine-tune from the pre-trained encoder, download the pre-trained checkpoint into BIM-JEPA/pretrained/ (this is the default path expected by the classification configs):
cd BIM-JEPA
huggingface-cli download llama2thedog/BIM-JEPA-pretrained \
bim_jepa_pretrained.ckpt --local-dir pretrained
To run inference / evaluation with a fine-tuned classifier, download the corresponding fine-tuned checkpoint, e.g.:
huggingface-cli download llama2thedog/BIM-JEPA-finetuned-ifcnetcore \
bim_jepa_finetuned_ifcnetcore.ckpt --local-dir pretrained
All commands below are run from the BIM-JEPA/ directory.
Fine-tune on IFCNetCore:
python -m bimjepa.tasks.classification fit \
-c configs/BIM-JEPA/classification/ifcnet_classification.yaml
Fine-tune on BIMGEOM:
python -m bimjepa.tasks.classification fit \
-c configs/BIM-JEPA/classification/bimgeom_classification.yaml
Pre-train from scratch (multi-GPU, expects all five pre-training datasets prepared as in DATASET.md):
python -m bimjepa fit \
-c configs/BIM-JEPA/pretraining/combined_pretrain_original.yaml
For HPC users, example PBS scripts are provided in BIM-JEPA/compute/ — see BIM-JEPA/compute/README.md for details.
For a no-install Colab walkthrough that downloads a fine-tuned model and runs inference on sample point clouds, see BIM_JEPA_demo.ipynb.
Update 19 Jun 2026: Refer to BIM_JEPA_demo_2.ipynb for an improved version that also visualizes the original .obj mesh alongside the point cloud, making the results easier to interpret.
MIT License
If you find our work useful in your research, please consider citing:
@article{shi2026selfsupervised,
title={Self-supervised learning for BIM element classification using a joint embedding predictive architecture},
author={Shi, Jack Wei Lun and Solihin, Wawan and Weng, Yufeng and Zhao, Yimin and Poh, Leong Hien and Yeoh, Justin K.W.},
journal={Automation in Construction},
volume={190},
pages={107075},
year={2026},
publisher={Elsevier}
}
We sincerely thank the authors of Point-JEPA, SpaRSE-BIM/IFCNet, and BIMGEOM for making their code/data and models publicly available, which served as the foundation for this work. If you use our work, please also consider citing these papers.