├── .gitignore ├── .gitmodules ├── Anim_Seqs ├── seqs │ ├── 00000.npz │ ├── 00002.npz │ ├── 00004.npz │ ├── 00006.npz │ ├── 00008.npz │ ├── 00010.npz │ ├── 00012.npz │ ├── 00014.npz │ ├── 00016.npz │ ├── 00018.npz │ ├── 00020.npz │ ├── 00022.npz │ ├── 00024.npz │ ├── 00026.npz │ ├── 00028.npz │ ├── 00030.npz │ ├── 00032.npz │ ├── 00034.npz │ ├── 00036.npz │ ├── 00038.npz │ ├── 00040.npz │ ├── 00042.npz │ ├── 00044.npz │ ├── 00046.npz │ ├── 00048.npz │ ├── 00050.npz │ ├── 00052.npz │ ├── 00054.npz │ ├── 00056.npz │ ├── 00058.npz │ ├── 00060.npz │ ├── 00062.npz │ ├── 00064.npz │ ├── 00066.npz │ ├── 00068.npz │ ├── 00070.npz │ ├── 00072.npz │ ├── 00074.npz │ ├── 00076.npz │ ├── 00078.npz │ ├── 00080.npz │ ├── 00082.npz │ ├── 00084.npz │ ├── 00086.npz │ ├── 00088.npz │ ├── 00090.npz │ ├── 00092.npz │ ├── 00094.npz │ ├── 00096.npz │ ├── 00098.npz │ ├── 00100.npz │ ├── 00102.npz │ ├── 00104.npz │ ├── 00106.npz │ ├── 00108.npz │ ├── 00110.npz │ ├── 00112.npz │ ├── 00114.npz │ ├── 00116.npz │ ├── 00118.npz │ ├── 00120.npz │ ├── 00122.npz │ ├── 00124.npz │ ├── 00126.npz │ ├── 00128.npz │ ├── 00130.npz │ ├── 00132.npz │ ├── 00134.npz │ ├── 00136.npz │ ├── 00138.npz │ ├── 00140.npz │ ├── 00142.npz │ ├── 00144.npz │ ├── 00146.npz │ ├── 00148.npz │ ├── 00150.npz │ ├── 00152.npz │ ├── 00154.npz │ ├── 00156.npz │ ├── 00158.npz │ ├── 00160.npz │ ├── 00162.npz │ ├── 00164.npz │ ├── 00166.npz │ ├── 00168.npz │ ├── 00170.npz │ ├── 00172.npz │ ├── 00174.npz │ ├── 00176.npz │ ├── 00178.npz │ ├── 00180.npz │ ├── 00182.npz │ ├── 00184.npz │ ├── 00186.npz │ ├── 00188.npz │ ├── 00190.npz │ ├── 00192.npz │ ├── 00194.npz │ ├── 00196.npz │ ├── 00198.npz │ ├── 00200.npz │ ├── 00202.npz │ ├── 00204.npz │ ├── 00206.npz │ ├── 00208.npz │ ├── 00210.npz │ ├── 00212.npz │ ├── 00214.npz │ ├── 00216.npz │ ├── 00218.npz │ ├── 00220.npz │ ├── 00222.npz │ ├── 00224.npz │ ├── 00226.npz │ ├── 00228.npz │ ├── 00230.npz │ ├── 00232.npz │ ├── 00234.npz │ ├── 00236.npz │ ├── 00238.npz │ ├── 00240.npz │ ├── 00242.npz │ ├── 00244.npz │ ├── 00246.npz │ ├── 00248.npz │ ├── 00250.npz │ ├── 00252.npz │ ├── 00254.npz │ ├── 00256.npz │ ├── 00258.npz │ ├── 00260.npz │ ├── 00262.npz │ ├── 00264.npz │ ├── 00266.npz │ ├── 00268.npz │ ├── 00270.npz │ ├── 00272.npz │ ├── 00274.npz │ ├── 00276.npz │ ├── 00278.npz │ ├── 00280.npz │ ├── 00282.npz │ ├── 00284.npz │ ├── 00286.npz │ ├── 00288.npz │ ├── 00290.npz │ ├── 00292.npz │ ├── 00294.npz │ ├── 00296.npz │ ├── 00298.npz │ ├── 00300.npz │ ├── 00302.npz │ ├── 00304.npz │ ├── 00306.npz │ ├── 00308.npz │ ├── 00310.npz │ ├── 00312.npz │ ├── 00314.npz │ ├── 00316.npz │ ├── 00318.npz │ ├── 00320.npz │ ├── 00322.npz │ ├── 00324.npz │ ├── 00326.npz │ ├── 00328.npz │ ├── 00330.npz │ ├── 00332.npz │ ├── 00334.npz │ ├── 00336.npz │ ├── 00338.npz │ ├── 00340.npz │ ├── 00342.npz │ ├── 00344.npz │ ├── 00346.npz │ ├── 00348.npz │ ├── 00350.npz │ ├── 00352.npz │ ├── 00354.npz │ ├── 00356.npz │ ├── 00358.npz │ ├── 00360.npz │ ├── 00362.npz │ ├── 00364.npz │ ├── 00366.npz │ ├── 00368.npz │ ├── 00370.npz │ ├── 00372.npz │ ├── 00374.npz │ ├── 00376.npz │ ├── 00378.npz │ ├── 00380.npz │ ├── 00382.npz │ ├── 00384.npz │ ├── 00386.npz │ ├── 00388.npz │ ├── 00390.npz │ ├── 00392.npz │ ├── 00394.npz │ ├── 00396.npz │ ├── 00398.npz │ ├── 00400.npz │ ├── 00402.npz │ ├── 00404.npz │ ├── 00406.npz │ ├── 00408.npz │ ├── 00410.npz │ ├── 00412.npz │ ├── 00414.npz │ ├── 00416.npz │ ├── 00418.npz │ ├── 00420.npz │ ├── 00422.npz │ ├── 00424.npz │ ├── 00426.npz │ ├── 00428.npz │ ├── 00430.npz │ ├── 00432.npz │ ├── 00434.npz │ ├── 00436.npz │ ├── 00438.npz │ ├── 00440.npz │ ├── 00442.npz │ ├── 00444.npz │ ├── 00446.npz │ ├── 00448.npz │ ├── 00450.npz │ ├── 00452.npz │ ├── 00454.npz │ ├── 00456.npz │ ├── 00458.npz │ ├── 00460.npz │ ├── 00462.npz │ ├── 00464.npz │ ├── 00466.npz │ ├── 00468.npz │ ├── 00470.npz │ ├── 00472.npz │ ├── 00474.npz │ ├── 00476.npz │ ├── 00478.npz │ ├── 00480.npz │ ├── 00482.npz │ ├── 00484.npz │ ├── 00486.npz │ ├── 00488.npz │ ├── 00490.npz │ ├── 00492.npz │ ├── 00494.npz │ ├── 00496.npz │ ├── 00498.npz │ ├── 00500.npz │ ├── 00502.npz │ ├── 00504.npz │ ├── 00506.npz │ ├── 00508.npz │ ├── 00510.npz │ ├── 00512.npz │ ├── 00514.npz │ ├── 00516.npz │ ├── 00518.npz │ ├── 00520.npz │ ├── 00522.npz │ ├── 00524.npz │ ├── 00526.npz │ ├── 00528.npz │ ├── 00530.npz │ ├── 00532.npz │ ├── 00534.npz │ ├── 00536.npz │ ├── 00538.npz │ ├── 00540.npz │ ├── 00542.npz │ ├── 00544.npz │ ├── 00546.npz │ ├── 00548.npz │ ├── 00550.npz │ ├── 00552.npz │ ├── 00554.npz │ ├── 00556.npz │ ├── 00558.npz │ ├── 00560.npz │ ├── 00562.npz │ ├── 00564.npz │ ├── 00566.npz │ ├── 00568.npz │ ├── 00570.npz │ ├── 00572.npz │ ├── 00574.npz │ ├── 00576.npz │ ├── 00578.npz │ ├── 00580.npz │ ├── 00582.npz │ ├── 00584.npz │ ├── 00586.npz │ ├── 00588.npz │ ├── 00590.npz │ ├── 00592.npz │ ├── 00594.npz │ ├── 00596.npz │ ├── 00598.npz │ ├── 00600.npz │ ├── 00602.npz │ ├── 00604.npz │ ├── 00606.npz │ ├── 00608.npz │ ├── 00610.npz │ ├── 00612.npz │ ├── 00614.npz │ ├── 00616.npz │ ├── 00618.npz │ ├── 00620.npz │ ├── 00622.npz │ ├── 00624.npz │ ├── 00626.npz │ ├── 00628.npz │ ├── 00630.npz │ ├── 00632.npz │ ├── 00634.npz │ ├── 00636.npz │ └── 00638.npz └── sequences │ ├── dance.npy │ ├── greeting.npy │ ├── hiphop.npy │ ├── house-dance.npy │ ├── jump.npy │ ├── pistol.npy │ └── strut-walk.npy ├── README.md ├── animations_IPNet.py ├── download_trained_pifuhd_model.sh ├── fit_SMPL.py ├── fit_SMPLD.py ├── fit_SMPL_IPNet.py ├── input ├── decaprio │ ├── decaprio.jpg │ └── decaprio_rect.txt ├── suriya │ ├── IMG_3392.2.jpg │ └── IMG_3392.2_rect.txt └── test │ ├── test.png │ └── test_keypoints.json ├── instruction.txt ├── preprocess_img_pose.py ├── run_imageimate.sh ├── screenshots ├── 00input_image.jpg ├── 01pifuhd_mesh.png ├── 03pifuhd_to_ipnet.png ├── IMG_3392.2.jpg ├── SMPLd_Fit.png ├── pifu_to_ipnet_suriya.png ├── pifuhd_meshes.png └── suriya-fbx-2021-08-04-221707.gif └── test_IPNet.py /.gitignore: -------------------------------------------------------------------------------- 1 | IPNet/smpl_models/ 2 | results/* 3 | checkpoints/ 4 | 5 | !results/.gitkeep 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "IPNet"] 2 | path = IPNet 3 | url = https://github.com/bharat-b7/IPNet 4 | 5 | [submodule "pifuhd"] 6 | path = pifuhd 7 | url = https://github.com/facebookresearch/pifuhd 8 | 9 | [submodule "lightweight-human-pose-estimation.pytorch"] 10 | path = lightweight-human-pose-estimation.pytorch 11 | url = https://github.com/Daniil-Osokin/lightweight-human-pose-estimation.pytorch 12 | -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00000.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00000.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00002.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00002.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00004.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00004.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00006.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00006.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00008.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00008.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00010.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00010.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00012.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00012.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00014.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00014.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00016.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00016.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00018.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00018.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00020.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00020.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00022.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00022.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00024.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00024.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00026.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00026.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00028.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00028.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00030.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00030.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00032.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00032.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00034.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00034.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00036.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00036.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00038.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00038.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00040.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00040.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00042.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00042.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00044.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00044.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00046.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00046.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00048.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00048.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00050.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00050.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00052.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00052.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00054.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00054.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00056.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00056.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00058.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00058.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00060.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00060.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00062.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00062.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00064.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00064.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00066.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00066.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00068.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00068.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00070.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00070.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00072.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00072.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00074.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00074.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00076.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00076.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00078.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00078.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00080.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00080.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00082.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00082.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00084.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00084.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00086.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00086.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00088.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00088.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00090.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00090.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00092.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00092.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00094.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00094.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00096.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00096.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00098.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00098.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00100.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00100.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00102.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00102.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00104.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00104.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00106.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00106.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00108.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00108.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00110.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00110.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00112.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00112.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00114.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00114.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00116.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00116.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00118.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00118.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00120.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00120.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00122.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00122.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00124.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00124.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00126.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00126.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00128.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00128.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00130.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00130.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00132.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00132.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00134.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00134.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00136.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00136.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00138.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00138.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00140.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00140.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00142.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00142.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00144.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00144.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00146.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00146.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00148.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00148.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00150.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00150.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00152.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00152.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00154.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00154.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00156.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00156.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00158.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00158.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00160.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00160.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00162.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00162.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00164.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00164.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00166.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00166.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00168.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00168.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00170.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00170.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00172.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00172.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00174.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00174.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00176.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00176.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00178.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00178.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00180.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00180.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00182.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00182.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00184.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00184.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00186.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00186.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00188.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00188.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00190.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00190.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00192.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00192.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00194.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00194.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00196.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00196.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00198.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00198.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00200.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00200.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00202.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00202.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00204.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00204.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00206.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00206.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00208.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00208.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00210.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00210.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00212.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00212.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00214.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00214.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00216.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00216.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00218.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00218.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00220.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00220.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00222.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00222.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00224.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00224.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00226.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00226.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00228.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00228.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00230.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00230.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00232.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00232.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00234.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00234.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00236.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00236.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00238.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00238.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00240.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00240.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00242.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00242.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00244.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00244.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00246.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00246.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00248.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00248.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00250.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00250.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00252.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00252.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00254.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00254.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00256.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00256.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00258.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00258.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00260.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00260.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00262.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00262.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00264.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00264.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00266.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00266.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00268.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00268.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00270.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00270.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00272.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00272.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00274.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00274.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00276.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00276.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00278.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00278.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00280.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00280.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00282.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00282.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00284.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00284.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00286.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00286.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00288.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00288.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00290.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00290.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00292.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00292.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00294.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00294.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00296.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00296.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00298.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00298.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00300.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00300.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00302.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00302.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00304.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00304.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00306.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00306.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00308.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00308.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00310.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00310.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00312.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00312.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00314.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00314.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00316.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00316.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00318.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00318.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00320.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00320.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00322.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00322.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00324.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00324.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00326.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00326.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00328.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00328.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00330.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00330.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00332.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00332.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00334.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00334.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00336.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00336.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00338.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00338.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00340.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00340.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00342.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00342.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00344.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00344.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00346.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00346.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00348.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00348.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00350.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00350.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00352.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00352.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00354.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00354.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00356.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00356.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00358.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00358.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00360.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00360.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00362.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00362.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00364.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00364.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00366.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00366.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00368.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00368.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00370.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00370.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00372.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00372.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00374.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00374.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00376.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00376.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00378.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00378.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00380.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00380.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00382.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00382.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00384.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00384.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00386.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00386.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00388.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00388.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00390.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00390.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00392.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00392.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00394.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00394.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00396.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00396.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00398.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00398.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00400.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00400.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00402.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00402.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00404.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00404.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00406.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00406.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00408.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00408.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00410.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00410.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00412.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00412.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00414.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00414.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00416.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00416.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00418.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00418.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00420.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00420.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00422.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00422.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00424.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00424.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00426.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00426.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00428.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00428.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00430.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00430.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00432.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00432.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00434.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00434.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00436.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00436.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00438.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00438.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00440.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00440.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00442.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00442.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00444.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00444.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00446.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00446.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00448.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00448.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00450.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00450.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00452.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00452.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00454.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00454.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00456.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00456.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00458.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00458.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00460.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00460.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00462.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00462.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00464.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00464.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00466.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00466.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00468.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00468.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00470.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00470.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00472.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00472.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00474.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00474.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00476.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00476.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00478.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00478.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00480.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00480.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00482.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00482.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00484.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00484.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00486.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00486.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00488.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00488.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00490.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00490.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00492.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00492.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00494.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00494.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00496.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00496.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00498.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00498.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00500.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00500.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00502.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00502.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00504.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00504.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00506.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00506.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00508.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00508.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00510.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00510.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00512.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00512.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00514.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00514.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00516.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00516.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00518.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00518.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00520.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00520.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00522.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00522.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00524.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00524.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00526.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00526.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00528.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00528.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00530.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00530.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00532.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00532.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00534.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00534.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00536.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00536.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00538.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00538.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00540.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00540.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00542.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00542.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00544.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00544.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00546.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00546.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00548.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00548.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00550.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00550.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00552.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00552.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00554.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00554.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00556.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00556.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00558.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00558.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00560.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00560.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00562.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00562.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00564.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00564.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00566.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00566.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00568.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00568.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00570.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00570.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00572.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00572.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00574.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00574.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00576.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00576.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00578.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00578.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00580.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00580.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00582.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00582.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00584.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00584.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00586.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00586.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00588.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00588.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00590.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00590.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00592.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00592.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00594.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00594.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00596.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00596.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00598.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00598.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00600.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00600.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00602.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00602.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00604.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00604.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00606.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00606.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00608.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00608.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00610.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00610.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00612.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00612.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00614.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00614.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00616.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00616.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00618.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00618.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00620.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00620.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00622.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00622.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00624.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00624.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00626.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00626.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00628.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00628.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00630.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00630.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00632.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00632.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00634.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00634.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00636.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00636.npz -------------------------------------------------------------------------------- /Anim_Seqs/seqs/00638.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/seqs/00638.npz -------------------------------------------------------------------------------- /Anim_Seqs/sequences/dance.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/dance.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/greeting.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/greeting.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/hiphop.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/hiphop.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/house-dance.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/house-dance.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/jump.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/jump.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/pistol.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/pistol.npy -------------------------------------------------------------------------------- /Anim_Seqs/sequences/strut-walk.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/Anim_Seqs/sequences/strut-walk.npy -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IMAGEimate 2 | IMAGEimate is an end-to-end pipeline to create realistic animatable 3D avatars from a single image using neural networks. This project is an end-to-end system built using two research works and relevant opensource contributions, so their license and terms follows for this project - 3 | 1. PIFuHD : Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization (CVPR 2020) - https://shunsukesaito.github.io/PIFuHD/ 4 | 2. IPNet : Combining Implicit Function Learning and Parametric Models for 3D Human Reconstruction (ECCV 2020) - https://virtualhumans.mpi-inf.mpg.de/ipnet/ 5 | 3. AIST++ : Dance Motion Dataset from National Institute of Advanced Industrial Science and Technology (AIST)- https://google.github.io/aistplusplus_dataset/index.html
6 | AMASS : Archive of Motion Capture as Surface Shapes (AMASS) from Max Planck Institute for Intelligent Systems(MPI) - https://amass.is.tue.mpg.de/ 7 | 4. SMPL : Skinned Multi-person Linear Model from MPI, you need to register, accept the license terms and download models - https://smpl.is.tue.mpg.de/ 8 | 9 | This project was tested on
10 | ``` 11 | OS : Ubuntu 20.04 LTS 12 | GPU : Nvidia RTX2060M with driver 470 13 | CUDA : 10.1 14 | Python : 3.7 15 | PyTorch : 1.8.1 16 | ``` 17 | 18 | Follow the [instructions.txt](https://github.com/codesavory/IMAGEimate/blob/main/instruction.txt) to install dependencies and required libraries and download checkpoints
19 | Follow the [run_imageimate.sh](https://github.com/codesavory/IMAGEimate/blob/main/run_imageimate.sh) for how to make modifications to the code and get relevant results 20 | 21 | Results - 22 | Input Image | PIFuHD Mesh | SMPLD Registration | Reposed Animation 23 | :-------------------------:|:-------------------------:|:-------------------------:|:-------------------------:| 24 | ![](https://github.com/codesavory/IMAGEimate/blob/main/screenshots/00input_image.jpg)| ![](https://github.com/codesavory/IMAGEimate/blob/main/screenshots/01pifuhd_mesh.png) | ![](https://github.com/codesavory/IMAGEimate/blob/main/screenshots/03pifuhd_to_ipnet.png ) | ![](https://github.com/codesavory/IMAGEimate/blob/main/screenshots/suriya-fbx-2021-08-04-221707.gif) 25 | 26 | -------------------------------------------------------------------------------- /animations_IPNet.py: -------------------------------------------------------------------------------- 1 | import os 2 | from os.path import split, join, exists 3 | from glob import glob 4 | import torch 5 | from kaolin.rep import TriangleMesh as tm 6 | from kaolin.metrics.mesh import point_to_surface, laplacian_loss 7 | 8 | from tqdm import tqdm 9 | import pickle as pkl 10 | import numpy as np 11 | 12 | from lib.smpl_paths import SmplPaths 13 | from lib.th_SMPL import th_batch_SMPL 14 | 15 | from fit_SMPL import fit_SMPL, save_meshes, batch_point_to_surface, backward_step 16 | 17 | def get_loss_weights(): 18 | """Set loss weights""" 19 | 20 | loss_weight = {'s2m': lambda cst, it: 10. ** 2 * cst * (1 + it), 21 | 'm2s': lambda cst, it: 10. ** 2 * cst, #/ (1 + it), 22 | 'lap': lambda cst, it: 10. ** 4 * cst / (1 + it), 23 | 'offsets': lambda cst, it: 10. ** 1 * cst / (1 + it)} 24 | return loss_weight 25 | 26 | 27 | def forward_step(th_scan_meshes, smpl, init_smpl_meshes): 28 | """ 29 | Performs a forward step, given smpl and scan meshes. 30 | Then computes the losses. 31 | """ 32 | 33 | # forward 34 | verts, _, _, _ = smpl() 35 | th_smpl_meshes = [tm.from_tensors(vertices=v, 36 | faces=smpl.faces) for v in verts] 37 | 38 | # losses 39 | loss = dict() 40 | loss['s2m'] = batch_point_to_surface([sm.vertices for sm in th_scan_meshes], th_smpl_meshes) 41 | loss['m2s'] = batch_point_to_surface([sm.vertices for sm in th_smpl_meshes], th_scan_meshes) 42 | loss['lap'] = torch.stack([laplacian_loss(sc, sm) for sc, sm in zip(init_smpl_meshes, th_smpl_meshes)]) 43 | loss['offsets'] = torch.mean(torch.mean(smpl.offsets**2, axis=1), axis=1) 44 | return loss 45 | 46 | 47 | def optimize_offsets(th_scan_meshes, smpl, init_smpl_meshes, iterations, steps_per_iter): 48 | # Optimizer 49 | optimizer = torch.optim.Adam([smpl.offsets, smpl.pose, smpl.trans, smpl.betas], 0.005, betas=(0.9, 0.999)) 50 | 51 | # Get loss_weights 52 | weight_dict = get_loss_weights() 53 | 54 | for it in range(iterations): 55 | loop = tqdm(range(steps_per_iter)) 56 | loop.set_description('Optimizing SMPL+D') 57 | for i in loop: 58 | optimizer.zero_grad() 59 | # Get losses for a forward pass 60 | loss_dict = forward_step(th_scan_meshes, smpl, init_smpl_meshes) 61 | # Get total loss for backward pass 62 | tot_loss = backward_step(loss_dict, weight_dict, it) 63 | tot_loss.backward() 64 | optimizer.step() 65 | 66 | l_str = 'Lx100. Iter: {}'.format(i) 67 | for k in loss_dict: 68 | l_str += ', {}: {:0.4f}'.format(k, loss_dict[k].mean().item()*100) 69 | loop.set_description(l_str) 70 | 71 | 72 | def fit_SMPLD(scans, smpl_pkl=None, gender='male', save_path=None, display=False, anim_path=None): 73 | if not exists(save_path): 74 | os.makedirs(save_path) 75 | 76 | # Get SMPL faces 77 | sp = SmplPaths(gender=gender) 78 | smpl_faces = sp.get_faces() 79 | th_faces = torch.tensor(smpl_faces.astype('float32'), dtype=torch.long).cuda() 80 | 81 | # Batch size 82 | batch_sz = len(scans) 83 | 84 | # Init SMPL 85 | if smpl_pkl is None or smpl_pkl[0] is None: 86 | print('SMPL not specified, fitting SMPL now') 87 | pose, betas, trans = fit_SMPL(scans, None, gender, save_path, display) 88 | else: 89 | pose, betas, trans = [], [], [] 90 | for spkl in smpl_pkl: 91 | smpl_dict = pkl.load(open(spkl, 'rb'), encoding='latin-1') 92 | p, b, t = smpl_dict['pose'], smpl_dict['betas'], smpl_dict['trans'] 93 | pose.append(p) 94 | if len(b) == 10: 95 | temp = np.zeros((300,)) 96 | temp[:10] = b 97 | b = temp.astype('float32') 98 | betas.append(b) 99 | trans.append(t) 100 | pose, betas, trans = np.array(pose), np.array(betas), np.array(trans) 101 | 102 | betas, pose, trans = torch.tensor(betas), torch.tensor(pose), torch.tensor(trans) 103 | smpl = th_batch_SMPL(batch_sz, betas, pose, trans, faces=th_faces).cuda() 104 | 105 | verts, _, _, _ = smpl() 106 | init_smpl_meshes = [tm.from_tensors(vertices=v.clone().detach(), 107 | faces=smpl.faces) for v in verts] 108 | 109 | # Load scans 110 | th_scan_meshes = [] 111 | for scan in scans: 112 | th_scan = tm.from_obj(scan) 113 | if save_path is not None: 114 | th_scan.save_mesh(join(save_path, split(scan)[1])) 115 | th_scan.vertices = th_scan.vertices.cuda() 116 | th_scan.faces = th_scan.faces.cuda() 117 | th_scan.vertices.requires_grad = False 118 | th_scan_meshes.append(th_scan) 119 | 120 | # Optimize 121 | optimize_offsets(th_scan_meshes, smpl, init_smpl_meshes, 5, 10) 122 | print('Done') 123 | 124 | verts, _, _, _ = smpl() 125 | th_smpl_meshes = [tm.from_tensors(vertices=v, 126 | faces=smpl.faces) for v in verts] 127 | 128 | #to get the T-pose fitted SMPLD mesh 129 | print("Making the fitted SMPLD model to T-pose") 130 | # Init SMPL, pose with mean smpl pose, as in ch.registration 131 | #copy the optimized smpl model and add t-pose 132 | #read the input animations 133 | print("Saving Animations") 134 | for filename in sorted(os.listdir(anim_path)): 135 | 136 | print("Filename:", filename) 137 | data = np.load(anim_path+filename) 138 | print('pose', data['pose']) 139 | pose_new = torch.tensor([np.array(data['pose'])]) 140 | smplD_new = th_batch_SMPL(batch_sz, smpl.betas, pose_new, trans, offsets=smpl.offsets, faces=th_faces).cuda() 141 | verts_new, _, _, _ = smplD_new() 142 | th_smplD_meshes_new = [tm.from_tensors(vertices=v, faces=smplD_new.faces) for v in verts_new] 143 | 144 | #save smplD meshes 145 | new_path = join(save_path,filename) 146 | print("new_path",new_path) 147 | if not exists(new_path): 148 | os.makedirs(new_path) 149 | names = [split(s)[1] for s in scans] 150 | save_meshes(th_smplD_meshes_new, [join(new_path, n.replace('.obj', '_smpld_'+filename+'.obj')) for n in names]) 151 | # Save params 152 | for p, b, t, d, n in zip(smplD_new.pose.cpu().detach().numpy(), smplD_new.betas.cpu().detach().numpy(), 153 | smplD_new.trans.cpu().detach().numpy(), smplD_new.offsets.cpu().detach().numpy(), names): 154 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 155 | pkl.dump(smpl_dict, open(join(new_path, n.replace('.obj', '_smpld_'+filename+'.pkl')), 'wb')) 156 | print("Done saving Animations: ",filename) 157 | 158 | 159 | pose_tpose = torch.zeros((batch_sz, 72)) 160 | print("pose_tpose", pose_tpose) 161 | smplD_tpose = th_batch_SMPL(batch_sz, smpl.betas, pose_tpose, trans, offsets=smpl.offsets, faces=th_faces).cuda() 162 | #re-pose it to T-pose 163 | #import torch.nn as nn 164 | #smpl_tpose.pose = nn.Parameter(torch.zeros(batch_sz, 72)) 165 | #extract vertices 166 | verts_tpose, _, _, _ = smplD_tpose() 167 | th_smplD_meshes_tpose = [tm.from_tensors(vertices=v, faces=smplD_tpose.faces) for v in verts_tpose] 168 | 169 | if save_path is not None: 170 | if not exists(save_path): 171 | os.makedirs(save_path) 172 | 173 | names = [split(s)[1] for s in scans] 174 | 175 | # Save meshes 176 | save_meshes(th_smpl_meshes, [join(save_path, n.replace('.obj', '_smpld.obj')) for n in names]) 177 | save_meshes(th_scan_meshes, [join(save_path, n) for n in names]) 178 | # Save params 179 | for p, b, t, d, n in zip(smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), 180 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy(), names): 181 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 182 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpld.pkl')), 'wb')) 183 | 184 | #save smplD meshes 185 | save_meshes(th_smplD_meshes_tpose, [join(save_path, n.replace('.obj', '_smpld_tpose.obj')) for n in names]) 186 | # Save params 187 | for p, b, t, d, n in zip(smplD_tpose.pose.cpu().detach().numpy(), smplD_tpose.betas.cpu().detach().numpy(), 188 | smplD_tpose.trans.cpu().detach().numpy(), smplD_tpose.offsets.cpu().detach().numpy(), names): 189 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 190 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpld_tpose.pkl')), 'wb')) 191 | print("Done saving SMPLD") 192 | 193 | return smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), \ 194 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy() 195 | 196 | 197 | if __name__ == "__main__": 198 | import argparse 199 | parser = argparse.ArgumentParser(description='Run Model') 200 | parser.add_argument('scan_path', type=str) 201 | parser.add_argument('save_path', type=str) 202 | parser.add_argument('-smpl_pkl', type=str, default=None) # In case SMPL fit is already available 203 | parser.add_argument('-gender', type=str, default='male') # can be female/ male/ neutral 204 | parser.add_argument('--display', default=False, action='store_true') 205 | parser.add_argument('anim_path', type=str) 206 | args = parser.parse_args() 207 | 208 | # args = lambda: None 209 | # args.scan_path = '/BS/bharat-2/static00/renderings/renderpeople/rp_alison_posed_017_30k/rp_alison_posed_017_30k.obj' 210 | # args.smpl_pkl = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/rp_alison_posed_017_30k_smpl.pkl' 211 | # args.display = False 212 | # args.save_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data' 213 | # args.gender = 'female' 214 | 215 | _, _, _, _ = fit_SMPLD([args.scan_path], smpl_pkl=[args.smpl_pkl], display=args.display, save_path=args.save_path, 216 | gender=args.gender, anim_path=args.anim_path) 217 | -------------------------------------------------------------------------------- /download_trained_pifuhd_model.sh: -------------------------------------------------------------------------------- 1 | # Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. 2 | 3 | set -ex 4 | 5 | mkdir -p checkpoints 6 | cd checkpoints 7 | wget "https://dl.fbaipublicfiles.com/pifuhd/checkpoints/pifuhd.pt" pifuhd.pt 8 | cd .. 9 | -------------------------------------------------------------------------------- /fit_SMPL.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code to fit SMPL (pose, shape) to scan using pytorch, kaolin. 3 | If code works: 4 | Author: Bharat 5 | else: 6 | Author: Anonymous 7 | Cite: Combining Implicit Function Learning and Parametric Models for 3D Human Reconstruction, ECCV 2020. 8 | """ 9 | 10 | import os 11 | from os.path import split, join, exists 12 | import sys 13 | import ipdb 14 | import json 15 | import torch 16 | import numpy as np 17 | import pickle as pkl 18 | import kaolin as kal 19 | from kaolin.rep import TriangleMesh as tm 20 | from kaolin.metrics.mesh import point_to_surface, laplacian_loss, chamfer_distance 21 | from kaolin.conversions import trianglemesh_to_sdf 22 | from kaolin.rep import SDF as sdf 23 | from psbody.mesh import Mesh, MeshViewer, MeshViewers 24 | from tqdm import tqdm 25 | 26 | from lib.smpl_paths import SmplPaths 27 | from lib.th_smpl_prior import get_prior 28 | from lib.th_SMPL import th_batch_SMPL, th_batch_SMPL_split_params 29 | from lib.body_objectives import batch_get_pose_obj, torch_pose_obj_data, get_prior_weight, HAND_VISIBLE 30 | from lib.mesh_distance import point_to_surface_vec, batch_point_to_surface_vec_signed, batch_point_to_surface 31 | 32 | import trimesh 33 | 34 | def plot_points(pts, cols=None): 35 | from psbody.mesh.sphere import Sphere 36 | temp = Sphere(np.zeros((3)), 1.).to_mesh() 37 | meshes= [Mesh(vc='SteelBlue' if cols is None else cols[n], f=temp.f, v=temp.v * 10.**-2 + p) for n, p in enumerate(pts)] 38 | return meshes 39 | 40 | def get_loss_weights(): 41 | """Set loss weights""" 42 | 43 | loss_weight = {'s2m': lambda cst, it: 10. ** 2 * cst * (1 + it), 44 | 'm2s': lambda cst, it: 10. ** 2 * cst / (1 + it), 45 | 'betas': lambda cst, it: 10. ** 0 * cst / (1 + it), 46 | 'offsets': lambda cst, it: 10. ** -1 * cst / (1 + it), 47 | 'pose_pr': lambda cst, it: 10. ** -5 * cst / (1 + it), 48 | 'lap': lambda cst, it: cst / (1 + it), 49 | 'pose_obj': lambda cst, it: 10. ** 2 * cst / (1 + it) 50 | } 51 | return loss_weight 52 | 53 | def save_meshes(meshes, save_paths): 54 | for m, s in zip(meshes, save_paths): 55 | m.save_mesh(s) 56 | 57 | def forward_step(th_scan_meshes, smpl, th_pose_3d=None): 58 | """ 59 | Performs a forward step, given smpl and scan meshes. 60 | Then computes the losses. 61 | """ 62 | # Get pose prior 63 | prior = get_prior(smpl.gender) 64 | 65 | # forward 66 | verts, _, _, _ = smpl() 67 | th_smpl_meshes = [tm.from_tensors(vertices=v, 68 | faces=smpl.faces) for v in verts] 69 | 70 | # losses 71 | loss = dict() 72 | loss['s2m'] = batch_point_to_surface([sm.vertices for sm in th_scan_meshes], th_smpl_meshes) 73 | loss['m2s'] = batch_point_to_surface([sm.vertices for sm in th_smpl_meshes], th_scan_meshes) 74 | loss['betas'] = torch.mean(smpl.betas ** 2, axis=1) 75 | loss['pose_pr'] = prior(smpl.pose) 76 | if th_pose_3d is not None: 77 | loss['pose_obj'] = batch_get_pose_obj(th_pose_3d, smpl) 78 | return loss 79 | 80 | def forward_step_pose_only(smpl, th_pose_3d, prior_weight): 81 | """ 82 | Performs a forward step, given smpl and scan meshes. 83 | Then computes the losses. 84 | """ 85 | # Get pose prior 86 | prior = get_prior(smpl.gender) 87 | 88 | # losses 89 | loss = dict() 90 | loss['pose_pr'] = prior(smpl.pose, prior_weight) 91 | loss['pose_obj'] = batch_get_pose_obj(th_pose_3d, smpl, init_pose=False) 92 | return loss 93 | 94 | 95 | def backward_step(loss_dict, weight_dict, it): 96 | w_loss = dict() 97 | for k in loss_dict: 98 | w_loss[k] = weight_dict[k](loss_dict[k], it) 99 | 100 | tot_loss = list(w_loss.values()) 101 | tot_loss = torch.stack(tot_loss).sum() 102 | return tot_loss 103 | 104 | def optimize_pose_shape(th_scan_meshes, smpl, iterations, steps_per_iter, th_pose_3d=None, display=None): 105 | """ 106 | Optimize SMPL. 107 | :param display: if not None, pass index of the scan in th_scan_meshes to visualize. 108 | """ 109 | # Optimizer 110 | optimizer = torch.optim.Adam([smpl.trans, smpl.betas, smpl.pose], 0.02, betas=(0.9, 0.999)) 111 | 112 | # Get loss_weights 113 | weight_dict = get_loss_weights() 114 | 115 | # Display 116 | if display is not None: 117 | assert int(display) < len(th_scan_meshes) 118 | mv = MeshViewer() 119 | 120 | for it in range(iterations): 121 | loop = tqdm(range(steps_per_iter)) 122 | loop.set_description('Optimizing SMPL') 123 | for i in loop: 124 | optimizer.zero_grad() 125 | # Get losses for a forward pass 126 | loss_dict = forward_step(th_scan_meshes, smpl, th_pose_3d) 127 | # Get total loss for backward pass 128 | tot_loss = backward_step(loss_dict, weight_dict, it) 129 | tot_loss.backward() 130 | optimizer.step() 131 | 132 | l_str = 'Iter: {}'.format(i) 133 | for k in loss_dict: 134 | l_str += ', {}: {:0.4f}'.format(k, weight_dict[k](loss_dict[k], it).mean().item()) 135 | loop.set_description(l_str) 136 | 137 | if display is not None: 138 | verts, _, _, _ = smpl() 139 | smpl_mesh = Mesh(v=verts[display].cpu().detach().numpy(), f=smpl.faces.cpu().numpy()) 140 | scan_mesh = Mesh(v=th_scan_meshes[display].vertices.cpu().detach().numpy(), 141 | f=th_scan_meshes[display].faces.cpu().numpy(), vc=np.array([0, 1, 0])) 142 | mv.set_static_meshes([scan_mesh, smpl_mesh]) 143 | 144 | #smpl.betas.data = split_smpl.betas.data 145 | print('** Optimised smpl pose and shape **') 146 | 147 | def optimize_pose_only(th_scan_meshes, smpl, iterations, steps_per_iter, th_pose_3d, prior_weight, display=None): 148 | """ 149 | Initially we want to only optimize the global rotation of SMPL. Next we optimize full pose. 150 | We optimize pose based on the 3D keypoints in th_pose_3d. 151 | :param th_pose_3d: array containing the 3D keypoints. 152 | :param prior_weight: weights corresponding to joints depending on visibility of the joint in the 3D scan. 153 | eg: hand could be inside pocket. 154 | """ 155 | 156 | batch_sz = smpl.pose.shape[0] 157 | split_smpl = th_batch_SMPL_split_params(batch_sz, top_betas=smpl.betas.data[:, :2], other_betas=smpl.betas.data[:, 2:], 158 | global_pose=smpl.pose.data[:, :3], other_pose=smpl.pose.data[:, 3:], 159 | faces=smpl.faces, gender=smpl.gender).cuda() 160 | optimizer = torch.optim.Adam([split_smpl.trans, split_smpl.top_betas, split_smpl.global_pose], 0.02, 161 | betas=(0.9, 0.999)) 162 | 163 | # Get loss_weights 164 | weight_dict = get_loss_weights() 165 | 166 | if display is not None: 167 | assert int(display) < len(th_scan_meshes) 168 | # mvs = MeshViewers((1,1)) 169 | mv = MeshViewer(keepalive=True) 170 | 171 | iter_for_global = 1 172 | for it in range(iter_for_global + iterations): 173 | loop = tqdm(range(steps_per_iter)) 174 | if it < iter_for_global: 175 | # Optimize global orientation 176 | print('Optimizing SMPL global orientation') 177 | loop.set_description('Optimizing SMPL global orientation') 178 | elif it == iter_for_global: 179 | # Now optimize full SMPL pose 180 | print('Optimizing SMPL pose only') 181 | loop.set_description('Optimizing SMPL pose only') 182 | optimizer = torch.optim.Adam([split_smpl.trans, split_smpl.top_betas, split_smpl.global_pose, 183 | split_smpl.other_pose], 0.02, betas=(0.9, 0.999)) 184 | else: 185 | loop.set_description('Optimizing SMPL pose only') 186 | 187 | for i in loop: 188 | optimizer.zero_grad() 189 | # Get losses for a forward pass 190 | loss_dict = forward_step_pose_only(split_smpl, th_pose_3d, prior_weight) 191 | # Get total loss for backward pass 192 | tot_loss = backward_step(loss_dict, weight_dict, it) 193 | tot_loss.backward() 194 | optimizer.step() 195 | 196 | l_str = 'Iter: {}'.format(i) 197 | for k in loss_dict: 198 | l_str += ', {}: {:0.4f}'.format(k, weight_dict[k](loss_dict[k], it).mean().item()) 199 | loop.set_description(l_str) 200 | 201 | if display is not None: 202 | verts, _, _, _ = split_smpl() 203 | smpl_mesh = Mesh(v=verts[display].cpu().detach().numpy(), f=smpl.faces.cpu().numpy()) 204 | scan_mesh = Mesh(v=th_scan_meshes[display].vertices.cpu().detach().numpy(), 205 | f=th_scan_meshes[display].faces.cpu().numpy(), vc=np.array([0, 1, 0])) 206 | 207 | mv.set_dynamic_meshes([smpl_mesh, scan_mesh]) 208 | 209 | # from matplotlib import cm 210 | # col = cm.tab20c(np.arange(len(th_pose_3d[display]['pose_keypoints_3d'])) % 20)[:, :3] 211 | # 212 | # jts, _, _ = split_smpl.get_landmarks() 213 | # Js = plot_points(jts[display].detach().cpu().numpy(), cols=col) 214 | # Js_observed = plot_points(th_pose_3d[display]['pose_keypoints_3d'][:, :3].numpy(), cols=col) 215 | 216 | # mvs[0][0].set_static_meshes([smpl_mesh, scan_mesh]) 217 | # mvs[0][1].set_static_meshes(Js) 218 | # mvs[0][2].set_static_meshes(Js_observed) 219 | 220 | # Put back pose, shape and trans into original smpl 221 | smpl.pose.data = split_smpl.pose.data 222 | smpl.betas.data = split_smpl.betas.data 223 | smpl.trans.data = split_smpl.trans.data 224 | 225 | print('** Optimised smpl pose **') 226 | 227 | 228 | def fit_SMPL(scans, pose_files=None, gender='male', save_path=None, display=None): 229 | """ 230 | :param save_path: 231 | :param scans: list of scan paths 232 | :param pose_files: 233 | :return: 234 | """ 235 | # Get SMPL faces 236 | sp = SmplPaths(gender=gender) 237 | smpl_faces = sp.get_faces() 238 | th_faces = torch.tensor(smpl_faces.astype('float32'), dtype=torch.long).cuda() 239 | 240 | # Batch size 241 | batch_sz = len(scans) 242 | 243 | # Set optimization hyper parameters 244 | iterations, pose_iterations, steps_per_iter, pose_steps_per_iter = 3, 2, 30, 30 #default 3,2,30,30 245 | 246 | if False: 247 | """Test by loading GT SMPL params""" 248 | betas, pose, trans = torch.tensor(GT_SMPL['betas'].astype('float32')).unsqueeze(0), torch.tensor(GT_SMPL['pose'].astype('float32')).unsqueeze(0), torch.zeros((batch_sz, 3)) 249 | else: 250 | prior = get_prior(gender=gender) 251 | pose_init = torch.zeros((batch_sz, 72)) 252 | pose_init[:, 3:] = prior.mean 253 | betas, pose, trans = torch.zeros((batch_sz, 300)), pose_init, torch.zeros((batch_sz, 3)) 254 | 255 | 256 | # Init SMPL, pose with mean smpl pose, as in ch.registration 257 | smpl = th_batch_SMPL(batch_sz, betas, pose, trans, faces=th_faces).cuda() 258 | 259 | # Load scans and center them. Once smpl is registered, move it accordingly. 260 | # Do not forget to change the location of 3D joints/ landmarks accordingly. 261 | th_scan_meshes, centers = [], [] 262 | for scan in scans: 263 | # Load scan using trumesh 264 | print("Loading using trimesh") 265 | #mesh = trimesh.load(scan, process=False) 266 | 267 | print('scan path ...', scan) 268 | th_scan = tm.from_obj(scan) 269 | #custom code 270 | #th_scan.vertices = torch.tensor(mesh.vertices).float() 271 | #th_scan.faces = torch.tensor(mesh.faces).float() 272 | # cent = th_scan.vertices.mean(axis=0) 273 | # centers.append(cent) 274 | # th_scan.vertices -= cent 275 | th_scan.vertices = th_scan.vertices.cuda() 276 | th_scan.faces = th_scan.faces.cuda() 277 | th_scan.vertices.requires_grad = False 278 | th_scan.cuda() 279 | th_scan_meshes.append(th_scan) 280 | 281 | # Load pose information if pose file is given 282 | # Bharat: Shouldn't we structure th_pose_3d as [key][batch, ...] as opposed to current [batch][key]? See batch_get_pose_obj() in body_objectives.py 283 | th_pose_3d = None 284 | if pose_files is not None: 285 | th_no_right_hand_visible, th_no_left_hand_visible, th_pose_3d = [], [], [] 286 | for pose_file in pose_files: 287 | with open(pose_file) as f: 288 | pose_3d = json.load(f) 289 | th_no_right_hand_visible.append(np.max(np.array(pose_3d['hand_right_keypoints_3d']).reshape(-1,4)[:, 3]) < HAND_VISIBLE) 290 | th_no_left_hand_visible.append(np.max(np.array(pose_3d['hand_left_keypoints_3d']).reshape(-1,4)[:, 3]) < HAND_VISIBLE) 291 | 292 | pose_3d['pose_keypoints_3d'] = torch.from_numpy(np.array(pose_3d['pose_keypoints_3d']).astype(np.float32).reshape(-1, 4)) 293 | pose_3d['face_keypoints_3d'] = torch.from_numpy(np.array(pose_3d['face_keypoints_3d']).astype(np.float32).reshape(-1, 4)) 294 | pose_3d['hand_right_keypoints_3d'] = torch.from_numpy(np.array(pose_3d['hand_right_keypoints_3d']).astype(np.float32).reshape(-1, 4)) 295 | pose_3d['hand_left_keypoints_3d'] = torch.from_numpy(np.array(pose_3d['hand_left_keypoints_3d']).astype(np.float32).reshape(-1, 4)) 296 | th_pose_3d.append(pose_3d) 297 | 298 | prior_weight = get_prior_weight(th_no_right_hand_visible,th_no_left_hand_visible).cuda() 299 | 300 | # Optimize pose first 301 | optimize_pose_only(th_scan_meshes, smpl, pose_iterations, pose_steps_per_iter, th_pose_3d, prior_weight, display=None if display is None else 0) 302 | 303 | # Optimize pose and shape 304 | optimize_pose_shape(th_scan_meshes, smpl, iterations, steps_per_iter, th_pose_3d, display=None if display is None else 0) 305 | 306 | verts, _, _, _ = smpl() 307 | th_smpl_meshes = [tm.from_tensors(vertices=v, faces=smpl.faces) for v in verts] 308 | 309 | #to get the T-pose fitted SMPL mesh 310 | # Init SMPL, pose with mean smpl pose, as in ch.registration 311 | print("Making the fitted SMPL model to T-pose") 312 | #copy the optimized smpl model and add t-pose 313 | pose_tpose = torch.zeros((batch_sz, 72)) 314 | smpl_tpose = th_batch_SMPL(batch_sz, smpl.betas, pose_tpose, trans, faces=th_faces).cuda() 315 | #re-pose it to T-pose 316 | #import torch.nn as nn 317 | #smpl_tpose.pose = nn.Parameter(torch.zeros(batch_sz, 72)) 318 | #extract vertices 319 | verts_tpose, _, _, _ = smpl_tpose() 320 | th_smpl_meshes_tpose = [tm.from_tensors(vertices=v, faces=smpl_tpose.faces) for v in verts_tpose] 321 | 322 | if save_path is not None: 323 | if not exists(save_path): 324 | os.makedirs(save_path) 325 | 326 | names = [split(s)[1] for s in scans] 327 | 328 | # Save meshes 329 | save_meshes(th_smpl_meshes, [join(save_path, n.replace('.obj', '_smpl.obj')) for n in names]) 330 | save_meshes(th_scan_meshes, [join(save_path, n) for n in names]) 331 | 332 | # Save params 333 | for p, b, t, n in zip(smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), 334 | smpl.trans.cpu().detach().numpy(), names): 335 | smpl_dict = {'pose': p, 'betas': b, 'trans': t} 336 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpl.pkl')), 'wb')) 337 | 338 | #save T-pose mesh and pkl 339 | #save mesh 340 | save_meshes(th_smpl_meshes_tpose, [join(save_path, n.replace('.obj', '_smpl_tpose.obj')) for n in names]) 341 | # Save params 342 | for p, b, t, n in zip(smpl_tpose.pose.cpu().detach().numpy(), smpl_tpose.betas.cpu().detach().numpy(), 343 | smpl_tpose.trans.cpu().detach().numpy(), names): 344 | smpl_dict = {'pose': p, 'betas': b, 'trans': t} 345 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpl_tpose.pkl')), 'wb')) 346 | print("Done saving fitted T-pose SMPL model") 347 | 348 | return smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), smpl.trans.cpu().detach().numpy() 349 | 350 | 351 | if __name__ == "__main__": 352 | import argparse 353 | parser = argparse.ArgumentParser(description='Run Model') 354 | parser.add_argument('-scan_path', type=str) 355 | parser.add_argument('-pose_file', type=str, default=None) 356 | parser.add_argument('-save_path', type=str) 357 | parser.add_argument('-gender', type=str, default='male') # can be female 358 | parser.add_argument('--display', default=False, action='store_true') 359 | args = parser.parse_args() 360 | 361 | # args = lambda: None 362 | # args.scan_path = '/BS/bharat-2/static00/renderings/renderpeople/rp_alison_posed_017_30k/rp_alison_posed_017_30k.obj' 363 | # args.pose_file = '/BS/bharat-2/static00/renderings/renderpeople/rp_alison_posed_017_30k/pose3d/rp_alison_posed_017_30k.json' 364 | # args.display = False 365 | # args.save_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data' 366 | # args.gender = 'female' 367 | 368 | _, _, _ = fit_SMPL([args.scan_path], pose_files = args.pose_file, display=args.display, save_path=args.save_path, gender=args.gender) 369 | -------------------------------------------------------------------------------- /fit_SMPLD.py: -------------------------------------------------------------------------------- 1 | """ 2 | This code optimizes the offsets on top of SMPL. 3 | If code works: 4 | Author: Bharat 5 | else: 6 | Author: Anonymous 7 | Cite: Combining Implicit Function Learning and Parametric Models for 3D Human Reconstruction, ECCV 2020. 8 | """ 9 | import os 10 | from os.path import split, join, exists 11 | from glob import glob 12 | import torch 13 | from kaolin.rep import TriangleMesh as tm 14 | from kaolin.metrics.mesh import point_to_surface, laplacian_loss 15 | 16 | from tqdm import tqdm 17 | import pickle as pkl 18 | import numpy as np 19 | 20 | 21 | import sys 22 | sys.path.append('../lib/') 23 | from lib.smpl_paths import SmplPaths 24 | from lib.th_SMPL import th_batch_SMPL 25 | 26 | from fit_SMPL import fit_SMPL, save_meshes, batch_point_to_surface, backward_step 27 | 28 | 29 | def get_loss_weights(): 30 | """Set loss weights""" 31 | 32 | loss_weight = {'s2m': lambda cst, it: 10. ** 2 * cst * (1 + it), 33 | 'm2s': lambda cst, it: 10. ** 2 * cst, #/ (1 + it), 34 | 'lap': lambda cst, it: 10. ** 4 * cst / (1 + it), 35 | 'offsets': lambda cst, it: 10. ** 1 * cst / (1 + it)} 36 | return loss_weight 37 | 38 | 39 | def forward_step(th_scan_meshes, smpl, init_smpl_meshes): 40 | """ 41 | Performs a forward step, given smpl and scan meshes. 42 | Then computes the losses. 43 | """ 44 | 45 | # forward 46 | verts, _, _, _ = smpl() 47 | th_smpl_meshes = [tm.from_tensors(vertices=v, 48 | faces=smpl.faces) for v in verts] 49 | 50 | # losses 51 | loss = dict() 52 | loss['s2m'] = batch_point_to_surface([sm.vertices for sm in th_scan_meshes], th_smpl_meshes) 53 | loss['m2s'] = batch_point_to_surface([sm.vertices for sm in th_smpl_meshes], th_scan_meshes) 54 | loss['lap'] = torch.stack([laplacian_loss(sc, sm) for sc, sm in zip(init_smpl_meshes, th_smpl_meshes)]) 55 | loss['offsets'] = torch.mean(torch.mean(smpl.offsets**2, axis=1), axis=1) 56 | return loss 57 | 58 | 59 | def optimize_offsets(th_scan_meshes, smpl, init_smpl_meshes, iterations, steps_per_iter): 60 | # Optimizer 61 | optimizer = torch.optim.Adam([smpl.offsets, smpl.pose, smpl.trans, smpl.betas], 0.005, betas=(0.9, 0.999)) 62 | 63 | # Get loss_weights 64 | weight_dict = get_loss_weights() 65 | 66 | for it in range(iterations): 67 | loop = tqdm(range(steps_per_iter)) 68 | loop.set_description('Optimizing SMPL+D') 69 | for i in loop: 70 | optimizer.zero_grad() 71 | # Get losses for a forward pass 72 | loss_dict = forward_step(th_scan_meshes, smpl, init_smpl_meshes) 73 | # Get total loss for backward pass 74 | tot_loss = backward_step(loss_dict, weight_dict, it) 75 | tot_loss.backward() 76 | optimizer.step() 77 | 78 | l_str = 'Lx100. Iter: {}'.format(i) 79 | for k in loss_dict: 80 | l_str += ', {}: {:0.4f}'.format(k, loss_dict[k].mean().item()*100) 81 | loop.set_description(l_str) 82 | 83 | 84 | def fit_SMPLD(scans, smpl_pkl=None, gender='male', save_path=None, display=False): 85 | # Get SMPL faces 86 | sp = SmplPaths(gender=gender) 87 | smpl_faces = sp.get_faces() 88 | th_faces = torch.tensor(smpl_faces.astype('float32'), dtype=torch.long).cuda() 89 | 90 | # Batch size 91 | batch_sz = len(scans) 92 | 93 | # Init SMPL 94 | if smpl_pkl is None or smpl_pkl[0] is None: 95 | print('SMPL not specified, fitting SMPL now') 96 | pose, betas, trans = fit_SMPL(scans, None, gender, save_path, display) 97 | else: 98 | pose, betas, trans = [], [], [] 99 | for spkl in smpl_pkl: 100 | smpl_dict = pkl.load(open(spkl, 'rb'), encoding='latin-1') 101 | p, b, t = smpl_dict['pose'], smpl_dict['betas'], smpl_dict['trans'] 102 | pose.append(p) 103 | if len(b) == 10: 104 | temp = np.zeros((300,)) 105 | temp[:10] = b 106 | b = temp.astype('float32') 107 | betas.append(b) 108 | trans.append(t) 109 | pose, betas, trans = np.array(pose), np.array(betas), np.array(trans) 110 | 111 | betas, pose, trans = torch.tensor(betas), torch.tensor(pose), torch.tensor(trans) 112 | smpl = th_batch_SMPL(batch_sz, betas, pose, trans, faces=th_faces).cuda() 113 | 114 | verts, _, _, _ = smpl() 115 | init_smpl_meshes = [tm.from_tensors(vertices=v.clone().detach(), 116 | faces=smpl.faces) for v in verts] 117 | 118 | # Load scans 119 | th_scan_meshes = [] 120 | for scan in scans: 121 | th_scan = tm.from_obj(scan) 122 | if save_path is not None: 123 | th_scan.save_mesh(join(save_path, split(scan)[1])) 124 | th_scan.vertices = th_scan.vertices.cuda() 125 | th_scan.faces = th_scan.faces.cuda() 126 | th_scan.vertices.requires_grad = False 127 | th_scan_meshes.append(th_scan) 128 | 129 | # Optimize 130 | optimize_offsets(th_scan_meshes, smpl, init_smpl_meshes, 5, 10) 131 | print('Done') 132 | 133 | verts, _, _, _ = smpl() 134 | th_smpl_meshes = [tm.from_tensors(vertices=v, 135 | faces=smpl.faces) for v in verts] 136 | 137 | #to get the T-pose fitted SMPLD mesh 138 | print("Making the fitted SMPLD model to T-pose") 139 | # Init SMPL, pose with mean smpl pose, as in ch.registration 140 | #copy the optimized smpl model and add t-pose 141 | pose_tpose = torch.zeros((batch_sz, 72)) 142 | smplD_tpose = th_batch_SMPL(batch_sz, smpl.betas, pose_tpose, trans, offsets=smpl.offsets, faces=th_faces).cuda() 143 | #re-pose it to T-pose 144 | #import torch.nn as nn 145 | #smpl_tpose.pose = nn.Parameter(torch.zeros(batch_sz, 72)) 146 | #extract vertices 147 | verts_tpose, _, _, _ = smplD_tpose() 148 | th_smplD_meshes_tpose = [tm.from_tensors(vertices=v, faces=smplD_tpose.faces) for v in verts_tpose] 149 | 150 | if save_path is not None: 151 | if not exists(save_path): 152 | os.makedirs(save_path) 153 | 154 | names = [split(s)[1] for s in scans] 155 | 156 | # Save meshes 157 | save_meshes(th_smpl_meshes, [join(save_path, n.replace('.obj', '_smpld.obj')) for n in names]) 158 | save_meshes(th_scan_meshes, [join(save_path, n) for n in names]) 159 | # Save params 160 | for p, b, t, d, n in zip(smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), 161 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy(), names): 162 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 163 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpld.pkl')), 'wb')) 164 | 165 | #save smplD meshes 166 | save_meshes(th_smplD_meshes_tpose, [join(save_path, n.replace('.obj', '_smpld_tpose.obj')) for n in names]) 167 | # Save params 168 | for p, b, t, d, n in zip(smplD_tpose.pose.cpu().detach().numpy(), smplD_tpose.betas.cpu().detach().numpy(), 169 | smplD_tpose.trans.cpu().detach().numpy(), smplD_tpose.offsets.cpu().detach().numpy(), names): 170 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 171 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.obj', '_smpld_tpose.pkl')), 'wb')) 172 | print("Done saving SMPLD") 173 | 174 | return smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), \ 175 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy() 176 | 177 | 178 | if __name__ == "__main__": 179 | import argparse 180 | parser = argparse.ArgumentParser(description='Run Model') 181 | parser.add_argument('scan_path', type=str) 182 | parser.add_argument('save_path', type=str) 183 | parser.add_argument('-smpl_pkl', type=str, default=None) # In case SMPL fit is already available 184 | parser.add_argument('-gender', type=str, default='male') # can be female/ male/ neutral 185 | parser.add_argument('--display', default=False, action='store_true') 186 | args = parser.parse_args() 187 | 188 | # args = lambda: None 189 | # args.scan_path = '/BS/bharat-2/static00/renderings/renderpeople/rp_alison_posed_017_30k/rp_alison_posed_017_30k.obj' 190 | # args.smpl_pkl = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/rp_alison_posed_017_30k_smpl.pkl' 191 | # args.display = False 192 | # args.save_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data' 193 | # args.gender = 'female' 194 | 195 | _, _, _, _ = fit_SMPLD([args.scan_path], smpl_pkl=[args.smpl_pkl], display=args.display, save_path=args.save_path, 196 | gender=args.gender) 197 | -------------------------------------------------------------------------------- /fit_SMPL_IPNet.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code to fit SMPL (pose, shape) to IPNet predictions using pytorch, kaolin. 3 | Author: Bharat 4 | Cite: Combining Implicit Function Learning and Parametric Models for 3D Human Reconstruction, ECCV 2020. 5 | """ 6 | import os 7 | from os.path import split, join, exists 8 | import sys 9 | import ipdb 10 | import json 11 | import torch 12 | import numpy as np 13 | import pickle as pkl 14 | import kaolin as kal 15 | from kaolin.rep import TriangleMesh as tm 16 | from kaolin.metrics.mesh import point_to_surface, laplacian_loss # , chamfer_distance 17 | from kaolin.conversions import trianglemesh_to_sdf 18 | from kaolin.rep import SDF as sdf 19 | from psbody.mesh import Mesh, MeshViewer, MeshViewers 20 | from tqdm import tqdm 21 | 22 | from fit_SMPL import save_meshes, backward_step 23 | from fit_SMPLD import optimize_offsets 24 | # from fit_SMPLD import forward_step as forward_step_offsets 25 | from lib.smpl_paths import SmplPaths 26 | from lib.th_smpl_prior import get_prior 27 | from lib.th_SMPL import th_batch_SMPL, th_batch_SMPL_split_params 28 | from lib.mesh_distance import chamfer_distance, batch_point_to_surface 29 | from lib.body_objectives import batch_get_pose_obj 30 | 31 | NUM_PARTS = 14 # number of parts that the smpl is segmented into. 32 | 33 | 34 | def get_loss_weights(): 35 | """Set loss weights""" 36 | 37 | loss_weight = {'s2m': lambda cst, it: 10. ** 2 * cst * (1 + it), 38 | 'm2s': lambda cst, it: 10. ** 2 * cst / (1 + it), 39 | 'betas': lambda cst, it: 10. ** 0 * cst / (1 + it), 40 | 'offsets': lambda cst, it: 10. ** -1 * cst / (1 + it), 41 | 'pose_pr': lambda cst, it: 10. ** -5 * cst / (1 + it), 42 | 'lap': lambda cst, it: cst / (1 + it), 43 | 'part': lambda cst, it: 10. ** 2 * cst / (1 + it) 44 | } 45 | return loss_weight 46 | 47 | 48 | def forward_step(th_scan_meshes, smpl, scan_part_labels, smpl_part_labels): 49 | """ 50 | Performs a forward step, given smpl and scan meshes. 51 | Then computes the losses. 52 | """ 53 | # Get pose prior 54 | prior = get_prior(smpl.gender, precomputed=True) 55 | 56 | # forward 57 | verts, _, _, _ = smpl() 58 | th_smpl_meshes = [tm.from_tensors(vertices=v, 59 | faces=smpl.faces) for v in verts] 60 | 61 | scan_verts = [sm.vertices for sm in th_scan_meshes] 62 | smpl_verts = [sm.vertices for sm in th_smpl_meshes] 63 | 64 | # losses 65 | loss = dict() 66 | loss['s2m'] = batch_point_to_surface(scan_verts, th_smpl_meshes) 67 | loss['m2s'] = batch_point_to_surface(smpl_verts, th_scan_meshes) 68 | loss['betas'] = torch.mean(smpl.betas ** 2, axis=1) 69 | loss['pose_pr'] = prior(smpl.pose) 70 | 71 | loss['part'] = [] 72 | for n, (sc_v, sc_l) in enumerate(zip(scan_verts, scan_part_labels)): 73 | tot = 0 74 | for i in range(NUM_PARTS): # we currently use 14 parts 75 | if i not in sc_l: 76 | continue 77 | ind = torch.where(sc_l == i)[0] 78 | sc_part_points = sc_v[ind].unsqueeze(0) 79 | sm_part_points = smpl_verts[n][torch.where(smpl_part_labels[n] == i)[0]].unsqueeze(0) 80 | dist = chamfer_distance(sc_part_points, sm_part_points, w1=1., w2=1.) 81 | tot += dist 82 | loss['part'].append(tot / NUM_PARTS) 83 | loss['part'] = torch.stack(loss['part']) 84 | return loss 85 | 86 | 87 | def optimize_pose_shape(th_scan_meshes, smpl, iterations, steps_per_iter, scan_part_labels, smpl_part_labels, 88 | display=None): 89 | """ 90 | Optimize SMPL. 91 | :param display: if not None, pass index of the scan in th_scan_meshes to visualize. 92 | """ 93 | # Optimizer 94 | optimizer = torch.optim.Adam([smpl.trans, smpl.betas, smpl.pose], 0.02, betas=(0.9, 0.999)) 95 | 96 | # Get loss_weights 97 | weight_dict = get_loss_weights() 98 | 99 | # Display 100 | if display is not None: 101 | assert int(display) < len(th_scan_meshes) 102 | mv = MeshViewer() 103 | 104 | for it in range(iterations): 105 | loop = tqdm(range(steps_per_iter)) 106 | loop.set_description('Optimizing SMPL') 107 | for i in loop: 108 | optimizer.zero_grad() 109 | # Get losses for a forward pass 110 | loss_dict = forward_step(th_scan_meshes, smpl, scan_part_labels, smpl_part_labels) 111 | # Get total loss for backward pass 112 | tot_loss = backward_step(loss_dict, weight_dict, it) 113 | tot_loss.backward() 114 | optimizer.step() 115 | 116 | l_str = 'Iter: {}'.format(i) 117 | for k in loss_dict: 118 | l_str += ', {}: {:0.4f}'.format(k, weight_dict[k](loss_dict[k], it).mean().item()) 119 | loop.set_description(l_str) 120 | 121 | if display is not None: 122 | verts, _, _, _ = smpl() 123 | smpl_mesh = Mesh(v=verts[display].cpu().detach().numpy(), f=smpl.faces.cpu().numpy()) 124 | scan_mesh = Mesh(v=th_scan_meshes[display].vertices.cpu().detach().numpy(), 125 | f=th_scan_meshes[display].faces.cpu().numpy(), vc=np.array([0, 1, 0])) 126 | scan_mesh.set_vertex_colors_from_weights(scan_part_labels[display].cpu().detach().numpy()) 127 | mv.set_static_meshes([scan_mesh, smpl_mesh]) 128 | 129 | print('** Optimised smpl pose and shape **') 130 | 131 | 132 | def optimize_pose_only(th_scan_meshes, smpl, iterations, steps_per_iter, scan_part_labels, smpl_part_labels, 133 | display=None): 134 | """ 135 | Initially we want to only optimize the global rotation of SMPL. Next we optimize full pose. 136 | We optimize pose based on the 3D keypoints in th_pose_3d. 137 | :param th_pose_3d: array containing the 3D keypoints. 138 | """ 139 | 140 | batch_sz = smpl.pose.shape[0] 141 | split_smpl = th_batch_SMPL_split_params(batch_sz, top_betas=smpl.betas.data[:, :2], 142 | other_betas=smpl.betas.data[:, 2:], 143 | global_pose=smpl.pose.data[:, :3], other_pose=smpl.pose.data[:, 3:], 144 | faces=smpl.faces, gender=smpl.gender).to(DEVICE) 145 | optimizer = torch.optim.Adam([split_smpl.trans, split_smpl.top_betas, split_smpl.global_pose], 0.02, 146 | betas=(0.9, 0.999)) 147 | 148 | # Get loss_weights 149 | weight_dict = get_loss_weights() 150 | 151 | if display is not None: 152 | assert int(display) < len(th_scan_meshes) 153 | # mvs = MeshViewers((1,1)) 154 | mv = MeshViewer(keepalive=True) 155 | 156 | iter_for_global = 1 157 | for it in range(iter_for_global + iterations): 158 | loop = tqdm(range(steps_per_iter)) 159 | if it < iter_for_global: 160 | # Optimize global orientation 161 | print('Optimizing SMPL global orientation') 162 | loop.set_description('Optimizing SMPL global orientation') 163 | elif it == iter_for_global: 164 | # Now optimize full SMPL pose 165 | print('Optimizing SMPL pose only') 166 | loop.set_description('Optimizing SMPL pose only') 167 | optimizer = torch.optim.Adam([split_smpl.trans, split_smpl.top_betas, split_smpl.global_pose, 168 | split_smpl.other_pose], 0.02, betas=(0.9, 0.999)) 169 | else: 170 | loop.set_description('Optimizing SMPL pose only') 171 | 172 | for i in loop: 173 | optimizer.zero_grad() 174 | # Get losses for a forward pass 175 | loss_dict = forward_step(th_scan_meshes, split_smpl, scan_part_labels, smpl_part_labels) 176 | # Get total loss for backward pass 177 | tot_loss = backward_step(loss_dict, weight_dict, it) 178 | tot_loss.backward() 179 | optimizer.step() 180 | 181 | l_str = 'Iter: {}'.format(i) 182 | for k in loss_dict: 183 | l_str += ', {}: {:0.4f}'.format(k, weight_dict[k](loss_dict[k], it).mean().item()) 184 | loop.set_description(l_str) 185 | 186 | if display is not None: 187 | verts, _, _, _ = split_smpl() 188 | smpl_mesh = Mesh(v=verts[display].cpu().detach().numpy(), f=smpl.faces.cpu().numpy()) 189 | scan_mesh = Mesh(v=th_scan_meshes[display].vertices.cpu().detach().numpy(), 190 | f=th_scan_meshes[display].faces.cpu().numpy(), vc=np.array([0, 1, 0])) 191 | scan_mesh.set_vertex_colors_from_weights(scan_part_labels[display].cpu().detach().numpy()) 192 | 193 | mv.set_dynamic_meshes([smpl_mesh, scan_mesh]) 194 | 195 | # Put back pose, shape and trans into original smpl 196 | smpl.pose.data = split_smpl.pose.data 197 | smpl.betas.data = split_smpl.betas.data 198 | smpl.trans.data = split_smpl.trans.data 199 | 200 | print('** Optimised smpl pose **') 201 | 202 | 203 | def fit_SMPL(scans, scan_labels, gender='male', save_path=None, scale_file=None, display=None): 204 | """ 205 | :param save_path: 206 | :param scans: list of scan paths 207 | :param pose_files: 208 | :return: 209 | """ 210 | # Get SMPL faces 211 | sp = SmplPaths(gender=gender) 212 | smpl_faces = sp.get_faces() 213 | th_faces = torch.tensor(smpl_faces.astype('float32'), dtype=torch.long).to(DEVICE) 214 | 215 | # Load SMPL parts 216 | part_labels = pkl.load(open('./assets/smpl_parts_dense.pkl', 'rb')) 217 | labels = np.zeros((6890,), dtype='int32') 218 | for n, k in enumerate(part_labels): 219 | labels[part_labels[k]] = n 220 | labels = torch.tensor(labels).unsqueeze(0).to(DEVICE) 221 | 222 | # Load scan parts 223 | scan_part_labels = [] 224 | for sc_l in scan_labels: 225 | temp = torch.tensor(np.load(sc_l).astype('int32')).to(DEVICE) 226 | scan_part_labels.append(temp) 227 | 228 | # Batch size 229 | batch_sz = len(scans) 230 | 231 | # Set optimization hyper parameters 232 | iterations, pose_iterations, steps_per_iter, pose_steps_per_iter = 3, 2, 30, 30 233 | 234 | prior = get_prior(gender=gender, precomputed=True) 235 | pose_init = torch.zeros((batch_sz, 72)) 236 | pose_init[:, 3:] = prior.mean 237 | betas, pose, trans = torch.zeros((batch_sz, 300)), pose_init, torch.zeros((batch_sz, 3)) 238 | 239 | # Init SMPL, pose with mean smpl pose, as in ch.registration 240 | smpl = th_batch_SMPL(batch_sz, betas, pose, trans, faces=th_faces).to(DEVICE) 241 | smpl_part_labels = torch.cat([labels] * batch_sz, axis=0) 242 | 243 | th_scan_meshes, centers = [], [] 244 | for scan in scans: 245 | print('scan path ...', scan) 246 | temp = Mesh(filename=scan) 247 | th_scan = tm.from_tensors(torch.tensor(temp.v.astype('float32'), requires_grad=False, device=DEVICE), 248 | torch.tensor(temp.f.astype('int32'), requires_grad=False, device=DEVICE).long()) 249 | th_scan_meshes.append(th_scan) 250 | 251 | if scale_file is not None: 252 | for n, sc in enumerate(scale_file): 253 | dat = np.load(sc, allow_pickle=True) 254 | th_scan_meshes[n].vertices += torch.tensor(dat[1]).to(DEVICE) 255 | th_scan_meshes[n].vertices *= torch.tensor(dat[0]).to(DEVICE) 256 | 257 | # Optimize pose first 258 | optimize_pose_only(th_scan_meshes, smpl, pose_iterations, pose_steps_per_iter, scan_part_labels, smpl_part_labels, 259 | display=None if display is None else 0) 260 | 261 | # Optimize pose and shape 262 | optimize_pose_shape(th_scan_meshes, smpl, iterations, steps_per_iter, scan_part_labels, smpl_part_labels, 263 | display=None if display is None else 0) 264 | 265 | verts, _, _, _ = smpl() 266 | th_smpl_meshes = [tm.from_tensors(vertices=v, faces=smpl.faces) for v in verts] 267 | 268 | if save_path is not None: 269 | if not exists(save_path): 270 | os.makedirs(save_path) 271 | 272 | names = [split(s)[1] for s in scans] 273 | 274 | # Save meshes 275 | save_meshes(th_smpl_meshes, [join(save_path, n.replace('.ply', '_smpl.obj')) for n in names]) 276 | save_meshes(th_scan_meshes, [join(save_path, n) for n in names]) 277 | 278 | # Save params 279 | for p, b, t, n in zip(smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), 280 | smpl.trans.cpu().detach().numpy(), names): 281 | smpl_dict = {'pose': p, 'betas': b, 'trans': t} 282 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.ply', '_smpl.pkl')), 'wb')) 283 | 284 | return smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), smpl.trans.cpu().detach().numpy() 285 | 286 | 287 | def fit_SMPLD(scans, smpl_pkl, gender='male', save_path=None, scale_file=None): 288 | # Get SMPL faces 289 | sp = SmplPaths(gender=gender) 290 | smpl_faces = sp.get_faces() 291 | th_faces = torch.tensor(smpl_faces.astype('float32'), dtype=torch.long).cuda() 292 | 293 | # Batch size 294 | batch_sz = len(scans) 295 | 296 | # Init SMPL 297 | pose, betas, trans = [], [], [] 298 | for spkl in smpl_pkl: 299 | smpl_dict = pkl.load(open(spkl, 'rb')) 300 | p, b, t = smpl_dict['pose'], smpl_dict['betas'], smpl_dict['trans'] 301 | pose.append(p) 302 | if len(b) == 10: 303 | temp = np.zeros((300,)) 304 | temp[:10] = b 305 | b = temp.astype('float32') 306 | betas.append(b) 307 | trans.append(t) 308 | pose, betas, trans = np.array(pose), np.array(betas), np.array(trans) 309 | 310 | betas, pose, trans = torch.tensor(betas), torch.tensor(pose), torch.tensor(trans) 311 | smpl = th_batch_SMPL(batch_sz, betas, pose, trans, faces=th_faces).cuda() 312 | 313 | verts, _, _, _ = smpl() 314 | init_smpl_meshes = [tm.from_tensors(vertices=v.clone().detach(), 315 | faces=smpl.faces) for v in verts] 316 | 317 | # Load scans 318 | th_scan_meshes = [] 319 | for scan in scans: 320 | print('scan path ...', scan) 321 | temp = Mesh(filename=scan) 322 | th_scan = tm.from_tensors(torch.tensor(temp.v.astype('float32'), requires_grad=False, device=DEVICE), 323 | torch.tensor(temp.f.astype('int32'), requires_grad=False, device=DEVICE).long()) 324 | th_scan_meshes.append(th_scan) 325 | 326 | if scale_file is not None: 327 | for n, sc in enumerate(scale_file): 328 | dat = np.load(sc, allow_pickle=True) 329 | th_scan_meshes[n].vertices += torch.tensor(dat[1]).to(DEVICE) 330 | th_scan_meshes[n].vertices *= torch.tensor(dat[0]).to(DEVICE) 331 | 332 | # Optimize 333 | optimize_offsets(th_scan_meshes, smpl, init_smpl_meshes, 5, 10) 334 | print('Done') 335 | 336 | verts, _, _, _ = smpl() 337 | th_smpl_meshes = [tm.from_tensors(vertices=v, 338 | faces=smpl.faces) for v in verts] 339 | 340 | if save_path is not None: 341 | if not exists(save_path): 342 | os.makedirs(save_path) 343 | 344 | names = [split(s)[1] for s in scans] 345 | 346 | # Save meshes 347 | save_meshes(th_smpl_meshes, [join(save_path, n.replace('.ply', '_smpld.obj')) for n in names]) 348 | save_meshes(th_scan_meshes, [join(save_path, n) for n in names]) 349 | # Save params 350 | for p, b, t, d, n in zip(smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), 351 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy(), names): 352 | smpl_dict = {'pose': p, 'betas': b, 'trans': t, 'offsets': d} 353 | pkl.dump(smpl_dict, open(join(save_path, n.replace('.ply', '_smpld.pkl')), 'wb')) 354 | 355 | return smpl.pose.cpu().detach().numpy(), smpl.betas.cpu().detach().numpy(), \ 356 | smpl.trans.cpu().detach().numpy(), smpl.offsets.cpu().detach().numpy() 357 | 358 | DEVICE = 'cuda' 359 | if __name__ == "__main__": 360 | import argparse 361 | 362 | parser = argparse.ArgumentParser(description='Run Model') 363 | parser.add_argument('inner_path', type=str) # predicted by IPNet 364 | parser.add_argument('outer_path', type=str) # predicted by IPNet 365 | parser.add_argument('inner_labels', type=str) # predicted by IPNet 366 | parser.add_argument('scale_file', type=str, default=None) # obtained from utils/process_scan.py 367 | parser.add_argument('save_path', type=str) 368 | parser.add_argument('-gender', type=str, default='male') # can be female/ male/ neutral 369 | parser.add_argument('--display', default=None) 370 | args = parser.parse_args() 371 | 372 | # args = lambda: None 373 | # args.inner_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/body.ply' 374 | # args.outer_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/full.ply' 375 | # args.inner_labels = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/parts.npy' 376 | # args.scale_file = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data/cent.npy' 377 | # args.display = None 378 | # args.save_path = '/BS/bharat-3/work/IPNet/DO_NOT_RELEASE/test_data' 379 | # args.gender = 'male' 380 | 381 | _, _, _ = fit_SMPL([args.inner_path], scan_labels=[args.inner_labels], display=args.display, save_path=args.save_path, 382 | scale_file=[args.scale_file], gender=args.gender) 383 | 384 | names = [split(s)[1] for s in [args.inner_path]] 385 | smpl_pkl = [join(args.save_path, n.replace('.ply', '_smpl.pkl')) for n in names] 386 | 387 | _, _, _, _ = fit_SMPLD([args.outer_path], smpl_pkl=smpl_pkl, save_path=args.save_path, 388 | scale_file=[args.scale_file], gender=args.gender) 389 | -------------------------------------------------------------------------------- /input/decaprio/decaprio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/input/decaprio/decaprio.jpg -------------------------------------------------------------------------------- /input/decaprio/decaprio_rect.txt: -------------------------------------------------------------------------------- 1 | -552 -62 1606 1606 2 | -------------------------------------------------------------------------------- /input/suriya/IMG_3392.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/input/suriya/IMG_3392.2.jpg -------------------------------------------------------------------------------- /input/suriya/IMG_3392.2_rect.txt: -------------------------------------------------------------------------------- 1 | -944 -38 3542 3542 2 | -------------------------------------------------------------------------------- /input/test/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/input/test/test.png -------------------------------------------------------------------------------- /input/test/test_keypoints.json: -------------------------------------------------------------------------------- 1 | {"version":1.3,"people":[{"person_id":[-1],"pose_keypoints_2d":[251.14,70.0905,0.920212,249.729,121.622,0.848532,205.176,121.648,0.783397,185.738,191.227,0.800347,216.332,199.615,0.829802,294.238,120.247,0.805623,306.9,189.876,0.865557,324.944,223.301,0.823568,251.178,263.668,0.671555,226.047,265.073,0.633188,227.432,370.844,0.798983,234.42,466.968,0.718138,281.782,262.271,0.647396,295.743,372.224,0.780934,316.553,472.555,0.721108,244.17,60.3191,0.876,260.855,60.3366,0.937398,230.252,60.3082,0.947452,271.992,60.2974,0.922649,354.182,494.776,0.658449,356.96,489.211,0.639241,306.767,485.045,0.680462,226.043,483.654,0.614895,216.363,480.89,0.687368,240.024,476.682,0.642223],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"person_id":[-1],"pose_keypoints_2d":[395.944,283.101,0.888373,396.006,306.861,0.795637,372.222,306.829,0.772225,391.774,327.698,0.713164,433.532,327.688,0.73626,427.926,308.195,0.697673,443.259,347.19,0.214575,453.021,329.12,0.340148,398.738,363.94,0.583225,382.024,365.313,0.553282,380.634,383.443,0.619834,393.159,485.078,0.648966,418.185,363.89,0.574877,444.662,383.37,0.644425,462.8,473.927,0.765089,390.345,273.432,0.869964,405.621,273.465,0.888317,375.097,274.783,0.786201,418.156,277.609,0.699742,490.6,494.799,0.54446,494.758,487.844,0.580562,457.186,485.025,0.63643,395.953,496.228,0.254274,384.825,496.225,0.320764,394.565,492.017,0.421362],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]},{"person_id":[-1],"pose_keypoints_2d":[327.693,280.348,0.776371,324.912,298.466,0.448569,304.025,304.022,0.334807,0,0,0,0,0,0,348.576,295.664,0.665439,362.57,327.695,0.453743,352.798,356.962,0.209829,327.75,363.9,0.300198,312.373,365.326,0.227978,0,0,0,0,0,0,344.42,362.509,0.296135,369.462,376.432,0.0696449,0,0,0,319.326,273.359,0.772246,333.253,273.349,0.796905,308.194,276.19,0.243569,341.642,274.786,0.390684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"face_keypoints_2d":[],"hand_left_keypoints_2d":[],"hand_right_keypoints_2d":[],"pose_keypoints_3d":[],"face_keypoints_3d":[],"hand_left_keypoints_3d":[],"hand_right_keypoints_3d":[]}]} -------------------------------------------------------------------------------- /instruction.txt: -------------------------------------------------------------------------------- 1 | #create a conda environment 2 | conda create -n 3dAvatarPipeline python=3.7 3 | #depending on the cuda version (check - nvcc --version) 4 | conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch 5 | 6 | #Requirements for PIFuHD 7 | Pillow # PIL 8 | scikit-image #skimage 9 | tqdm 10 | opencv-python # cv2 11 | 12 | #For visualization 13 | trimesh 14 | PyOpenGL 15 | ffmpeg 16 | freeglut (use sudo apt-get install freeglut3-dev for ubuntu users) 17 | 18 | #Download pre-trained model 19 | sh ./scripts/download_trained_model.sh 20 | 21 | #------------------------------------------------------------------------------- 22 | #Requirements for IPNet 23 | ipdb 24 | chumpy 25 | smplpytorch 26 | 27 | cd IPNet 28 | #Install kaolin 29 | git clone --recursive https://github.com/NVIDIAGameWorks/kaolin 30 | cd kaolin 31 | git checkout v0.1 #checkout to v0.1 32 | python setup.py develop 33 | cd .. 34 | 35 | #Install MPI mesh library 36 | cd mesh 37 | sudo apt-get install libboost-dev #install boost library 38 | git clone https://github.com/MPI-IS/mesh.git 39 | BOOST_INCLUDE_DIRS=/path/to/boost/include make all #use command `whereis boost` to locate path, generally in /usr/include/boost 40 | make tests #check if installed correctly, might need to reinstall PyOpenGL if you face any errors here 41 | cd .. 42 | cd .. 43 | 44 | #Download SMPL models 45 | Create account here and accept license and download SMPL models - https://smpl.is.tue.mpg.de/ 46 | 47 | #Download checkpoints 48 | Download IPNet weights: https://datasets.d2.mpi-inf.mpg.de/IPNet2020/IPNet_p5000_01_exp_id01.zip 49 | or IPNet single surface: https://nextcloud.mpi-klsb.mpg.de/index.php/s/4nomcDH8EGwbzNi 50 | mkdir /experiments 51 | Put the downloaded weights in /experiments/ 52 | 53 | #------------------------------------------------------------------------------- 54 | #Download animations from AIST++ or AMASS and extract each frame pose parameters to .npz files 55 | Download dance animations from AIST++ here https://google.github.io/aistplusplus_dataset/download.html and extract poses for each frame to a file 56 | -------------------------------------------------------------------------------- /preprocess_img_pose.py: -------------------------------------------------------------------------------- 1 | '''cropping image and pose esimation before entering PIFuHD''' 2 | 3 | import torch 4 | import cv2 5 | import numpy as np 6 | from os import path 7 | import sys 8 | sys.path.append(path.abspath('./lightweight-human-pose-estimation.pytorch')) 9 | from models.with_mobilenet import PoseEstimationWithMobileNet 10 | from modules.keypoints import extract_keypoints, group_keypoints 11 | from modules.load_state import load_state 12 | from modules.pose import Pose, track_poses 13 | import demo 14 | import sys 15 | 16 | def get_rect(net, images, height_size): 17 | net = net.eval() 18 | 19 | stride = 8 20 | upsample_ratio = 4 21 | num_keypoints = Pose.num_kpts 22 | previous_poses = [] 23 | delay = 33 24 | for image in images: 25 | print("image:"+image) 26 | rect_path = image.replace('.%s' % (image.split('.')[-1]), '_rect.txt') 27 | #print("rect_path"+rect_path) 28 | img = cv2.imread(image, cv2.IMREAD_COLOR) 29 | orig_img = img.copy() 30 | orig_img = img.copy() 31 | heatmaps, pafs, scale, pad = demo.infer_fast(net, img, height_size, stride, upsample_ratio, cpu=True) 32 | 33 | total_keypoints_num = 0 34 | all_keypoints_by_type = [] 35 | for kpt_idx in range(num_keypoints): # 19th for bg 36 | total_keypoints_num += extract_keypoints(heatmaps[:, :, kpt_idx], all_keypoints_by_type, total_keypoints_num) 37 | 38 | pose_entries, all_keypoints = group_keypoints(all_keypoints_by_type, pafs) 39 | for kpt_id in range(all_keypoints.shape[0]): 40 | all_keypoints[kpt_id, 0] = (all_keypoints[kpt_id, 0] * stride / upsample_ratio - pad[1]) / scale 41 | all_keypoints[kpt_id, 1] = (all_keypoints[kpt_id, 1] * stride / upsample_ratio - pad[0]) / scale 42 | current_poses = [] 43 | 44 | rects = [] 45 | for n in range(len(pose_entries)): 46 | if len(pose_entries[n]) == 0: 47 | continue 48 | pose_keypoints = np.ones((num_keypoints, 2), dtype=np.int32) * -1 49 | valid_keypoints = [] 50 | for kpt_id in range(num_keypoints): 51 | if pose_entries[n][kpt_id] != -1.0: # keypoint was found 52 | pose_keypoints[kpt_id, 0] = int(all_keypoints[int(pose_entries[n][kpt_id]), 0]) 53 | pose_keypoints[kpt_id, 1] = int(all_keypoints[int(pose_entries[n][kpt_id]), 1]) 54 | valid_keypoints.append([pose_keypoints[kpt_id, 0], pose_keypoints[kpt_id, 1]]) 55 | valid_keypoints = np.array(valid_keypoints) 56 | 57 | if pose_entries[n][10] != -1.0 or pose_entries[n][13] != -1.0: 58 | pmin = valid_keypoints.min(0) 59 | pmax = valid_keypoints.max(0) 60 | 61 | center = (0.5 * (pmax[:2] + pmin[:2])).astype(int) 62 | radius = int(0.65 * max(pmax[0]-pmin[0], pmax[1]-pmin[1])) 63 | elif pose_entries[n][10] == -1.0 and pose_entries[n][13] == -1.0 and pose_entries[n][8] != -1.0 and pose_entries[n][11] != -1.0: 64 | # if leg is missing, use pelvis to get cropping 65 | center = (0.5 * (pose_keypoints[8] + pose_keypoints[11])).astype(np.int) 66 | radius = int(1.45*np.sqrt(((center[None,:] - valid_keypoints)**2).sum(1)).max(0)) 67 | center[1] += int(0.05*radius) 68 | else: 69 | center = np.array([img.shape[1]//2,img.shape[0]//2]) 70 | radius = max(img.shape[1]//2,img.shape[0]//2) 71 | 72 | x1 = center[0] - radius 73 | y1 = center[1] - radius 74 | 75 | rects.append([x1, y1, 2*radius, 2*radius]) 76 | 77 | np.savetxt(rect_path, np.array(rects), fmt='%d') 78 | 79 | net = PoseEstimationWithMobileNet() 80 | checkpoint = torch.load('./checkpoints/checkpoint_iter_370000.pth', map_location='cpu') 81 | load_state(net, checkpoint) 82 | 83 | #image_path = './pifuhd/sample_images/%s' % filename 84 | image_path = str(sys.argv[1]) 85 | #print("Input Image:"+str(image_path)) 86 | get_rect(net, [image_path], 512) 87 | -------------------------------------------------------------------------------- /run_imageimate.sh: -------------------------------------------------------------------------------- 1 | #todo: add preprocess image 2 | 3 | #run PIFUHD 4 | #Change CUDA to 'cpu' to fit pifuHD model pifuHd.apps.recon.py file line 145 5 | #add save plain mesh to recon.py 6 | python -m pifuhd.apps.simple_test -i=./input/test/ -o=./results/test -c=./checkpoints/pifuhd.pt 7 | 8 | #pre-process IPNet 9 | #make import changes to smpl_layer.py 10 | #make import changes to tensutils.py 11 | #download smpl models from here https://smpl.is.tue.mpg.de/ and put it in folder - smpl_models folder 12 | #make changes to getFaces() in smpl_paths.py 13 | #make import changes to serialization.py 14 | #change th_smpl_prior.py precomputed=True 15 | #change model path in th_smpl.py 16 | #copy fit_smpl.py, fit_SMPLD.py, animations_IPNet.py into the root of IPNet 17 | python fit_SMPL.py -scan_path=../results/test/pifuhd_final/recon/result_test_512.obj -save_path=../results/test/ipnet_results #SPML registration 18 | python fit_SMPLD.py ../results/test/pifuhd_final/recon/result_test_512.obj ../results/test/ipnet_results #SMPLD registration 19 | 20 | #run IPNet - sometimes the SMPL+D registration is better for lower epochs. It recalculated SMPL+D and optimizes with IPNet values 21 | python test_IPNet.py ../results/test/pifuhd_final/recon/result_test_512.obj experiments/IPNet_p5000_01_exp_id01/checkpoints/checkpoint_epoch_249.tar ../results/test/ipnet_results -m IPNet -batch_points=10000 22 | python fit_SMPL_IPNet.py ../results/test/ipnet_results/body.ply ../results/test/ipnet_results/full.ply ../results/test/ipnet_results/parts.npy ../results/test/ipnet_results/cent.npy ../results/test/ipnet_results/ 23 | 24 | #run animations given SMPL+Motion Capture = Calculates SMPL+D each frame 25 | python animations_IPNet.py ../results/test/pifuhd_final/recon/result_test_512.obj ../results/test/test_animations/ ../Anim_Seqs/seqs/ -smpl_pkl=../results/test/ipnet_results/result_test_512_smpl.pkl 26 | #convert meshes to fbx animations using Blender Addon - https://github.com/neverhood311/Stop-motion-OBJ 27 | -------------------------------------------------------------------------------- /screenshots/00input_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/00input_image.jpg -------------------------------------------------------------------------------- /screenshots/01pifuhd_mesh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/01pifuhd_mesh.png -------------------------------------------------------------------------------- /screenshots/03pifuhd_to_ipnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/03pifuhd_to_ipnet.png -------------------------------------------------------------------------------- /screenshots/IMG_3392.2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/IMG_3392.2.jpg -------------------------------------------------------------------------------- /screenshots/SMPLd_Fit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/SMPLd_Fit.png -------------------------------------------------------------------------------- /screenshots/pifu_to_ipnet_suriya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/pifu_to_ipnet_suriya.png -------------------------------------------------------------------------------- /screenshots/pifuhd_meshes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/pifuhd_meshes.png -------------------------------------------------------------------------------- /screenshots/suriya-fbx-2021-08-04-221707.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codesavory/IMAGEimate/6af41495c2254c851a26cfea3a3f9f2babc2e447/screenshots/suriya-fbx-2021-08-04-221707.gif -------------------------------------------------------------------------------- /test_IPNet.py: -------------------------------------------------------------------------------- 1 | """ 2 | Code to test IPNet with a pointcloud as input. To run IPNet on entire dataset see generate.py 3 | Author: Bharat 4 | Cite: Combining Implicit Function Learning and Parametric Models for 3D Human Reconstruction, ECCV 2020. 5 | """ 6 | 7 | import torch 8 | import models.local_model_body_full as model 9 | import numpy as np 10 | import argparse 11 | from utils.preprocess_scan import func 12 | from utils.voxelized_pointcloud_sampling import voxelize 13 | from models.generator import GeneratorIPNet, GeneratorIPNetMano, Generator 14 | import trimesh 15 | import os 16 | from os.path import join, split, exists 17 | from utils.preprocess_scan import SCALE, new_cent 18 | 19 | 20 | def pc2vox(pc, res): 21 | """Convert PC to voxels for IPNet""" 22 | # preprocess the pointcloud 23 | pc, scale, cent = func(pc) 24 | vox = voxelize(pc, res) 25 | return vox, scale, cent 26 | 27 | 28 | def main(args): 29 | # Load PC 30 | pc = trimesh.load(args.pc) 31 | pc_vox, scale, cent = pc2vox(pc.vertices, args.res) 32 | pc_vox = np.reshape(pc_vox, (args.res,) * 3).astype('float32') 33 | 34 | print("Batch Points", args.batch_points) 35 | # save scale file 36 | from utils.preprocess_scan import SCALE, new_cent 37 | print("args.out_path", args.out_path) 38 | np.save(join(args.out_path, 'cent.npy'), [scale / SCALE, (cent - new_cent)]) 39 | print("created cent.npy") 40 | np.warnings.filterwarnings('error', category=np.VisibleDeprecationWarning) 41 | # Load network 42 | if args.model == 'IPNet': 43 | print("IPNET LOADER") 44 | net = model.IPNet(hidden_dim=args.decoder_hidden_dim, num_parts=14) 45 | print("Created Net") 46 | gen = GeneratorIPNet(net, 0.5, exp_name=None, resolution=args.retrieval_res, 47 | batch_points=args.batch_points) 48 | print("Created Generator") 49 | elif args.model == 'IPNetMano': 50 | net = model.IPNetMano(hidden_dim=args.decoder_hidden_dim, num_parts=7) 51 | gen = GeneratorIPNetMano(net, 0.5, exp_name=None, resolution=args.retrieval_res, 52 | batch_points=args.batch_points) 53 | elif args.model == 'IPNetSingleSurface': 54 | net = model.IPNetSingleSurface(hidden_dim=args.decoder_hidden_dim, num_parts=14) 55 | gen = Generator(net, 0.5, exp_name=None, resolution=args.retrieval_res, 56 | batch_points=args.batch_points) 57 | else: 58 | print('Wow watch where u goin\' with that model') 59 | exit() 60 | 61 | # Load weights 62 | print('Loading weights from,', args.weights) 63 | checkpoint_ = torch.load(args.weights) 64 | net.load_state_dict(checkpoint_['model_state_dict']) 65 | 66 | # Run IPNet and Save 67 | if not os.path.exists(args.out_path): 68 | os.makedirs(args.out_path) 69 | 70 | data = {'inputs': torch.tensor(pc_vox[np.newaxis])} # add a batch dimension 71 | if args.model == 'IPNet': 72 | full, body, parts = gen.generate_meshs_all_parts(data) 73 | body.set_vertex_colors_from_weights(parts) 74 | body.write_ply(args.out_path + '/body.ply') 75 | np.save(args.out_path + '/parts.npy', parts) 76 | 77 | elif args.model == 'IPNetMano': 78 | full, parts = gen.generate_meshs_all_parts(data) 79 | np.save(args.out_path + '/parts.npy', parts) 80 | 81 | elif args.model == 'IPNetSingleSurface': 82 | full = gen.generate_mesh_all(data) 83 | 84 | full.write_ply(args.out_path + '/full.ply') 85 | 86 | 87 | if __name__ == "__main__": 88 | parser = argparse.ArgumentParser(description='Run Model') 89 | # Path to PC mesh 90 | parser.add_argument('pc', type=str) 91 | # path to pretrained weights 92 | parser.add_argument('weights', type=str) 93 | # path to save result 94 | parser.add_argument('out_path', type=str) 95 | # the resolution of the input 96 | parser.add_argument('-res', default=128, type=int) 97 | # keep this fixed 98 | parser.add_argument('-h_dim', '--decoder_hidden_dim', default=256, type=int) 99 | # number of points queried for to produce the result 100 | parser.add_argument('-retrieval_res', default=256, type=int) 101 | # number of points from the querey grid which are put into the batch at once 102 | parser.add_argument('-batch_points', default=300000, type=int) 103 | # which model to use, e.g. "-m IPNet" 104 | parser.add_argument('-m', '--model', default='IPNetSingleSurface', type=str) 105 | args = parser.parse_args() 106 | 107 | # args = lambda: None 108 | # args.pc = 'assets/scan.obj' 109 | # args.weights = 'experiments/IPNet_p5000_01_exp_id01/checkpoints/checkpoint_epoch_249.tar' 110 | # args.out_path = 'DO_NOT_RELEASE/test_data' 111 | # args.res = 128 112 | # args.decoder_hidden_dim = 256 113 | # args.retrieval_res = 256 114 | # args.batch_points = 250000 115 | # args.model = 'IPNet' 116 | 117 | main(args) 118 | 119 | 120 | """ 121 | python test_IPNet.py -m IPNetSingleSurface 122 | """ 123 | --------------------------------------------------------------------------------