11 Commits
Author SHA1 Message Date
luni c356ab18f3 calculate errors 2023-01-30 10:00:46 +00:00
luni 8e56870a07 train main model with different curvs 2023-01-29 11:04:54 +00:00
luni 10c6dd32eb train for reference 2023-01-29 00:30:19 +00:00
luni 664b59c452 rerun curv encoder training with new curvs 2023-01-28 23:57:13 +00:00
luni 6c6d379d12 train encoder with radius 100 2023-01-28 22:22:41 +00:00
luni 930668611f train curv encoders with 10p and radius 10,25 2023-01-28 15:12:42 +00:00
luni af336370d4 training orig with 10p and curv_10 2023-01-28 13:08:52 +00:00
luni 0543657e4e prepare to train 2023-01-28 12:40:28 +00:00
luni 8c0436cea8 restore original pyramid model 2023-01-26 11:10:51 +00:00
luni ffdc60062d add helpers 2023-01-25 14:37:36 +00:00
luni 73d374401b outdated 2023-01-25 13:07:24 +00:00
21 changed files with 883 additions and 127 deletions
-49
View File
@@ -1,49 +0,0 @@
# stylegan2-tf-2.x
* This is tensorflow 2.0 based keras subclassing reimplementation of official [StyleGAN2 Repo](https://github.com/NVlabs/stylegan2)
## Inference from official weights
* Please check [how_to_extract_official_weights.md](./how_to_extract_official_weights.md)
| Official repo result | Official weight copied result from this repo |
| :---: | :---: |
| ![official_result] | ![restored_result] |
## Training on 256x256
* batch size 32
* around 300k steps
| d_loss | g_loss |
| :---: | :---: |
| ![256x256_d_loss]| ![256x256_g_loss]|
* result samples
| | | |
| :---: | :---: | :---: |
| ![256x256_result_0]| ![256x256_result_1]| ![256x256_result_2]|
## Using custom data
* Create dataset(tf.data.Dataset) loader which returns
* shape: `[None, 3, res, res]` where `res` is desired image resolution
* image value range: `[-1, +1]`
## Etc
### Using with pycharm
* If .bashrc file's paths don't work in pycharm environment (e.g. `nvcc -h`), open pycharm with following
```bash
# move to pycharm installed location (location may vary)
moono@moono-ubuntu:~$ cd .local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/201.7846.77/bin/
# launch pycharm with .bashrc
moono@moono-ubuntu:~/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/201.7846.77/bin$ bash pycharm.sh
```
[loss_tensorboard]: assets/tf-keras-stylegan2-loss.PNG
[generation_tensorboard]: assets/tf-keras-stylegan2-fake-images.PNG
[official_result]: assets/seed6600-official.png
[restored_result]: assets/seed6600-restored.png
[256x256_d_loss]: assets/d_loss_256x256.png
[256x256_g_loss]: assets/g_loss_256x256.png
[256x256_result_0]: assets/out_256x256_0.png
[256x256_result_1]: assets/out_256x256_1.png
[256x256_result_2]: assets/out_256x256_2.png
+228
View File
@@ -0,0 +1,228 @@
nohup python cvae.py --name="lhunor_abl_all_10p_curv_10_r2" > nohup/review/abl_all_10p_curv_10_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_10_10p_r2" > nohup/review/curv_1_orig_curv_10_10p_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_25_10p_r2" > nohup/review/curv_1_orig_curv_25_10p_r2.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_1_orig_curv_100_10p_r2_2" > nohup/review/curv_1_orig_curv_100_10p_r2_2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_10p_curv_10_r2" > nohup/review/abl_all_10p_curv_10_r2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_10p_curv_25_r2" > nohup/review/abl_all_10p_curv_25_r2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_10p_curv_100_r2" > nohup/review/abl_all_10p_curv_100_r2.out 2>&1 &
nohup python evaluate_ae.py --name="lhunor_abl_all_10p_curv_100_r2" > nohup/evaluate/lhunor_abl_all_10p_curv_100_r2.out 2>&1 &
nohup python evaluate_ae.py --name="lhunor_abl_all_10p_curv_10_r2" > nohup/evaluate/lhunor_abl_all_10p_curv_10_r2.out 2>&1 &
nohup python evaluate_ae.py --name="lhunor_abl_all_10p_curv_25_r2" > nohup/evaluate/lhunor_abl_all_10p_curv_25_r2.out 2>&1 &
nohup python calculate_error.py --name="lhunor_abl_all_10p_curv_100_r2" > nohup/error/abl_all_10p_curv_100_r2.out 2>&1 &
nohup python calculate_error.py --name="lhunor_abl_all_10p_curv_10_r2" > nohup/error/abl_all_10p_curv_10_r2.out 2>&1 &
nohup python calculate_error.py --name="lhunor_abl_all_10p_curv_25_r2" > nohup/error/abl_all_10p_curv_25_r2.out 2>&1 &
one final convolutional layer for smoothing, on the final coordinates
skirts!!!!
pyramid next week
basic final, basic final skirts,
basic pyramid
removing curvatures test in ablation
nohup python cvae_low.py --name="lhunor_cvae_low_4_3_skirt_d32" > nohup/nohup_cvae_low_4_3_skirt_d32.out 2>&1 &
nohup python auto_encoder_body.py --name="lhunor_ae_body_post_2" > nohup/post/ae_body_2.out 2>&1 &
nohup python auto_encoder_static.py --name="lhunor_ae_static_post_4" > nohup/post/ae_static_4.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_post_1" > nohup/post/ae_curv_1.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_pyr_64_128_3" > nohup/post/abl_pyr_64_128_3.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_pyr_32_64" > nohup/post/abl_pyr_32_64.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_cvae_pyr_3_32_2_64_skirt_test_60k" > nohup/cvae_pyr_3_32_2_64_skirt_test_60k.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32" > nohup/ablation/pyr_abl_32.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_2" > nohup/ablation/pyr_abl_32_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_skin" > nohup/ablation/pyr_abl_32_skin.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_skin_offset" > nohup/ablation/pyr_abl_32_skin_offset.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_skirt" > nohup/ablation/pyr_abl_32_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_extra_loss_skirt" > nohup/ablation/pyr_abl_32_extra_loss_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_skirt_2" > nohup/ablation/pyr_abl_32_skirt_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_64" > nohup/ablation/pyr_abl_32_64.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_64_2" > nohup/ablation/pyr_abl_32_64_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_64_skirt" > nohup/ablation/pyr_abl_32_64_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_32_64_skirt_2" > nohup/ablation/pyr_abl_32_64_skirt_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_cape_m" > nohup/ablation/pyr_abl_64_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_cape_f" > nohup/ablation/pyr_abl_64_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_cape_f_2" > nohup/ablation/pyr_abl_64_cape_f_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_128_cape_f" > nohup/ablation/pyr_abl_64_128_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_128_cape_m" > nohup/ablation/pyr_abl_64_128_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_128_256_cape_f_2" > nohup/ablation/pyr_abl_64_128_256_cape_f_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_128_256_512_cape_f" > nohup/ablation/pyr_abl_64_128_256_512_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_pyr_abl_64_128_256_512_cape_f_2" > nohup/ablation/pyr_abl_64_128_256_512_cape_f_2.out 2>&1 &
nohup python upscale_test.py --name="lhunor_256_512_skirt" > nohup/up_256_512_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_cvae_v2_7_4_3" > nohup/cvae_v2_7_4_3.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_extra_loss" > nohup/ablation/abl_extra_loss.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_extra_loss_skirt" > nohup/ablation/abl_extra_loss_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_extra_loss_skirt_2" > nohup/ablation/abl_extra_loss_skirt_2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_curv" > nohup/ablation/abl_curv.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_curv_skirt" > nohup/ablation/abl_curv_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_abs" > nohup/ablation/abl_abs.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_abs_skirt" > nohup/ablation/abl_abs_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin" > nohup/ablation/abl_skin.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_norm" > nohup/ablation/abl_skin_norm.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_skirt" > nohup/ablation/abl_skin_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all" > nohup/ablation/abl_all.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_skirt" > nohup/ablation/abl_all_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_orient" > nohup/ablation/abl_orient.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_orient_skirt" > nohup/ablation/abl_orient_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_one_hot_skirt" > nohup/ablation/abl_one_hot_skirt.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_norm" > nohup/ablation/abl_norm.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_10p" > nohup/ablation/abl_10p.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_25p" > nohup/ablation/abl_25p.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_10p_skin" > nohup/ablation/abl_10p_skin.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_25p_skin" > nohup/ablation/abl_25p_skin.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_50p_skin" > nohup/ablation/abl_50p_skin.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_var" > nohup/ablation/abl_skin_var.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_var_2" > nohup/ablation/abl_skin_var_2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_var_3" > nohup/ablation/abl_skin_var_3.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_skin_var_4" > nohup/ablation/abl_skin_var_4.out 2>&1 &
nohup python cvae_curv.py --name="lhunor_cvae_curv" > nohup/ablation/cvae_curv.out 2>&1 &
nohup python cvae_curv.py --name="lhunor_cvae_curv_2" > nohup/ablation/cvae_curv_2.out 2>&1 &
abl_2_pyr_32_64_128
abl_2_pyr_64_cape_f_03223_SS
abl_2_pyr_32_64_128_256_512
nohup python cvae.py --name="lhunor_cape_f_03223_SL_2" > nohup/ablation/cape_f_03223_SL_2.out 2>&1 &
nohup python cvae.py --name="lhunor_cape_f_03223_SS_2" > nohup/ablation/cape_f_03223_SS_2.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_post" > nohup/post/abl_all_post.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32" > nohup/ablation_2/abl_2_pyr_32.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_skin" > nohup/ablation_2/abl_2_pyr_32_skin.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_skin_2" > nohup/ablation_2/abl_2_pyr_32_skin_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_skin_norm" > nohup/ablation_2/abl_2_pyr_32_skin_norm.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64" > nohup/ablation_2/abl_2_pyr_32_64.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_2" > nohup/ablation_2/abl_2_pyr_32_64_2.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128" > nohup/ablation_2/abl_2_pyr_32_64_128.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_256" > nohup/ablation_2/abl_2_pyr_32_64_128_256.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_256_512" > nohup/ablation_2/abl_2_pyr_32_64_128_256_512.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_256_512_norm" > nohup/ablation_2/abl_2_pyr_32_64_128_256_512_norm.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_skirt" > nohup/ablation_2/abl_2_pyr_32_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_skirt_extra_loss" > nohup/ablation_2/abl_2_pyr_32_skirt_extra_loss.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_skirt" > nohup/ablation_2/abl_2_pyr_32_64_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_skirt" > nohup/ablation_2/abl_2_pyr_32_64_128_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_256_skirt" > nohup/ablation_2/abl_2_pyr_32_64_128_256_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_32_64_128_256_512_skirt" > nohup/ablation_2/abl_2_pyr_32_64_128_256_512_skirt.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_cape_f" > nohup/ablation_2/abl_2_pyr_64_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_cape_f" > nohup/ablation_2/abl_2_pyr_64_128_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_256_cape_f" > nohup/ablation_2/abl_2_pyr_64_128_256_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_256_512_cape_f" > nohup/ablation_2/abl_2_pyr_64_128_256_512_cape_f.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_cape_m" > nohup/ablation_2/abl_2_pyr_64_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_cape_m" > nohup/ablation_2/abl_2_pyr_64_128_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_256_cape_m" > nohup/ablation_2/abl_2_pyr_64_128_256_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_256_512_cape_m" > nohup/ablation_2/abl_2_pyr_64_128_256_512_cape_m.out 2>&1 &
nohup python cvae_pyramid.py --name="lhunor_abl_2_pyr_64_128_256_cape_m_00032_SL" > nohup/ablation_2/abl_2_pyr_64_128_256_cape_m_00032_SL.out 2>&1 &
abl_2_all_skirt
abl_2_pyr_64_cape_m_00032_SL
python convert_to_uv.py -f '/home/workspace/data/dataset/validation' -s 0 -e 150 -n "lhunor"
python convert_to_uv.py -f '/home/workspace/data/dataset/skirt_test' -s 0 -e 1 -n "lhunor"
cp configs/config_abl_all.py configs/config_abl_abs.py
python merge_data.py -fi '/home/workspace/data/dataset/test' -fo '/home/workspace/data/dataset/test_ready' -s 0 -e 1500
python merge_data.py -fi '/home/workspace/data/dataset/valid_skirt' -fo '/home/workspace/local-data/valid_skirt' -s 0 -e 1500
nohup python upscale_test.py > nohup/u.out 2>&1 &
nohup python unpose_one_hot.py > nohup/unpose_one_hot_train_skirt.out 2>&1 &
nohup python preprocessing.py > nohup/unshape_one_hot_test_skirt.out 2>&1 &
nohup python dataset.py > nohup/avg_skirt.out 2>&1 &
nohup python evaluate_ae_support.py > nohup/evaluate_ae_support.out 2>&1 &
nohup python evaluate_cape.py --name evaluate_abl_pyr_64_128_256_512_cape_f > nohup/evaluate_abl_pyr_64_128_256_512_cape_f.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name evaluate_ae_abl_pyr_32_64_110k > nohup/evaluate_ae_abl_pyr_32_64_110k.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name evaluate_ae_abl_pyr_32_64_2_50k > nohup/evaluate_ae_abl_pyr_32_64_2_50k.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name evaluate_ae_abl_pyr_32_skirt > nohup/evaluate_ae_abl_pyr_32_skirt.out 2>&1 &
nohup python evaluate_ae.py --name abl_norm_skirt_70k > nohup/evaluate/abl_norm_skirt_70k.out 2>&1 &
nohup python calculate_error.py --name error_abl_2_pyr_32_64_128_skirt > nohup/error_ae_abl_skin_skirt_70k.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name abl_2_pyr_32_64_100k > nohup/evaluate/abl_2_pyr_32_64_100k.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name abl_2_pyr_32_64_128_80k > nohup/evaluate/abl_2_pyr_32_64_128_80k.out 2>&1 &
nohup python evaluate_ae_pyramid.py --name abl_2_pyr_32_64_128_256_512_skirt_50k > nohup/evaluate/abl_2_pyr_32_64_128_256_512_skirt_50k.out 2>&1 &
nohup python calculate_error.py --name abl_2_pyr_32_64_128_256_512_50k > nohup/error/abl_2_pyr_32_64_128_256_512_50k.out 2>&1 &
nohup 7z x CAPE_dataset.zip.001 > nohup/unzip.out 2>&1 &
nohup python main.py --config configs/CAPE-affineconv_nz18_pose24_clotype8_male.yaml --name CAPE-affineconv_nz18_pose24_clotype8_male --gender male --mode demo > cape_male.out 2>&1 &
nohup python3 main.py --config configs/CAPE-affineconv_nz18_pose24_clotype8_female.yaml --name CAPE-affineconv_nz18_pose24_clotype8_female --gender female --mode demo > cape_female.out 2>&1 &
nohup python curvature_labels.py > nohup/dijkstra_skirt.out 2>&1 &
nohup python downscale.py > nohup/downscale_2_test_skirt.out 2>&1 &
nohup python downscale_cape.py > nohup/downscale_cape_train_m.out 2>&1 &
nohup python merge_data.py -fi /home/workspace/data/dataset/train -fo /home/workspace/local-data/train -s 0 -e 1500 > nohup/merge_data_valid_skirt.out 2>&1 &
nohup python merge_data.py -fi /home/workspace/data/dataset/test_skirt -fo /home/workspace/data/dataset/test_skirt_ready -s 0 -e 1500 > nohup/merge_data_test_skirt_ready.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 0 -e 100 -n lhunor_unpose_skirt_0_100 > nohup/unpose_skirt_0_100.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 100 -e 200 -n lhunor_unpose_skirt_100_200 > nohup/unpose_skirt_100_200.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 200 -e 300 -n lhunor_unpose_skirt_200_300 > nohup/unpose_skirt_200_300.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 300 -e 400 -n lhunor_unpose_skirt_300_400 > nohup/unpose_skirt_300_400.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 400 -e 500 -n lhunor_unpose_skirt_400_500 > nohup/unpose_skirt_400_500.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 500 -e 600 -n lhunor_unpose_skirt_500_600 > nohup/unpose_skirt_500_600.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 600 -e 700 -n lhunor_unpose_skirt_600_700 > nohup/unpose_skirt_600_700.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/train_skirt -s 700 -e 800 -n lhunor_unpose_skirt_700_800 > nohup/unpose_skirt_700_800.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test_skirt -s 0 -e 100 -n lhunor_unpose_test_skirt_0_100 > nohup/unpose_test_skirt_0_100_2.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test_skirt -s 100 -e 200 -n lhunor_unpose_test_skirt_100_200 > nohup/unpose_test_skirt_100_200_2.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/cloth3d_skirt -s 0 -e 100 -n lhunor_unpose_extra_skirt_0_100 > nohup/unpose_extra_skirt_0_100.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/cloth3d_skirt -s 100 -e 200 -n lhunor_unpose_extra_skirt_100_200 > nohup/unpose_extra_skirt_100_200.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/cloth3d_skirt -s 200 -e 300 -n lhunor_unpose_extra_skirt_200_300 > nohup/unpose_extra_skirt_200_300_2.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/cloth3d_skirt -s 300 -e 400 -n lhunor_unpose_extra_skirt_300_400 > nohup/unpose_extra_skirt_300_400.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test -s 0 -e 100 -n lhunor_unpose_test_0_100 > nohup/unpose_test_0_100.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test -s 100 -e 200 -n lhunor_unpose_test_100_200 > nohup/unpose_test_100_200.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test -s 200 -e 300 -n lhunor_unpose_test_200_300 > nohup/unpose_test_200_300.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test -s 300 -e 400 -n lhunor_unpose_test_300_400 > nohup/unpose_test_300_400.out 2>&1 &
nohup python unpose_skirt.py -f /home/workspace/data/dataset/test -s 00 -e 00 -n lhunor_unpose_test_00_00 > nohup/unpose_test_00_00.out 2>&1 &
calculate avg garment for skirt
need dijkstra/dijsktra skirt
bodies have to be converted in non-skirt mode
need to pretrain encoders again...
not enough sapce to preprocess data
add one more layer and train, repeat
curvature binning
do it according to trainingn set distribution for validation, or it's own for validation
merge curvatures for validation from data-net to local
avg garment for big datasets
check ranges of curvatur ranges
collision in pecentage
bend loss?
evaluation pipeline
look tailernot dataset
blender for visualization
gpu needed estimation
let's say if we want to finish in on eweek
we use the same skinning weights for skirts. okay?
redo curvatures for skirt train.valid
train_skirt: array([1.83511008e-06, 1.84299448e-03, 3.38148023e-03, 5.67459036e-03, 1.02263279e-02, 2.21962575e-02, 3.24614763e-01])
array([1.83511008e-06, 1.82755420e-03, 3.35242413e-03, 5.61911613e-03, 1.01151643e-02, 2.20824350e-02, 3.25994939e-01])
valid_skirt: array([4.51388405e-06, 1.90253550e-03, 3.44673195e-03, 5.73266158e-03, 1.02412868e-02, 2.22220197e-02, 3.12285781e-01])
array([4.51388405e-06, 1.88061886e-03, 3.40514188e-03, 5.64374123e-03, 1.00161384e-02, 2.18187869e-02, 3.17445695e-01])
test_skirt: array([7.21150764e-06, 1.77989923e-03, 3.26598203e-03, 5.47702867e-03, 9.79944225e-03, 2.07518619e-02, 3.23069602e-01])
how to include curvature in evaluation?
use gt, predict with vae?
docker run -d --rm -p 61208-61209:61208-61209 -e GLANCES_OPT="-w" -v /var/run/docker.sock:/var/run/docker.sock:ro --pid host nicolargo/glances:alpine-dev
+66 -35
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_ae_curv_post import config from configs.config_ae_curv_1_orig_curv_10_10p_r2_2 import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -31,13 +31,13 @@ import plotly.express as ex
from tf_utils import check_tf_version, allow_memory_growth from tf_utils import check_tf_version, allow_memory_growth
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.custom_utils import batch_to_dict from custom_utils.custom_utils import batch_to_dict
from models.cond_encoder import AutoEncoderNew as AutoEncoder from models.cond_encoder import AutoEncoder
testing = False testing = False
def init_wandb(): def init_wandb():
if not testing: if not testing:
run = wandb.init(project='ae', name=config['name'], notes=config['notes'], dir='/home/workspace/local-data/temp/') run = wandb.init(project='ae', name=config['name'], notes=config['notes'], dir='/home/workspace/local-data/temp/', tags=config['tags'])
artifact = wandb.Artifact('code', type='code') artifact = wandb.Artifact('code', type='code')
artifact.add_file('auto_encoder_curv.py') artifact.add_file('auto_encoder_curv.py')
artifact.add_file('losses.py') artifact.add_file('losses.py')
@@ -47,7 +47,9 @@ def init_wandb():
artifact.add_file('convnext/models/convnext_tf.py') artifact.add_file('convnext/models/convnext_tf.py')
config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.')] config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.')]
for config_file_name in config_file_names: for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py') file_name = '/'.join(config_file_name.split('.')) + '.py'
if os.path.exists(file_name):
artifact.add_file(file_name)
run.log_artifact(artifact) run.log_artifact(artifact)
uv2mesh = UV2MeshLabel(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape']) uv2mesh = UV2MeshLabel(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape'])
@@ -96,46 +98,73 @@ def dice_dense(prediction, ground_truth, weight_map=None):
@tf.function @tf.function
def train_step(batch): def train_step(batch):
with tf.GradientTape() as tape: with tf.GradientTape() as tape:
pred = model([batch['uv_curvature'], batch['uv_mask']], training=True) pred = model([batch['uv_curvature'], batch['uv_mask']], training=True)
ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred)
ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1))
loss = ce_uv_loss
pred_mesh = tf.math.argmax(uv2mesh(pred), axis=-1)
mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1))
mean_iou_mesh = get_mean_iou(tf.cast(batch['mesh_curvature'], tf.float32) * batch['mesh_mask'], tf.cast(pred_mesh, tf.float32) * batch['mesh_mask'])
dice = dice_dense(pred, batch['uv_curvature'])
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
return { 'train/loss': loss, 'train/ce_uv_loss': ce_uv_loss, 'train/ssim': ms_ssim, 'train/mean_iou': mean_iou, 'train/mean_iou_mesh': mean_iou_mesh, 'train/dice': dice }
@tf.function
def valid_step(batch):
pred = model([batch['uv_curvature'], batch['uv_mask']], training=False)
ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred)
ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1))
loss = ce_uv_loss
pred_mesh = tf.math.argmax(uv2mesh(pred), axis=-1)
mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1))
mean_iou_mesh = get_mean_iou(tf.cast(batch['mesh_curvature'], tf.float32) * batch['mesh_mask'], tf.cast(pred_mesh, tf.float32) * batch['mesh_mask'])
dice = dice_dense(pred, batch['uv_curvature'])
return { 'valid/loss': loss, 'valid/ce_uv_loss': ce_uv_loss, 'valid/ssim': ms_ssim, 'valid/mean_iou': mean_iou, 'valid/mean_iou_mesh': mean_iou_mesh, 'valid/dice': dice }
ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred) # def train_step(batch):
ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1)) # with tf.GradientTape() as tape:
# pred = model([batch['uv_curvature'], batch['uv_mask']], training=True)
mesh_pred = uv2mesh(pred) * batch['mesh_mask'][:,:,tf.newaxis] # ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred)
mesh_orig = tf.cast(uv2mesh(tf.math.argmax(batch['uv_curvature'], axis=-1, output_type=tf.int32)), tf.float32) * batch['mesh_mask'] # ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1))
ce_mesh_loss = scce(mesh_orig, mesh_pred)
loss = ce_uv_loss + ce_mesh_loss # mesh_pred = uv2mesh(pred) * batch['mesh_mask'][:,:,tf.newaxis]
# mesh_orig = tf.cast(uv2mesh(tf.math.argmax(batch['uv_curvature'], axis=-1, output_type=tf.int32)), tf.float32) * batch['mesh_mask']
# ce_mesh_loss = scce(mesh_orig, mesh_pred)
mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1)) # loss = ce_uv_loss + ce_mesh_loss
dice = dice_dense(pred, batch['uv_curvature'])
# mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1))
# dice = dice_dense(pred, batch['uv_curvature'])
gradients = tape.gradient(loss, model.trainable_variables) # gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables)) # optimizer.apply_gradients(zip(gradients, model.trainable_variables))
return { 'train/loss': loss, 'train/ce_uv_loss': ce_uv_loss, 'train/ssim': ms_ssim, 'train/mean_iou': mean_iou, # return { 'train/loss': loss, 'train/ce_uv_loss': ce_uv_loss, 'train/ssim': ms_ssim, 'train/mean_iou': mean_iou,
'train/dice': dice, 'train/ce_mesh_loss': ce_mesh_loss } # 'train/dice': dice, 'train/ce_mesh_loss': ce_mesh_loss }
@tf.function # @tf.function
def valid_step(batch): # def valid_step(batch):
pred = model([batch['uv_curvature'], batch['uv_mask']], training=False) # pred = model([batch['uv_curvature'], batch['uv_mask']], training=False)
ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred) # ce_uv_loss = scce(tf.math.argmax(batch['uv_curvature'], axis=-1), pred)
ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1)) # ms_ssim = tf.reduce_mean(tf.image.ssim(pred, batch['uv_curvature'], max_val=1))
mesh_pred = uv2mesh(pred) * batch['mesh_mask'][:,:,tf.newaxis] # mesh_pred = uv2mesh(pred) * batch['mesh_mask'][:,:,tf.newaxis]
mesh_orig = tf.cast(uv2mesh(tf.math.argmax(batch['uv_curvature'], axis=-1, output_type=tf.int32)), tf.float32) * batch['mesh_mask'] # mesh_orig = tf.cast(uv2mesh(tf.math.argmax(batch['uv_curvature'], axis=-1, output_type=tf.int32)), tf.float32) * batch['mesh_mask']
ce_mesh_loss = scce(mesh_orig, mesh_pred) # ce_mesh_loss = scce(mesh_orig, mesh_pred)
loss = ce_uv_loss + ce_mesh_loss # loss = ce_uv_loss + ce_mesh_loss
mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1)) # mean_iou = get_mean_iou(tf.math.argmax(batch['uv_curvature'], axis=-1), tf.math.argmax(pred, axis=-1))
dice = dice_dense(pred, batch['uv_curvature']) # dice = dice_dense(pred, batch['uv_curvature'])
return { 'valid/loss': loss, 'valid/ce_uv_loss': ce_uv_loss, 'valid/ssim': ms_ssim, 'valid/mean_iou': mean_iou, # return { 'valid/loss': loss, 'valid/ce_uv_loss': ce_uv_loss, 'valid/ssim': ms_ssim, 'valid/mean_iou': mean_iou,
'valid/dice': dice, 'valid/ce_mesh_loss': ce_mesh_loss } # 'valid/dice': dice, 'valid/ce_mesh_loss': ce_mesh_loss }
def plot_everything(batch: dict, type: str): def plot_everything(batch: dict, type: str):
@@ -206,7 +235,7 @@ def test():
if __name__ == '__main__': if __name__ == '__main__':
init_wandb() init_wandb()
allow_memory_growth() # allow_memory_growth()
parser = argparse.ArgumentParser(description='') parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str) parser.add_argument('--name', type=str)
args = vars(parser.parse_args()) args = vars(parser.parse_args())
@@ -226,7 +255,8 @@ if __name__ == '__main__':
in_memory=config['dataset_in_memory'], in_memory=config['dataset_in_memory'],
use_no_orient=config['remove_global_orientation'], use_no_orient=config['remove_global_orientation'],
frames_file=config['frames_file'] if 'frames_file' in config.keys() else None, frames_file=config['frames_file'] if 'frames_file' in config.keys() else None,
is_cape=config['is_cape']) is_cape=config['is_cape'],
curv_neighbourhood=config['curv_neighbourhood'])
static_dataset_train = StaticDataset(folder=config['train_dir'], static_dataset_train = StaticDataset(folder=config['train_dir'],
signature=config['signature_static'], signature=config['signature_static'],
resolutions=[config['resolution']], resolutions=[config['resolution']],
@@ -240,7 +270,8 @@ if __name__ == '__main__':
in_memory=config['dataset_in_memory'], in_memory=config['dataset_in_memory'],
use_no_orient=config['remove_global_orientation'], use_no_orient=config['remove_global_orientation'],
frames_file=config['frames_file_valid'] if 'frames_file_valid' in config.keys() else None, frames_file=config['frames_file_valid'] if 'frames_file_valid' in config.keys() else None,
is_cape=config['is_cape']) is_cape=config['is_cape'],
curv_neighbourhood=config['curv_neighbourhood'])
static_dataset_valid = StaticDataset(folder=config['valid_dir'], static_dataset_valid = StaticDataset(folder=config['valid_dir'],
signature=config['signature_static'], signature=config['signature_static'],
resolutions=[config['resolution']], resolutions=[config['resolution']],
+2 -2
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_abl_all_post import config from configs.config_abl_all_10p_curv_25_r2 import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
# import tensorflow as tf # import tensorflow as tf
@@ -59,7 +59,7 @@ if __name__ == '__main__':
folder = config['test_dir'] folder = config['test_dir']
checkpoint_name = config['name'] checkpoint_name = config['name']
iteration = '' iteration = '70000'
F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32) F = np.load("custom_utils/smpl_faces" + skirt_modifier + ".npy").astype(np.int32)
garment_type_table = np.load('custom_data/garment_type_table_test.npy', allow_pickle=True).item() garment_type_table = np.load('custom_data/garment_type_table_test.npy', allow_pickle=True).item()
+125
View File
@@ -0,0 +1,125 @@
config = dict()
# DON'T FORGET TO RESET SSIM LOSS USAGE
# DON'T FORGET TO CHECK MODEL LOADING
# DON'T FORGET TO CHECK IF STORE IN MEMORY
# DON'T FORGET TO CHECK REG LOSS COEFF
# DON'T FORGET TO LOAD FINAL UPSCALER UNLESS HAVE LEVEL 512
# DON'T FORGET TO CHECK AVG GARMENT USED
config['use_skinning'] = True # and deshaping
config['remove_global_orientation'] = True
config['use_curvature'] = True
config['use_extra_losses'] = True # edge, collision, 3d mesh
config['use_offsets'] = True
config['use_norm_loss'] = True
config['only_curvatures'] = False
config['curv_neighbourhood'] = 100
ablation_count = [config['use_skinning'], config['remove_global_orientation'], config['use_curvature'], config['use_extra_losses'], config['use_offsets']].count(False)
assert ablation_count == 1 or ablation_count == 0
config['gpu'] = '1'
config['name'] = 'abl_all_10p_curv_100_r2'
config['notes'] = ''
config['tags'] = ['review_2']
config['avg_garment_path'] = 'custom_data/train_no_shape_skirt_avg_uv.npy' #custom_data/train_no_shape_avg_uv.npy # train_no_shape_avg_uv train_no_shape_one_hot_avg_uv
if config['use_skinning']:
assert (config['use_offsets'] and config['avg_garment_path'] != '') or (not config['use_offsets'] and config['avg_garment_path'] == '')
config['reg_loss_coeff'] = 0.1 # set to 0 if don't want to use edge+collision
config['batch_size'] = 4
config['resolution'] = 512
config['is_skirt'] = True
config['dataset_in_memory'] = False
config['is_cape'] = False
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
# config['frames_file_test'] = 'frames_dress_30k.txt'
config['static_model'] = 'checkpoints/static_1_skirt'
config['body_model'] = 'checkpoints/body_1_skirt_2_2'
config['curvature_model'] = 'checkpoints/post/curv_1_orig_curv_100_10p_r2_2'
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['pretrained_model'] = ''
config['latent_dim'] = 128
###############
config['lr'] = 0.0001# 0.0001
###############
config['starting_balancing_coeff'] = 0.001
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'pose_shape': (72 + 11,),
'uv_body_posed': (512, 256, 3),
'mesh_body_posed': (config['smpl_res'], 3,),
'mesh_posed': (config['smpl_res'], 3,),
'uv_curvature': (512, 256, 7),
}
config['signature_static'] = { 'uv_static': (512, 256, 3),
'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
if config['use_skinning']:
config['signature_dynamic']['uv_unposed'] = (512, 256, 3)
config['signature_dynamic']['mesh_unposed'] = (config['smpl_res'], 3,)
else:
config['signature_dynamic']['uv_posed'] = (512, 256, 3)
config['upscale_enhancer'] = ''
config['freeze_encoders'] = True
config['use_one_hot'] = False
config['cvae'] = dict()
config['cvae']['is_label'] = False
config['cvae']['latent_dim'] = config['latent_dim']
config['cvae']['add_noise'] = True
config['cvae']['noise_amount'] = 0.025
config['cvae']['kernel_size'] = 7
config['cvae']['encoder_depths'] = [3, 3, 9, 3]
config['cvae']['encoder_dims'] = [32, 64, 128, 256]
config['cvae']['decoder_input'] = (16, 8, 80)
config['cvae']['decoder_depths'] = [3, 3, 9, 3]
config['cvae']['decoder_dims'] = [256, 128, 64, 16]
config['cond_ae'] = dict()
config['cond_ae']['is_label'] = False
config['cond_ae']['upscale_output'] = False
config['cond_ae']['latent_dim'] = config['latent_dim']
config['cond_ae']['kernel_size'] = 7
config['cond_ae']['bottleneck_size'] = 64
config['cond_ae']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae']['encoder_dims'] = [32, 64, 128, 256, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_input'] = (8, 4, config['cond_ae']['bottleneck_size'])
config['cond_ae']['decoder_depths'] = [3, 3, 9, 3, 3]
config['cond_ae']['decoder_dims'] = [config['cond_ae']['bottleneck_size'], 256, 128, 64, 16]
config['cond_ae_body'] = dict()
config['cond_ae_body']['latent_dim'] = config['latent_dim']
config['cond_ae_body']['kernel_size'] = 7
config['cond_ae_body']['upscale_output'] = True
config['cond_ae_body']['bottleneck_size'] = 512
config['cond_ae_body']['encoder_depths'] = [3, 3, 9, 9, 3, 3]
config['cond_ae_body']['encoder_dims'] = [32, 64, 128, 256, 256, config['cond_ae_body']['bottleneck_size']]
config['cond_ae_body']['decoder_input'] = (4, 2, config['cond_ae_body']['bottleneck_size'])
config['cond_ae_body']['decoder_depths'] = [3, 3, 9, 3]
config['cond_ae_body']['decoder_dims'] = [config['cond_ae_body']['bottleneck_size'], 128, 64, 16]
+125
View File
@@ -0,0 +1,125 @@
config = dict()
# DON'T FORGET TO RESET SSIM LOSS USAGE
# DON'T FORGET TO CHECK MODEL LOADING
# DON'T FORGET TO CHECK IF STORE IN MEMORY
# DON'T FORGET TO CHECK REG LOSS COEFF
# DON'T FORGET TO LOAD FINAL UPSCALER UNLESS HAVE LEVEL 512
# DON'T FORGET TO CHECK AVG GARMENT USED
config['use_skinning'] = True # and deshaping
config['remove_global_orientation'] = True
config['use_curvature'] = True
config['use_extra_losses'] = True # edge, collision, 3d mesh
config['use_offsets'] = True
config['use_norm_loss'] = True
config['only_curvatures'] = False
config['curv_neighbourhood'] = 10
ablation_count = [config['use_skinning'], config['remove_global_orientation'], config['use_curvature'], config['use_extra_losses'], config['use_offsets']].count(False)
assert ablation_count == 1 or ablation_count == 0
config['gpu'] = '6'
config['name'] = 'abl_all_10p_curv_10_r2_2'
config['notes'] = ''
config['tags'] = ['review_2']
config['avg_garment_path'] = 'custom_data/train_no_shape_skirt_avg_uv.npy' #custom_data/train_no_shape_avg_uv.npy # train_no_shape_avg_uv train_no_shape_one_hot_avg_uv
if config['use_skinning']:
assert (config['use_offsets'] and config['avg_garment_path'] != '') or (not config['use_offsets'] and config['avg_garment_path'] == '')
config['reg_loss_coeff'] = 0.1 # set to 0 if don't want to use edge+collision
config['batch_size'] = 4
config['resolution'] = 512
config['is_skirt'] = True
config['dataset_in_memory'] = True
config['is_cape'] = False
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
# config['frames_file_test'] = 'frames_dress_30k.txt'
config['static_model'] = 'checkpoints/static_1_skirt'
config['body_model'] = 'checkpoints/body_1_skirt_2_2'
config['curvature_model'] = 'checkpoints/post/curv_1_orig_curv_10_10p_r2_2'
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['pretrained_model'] = ''
config['latent_dim'] = 128
###############
config['lr'] = 0.0001# 0.0001
###############
config['starting_balancing_coeff'] = 0.001
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'pose_shape': (72 + 11,),
'uv_body_posed': (512, 256, 3),
'mesh_body_posed': (config['smpl_res'], 3,),
'mesh_posed': (config['smpl_res'], 3,),
'uv_curvature': (512, 256, 7),
}
config['signature_static'] = { 'uv_static': (512, 256, 3),
'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
if config['use_skinning']:
config['signature_dynamic']['uv_unposed'] = (512, 256, 3)
config['signature_dynamic']['mesh_unposed'] = (config['smpl_res'], 3,)
else:
config['signature_dynamic']['uv_posed'] = (512, 256, 3)
config['upscale_enhancer'] = ''
config['freeze_encoders'] = True
config['use_one_hot'] = False
config['cvae'] = dict()
config['cvae']['is_label'] = False
config['cvae']['latent_dim'] = config['latent_dim']
config['cvae']['add_noise'] = True
config['cvae']['noise_amount'] = 0.025
config['cvae']['kernel_size'] = 7
config['cvae']['encoder_depths'] = [3, 3, 9, 3]
config['cvae']['encoder_dims'] = [32, 64, 128, 256]
config['cvae']['decoder_input'] = (16, 8, 80)
config['cvae']['decoder_depths'] = [3, 3, 9, 3]
config['cvae']['decoder_dims'] = [256, 128, 64, 16]
config['cond_ae'] = dict()
config['cond_ae']['is_label'] = False
config['cond_ae']['upscale_output'] = False
config['cond_ae']['latent_dim'] = config['latent_dim']
config['cond_ae']['kernel_size'] = 7
config['cond_ae']['bottleneck_size'] = 64
config['cond_ae']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae']['encoder_dims'] = [32, 64, 128, 256, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_input'] = (8, 4, config['cond_ae']['bottleneck_size'])
config['cond_ae']['decoder_depths'] = [3, 3, 9, 3, 3]
config['cond_ae']['decoder_dims'] = [config['cond_ae']['bottleneck_size'], 256, 128, 64, 16]
config['cond_ae_body'] = dict()
config['cond_ae_body']['latent_dim'] = config['latent_dim']
config['cond_ae_body']['kernel_size'] = 7
config['cond_ae_body']['upscale_output'] = True
config['cond_ae_body']['bottleneck_size'] = 512
config['cond_ae_body']['encoder_depths'] = [3, 3, 9, 9, 3, 3]
config['cond_ae_body']['encoder_dims'] = [32, 64, 128, 256, 256, config['cond_ae_body']['bottleneck_size']]
config['cond_ae_body']['decoder_input'] = (4, 2, config['cond_ae_body']['bottleneck_size'])
config['cond_ae_body']['decoder_depths'] = [3, 3, 9, 3]
config['cond_ae_body']['decoder_dims'] = [config['cond_ae_body']['bottleneck_size'], 128, 64, 16]
+125
View File
@@ -0,0 +1,125 @@
config = dict()
# DON'T FORGET TO RESET SSIM LOSS USAGE
# DON'T FORGET TO CHECK MODEL LOADING
# DON'T FORGET TO CHECK IF STORE IN MEMORY
# DON'T FORGET TO CHECK REG LOSS COEFF
# DON'T FORGET TO LOAD FINAL UPSCALER UNLESS HAVE LEVEL 512
# DON'T FORGET TO CHECK AVG GARMENT USED
config['use_skinning'] = True # and deshaping
config['remove_global_orientation'] = True
config['use_curvature'] = True
config['use_extra_losses'] = True # edge, collision, 3d mesh
config['use_offsets'] = True
config['use_norm_loss'] = True
config['only_curvatures'] = False
config['curv_neighbourhood'] = 25
ablation_count = [config['use_skinning'], config['remove_global_orientation'], config['use_curvature'], config['use_extra_losses'], config['use_offsets']].count(False)
assert ablation_count == 1 or ablation_count == 0
config['gpu'] = '0'
config['name'] = 'abl_all_10p_curv_25_r2'
config['notes'] = ''
config['tags'] = ['review_2']
config['avg_garment_path'] = 'custom_data/train_no_shape_skirt_avg_uv.npy' #custom_data/train_no_shape_avg_uv.npy # train_no_shape_avg_uv train_no_shape_one_hot_avg_uv
if config['use_skinning']:
assert (config['use_offsets'] and config['avg_garment_path'] != '') or (not config['use_offsets'] and config['avg_garment_path'] == '')
config['reg_loss_coeff'] = 0.1 # set to 0 if don't want to use edge+collision
config['batch_size'] = 4
config['resolution'] = 512
config['is_skirt'] = True
config['dataset_in_memory'] = True
config['is_cape'] = False
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
# config['frames_file_test'] = 'frames_dress_30k.txt'
config['static_model'] = 'checkpoints/static_1_skirt'
config['body_model'] = 'checkpoints/body_1_skirt_2_2'
config['curvature_model'] = 'checkpoints/post/curv_1_orig_curv_25_10p_r2'
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['pretrained_model'] = ''
config['latent_dim'] = 128
###############
config['lr'] = 0.0001# 0.0001
###############
config['starting_balancing_coeff'] = 0.001
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'pose_shape': (72 + 11,),
'uv_body_posed': (512, 256, 3),
'mesh_body_posed': (config['smpl_res'], 3,),
'mesh_posed': (config['smpl_res'], 3,),
'uv_curvature': (512, 256, 7),
}
config['signature_static'] = { 'uv_static': (512, 256, 3),
'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
if config['use_skinning']:
config['signature_dynamic']['uv_unposed'] = (512, 256, 3)
config['signature_dynamic']['mesh_unposed'] = (config['smpl_res'], 3,)
else:
config['signature_dynamic']['uv_posed'] = (512, 256, 3)
config['upscale_enhancer'] = ''
config['freeze_encoders'] = True
config['use_one_hot'] = False
config['cvae'] = dict()
config['cvae']['is_label'] = False
config['cvae']['latent_dim'] = config['latent_dim']
config['cvae']['add_noise'] = True
config['cvae']['noise_amount'] = 0.025
config['cvae']['kernel_size'] = 7
config['cvae']['encoder_depths'] = [3, 3, 9, 3]
config['cvae']['encoder_dims'] = [32, 64, 128, 256]
config['cvae']['decoder_input'] = (16, 8, 80)
config['cvae']['decoder_depths'] = [3, 3, 9, 3]
config['cvae']['decoder_dims'] = [256, 128, 64, 16]
config['cond_ae'] = dict()
config['cond_ae']['is_label'] = False
config['cond_ae']['upscale_output'] = False
config['cond_ae']['latent_dim'] = config['latent_dim']
config['cond_ae']['kernel_size'] = 7
config['cond_ae']['bottleneck_size'] = 64
config['cond_ae']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae']['encoder_dims'] = [32, 64, 128, 256, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_input'] = (8, 4, config['cond_ae']['bottleneck_size'])
config['cond_ae']['decoder_depths'] = [3, 3, 9, 3, 3]
config['cond_ae']['decoder_dims'] = [config['cond_ae']['bottleneck_size'], 256, 128, 64, 16]
config['cond_ae_body'] = dict()
config['cond_ae_body']['latent_dim'] = config['latent_dim']
config['cond_ae_body']['kernel_size'] = 7
config['cond_ae_body']['upscale_output'] = True
config['cond_ae_body']['bottleneck_size'] = 512
config['cond_ae_body']['encoder_depths'] = [3, 3, 9, 9, 3, 3]
config['cond_ae_body']['encoder_dims'] = [32, 64, 128, 256, 256, config['cond_ae_body']['bottleneck_size']]
config['cond_ae_body']['decoder_input'] = (4, 2, config['cond_ae_body']['bottleneck_size'])
config['cond_ae_body']['decoder_depths'] = [3, 3, 9, 3]
config['cond_ae_body']['decoder_dims'] = [config['cond_ae_body']['bottleneck_size'], 128, 64, 16]
+1 -1
View File
@@ -1,7 +1,7 @@
config = dict() config = dict()
config['gpu'] = '0' config['gpu'] = '0'
config['name'] = 'pyr_abl_32' config['name'] = 'pyr_abl_32_r1'
config['notes'] = '' config['notes'] = ''
# DON'T FORGET TO RESET SSIM LOSS USAGE # DON'T FORGET TO RESET SSIM LOSS USAGE
+8 -4
View File
@@ -1,8 +1,8 @@
config = dict() config = dict()
config['gpu'] = '3' config['gpu'] = '3'
config['name'] = 'pyr_abl_32_skirt_2' config['name'] = 'pyr_abl_32_skirt_r1'
config['notes'] = 'continued from pyr_abl_32_skirt-180k' config['notes'] = ''
# DON'T FORGET TO RESET SSIM LOSS USAGE # DON'T FORGET TO RESET SSIM LOSS USAGE
# DON'T FORGET TO CHECK MODEL LOADING # DON'T FORGET TO CHECK MODEL LOADING
@@ -24,7 +24,10 @@ config['pyramid']['resolutions'] = [32]
config['pyramid']['pretrained_pyramid'] = '' config['pyramid']['pretrained_pyramid'] = ''
config['pyramid']['final_upscale_enhancer'] = 'checkpoints/32_512_skirt' config['pyramid']['final_upscale_enhancer'] = 'checkpoints/32_512_skirt'
config['train_dir'] = '/home/workspace/local-data/train_skirt' config['pretrained_model'] = ''
config['pretrained_model_iteration'] = ''
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt' config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2' config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['batch_size'] = 4 config['batch_size'] = 4
@@ -35,7 +38,7 @@ config['pyramid']['static_model'] = 'checkpoints/static_1_skirt'
config['pyramid']['body_model'] = 'checkpoints/body_1_skirt_2_2' config['pyramid']['body_model'] = 'checkpoints/body_1_skirt_2_2'
config['pyramid']['curvature_model'] = 'checkpoints/curv_1_skirt' config['pyramid']['curvature_model'] = 'checkpoints/curv_1_skirt'
config['dataset_in_memory'] = False config['dataset_in_memory'] = True
config['resolution'] = None config['resolution'] = None
config['latent_dim'] = 128 config['latent_dim'] = 128
@@ -65,6 +68,7 @@ config['signature_static'] = { 'uv_static': (512, 256, 3),
config['pyramid']['is_label'] = False config['pyramid']['is_label'] = False
config['pyramid']['latent_dim'] = config['latent_dim'] config['pyramid']['latent_dim'] = config['latent_dim']
config['pyramid']['add_noise'] = True config['pyramid']['add_noise'] = True
config['pyramid']['noise_amount'] = 0.001
config['pyramid']['loss_weights'] = [1,1,1,1,1] config['pyramid']['loss_weights'] = [1,1,1,1,1]
+12 -2
View File
@@ -1,13 +1,23 @@
from configs.config_base import config from configs.config_base import config
config['gpu'] = '5' config['gpu'] = '4'
config['lr'] = 0.001 config['lr'] = 0.001
config['name'] = 'curv_1' #'ae_curv_9' config['name'] = 'curv_1_orig_r2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \ config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \ | \
' '
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['cond_ae']['is_label'] = True config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 10
config['signature_dynamic'] = { 'id': (), 'frame_nr': (), config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7), 'uv_curvature': (512, 256, 7),
@@ -0,0 +1,30 @@
from configs.config_base import config
config['gpu'] = '1'
config['lr'] = 0.001
config['name'] = 'curv_1_orig_curv_100_10p_r2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \
'
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['dataset_in_memory'] = True
config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 100
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7),
'mesh_curvature': (config['smpl_res'])
}
config['signature_static'] = { 'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
@@ -0,0 +1,30 @@
from configs.config_base import config
config['gpu'] = '1'
config['lr'] = 0.001
config['name'] = 'curv_1_orig_curv_100_10p_r2_2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \
'
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['dataset_in_memory'] = True
config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 100
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7),
'mesh_curvature': (config['smpl_res'])
}
config['signature_static'] = { 'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
@@ -0,0 +1,30 @@
from configs.config_base import config
config['gpu'] = '4'
config['lr'] = 0.001
config['name'] = 'curv_1_orig_curv_10_10p_r2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \
'
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['dataset_in_memory'] = True
config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 10
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7),
'mesh_curvature': (config['smpl_res'])
}
config['signature_static'] = { 'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
@@ -0,0 +1,30 @@
from configs.config_base import config
config['gpu'] = '4'
config['lr'] = 0.001
config['name'] = 'curv_1_orig_curv_10_10p_r2_2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \
'
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['dataset_in_memory'] = True
config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 10
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7),
'mesh_curvature': (config['smpl_res'])
}
config['signature_static'] = { 'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
@@ -0,0 +1,30 @@
from configs.config_base import config
config['gpu'] = '6'
config['lr'] = 0.001
config['name'] = 'curv_1_orig_curv_25_10p_r2' #'ae_curv_9'
config['notes'] = 'convnext + convnext, 16*8*32, ce loss. flattened latent dim of 128. trained on 100 garments. switched back to sparse CCE, normal one was giving NaN | \
| \
'
config['tags'] = ['review_2']
config['remove_global_orientation'] = True
config['dataset_in_memory'] = True
config['cond_ae']['is_label'] = True
config['is_skirt'] = True
config['train_dir'] = '/home/workspace/data/dataset/local-cache/train_skirt'
config['valid_dir'] = '/home/workspace/local-data/valid_skirt'
config['test_dir'] = '/home/workspace/data/dataset/test_skirt_ready_2'
config['frames_file'] = 'frames_skirt_10p.txt'
config['frames_file_valid'] = 'frames_skirt_10p.txt'
config['curv_neighbourhood'] = 25
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'uv_curvature': (512, 256, 7),
'mesh_curvature': (config['smpl_res'])
}
config['signature_static'] = { 'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
+2 -2
View File
@@ -366,8 +366,8 @@ class ConvNeXtReverseLabels(tf.keras.Model):
self.stages.append(stage) self.stages.append(stage)
cur += depths[i] cur += depths[i]
# self.last = Dense(nr_of_classes, activation='softmax') self.last = Dense(nr_of_classes, activation='softmax')
self.last = Dense(nr_of_classes - 1) # self.last = Dense(nr_of_classes - 1)
def call(self, x, training): def call(self, x, training):
for i in reversed(range(len(self.downsample_layers))): for i in reversed(range(len(self.downsample_layers))):
+8 -6
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_abl_all_post import config from configs.config_abl_all_10p_curv_100_r2 import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -41,7 +41,7 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.cvae_model import CVAENew as CVAE from models.cvae_model import CVAE
def init_wandb(): def init_wandb():
@@ -73,7 +73,7 @@ def kl_loss(mean, logvar):
# 3d loss on posed !!!!!!!!!!!! # 3d loss on posed !!!!!!!!!!!!
# @tf.function @tf.function
def train_step(batch): def train_step(batch):
with tf.GradientTape() as tape: with tf.GradientTape() as tape:
@@ -476,7 +476,7 @@ def test():
if __name__ == '__main__': if __name__ == '__main__':
# init_wandb() init_wandb()
parser = argparse.ArgumentParser(description='') parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str) parser.add_argument('--name', type=str)
args = vars(parser.parse_args()) args = vars(parser.parse_args())
@@ -494,7 +494,8 @@ if __name__ == '__main__':
use_one_hot=config['use_one_hot'], use_one_hot=config['use_one_hot'],
use_no_orient=config['remove_global_orientation'], use_no_orient=config['remove_global_orientation'],
frames_file=config['frames_file'] if 'frames_file' in config.keys() else None, frames_file=config['frames_file'] if 'frames_file' in config.keys() else None,
is_cape=config['is_cape']) is_cape=config['is_cape'],
curv_neighbourhood=config['curv_neighbourhood'])
static_dataset_train = StaticDataset(folder=config['train_dir'], static_dataset_train = StaticDataset(folder=config['train_dir'],
signature=config['signature_static'], signature=config['signature_static'],
resolutions=[config['resolution']], resolutions=[config['resolution']],
@@ -509,7 +510,8 @@ if __name__ == '__main__':
use_one_hot=config['use_one_hot'], use_one_hot=config['use_one_hot'],
use_no_orient=config['remove_global_orientation'], use_no_orient=config['remove_global_orientation'],
frames_file=config['frames_file_valid'] if 'frames_file_valid' in config.keys() else None, frames_file=config['frames_file_valid'] if 'frames_file_valid' in config.keys() else None,
is_cape=config['is_cape']) is_cape=config['is_cape'],
curv_neighbourhood=config['curv_neighbourhood'])
static_dataset_valid = StaticDataset(folder=config['valid_dir'], static_dataset_valid = StaticDataset(folder=config['valid_dir'],
signature=config['signature_static'], signature=config['signature_static'],
resolutions=[config['resolution']], resolutions=[config['resolution']],
+18 -16
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.post.config_abl_pyr_64_128_5 import config from configs.config_abl_pyr_32_skirt import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -41,7 +41,7 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model from custom_utils.custom_utils import batch_to_dict, load_model
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.pyramid_model_optimized import PyramidNew as Pyramid from models.pyramid_model_optimized import Pyramid
from postprocessing import fix_collision from postprocessing import fix_collision
@@ -59,9 +59,11 @@ def init_wandb():
artifact.add_file('models/cond_encoder.py') artifact.add_file('models/cond_encoder.py')
artifact.add_file('dataset.py') artifact.add_file('dataset.py')
artifact.add_file('convnext/models/convnext_tf.py') artifact.add_file('convnext/models/convnext_tf.py')
config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.post.')] config_file_names = [key for key in sys.modules.keys() if key.startswith('configs')]
for config_file_name in config_file_names: for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py') file_name = '/'.join(config_file_name.split('.')) + '.py'
if os.path.exists(file_name):
artifact.add_file(file_name)
run.log_artifact(artifact) run.log_artifact(artifact)
uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape']) uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_smpl_orig=config['is_cape'])
@@ -208,7 +210,7 @@ def plot_3d(mesh_gt, mesh_pred_unposed_levels, faces, mesh_posed, collision, col
return fig return fig
@tf.function # @tf.function
def train_step(batch): def train_step(batch):
levels_input, conds = group_inputs_for_levels(batch, config) levels_input, conds = group_inputs_for_levels(batch, config)
@@ -261,8 +263,8 @@ def train_step(batch):
else: else:
reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss) reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss)
if config['use_norm_loss'] and step > 2000: # if config['use_norm_loss'] and step > 2000:
reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff'] # reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff']
kl_total += kl kl_total += kl
@@ -334,8 +336,8 @@ def valid_step(batch):
else: else:
reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss) reconstr_loss_total = reconstr_loss_total + config['pyramid']['loss_weights'][i] * (l2_loss)
if config['use_norm_loss'] and step > 2000: # if config['use_norm_loss'] and step > 2000:
reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff'] # reconstr_loss_total = reconstr_loss_total + n_loss * config['reg_loss_coeff']
kl_total += kl kl_total += kl
@@ -731,7 +733,7 @@ def speed_step(levels_input, conds):
if __name__ == '__main__': if __name__ == '__main__':
init_wandb() # init_wandb()
parser = argparse.ArgumentParser(description='') parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str, default='lhunor') parser.add_argument('--name', type=str, default='lhunor')
args = vars(parser.parse_args()) args = vars(parser.parse_args())
@@ -790,7 +792,7 @@ if __name__ == '__main__':
# generate_results() # generate_results()
ckpt = tf.train.Checkpoint(model=model) ckpt = tf.train.Checkpoint(model=model)
manager = tf.train.CheckpointManager(ckpt, 'checkpoints/post/' + config['name'], max_to_keep=20) manager = tf.train.CheckpointManager(ckpt, 'checkpoints/' + config['name'], max_to_keep=20)
# load_model(model, 'checkpoints/pyr_abl_32_skirt', iteration='180000') # load_model(model, 'checkpoints/pyr_abl_32_skirt', iteration='180000')
@@ -807,18 +809,18 @@ if __name__ == '__main__':
model.static_enc.trainable = False model.static_enc.trainable = False
model.body_enc.trainable = False model.body_enc.trainable = False
model.curv_enc.trainable = False model.curv_enc.trainable = False
model.cond_encoder.trainable = False
# load_model(model.levels[0].upscale_enhancer, config['pyramid']['levels'][0]['upscale_enhancer']) # load_model(model.levels[0].upscale_enhancer, config['pyramid']['levels'][0]['upscale_enhancer'])
# model.levels[0].upscale_enhancer.trainable = False # model.levels[0].upscale_enhancer.trainable = False
for i in range(len(model.levels)): for i in range(len(model.levels)-1):
load_model(model.levels[i].upscale_enhancer, config['pyramid']['levels'][i]['upscale_enhancer']) load_model(model.levels[i].upscale_enhancer, config['pyramid']['levels'][i]['upscale_enhancer'])
model.levels[i].upscale_enhancer.trainable = False model.levels[i].upscale_enhancer.trainable = False
# if config['pyramid']['resolutions'][-1] != 512: if config['pyramid']['resolutions'][-1] != 512:
# load_model(model.upscale_enhancer, config['pyramid']['final_upscale_enhancer']) load_model(model.upscale_enhancer, config['pyramid']['final_upscale_enhancer'])
# model.upscale_enhancer.trainable = False model.upscale_enhancer.trainable = False
for i in range(len(model.levels)-1): for i in range(len(model.levels)-1):
model.levels[i].trainable = False model.levels[i].trainable = False
+9 -6
View File
@@ -194,7 +194,8 @@ class DatasetFactory():
use_one_hot=False, use_one_hot=False,
use_no_orient=True, use_no_orient=True,
testing=False, testing=False,
frames_file=None): frames_file=None,
curv_neighbourhood=25):
assert set(resolutions).issubset(set([32, 64, 128, 256, 512])) assert set(resolutions).issubset(set([32, 64, 128, 256, 512]))
dataset_idx = DatasetIdx(folder, shuffle, is_cape=is_cape, testing=testing, frames_file=frames_file) dataset_idx = DatasetIdx(folder, shuffle, is_cape=is_cape, testing=testing, frames_file=frames_file)
@@ -260,7 +261,7 @@ class DatasetFactory():
if 'mesh_curvature' in signature.keys(): if 'mesh_curvature' in signature.keys():
mesh_curvature = np.load(os.path.join(folder, 'mesh_curvature', id + separator + frame_nr + '.npz')); mesh_curvature = mesh_curvature['mesh_curvature'] mesh_curvature = np.load(os.path.join(folder, f'mesh_curvature_{curv_neighbourhood}_2' if curv_neighbourhood != 25 else 'mesh_curvature', id + separator + frame_nr + '.npz')); mesh_curvature = mesh_curvature['mesh_curvature']
item['mesh_curvature'] = mesh_curvature.astype(np.int32) item['mesh_curvature'] = mesh_curvature.astype(np.int32)
@@ -270,7 +271,8 @@ class DatasetFactory():
res_string = '_' + str(res) res_string = '_' + str(res)
if 'uv_curvature' + res_string in signature.keys(): if 'uv_curvature' + res_string in signature.keys():
uv_curvature = np.load(os.path.join(folder, 'uv_curvature' + res_string, id + separator + frame_nr + '.npz')); # print(os.path.join(folder, (f'uv_curvature_{curv_neighbourhood}_2' if curv_neighbourhood != 25 else 'uv_curvature')+ res_string, id + separator + frame_nr + '.npz'))
uv_curvature = np.load(os.path.join(folder, (f'uv_curvature_{curv_neighbourhood}_2' if curv_neighbourhood != 25 else 'uv_curvature')+ res_string, id + separator + frame_nr + '.npz'));
if res_string != '': if res_string != '':
uv_curvature = uv_curvature['uv_curvature'] uv_curvature = uv_curvature['uv_curvature']
else: else:
@@ -381,15 +383,16 @@ if __name__ == '__main__':
# 'uv_shaped_body': (3, 512, 256,), # 'uv_shaped_body': (3, 512, 256,),
} }
dataset = factory.get_dataset(folder='/home/workspace/local-data/train_skirt', dataset = factory.get_dataset(folder='/home/workspace/data/dataset/local-cache/train_skirt',
batch_size=1, batch_size=1,
signature=signature_dynamic, signature=signature_dynamic,
resolutions=[512], resolutions=[512],
do_repeat=False, do_repeat=False,
use_one_hot=False, use_one_hot=False,
is_cape=False, is_cape=False,
frames_file='frames_dress_30k.txt') frames_file='frames_skirt_10p.txt',
static_dataset = StaticDataset(folder='/home/workspace/local-data/train_skirt', curv_neighbourhood=25)
static_dataset = StaticDataset(folder='/home/workspace/data/dataset/local-cache/train_skirt',
signature=signature_static, signature=signature_static,
resolutions=[512], resolutions=[512],
is_cape=False) is_cape=False)
+3 -3
View File
@@ -1,6 +1,6 @@
import os import os
import sys import sys
from configs.config_abl_all_post import config from configs.config_abl_all_10p_curv_25_r2 import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu'] os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf import tensorflow as tf
@@ -42,7 +42,7 @@ from losses import collision_loss as collision_penalty
from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision from custom_utils.custom_utils import batch_to_dict, load_model, plot_3d, UV2Mesh, get_summary_html, maskFacesBatch, _maskFaces, plot_3d_collision
from dataset import DatasetFactory, StaticDataset from dataset import DatasetFactory, StaticDataset
from custom_utils.smpl import SMPL from custom_utils.smpl import SMPL
from models.cvae_model import CVAENew as CVAE from models.cvae_model import CVAE
from custom_utils.supersmpl_io import writeOBJ from custom_utils.supersmpl_io import writeOBJ
# from unif_metric import chamfer_and_score # from unif_metric import chamfer_and_score
@@ -102,7 +102,7 @@ if __name__ == '__main__':
ids = [id.split('_')[0] for id in ids] ids = [id.split('_')[0] for id in ids]
ids = set(ids) ids = set(ids)
iteration = '' iteration = '70000'
load_model(model, 'checkpoints/post/' + checkpoint_name, iteration=iteration) load_model(model, 'checkpoints/post/' + checkpoint_name, iteration=iteration)
# load_model(model, 'checkpoints/' + 'abl_all_120k') # load_model(model, 'checkpoints/' + 'abl_all_120k')
+1 -1
View File
@@ -43,7 +43,7 @@ class CVAE(tf.keras.Model):
self.cond_encoder = tf.keras.Sequential([tf.keras.layers.Dense(512, activation='relu'), self.cond_encoder = tf.keras.Sequential([tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'), tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Lambda(lambda x: x / 1000), # tf.keras.layers.Lambda(lambda x: x / 1000),
tf.keras.layers.Dense(config['latent_dim'], activation='tanh')]) tf.keras.layers.Dense(config['latent_dim'], activation='tanh')])
self.encoder = VariationalEncoder(config['cvae']['latent_dim'], config['cvae']['encoder_depths'], config['cvae']['encoder_dims'], kernel_size=config['cvae']['kernel_size']) self.encoder = VariationalEncoder(config['cvae']['latent_dim'], config['cvae']['encoder_depths'], config['cvae']['encoder_dims'], kernel_size=config['cvae']['kernel_size'])