Skip to content

DaisukeInoue52/EnvSimML

Repository files navigation

EnvSimML

Grasshopper(GH)で日射・影のシミュレーションを自動実行し、その結果をもとに機械学習で日射画像を予測するためのプロジェクトです。

シミュレーション結果は 70 x 70 = 4900 個のピクセル値として保存します。その画像データを Autoencoder で64次元の潜在表現に圧縮し、窓寸法・方角・季節などの入力条件から潜在表現を予測します。最後に Decoder で潜在表現を画像に戻すことで、GHで毎回シミュレーションを回さなくても、入力条件から日射・影の結果を高速に推定できるようにします。

GitHubに含めていないファイル

GitHub の容量を軽くするため、以下のファイルやフォルダは .gitignore で除外しています。

  • lb_dataset/pixel_csv/
  • lb_dataset_normal/pixel_csv_open/
  • lb_dataset/latent.csv
  • lb_dataset_normal/latent_normal.csv
  • lb_dataset/ae_full_out/
  • lb_dataset_normal/ae_full_out_normal/
  • lb_dataset/latent_reg_out/
  • lb_dataset_normal/latent_reg_out_normal_mlp/
  • evaluation/evaluation_out*/
  • lb_dataset/compare_out/
  • lb_dataset/preview_png/

これらは、GHでシミュレーションを実行したり、Pythonスクリプトで学習・評価を実行したりすると再生成されます。

フォルダ構成

EnvSimML/
├── 20251128_修論用モデル_格子有.gh
├── 20251128_修論用モデル_格子無.gh
├── README.md
├── requirements.txt
├── evaluation/
│   ├── app.py
│   ├── compare_gt_pred_images.py
│   ├── evaluation.py
│   ├── evaluation_ssim.py
│   ├── evaluation_normal.py
│   └── evaluation_normal_ssim.py
├── lb_dataset/
│   ├── meta.csv
│   ├── train_ae_weighted_full.py
│   ├── make_latent_csv.py
│   ├── train_latent_regressor.py
│   └── predict_image_from_inputs.py
└── lb_dataset_normal/
    ├── meta_open.csv
    ├── train_ae_weighted_normal.py
    ├── make_latent_normal.py
    ├── train_latent_regressor_normal_mlp.py
    └── app_normal.py

データセット

このプロジェクトでは、格子あり条件と格子なし条件を分けて扱います。

  • lb_dataset

    • 格子あり条件のデータセットです。
    • GHで生成した meta.csvpixel_csv/ を使います。
    • Pythonで学習すると latent.csvae_full_out/latent_reg_out/ などが作られます。
  • lb_dataset_normal

    • 格子なし条件のデータセットです。
    • GHで生成した meta_open.csvpixel_csv_open/ を使います。
    • Pythonで学習すると latent_normal.csvae_full_out_normal/latent_reg_out_normal_mlp/ などが作られます。

現在のGitHubリポジトリには、容量の大きいピクセルCSVや学習済みモデルは含めていません。

1. GHでシミュレーションデータを作成する

まず Grasshopper の .gh ファイルを使って、入力条件を変化させながら日射シミュレーションを自動実行します。

  • 20251128_修論用モデル_格子有.gh

    • 格子あり条件のシミュレーションに使います。
    • 出力先は lb_dataset/ を想定しています。
  • 20251128_修論用モデル_格子無.gh

    • 格子なし条件のシミュレーションに使います。
    • 出力先は lb_dataset_normal/ を想定しています。

GHでは、窓の幅、窓の高さ、方角、季節、腰壁高さ、分割数、格子厚などの入力条件を変化させ、その条件ごとのシミュレーション結果を保存します。

格子あり条件では、主に以下が作成されます。

lb_dataset/
├── meta.csv
└── pixel_csv/
    ├── case_000000.csv
    ├── case_000001.csv
    └── ...

格子なし条件では、主に以下が作成されます。

lb_dataset_normal/
├── meta_open.csv
└── pixel_csv_open/
    ├── case_000000.csv
    ├── case_000001.csv
    └── ...

meta.csvmeta_open.csv には、各ケースの入力条件と case_id が保存されます。pixel_csv/pixel_csv_open/ には、各 case_id に対応する 4900 ピクセルの日射結果がCSVとして保存されます。

2. Python環境を準備する

Python 3.10 以上を推奨します。macOS などで python コマンドが見つからない場合は、python3 に置き換えてください。

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Windows の場合:

.venv\Scripts\activate
pip install -r requirements.txt

3. 格子ありモデルを学習する

格子あり条件では lb_dataset/ を使います。

3-1. Autoencoderを学習する

python lb_dataset/train_ae_weighted_full.py

このスクリプトは lb_dataset/meta.csvlb_dataset/pixel_csv/ を読み込み、画像を潜在表現に圧縮・復元する Autoencoder を学習します。

実行後に作成される主なファイル:

lb_dataset/ae_full_out/
├── ae_weights.pt
├── case_000000_GT_REC.png
├── case_000001_GT_REC.png
└── ...

ae_weights.pt は Autoencoder の学習済み重みです。以降の潜在変数作成や画像復元で使います。

3-2. 潜在変数CSVを作成する

python lb_dataset/make_latent_csv.py

このスクリプトは、学習済み Autoencoder の Encoder を使って、各ケースの画像を64次元の潜在変数に変換します。

実行後に作成されるファイル:

lb_dataset/latent.csv

latent.csv には、case_idz00 から z63 までの潜在変数が保存されます。

3-3. 入力条件から潜在変数を予測するモデルを学習する

python lb_dataset/train_latent_regressor.py

このスクリプトは meta.csvlatent.csv を結合し、入力条件から64次元の潜在変数を予測する MLP 回帰モデルを学習します。

実行後に作成される主なファイル:

lb_dataset/latent_reg_out/
├── latent_regressor.pkl
├── metrics.txt
└── pred_latent_sample.csv

latent_regressor.pkl は、入力条件を受け取って潜在変数を予測する学習済みモデルです。Streamlitアプリや評価スクリプトで使います。

4. 格子なしモデルを学習する

格子なし条件では lb_dataset_normal/ を使います。事前にGHで meta_open.csvpixel_csv_open/ を作成しておく必要があります。

4-1. Autoencoderを学習する

python lb_dataset_normal/train_ae_weighted_normal.py

実行後に作成される主なファイル:

lb_dataset_normal/ae_full_out_normal/
├── ae_weights.pt
├── ae_config.json
├── case_000000_GT_REC.png
└── ...

4-2. 潜在変数CSVを作成する

python lb_dataset_normal/make_latent_normal.py

実行後に作成されるファイル:

lb_dataset_normal/latent_normal.csv

4-3. 入力条件から潜在変数を予測するモデルを学習する

python lb_dataset_normal/train_latent_regressor_normal_mlp.py

実行後に作成される主なファイル:

lb_dataset_normal/latent_reg_out_normal_mlp/
├── latent_regressor.pkl
├── metrics.txt
└── pred_latent_sample.csv

5. 評価する

評価用スクリプトは evaluation/ にまとめています。

格子ありデータの評価:

python evaluation/evaluation.py
python evaluation/evaluation_ssim.py

作成される主なファイル:

evaluation/evaluation_out/metrics.txt
evaluation/evaluation_out_ssim/metrics.txt
evaluation/evaluation_out_ssim/ssim_per_case.csv

格子なしデータの評価:

python evaluation/evaluation_normal.py
python evaluation/evaluation_normal_ssim.py

作成される主なファイル:

evaluation/evaluation_out_normal/metrics.txt
evaluation/evaluation_out_normal_ssim/metrics.txt
evaluation/evaluation_out_normal_ssim/ssim_per_case.csv

格子あり・格子なしの予測画像を比較する場合:

python evaluation/compare_gt_pred_images.py

作成される主なファイル:

lb_dataset/compare_out/
├── grid_00_case_XXXXXX_GT_PRED.png
├── normal_00_case_XXXXXX_GT_PRED.png
└── ...

6. アプリで推論する

学習後は、Streamlitアプリで入力条件から日射画像を予測できます。

格子ありモデル:

streamlit run evaluation/app.py

格子なしモデル:

streamlit run lb_dataset_normal/app_normal.py

アプリを動かすには、以下の学習済みファイルが必要です。

lb_dataset/ae_full_out/ae_weights.pt
lb_dataset/latent_reg_out/latent_regressor.pkl

または格子なしの場合:

lb_dataset_normal/ae_full_out_normal/ae_weights.pt
lb_dataset_normal/latent_reg_out_normal_mlp/latent_regressor.pkl

処理全体の流れ

GHシミュレーション
  ↓
meta.csv / pixel_csv/
  ↓
train_ae_weighted_full.py
  ↓
ae_weights.pt
  ↓
make_latent_csv.py
  ↓
latent.csv
  ↓
train_latent_regressor.py
  ↓
latent_regressor.pkl
  ↓
evaluation.py / app.py
  ↓
評価結果または予測画像

格子なしの場合は、meta.csvmeta_open.csvpixel_csv/pixel_csv_open/latent.csvlatent_normal.csv に読み替えてください。

生成物一覧

操作 入力 出力
GHで格子ありシミュレーション .gh ファイル lb_dataset/meta.csv, lb_dataset/pixel_csv/
GHで格子なしシミュレーション .gh ファイル lb_dataset_normal/meta_open.csv, lb_dataset_normal/pixel_csv_open/
Autoencoder学習 meta.csv, pixel_csv/ ae_weights.pt, 再構成PNG
潜在変数作成 ae_weights.pt, pixel_csv/ latent.csv または latent_normal.csv
回帰モデル学習 meta.csv, latent.csv latent_regressor.pkl, metrics.txt
評価 latent_regressor.pkl, ae_weights.pt, 正解CSV evaluation_out*/metrics.txt, ssim_per_case.csv
アプリ推論 latent_regressor.pkl, ae_weights.pt 入力条件に対する予測画像

注意

pixel_csv/pixel_csv_open/ae_weights.ptlatent_regressor.pkl、評価画像などは容量が大きくなりやすいため、GitHubには含めていません。別の環境で実行する場合は、GHでデータを再生成するか、必要な生成物を別途共有してください。

About

建具まわりの日射・影のシミュレーション結果を、機械学習で高速に予測するためのプロジェクトです。 GHで日射シミュレーションを回し、そのデータをもとに機械学習で結果を予測します。シミュレーション結果の画像を 70 x 70 = 4900 個のピクセル値として扱い、Autoencoder で潜在表現に圧縮します。その後、窓寸法・方角・季節などの入力条件から潜在表現を予測し、Decoder で画像に復元します。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages