English · 中文(繁體) · 中文 (简体) · 日本語 · 한국어 · Tiếng Việt · العربية · Français · Español · Deutsch · Русский
Ein script-orientiertes Forschungs-Repository (historisch als inverse_metasurface bezeichnet) für das inverse Metasurface-Design in der Spektralbildgebung. Der zentrale Workflow kombiniert:
- physikgestützte RCWA-Simulation (S4 + Lua)
- Datenzusammenführung und Anfügen von Formen
- dreistufiges PyTorch-Lernen (
shape -> spectrum,spectrum -> shape, verkettetes Fine-Tuning) - quantitative und qualitative Auswertung, optional mit Konsistenzprüfung zwischen Neuronalem Netz und S4
| Punkt | Details |
|---|---|
| 🎯 Hauptaufgabe | C4-symmetrische Metasurface-Geometrie aus Ziel-Transmissionsspektren ableiten |
| 🔬 Simulator | ../build/S4, aufgerufen durch Shell-Launcher und .lua-Skripte |
| 🧠 Lernpipeline | Stufe A shape -> spectra, Stufe B spectra -> shape, Stufe C spectra -> shape -> spectra |
| 📦 Datenvertrag | zusammengeführte CSV (T@..., Metadaten, vertices_str) -> komprimierte NPZ (uids, spectra, shapes) |
| 🧪 Auswertung | MSE-Metriken, Stufen-Visualisierungen, optionale erneute S4-Simulation |
- Simulationsergebnisse in
results/und Polygondateien inshapes/erzeugen. - S4-CSV-Dateien zusammenführen und Form-Vertices anhängen.
- Spaltennamen der zusammengeführten Datei für Trainingskompatibilität normalisieren.
- Zusammengeführte CSV-Dateien in NPZ-Tensoren vorverarbeiten.
- Modelle der Stufen A/B/C trainieren.
- Checkpoints auswerten und Verhalten visualisieren.
- Optional Spektren vorhergesagter Formen mit neuen S4-Läufen vergleichen.
.
├── README.md
├── how_to_run.md
├── commands.md
├── iccp.yaml
├── pip_requirements.txt
│
├── ms.sh
├── ms_final.sh
├── ms_resume.sh
├── ms_resume_allargs.sh
├── ms_resume_random_state.sh
│
├── metasurface_seed.lua
├── metasurface_final.lua
├── metasurface_seed_resume.lua
├── metasurface_allargs_resume.lua
├── metasurface_resume_random_state.lua
├── metasurface_fixed_shape_and_c_value.lua
│
├── merge_s4_data_full.py
├── three_stage_transmittance.py
├── three_stage_transmittance_evaluation.py
├── FilterShapeS4_Evaluator_Transmittance.py
│
├── partial_crys_data/
├── results/
├── shapes/
├── merged_csvs/
├── outputs_three_stage_*/
│
├── AVIRIS*/
├── noise_experiment*/
└── archived/
| Abhängigkeit | Hinweise |
|---|---|
| Linux + Bash | Launcher-Skripte sind auf Shell-Ausführung ausgelegt |
| Python 3.9 | Entspricht iccp.yaml |
| Conda | Für Reproduzierbarkeit empfohlen |
| S4-Binärdatei | Erwartet unter ../build/S4 |
| CUDA-GPU (optional) | Beschleunigt Training/Auswertung |
git clone <your-repo-url> inverse_metasurface
cd inverse_metasurfaceconda env create -f iccp.yaml
conda activate iccpAlternative (weniger kontrolliert):
pip install -r pip_requirements.txtls -l ../build/S4chmod +x ms.sh ms_final.sh ms_resume.sh ms_resume_allargs.sh ms_resume_random_state.shEinfacher Launcher:
./ms.sh -ns 10000 -r 12345Parametrisierter Launcher:
./ms_final.sh \
-ns 10000 \
-r 12345 \
-p myrun \
-g 80 \
-bo 0.35 \
-ro 0.30Launcher mit Resume-Fokus:
./ms_resume_allargs.sh \
-ns 10000 \
-r 12345 \
-p myrun \
-g 80 \
-bo 0.35 \
-ro 0.30Hinweise:
- Launcher führen
NQ=1..4parallel aus. - Skripte rufen
../build/S4mit-t 32auf.
python merge_s4_data_full.py --prefix myrun
# output: merged_s4_shapes_myrun.csvmerge_s4_data_full.py schreibt folder_key und NQ, während der Trainingspfad prefix und nQ erwartet.
python -c "import pandas as pd; p='merged_s4_shapes_myrun.csv'; df=pd.read_csv(p); df=df.rename(columns={'folder_key':'prefix','NQ':'nQ'}); df.to_csv(p,index=False)"mkdir -p merged_csvs
mv merged_s4_shapes_myrun.csv merged_csvs/
python three_stage_transmittance.py \
--preprocess \
--input_folder merged_csvs \
--output_npz preprocessed_t_data.npzpython three_stage_transmittance.py \
--data_npz preprocessed_t_data.npz \
--num_epochs 100 \
--batch_size 1024Ausgaben werden geschrieben nach:
outputs_three_stage_YYYYMMDD_HHMMSS/stageAoutputs_three_stage_YYYYMMDD_HHMMSS/stageBoutputs_three_stage_YYYYMMDD_HHMMSS/stageC
python three_stage_transmittance_evaluation.py \
--model_dir outputs_three_stage_YYYYMMDD_HHMMSS \
--data_npz preprocessed_t_data.npz \
--sample_count 8python FilterShapeS4_Evaluator_Transmittance.py \
--npz_file preprocessed_t_data.npz \
--spec2shape_ckpt outputs_three_stage_YYYYMMDD_HHMMSS/stageC/spec2shape_stageC.pt \
--shape2spec_ckpt outputs_three_stage_YYYYMMDD_HHMMSS/stageA/shape2spec_stageA.pt \
--n_samples 4| Flag | Bedeutung | Standard |
|---|---|---|
-ns, --numshapes |
Anzahl zu erzeugender Formen | 100000 |
-r, --seed |
Zufalls-Seed | 88888 |
-p, --prefix |
Prefix/Resume-Schlüssel | "" |
-g, --numg |
Basis-/Grid-Parameter | 80 |
-bo, --baseouter |
Basis-Offset der äußeren Grenze | 0.25 |
-ro, --randouter |
Zufälliger Offset der äußeren Grenze | 0.20 |
| Flag | Bedeutung | Standard |
|---|---|---|
--preprocess |
Vorverarbeitungsmodus ausführen | False |
--input_folder |
Ordner mit zusammengeführten CSV-Dateien | "" |
--output_npz |
Ausgabepfad für NPZ | preprocessed_data.npz |
--data_npz |
NPZ-Datensatz für das Training | "" |
--csv_file |
CSV-Fallback, falls NPZ nicht verwendet wird | "" |
--test |
Testmodus | False |
--num_epochs |
Anzahl der Trainingsepochen | 10 |
--batch_size |
Batch-Größe | 4096 |
| Flag | Bedeutung | Standard |
|---|---|---|
--model_dir |
Verzeichnis mit stageA/B/C |
erforderlich |
--data_npz |
NPZ-Eingabe | "" |
--csv_file |
CSV-Eingabe-Fallback | "" |
--output_dir |
Ausgabeverzeichnis überschreiben | automatisch unter model_dir |
--sample_count |
Anzahl visualisierter Samples | 4 |
--seed |
Zufalls-Seed | 23 |
--font_scale |
Schrift-Skalierung für Plots | 1.0 |
--batch_size |
Batch-Größe für Auswertung | 32 |
--plot_only |
Nur Trainingskurven plotten | False |
| Flag | Bedeutung | Standard |
|---|---|---|
--npz_file |
NPZ-Eingabedatei | preprocessed_t_data.npz |
--spec2shape_ckpt |
Checkpoint-Pfad für Stufe C | outputs_three_stage_20250322_145925/stageC/spec2shape_stageC.pt |
--shape2spec_ckpt |
Checkpoint-Pfad für Stufe A | outputs_three_stage_20250322_145925/stageA/shape2spec_stageA.pt |
--n_samples |
Anzahl ausgewerteter Samples | 4 |
--seed |
Zufalls-Seed | 23 |
--max_workers |
S4-Worker-Threads | 4 |
--out_folder |
Ausgabeverzeichnis | automatischer Zeitstempel |
./ms_final.sh -ns 1000 -r 42 -p smoke -g 40 -bo 0.25 -ro 0.20
python merge_s4_data_full.py --prefix smoke
python -c "import pandas as pd; p='merged_s4_shapes_smoke.csv'; d=pd.read_csv(p).rename(columns={'folder_key':'prefix','NQ':'nQ'}); d.to_csv(p,index=False)"
mkdir -p merged_csvs && mv merged_s4_shapes_smoke.csv merged_csvs/
python three_stage_transmittance.py --preprocess --input_folder merged_csvs --output_npz smoke.npz
python three_stage_transmittance.py --data_npz smoke.npz --num_epochs 5 --batch_size 128Das aktuelle Inverse-Design-Setup lernt, C4-symmetrische Geometrie aus der Transmission über Kristallisationszustände hinweg zu rekonstruieren. Die aktuelle Transmissionspipeline nimmt an:
- 11 Kristallisationszeilen pro Form-Sample (gruppiert über eindeutige
shape_uid) - 100 Wellenlängen-Bins pro Kristallisationszustand (
T@...-Spalten) - bis zu 4 Q1-Kontrollpunkte kodiert als
4x3-Tensor:(presence, x, y) - Polygonrekonstruktion unter C4-Symmetrie für Formvisualisierung und Konsistenzprüfungen
Das Repository enthält außerdem explorative Zweige (AVIRIS*, noise_experiment*, archived/) außerhalb des primären Trainingspfads für Transmission.
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
../build/S4: No such file or directory |
S4-Binärdatei fehlt am erwarteten relativen Pfad | S4 unter ../build/S4 bauen oder verlinken, oder Launcher-Pfade aktualisieren |
No transmission columns found |
CSV enthält keine T@...-Spalten |
Ausgabeformat des Merge-Schritts prüfen |
Must specify either --data_npz or --csv_file |
Trainings-/Auswertungsdatenargument fehlt | Eine Eingabe explizit angeben |
No valid shapes => SHIFT->Q1->UpTo4 |
Ungültiges/leeres vertices_str oder Q1-Filter entfernt alle Samples |
Shape-Dateien und Merge-Ausgabe validieren |
Leere Merge-Ausgabe für --prefix |
Prefix passt nicht zu Dateien in results/ |
Exakten Dateinamens-Prefix prüfen und Merge erneut ausführen |
| Auswertungs-Checkpoint fehlt | Fehlende Checkpoint-Dateien in stageA/B/C |
Prüfen, ob --model_dir auf einen vollständigen Output-Ordner zeigt |
Beiträge sind willkommen, insbesondere für Reproduzierbarkeit, Tests und Dokumentationsqualität.
Empfohlener Ablauf:
- Ein Issue mit Umfang und erwartetem Verhalten öffnen.
- Einen fokussierten Branch erstellen.
- Einen Pull Request mit ausführbaren Befehlen und Ausgaben einreichen.
- Änderungen nach Möglichkeit auf einen Workflow beschränken.
Im aktuellen Snapshot liegt im Repository-Root keine LICENSE-Datei vor. Füge eine hinzu, um Nutzungs- und Weitergabebedingungen festzulegen.
Wenn du dieses Repository nutzt oder auf dieser Arbeit aufbaust, zitiere bitte:
@article{chen2025inverse,
title={Inverse Design of Metasurface for Spectral Imaging},
author={Chen, Rongzhou and Nie, Haitao and Zhu, Shuo and Zhao, Yaping and Wang, Chutian and Lam, Edmund Y},
journal={arXiv preprint arXiv:2510.21924},
year={2025}
}