11 Commits
Author SHA1 Message Date
luni 5d96d83d12 evaluate training 2023-01-26 23:47:42 +00:00
luni 5d91b56a63 fix cvae 2023-01-26 14:45:35 +00:00
luni ea683ac030 update configs 2023-01-26 09:32:03 +00:00
luni 9cd9c6f12a add extra block, lower feature sizes 2023-01-25 23:10:51 +00:00
luni 46e37e22eb fixed feature sizes, cvae working 2023-01-25 21:00:47 +00:00
luni cba9d8ce90 add cvae config 2023-01-25 19:28:07 +00:00
luni 655c70413b apply for body and curv 2023-01-25 19:13:18 +00:00
luni 8514032837 bug fix 2023-01-25 18:04:02 +00:00
luni 2305a0ee23 replace backbone with resnet18 2023-01-25 16:49:01 +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
17 changed files with 823 additions and 95 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
+219
View File
@@ -0,0 +1,219 @@
nohup python auto_encoder_static.py --name="lhunor_ae_static_r7_3" > nohup/review/ae_static_r7_3.out 2>&1 &
nohup python auto_encoder_body.py --name="lhunor_ae_body_r7_3" > nohup/review/ae_body_r7_3.out 2>&1 &
nohup python auto_encoder_curv.py --name="lhunor_ae_curv_r7_3" > nohup/review/ae_curv_r7_3.out 2>&1 &
nohup python cvae.py --name="lhunor_abl_all_resnet_r7" > nohup/review/abl_all_resnet_r7.out 2>&1 &
nohup python calculate_error.py --name abl_all_resnet_r7_70k > nohup/error/abl_all_resnet_r7_70k.out 2>&1 &
nohup python evaluate_ae.py --name abl_all_resnet_r7_70k > nohup/evaluate/abl_all_resnet_r7_70k.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
+7 -4
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_ae_body_post import config
from configs.review.config_ae_body import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf
@@ -34,7 +34,7 @@ from models.cond_encoder import AutoEncoderNew as AutoEncoder
def init_wandb():
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.add_file('auto_encoder_body.py')
artifact.add_file('losses.py')
@@ -42,7 +42,7 @@ def init_wandb():
artifact.add_file('models/cond_encoder.py')
artifact.add_file('dataset.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.review.')]
for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py')
run.log_artifact(artifact)
@@ -137,7 +137,10 @@ def train():
if step == 0:
to_log = { **to_log, **{ 'model/summary': wandb.Html(get_summary_html(model)) } }
wandb.log(to_log, step=step)
if step % 1000 == 0:
wandb.log(to_log, step=step, commit=True)
else:
wandb.log(to_log, step=step, commit=False)
if step % 10000 == 0:
manager_enc.save(checkpoint_number=step)
+9 -6
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_ae_curv_post import config
from configs.review.config_ae_curv import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf
@@ -37,7 +37,7 @@ from models.cond_encoder import AutoEncoderNew as AutoEncoder
testing = False
def init_wandb():
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.add_file('auto_encoder_curv.py')
artifact.add_file('losses.py')
@@ -45,7 +45,7 @@ def init_wandb():
artifact.add_file('models/cond_encoder.py')
artifact.add_file('dataset.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.review.')]
for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py')
run.log_artifact(artifact)
@@ -177,8 +177,11 @@ def train():
if step == 0:
to_log = { **to_log, **{ 'model/summary': wandb.Html(get_summary_html(model)) } }
wandb.log(to_log, step=step)
print(step)
if step % 1000 == 0:
wandb.log(to_log, step=step, commit=True)
else:
wandb.log(to_log, step=step, commit=False)
# print(step)
if step % 10000 == 0:
manager_enc.save(checkpoint_number=step)
@@ -206,7 +209,7 @@ def test():
if __name__ == '__main__':
init_wandb()
allow_memory_growth()
# allow_memory_growth()
parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str)
args = vars(parser.parse_args())
+8 -4
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_ae_static import config
from configs.review.config_ae_static import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf
@@ -37,15 +37,16 @@ from models.cond_encoder import AutoEncoderNew as AutoEncoder
def init_wandb():
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.add_file('auto_encoder_static.py')
artifact.add_file('losses.py')
artifact.add_file('models/base.py')
artifact.add_file('models/resnet.py')
artifact.add_file('models/cond_encoder.py')
artifact.add_file('dataset.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.review.')]
for config_file_name in config_file_names:
artifact.add_file('/'.join(config_file_name.split('.')) + '.py')
run.log_artifact(artifact)
@@ -138,7 +139,10 @@ def train():
if step == 0:
to_log = { **to_log, **{ 'model/summary': wandb.Html(get_summary_html(model)) } }
# if step % 1000 == 0:
# wandb.log(to_log, step=step, commit=True)
# else:
# wandb.log(to_log, step=step, commit=False)
wandb.log(to_log, step=step)
if step % 10000 == 0:
+1 -1
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_abl_all_post import config
from configs.review.config_abl_all import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
# import tensorflow as tf
+1 -1
View File
@@ -31,7 +31,7 @@ config['cond_ae']['decoder_dims'] = config['cond_ae']['encoder_dims']
config['cond_ae']['activation'] = 'linear'
config['gpu'] = '5'
config['gpu'] = '0'
config['lr'] = 0.0005
config['name'] = 'static_post_4'
config['notes'] = 'convnext + convnext, | \
+126
View File
@@ -0,0 +1,126 @@
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
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'] = '4'
config['name'] = 'abl_all_resnet_r7'
config['notes'] = ''
config['avg_garment_path'] = 'custom_data/train_no_shape_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'] = False
config['dataset_in_memory'] = False
config['is_cape'] = False
config['train_dir'] = '/home/workspace/local-data/train'
config['valid_dir'] = '/home/workspace/local-data/valid'
config['test_dir'] = '/home/workspace/data/dataset/test_ready'
# config['frames_file'] = 'frames_dress_30k.txt'
# config['frames_file_valid'] = 'frames_dress_30k.txt'
# config['frames_file_test'] = 'frames_dress_30k.txt'
config['static_model'] = 'checkpoints/post/static_r7_3'
config['body_model'] = 'checkpoints/post/body_r7_3'
config['curvature_model'] = 'checkpoints/post/curv_r7_3'
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['pretrained_model'] = ''
###############
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']['add_noise'] = True
config['cvae']['noise_amount'] = 0.001
config['cvae']['kernel_size'] = 7
config['cvae']['encoder_depths'] = [3, 3, 3, 9, 3]
config['cvae']['encoder_dims'] = [32, 64, 128, 256, 64]
config['cvae']['decoder_depths'] = config['cvae']['encoder_depths']
config['cvae']['decoder_dims'] = config['cvae']['encoder_dims']
config['cond_ae_static'] = dict()
config['cond_ae_static']['is_label'] = False
config['cond_ae_static']['kernel_size'] = 7
config['cond_ae_static']['bottleneck_size'] = 8
config['cond_ae_static']['encoder_depths'] = [3, 3, 3, 9, 3]
config['cond_ae_static']['encoder_dims'] = [16, 32, 64, 64, config['cond_ae_static']['bottleneck_size']]
config['cond_ae_static']['decoder_depths'] = config['cond_ae_static']['encoder_depths']
config['cond_ae_static']['decoder_dims'] = config['cond_ae_static']['encoder_dims']
config['cond_ae_static']['activation'] = 'tanh'
config['cond_ae_curv'] = dict()
config['cond_ae_curv']['is_label'] = True
config['cond_ae_curv']['kernel_size'] = 7
config['cond_ae_curv']['bottleneck_size'] = 40
config['cond_ae_curv']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae_curv']['encoder_dims'] = [16, 32, 64, 128, config['cond_ae_curv']['bottleneck_size']]
config['cond_ae_curv']['decoder_depths'] = config['cond_ae_curv']['encoder_depths']
config['cond_ae_curv']['decoder_dims'] = config['cond_ae_curv']['encoder_dims']
config['cond_ae_curv']['activation'] = 'tanh'
config['cond_ae_body'] = dict()
config['cond_ae_body']['is_label'] = False
config['cond_ae_body']['kernel_size'] = 7
config['cond_ae_body']['bottleneck_size'] = 16
config['cond_ae_body']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae_body']['encoder_dims'] = [16, 32, 64, 128, config['cond_ae_body']['bottleneck_size']]
config['cond_ae_body']['decoder_depths'] = config['cond_ae_body']['encoder_depths']
config['cond_ae_body']['decoder_dims'] = config['cond_ae_body']['encoder_dims']
config['cond_ae_body']['activation'] = 'tanh'
+51
View File
@@ -0,0 +1,51 @@
config = dict()
config['batch_size'] = 4
config['train_dir'] = '/home/workspace/local-data/train'
config['valid_dir'] = '/home/workspace/local-data/valid'
config['test_dir'] = '/home/workspace/data/dataset/test_ready'
config['use_filled'] = False
config['resolution'] = 512
config['is_skirt'] = False
config['dataset_in_memory'] = False
config['is_cape'] = False
config['remove_global_orientation'] = True
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['latent_dim'] = 128
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'] = 16
config['cond_ae']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae']['encoder_dims'] = [16, 32, 64, 128, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_depths'] = config['cond_ae']['encoder_depths']
config['cond_ae']['decoder_dims'] = config['cond_ae']['encoder_dims']
config['cond_ae']['activation'] = 'tanh'
config['gpu'] = '4'
config['lr'] = 0.0001
config['name'] = 'body_r7_3'
config['notes'] = 'resnet18'
config['tags'] = ['review_7']
config['cond_ae']['upscale_output'] = False
config['pretrained_model'] = ''
config['signature_dynamic'] = { 'id': (), 'frame_nr': (),
'pose_shape': (72 + 11,),
'uv_body_posed': (3, 512, 256,),
'mesh_body_posed': (config['smpl_res'], 3,),
}
config['signature_static'] = {
'mesh_mask': (config['smpl_res'],),
}
+50
View File
@@ -0,0 +1,50 @@
config = dict()
config['batch_size'] = 4
config['train_dir'] = '/home/workspace/local-data/train'
config['valid_dir'] = '/home/workspace/local-data/valid'
config['test_dir'] = '/home/workspace/data/dataset/test_ready'
config['use_filled'] = False
config['resolution'] = 512
config['is_skirt'] = False
config['dataset_in_memory'] = False
config['is_cape'] = False
config['remove_global_orientation'] = True
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['latent_dim'] = 128
config['cond_ae'] = dict()
config['cond_ae']['is_label'] = True
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'] = 40
config['cond_ae']['encoder_depths'] = [3, 3, 9, 9, 3]
config['cond_ae']['encoder_dims'] = [16, 32, 64, 128, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_depths'] = config['cond_ae']['encoder_depths']
config['cond_ae']['decoder_dims'] = config['cond_ae']['encoder_dims']
config['cond_ae']['activation'] = 'tanh'
config['gpu'] = '3'
config['lr'] = 0.001
config['name'] = 'curv_r7_3'
config['notes'] = 'resnet18'
config['tags'] = ['review_7']
config['cond_ae']['upscale_output'] = False
config['pretrained_model'] = ''
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,),
}
+51
View File
@@ -0,0 +1,51 @@
config = dict()
config['batch_size'] = 4
config['train_dir'] = '/home/workspace/local-data/train'
config['valid_dir'] = '/home/workspace/local-data/valid'
config['test_dir'] = '/home/workspace/data/dataset/test_ready'
config['use_filled'] = False
config['resolution'] = 512
config['is_skirt'] = False
config['dataset_in_memory'] = True
config['is_cape'] = False
config['remove_global_orientation'] = True
config['smpl_res'] = 14475
if config['is_cape']:
config['smpl_res'] = 3638
config['latent_dim'] = 128
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'] = 8
config['cond_ae']['encoder_depths'] = [3, 3, 3, 27, 3]
config['cond_ae']['encoder_dims'] = [8, 16, 32, 32, config['cond_ae']['bottleneck_size']]
config['cond_ae']['decoder_depths'] = config['cond_ae']['encoder_depths']
config['cond_ae']['decoder_dims'] = config['cond_ae']['encoder_dims']
config['cond_ae']['activation'] = 'linear'
config['gpu'] = '6'
config['lr'] = 0.0005
config['name'] = 'static_r7_3'
config['notes'] = 'resnet18 based, one more block'
config['tags'] = ['review_7']
config['cond_ae']['upscale_output'] = False
config['pretrained_model'] = ''
config['signature_dynamic'] = { 'id': (), 'frame_nr': (), }
config['signature_static'] = { 'uv_static': (512, 256, 3),
'mesh_static': (config['smpl_res'], 3,),
'mesh_mask': (config['smpl_res'],),
'uv_mask': (512, 256,),
}
+6 -6
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_abl_all_post import config
from configs.review.config_abl_all import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf
@@ -58,7 +58,9 @@ def init_wandb():
artifact.add_file('convnext/models/convnext_tf.py')
config_file_names = [key for key in sys.modules.keys() if key.startswith('configs.')]
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)
uv2mesh = UV2Mesh(res=256, is_skirt=config['is_skirt'], is_adaptive=False, is_smpl_orig=config['is_cape'])
@@ -73,7 +75,7 @@ def kl_loss(mean, logvar):
# 3d loss on posed !!!!!!!!!!!!
# @tf.function
@tf.function
def train_step(batch):
with tf.GradientTape() as tape:
@@ -425,8 +427,6 @@ def sample(folder):
def test():
str_split = config['name'].split('_')
test_idx = str_split.index('test')
@@ -476,7 +476,7 @@ def test():
if __name__ == '__main__':
# init_wandb()
init_wandb()
parser = argparse.ArgumentParser(description='')
parser.add_argument('--name', type=str)
args = vars(parser.parse_args())
+1 -1
View File
@@ -1,6 +1,6 @@
import os
import sys
from configs.config_abl_all_post import config
from configs.review.config_abl_all import config
os.environ["CUDA_VISIBLE_DEVICES"] = config['gpu']
import tensorflow as tf
+31 -15
View File
@@ -1,5 +1,7 @@
import tensorflow as tf
from convnext.models.convnext_tf import ConvNeXt, ConvNeXtReverse, Block, ConvNeXtReverseLabels
from models.resnet import resnet_18, make_basic_block_layer
class Bottleneck(tf.keras.Model):
@@ -111,20 +113,34 @@ class Decoder(tf.keras.Model):
class VariationalEncoderNew(tf.keras.Model):
def __init__(self, depths, dims, kernel_size=7):
def __init__(self, features):
super(VariationalEncoderNew, self).__init__()
self.encoder = ConvNeXt(depths=depths, dims=dims, include_top=False, kernel_size=kernel_size)
self.encoder = resnet_18(features)
self.mean_branch = tf.keras.Sequential(
[Block(dim=64, drop_path=0, kernel_size=kernel_size,
layer_scale_init_value=1e-6, prefix=f'bottleneck{j}') for j in range(5)]
)
self.mean_branch = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=features,
kernel_size=(3, 3),
strides=1,
padding="same"),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(filters=features,
kernel_size=(3, 3),
strides=1,
padding="same")
])
self.var_branch = tf.keras.Sequential(
[Block(dim=64, drop_path=0, kernel_size=kernel_size,
layer_scale_init_value=1e-6, prefix=f'bottleneck{j}') for j in range(5)]
)
self.var_branch = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=features,
kernel_size=(3, 3),
strides=1,
padding="same"),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(filters=features,
kernel_size=(3, 3),
strides=1,
padding="same")
])
self.flatten_mean = tf.keras.layers.Flatten()
self.flatten_var = tf.keras.layers.Flatten()
@@ -147,10 +163,10 @@ class VariationalEncoderNew(tf.keras.Model):
class AEEncoderNew(tf.keras.Model):
def __init__(self, depths, dims, kernel_size=7, activation='tanh'):
def __init__(self, features, activation='tanh'):
super(AEEncoderNew, self).__init__()
self.encoder = ConvNeXt(depths=depths, dims=dims, include_top=False, kernel_size=kernel_size)
self.encoder = resnet_18(features)
self.act = tf.keras.layers.Activation(activation)
@@ -171,15 +187,15 @@ class AEEncoderNew(tf.keras.Model):
class DecoderNew(tf.keras.Model):
def __init__(self, depths, dims, kernel_size=7, is_label=False):
def __init__(self, features, is_label=False, is_cvae=False):
super(DecoderNew, self).__init__()
self.is_label = is_label
if not is_label:
self.decoder = ConvNeXtReverse(depths=depths, dims=dims, kernel_size=kernel_size)
self.decoder = resnet_18(features, reversed=True, is_cvae=is_cvae)
else:
self.decoder = ConvNeXtReverseLabels(depths=depths, dims=dims, nr_of_classes=7)
self.decoder = resnet_18(features, reversed=True, labels=6, is_cvae=is_cvae)
def call(self, inputs, training):
+2 -2
View File
@@ -25,8 +25,8 @@ class AutoEncoderNew(tf.keras.Model):
def __init__(self, config):
super(AutoEncoderNew, self).__init__()
self.encoder : AEEncoderNew = AEEncoderNew(config['encoder_depths'], config['encoder_dims'], config['kernel_size'], config['activation'])
self.decoder : DecoderNew = DecoderNew(config['decoder_depths'], config['decoder_dims'], kernel_size=config['kernel_size'], is_label=config['is_label'])
self.encoder : AEEncoderNew = AEEncoderNew(config['bottleneck_size'], config['activation'])
self.decoder : DecoderNew = DecoderNew(config['bottleneck_size'], is_label=config['is_label'])
def call(self, inputs, training):
+6 -6
View File
@@ -159,16 +159,16 @@ class CVAENew(tf.keras.Model):
self.size = config['resolution']
if not('only_curvatures' in config.keys() and config['only_curvatures'] == True):
self.static_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_static']['encoder_depths'], config['cond_ae_static']['encoder_dims'], config['cond_ae_static']['kernel_size'], config['cond_ae_static']['activation'])
self.static_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_static']['bottleneck_size'], config['cond_ae_static']['activation'])
if config['static_model'] != '':
load_model(self.static_enc, config['static_model'] + '_enc')
self.body_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_body']['encoder_depths'], config['cond_ae_body']['encoder_dims'], config['cond_ae_body']['kernel_size'])
self.body_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_body']['bottleneck_size'])
if config['body_model'] != '':
load_model(self.body_enc, config['body_model'] + '_enc')
if config['use_curvature']:
self.curv_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_curv']['encoder_depths'], config['cond_ae_curv']['encoder_dims'], config['cond_ae_curv']['kernel_size'], config['cond_ae_curv']['activation'])
self.curv_enc : AEEncoderNew = AEEncoderNew(config['cond_ae_curv']['bottleneck_size'], config['cond_ae_curv']['activation'])
if config['curvature_model'] != '':
load_model(self.curv_enc, config['curvature_model'] + '_enc')
@@ -179,10 +179,10 @@ class CVAENew(tf.keras.Model):
if config['use_curvature']:
self.curv_enc.trainable = False
self.encoder = VariationalEncoderNew(config['cvae']['encoder_depths'], config['cvae']['encoder_dims'], kernel_size=config['cvae']['kernel_size'])
self.decoder = DecoderNew(config['cvae']['decoder_depths'], config['cvae']['decoder_dims'], config['cvae']['kernel_size'])
self.encoder = VariationalEncoderNew(config['cvae']['encoder_dims'][-1])
self.decoder = DecoderNew(config['cvae']['decoder_dims'][-1], is_cvae=True)
self.reshape = tf.keras.layers.Reshape((8, 4, 64))
self.reshape = tf.keras.layers.Reshape((8, 4, config['cvae']['decoder_dims'][-1]))
if config['avg_garment_path'] != '':
self.avg_garment = np.load(config['avg_garment_path'])
+254
View File
@@ -0,0 +1,254 @@
# taken from https://github.com/calmisential/TensorFlow2.0_ResNet/blob/master/models/resnet.py
import tensorflow as tf
class BasicBlock(tf.keras.layers.Layer):
def __init__(self, filter_num, stride=1, upsample=False):
super(BasicBlock, self).__init__()
if not upsample:
self.conv1 = tf.keras.layers.Conv2D(filters=filter_num,
kernel_size=(3, 3),
strides=stride,
padding="same")
else:
self.conv1 = tf.keras.layers.Conv2DTranspose(filters=filter_num,
kernel_size=(3, 3),
strides=stride,
padding="same")
self.bn1 = tf.keras.layers.BatchNormalization()
self.conv2 = tf.keras.layers.Conv2D(filters=filter_num,
kernel_size=(3, 3),
strides=1,
padding="same")
self.bn2 = tf.keras.layers.BatchNormalization()
if stride != 1:
if not upsample:
self.updownsample = tf.keras.Sequential()
self.updownsample.add(tf.keras.layers.Conv2D(filters=filter_num,
kernel_size=(1, 1),
strides=stride))
self.updownsample.add(tf.keras.layers.BatchNormalization())
else:
self.updownsample = tf.keras.Sequential()
self.updownsample.add(tf.keras.layers.Conv2DTranspose(filters=filter_num,
kernel_size=(1, 1),
strides=stride))
self.updownsample.add(tf.keras.layers.BatchNormalization())
else:
self.updownsample = lambda x: x
def call(self, inputs, training=None, **kwargs):
residual = self.updownsample(inputs)
x = self.conv1(inputs)
x = self.bn1(x, training=training)
x = tf.nn.relu(x)
x = self.conv2(x)
x = self.bn2(x, training=training)
output = tf.nn.relu(tf.keras.layers.add([residual, x]))
return output
class BottleNeck(tf.keras.layers.Layer):
def __init__(self, filter_num, stride=1):
super(BottleNeck, self).__init__()
self.conv1 = tf.keras.layers.Conv2D(filters=filter_num,
kernel_size=(1, 1),
strides=1,
padding='same')
self.bn1 = tf.keras.layers.BatchNormalization()
self.conv2 = tf.keras.layers.Conv2D(filters=filter_num,
kernel_size=(3, 3),
strides=stride,
padding='same')
self.bn2 = tf.keras.layers.BatchNormalization()
self.conv3 = tf.keras.layers.Conv2D(filters=filter_num * 4,
kernel_size=(1, 1),
strides=1,
padding='same')
self.bn3 = tf.keras.layers.BatchNormalization()
self.downsample = tf.keras.Sequential()
self.downsample.add(tf.keras.layers.Conv2D(filters=filter_num * 4,
kernel_size=(1, 1),
strides=stride))
self.downsample.add(tf.keras.layers.BatchNormalization())
def call(self, inputs, training=None, **kwargs):
residual = self.downsample(inputs)
x = self.conv1(inputs)
x = self.bn1(x, training=training)
x = tf.nn.relu(x)
x = self.conv2(x)
x = self.bn2(x, training=training)
x = tf.nn.relu(x)
x = self.conv3(x)
x = self.bn3(x, training=training)
output = tf.nn.relu(tf.keras.layers.add([residual, x]))
return output
def make_basic_block_layer(filter_num, blocks, stride=1, upsample=False):
res_block = tf.keras.Sequential()
res_block.add(BasicBlock(filter_num, stride=stride, upsample=upsample))
for _ in range(1, blocks):
res_block.add(BasicBlock(filter_num, stride=1))
return res_block
def make_bottleneck_layer(filter_num, blocks, stride=1):
res_block = tf.keras.Sequential()
res_block.add(BottleNeck(filter_num, stride=stride))
for _ in range(1, blocks):
res_block.add(BottleNeck(filter_num, stride=1))
return res_block
class ResNetTypeI(tf.keras.Model):
def __init__(self, layer_params, features, reversed=False, labels=None, is_cvae=False):
super(ResNetTypeI, self).__init__()
self.reversed = reversed
self.labels = labels
if not reversed:
self.conv1 = tf.keras.layers.Conv2D(filters=64,
kernel_size=(7, 7),
strides=2,
padding="same")
self.bn1 = tf.keras.layers.BatchNormalization()
self.pool1 = tf.keras.layers.MaxPool2D(pool_size=(3, 3),
strides=2,
padding="same")
else:
self.conv1 = tf.keras.layers.Conv2DTranspose(filters=3 if labels is None else labels,
kernel_size=(7, 7),
strides=2,
padding="same")
self.bn1 = tf.keras.layers.BatchNormalization()
# self.pool1 = tf.keras.layers.MaxPool2D(pool_size=(3, 3),
# strides=2,
# padding="same")
self.pool1 = tf.keras.layers.UpSampling2D()
self.layer1 = make_basic_block_layer(filter_num=64,
blocks=layer_params[0],
stride=1 if not reversed else 2,
upsample=reversed)
self.layer2 = make_basic_block_layer(filter_num=64,
blocks=layer_params[1],
stride=2,
upsample=reversed)
self.layer3 = make_basic_block_layer(filter_num=64,
blocks=layer_params[2],
stride=2,
upsample=reversed)
self.layer4 = make_basic_block_layer(filter_num=128,
blocks=layer_params[3],
stride=2,
upsample=reversed)
self.layer5 = make_basic_block_layer(filter_num=features if not is_cvae else features*2,
blocks=layer_params[4],
stride=2 if not reversed else 1,
upsample=reversed)
def call(self, inputs, training=None, mask=None):
if not self.reversed:
x = self.conv1(inputs)
x = self.bn1(x, training=training)
x = tf.nn.relu(x)
x = self.pool1(x)
x = self.layer1(x, training=training)
x = self.layer2(x, training=training)
x = self.layer3(x, training=training)
x = self.layer4(x, training=training)
x = self.layer5(x, training=training)
else:
x = self.layer5(inputs, training=training)
x = self.layer4(x, training=training)
x = self.layer3(x, training=training)
x = self.layer2(x, training=training)
x = self.layer1(x, training=training)
x = self.pool1(x)
x = self.bn1(x, training=training)
# x = tf.nn.relu(x)
x = self.conv1(x)
if self.labels is None:
x = tf.nn.tanh(x)
# else:
# x = tf.nn.softmax(x)
return x
class ResNetTypeII(tf.keras.Model):
def __init__(self, layer_params):
super(ResNetTypeII, self).__init__()
self.conv1 = tf.keras.layers.Conv2D(filters=64,
kernel_size=(7, 7),
strides=2,
padding="same")
self.bn1 = tf.keras.layers.BatchNormalization()
self.pool1 = tf.keras.layers.MaxPool2D(pool_size=(3, 3),
strides=2,
padding="same")
self.layer1 = make_bottleneck_layer(filter_num=64,
blocks=layer_params[0])
self.layer2 = make_bottleneck_layer(filter_num=128,
blocks=layer_params[1],
stride=2)
self.layer3 = make_bottleneck_layer(filter_num=256,
blocks=layer_params[2],
stride=2)
self.layer4 = make_bottleneck_layer(filter_num=512,
blocks=layer_params[3],
stride=2)
self.avgpool = tf.keras.layers.GlobalAveragePooling2D()
self.fc = tf.keras.layers.Dense(units=NUM_CLASSES, activation=tf.keras.activations.softmax)
def call(self, inputs, training=None, mask=None):
x = self.conv1(inputs)
x = self.bn1(x, training=training)
x = tf.nn.relu(x)
x = self.pool1(x)
x = self.layer1(x, training=training)
x = self.layer2(x, training=training)
x = self.layer3(x, training=training)
x = self.layer4(x, training=training)
x = self.avgpool(x)
output = self.fc(x)
return output
def resnet_18(features, reversed=False, labels=None, is_cvae=False):
return ResNetTypeI(layer_params=[2, 2, 2, 2, 2], features=features, reversed=reversed, labels=labels, is_cvae=is_cvae)
def resnet_34():
return ResNetTypeI(layer_params=[3, 4, 6, 3])
def resnet_50():
return ResNetTypeII(layer_params=[3, 4, 6, 3])
def resnet_101():
return ResNetTypeII(layer_params=[3, 4, 23, 3])
def resnet_152():
return ResNetTypeII(layer_params=[3, 8, 36, 3])