This repository contains the PyTorch implementation of the paper "GenEISP: Generalizable Neural Electromagnetic Inverse Scattering".
- Release training dataset and train code
- Release data processing code
We propose the first generalizable, physics-driven inverse scattering framework, which works in an end-to-end manner and achieves more accurate reconstructions on unseen cases. It remains robust even with a single transmitter and achieves real-time inference with over 300,000x speed-up.
Create and activate conda environment:
conda create -n GenEISP python=3.11.10
conda activate GenEISP
pip install -r requirements.txt-
Download the test datasets
Please download the test datasets from GoogleDrive. -
Extract and organize the data
Unzip the downloaded files and place them in thedata/test/directory. The folder structure should look like this:GenEISP/ ├── data/ │ └── test/ | ├── 3Dmnist_test/ │ ├── cylinder/ │ ├── mnist/ │ └── IF/cylinder/,mnist/, andIF/correspond to different test datasets.- Each subfolder contains the relevant test samples.
-
Training data
The training dataset and training code will be released soon. Please stay tuned for updates.
-
Download the pre-trained model
Download the pre-trained model weights from GoogleDrive. -
Organize the model weights
Unzip the downloaded files and place them in themodel/directory.
Configuration files follow the naming convention:
[dataset_name]_noise[level]_N[transmitter_number].yaml, where each part indicates the experimental setup:
| Example File | Components | Meaning |
|---|---|---|
cylinder_noise05_N16.yaml |
cylinder + noise05 + N16 |
Cylinder dataset, 5% noise, 16 transmitter |
IF_FDE_noise00_N8.yaml |
IF + FDE + noise00 + N8 |
Real-world IF dataset, FoamDielExt case, 0% noise, 8 transmitters |
IF_FDI_noise00_N8.yaml |
IF + FDI + noise00 + N8 |
Real-world IF dataset, FoamDielInt case, 0% noise, 8 transmitter |
IF_FTD_noise00_N18.yaml |
IF + FTD + noise00 + N18 |
Real-world IF dataset, FoamTwinDiel case, 0% noise, 18 transmitters |
mnist_noise30_N16.yaml |
mnist + noise30 + N16 |
MNIST dataset, 30% noise, 16 transmitters |
mnist_noise05_N1.yaml |
mnist + noise30 + N1 |
MNIST dataset, 30% noise, 1 transmitters |
Note:
If you want to change the number of transmitters, you can modify experiment.channels in the configuration yaml file.
For example:
experiment:
channels: [0, 1, 2, 3] # Use 4 transmitters, represent channel 0, 1, 2, 3The length of the channels list determines the transmitter number.
To evaluate the model on your chosen dataset, run one of the following commands:
- For 2D datasets (e.g., cylinder, mnist, IF):
python main.py --config your_path_to_config --mode test- For 3D datasets (e.g., 3Dmnist):
python main.py --config your_path_to_config --mode 3DtestComing Soon.
If you find this work useful for your research, please consider citing:
@article{cheng2025generalizableneuralelectromagneticinverse,
author = {Yizhe Cheng and Chunxun Tian and Haoru Wang and Wentao Zhu and Xiaoxuan Ma and Yizhou Wang},
title = {Generalizable Neural Electromagnetic Inverse Scattering},
journal = {arXiv preprint arXiv:2506.21349},
year = {2025},
}