diff --git a/download_resource.bat b/download_resource.bat index 59620fd..2923f4e 100644 --- a/download_resource.bat +++ b/download_resource.bat @@ -32,6 +32,11 @@ REM 安装gdown python -m pip install --upgrade pip python -m pip install gdown +REM 添加目录存在性检查 +if not exist "%PROJECT_DIR%\ext" mkdir "%PROJECT_DIR%\ext" +if not exist "%PROJECT_DIR%\cache" mkdir "%PROJECT_DIR%\cache" +if not exist "%PROJECT_DIR%\resource" mkdir "%PROJECT_DIR%\resource" + REM 下载 NeuralHaircut 模型文件 cd "%PROJECT_DIR%\resource\NeuralHaircut" python -m gdown --folder https://drive.google.com/drive/folders/1TCdJ0CKR3Q6LviovndOkJaKm8S1T9F_8 diff --git a/install.bat b/install.bat index e7a69be..d31bfd7 100644 --- a/install.bat +++ b/install.bat @@ -1,18 +1,18 @@ @echo off -REM 设置环境变量 -SET CUDA_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8" -SET PATH="%CUDA_HOME%\bin;%PATH%" -SET BLENDER_DIR="C:\Program Files\Blender Foundation\Blender 3.6" -SET VS_DIR="C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools" -SET VS_VCVARS="%VS_DIR%\VC\Auxiliary\Build\vcvars64.bat" -SET PROJECT_DIR=%~dp0 -SET MICROMAMBA_EXE=%~dp0micromamba.exe -SET MAMBA_ROOT_PREFIX=%PROJECT_DIR%\micromamba -SET PYTHONDONTWRITEBYTECODE=1 -SET GDOWN_CACHE=cache\gdown -SET TORCH_HOME=cache\torch -SET HF_HOME=cache\huggingface +REM 统一环境变量设置格式 +set "PROJECT_DIR=%~dp0" +set "CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8" +set "PATH=%CUDA_HOME%\bin;%PATH%" +set "BLENDER_DIR=C:\Program Files\Blender Foundation\Blender 3.6" +set "VS_DIR=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools" +set "VS_VCVARS=%VS_DIR%\VC\Auxiliary\Build\vcvars64.bat" +set "MICROMAMBA_EXE=%PROJECT_DIR%micromamba.exe" +set "MAMBA_ROOT_PREFIX=%PROJECT_DIR%micromamba" +set "PYTHONDONTWRITEBYTECODE=1" +set "GDOWN_CACHE=%PROJECT_DIR%\cache\gdown" +set "TORCH_HOME=%PROJECT_DIR%\cache\torch" +set "HF_HOME=%PROJECT_DIR%\cache\huggingface" REM 拉取所有外部库 mkdir ext @@ -52,14 +52,11 @@ REM 创建 OpenPose 环境 %MICROMAMBA_EXE% create -y -p %MAMBA_ROOT_PREFIX%\envs\openpose python=3.9 CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\openpose pip install -r requirements_openpose.txt -CALL %MICROMAMBA_EXE% deactivate - REM 从resource文件夹拷贝Neural Haircut文件 xcopy /E /I /Y %PROJECT_DIR%\resource\NeuralHaircut %PROJECT_DIR%\ext\NeuralHaircut xcopy /E /I /Y %PROJECT_DIR%\resource\hyperIQA\pretrained %PROJECT_DIR%\ext\hyperIQA\pretrained cd %PROJECT_DIR% - -REM 退出环境 +REM 退出 OpenPose 环境 CALL %MICROMAMBA_EXE% deactivate REM Matte-Anything @@ -113,7 +110,6 @@ CALL %MICROMAMBA_EXE% deactivate REM PIXIE cd %PROJECT_DIR%\ext && git clone https://github.com/yfeng95/PIXIE cd %PROJECT_DIR%\ext\PIXIE - REM 创建data目录 mkdir data 2>nul cd data diff --git a/requirements.txt b/requirements.txt index e08742b..4d022ee 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,4 +37,10 @@ resize-right==0.0.2 -e ./ext/NeuralHaircut/npbgpp -e ./ext/simple-knn -e ./ext/diff_gaussian_rasterization_hair --e ./ext/kaolin \ No newline at end of file +-e ./ext/kaolin + +# Development tools +pytest +black +flake8 +ipython \ No newline at end of file diff --git a/run.bat b/run.bat index 81aa267..f40cf57 100644 --- a/run.bat +++ b/run.bat @@ -11,6 +11,7 @@ SET EXP_NAME_2=stage2 SET EXP_NAME_3=stage3 SET BLENDER_DIR="C:\Program Files\Blender Foundation\Blender 3.6" SET CUDA_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8" +set "PATH=%CUDA_HOME%\bin;%PATH%" REM 确保以下环境变量可用: REM PROJECT_DIR 和 DATA_PATH @@ -54,7 +55,7 @@ REM 添加进度显示 echo [1/3] 预处理阶段开始... REM 将原始图像整理成3D Gaussian Splatting格式 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python preprocess_raw_images.py --data_path %DATA_PATH% @@ -64,7 +65,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行COLMAP重建并去畸变图像和相机 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair pushd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python convert.py -s %DATA_PATH% --camera %CAMERA% --max_size 1024 @@ -75,7 +76,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行Matte-Anything -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\matte_anything +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\matte_anything cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python calc_masks.py --data_path %DATA_PATH% --image_format png --max_size 2048 @@ -85,7 +86,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 使用IQA分数过滤图像 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python filter_extra_images.py --data_path %DATA_PATH% --max_imgs 128 @@ -95,7 +96,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 调整图像大小 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python resize_images.py --data_path %DATA_PATH% @@ -105,7 +106,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 计算方向图 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python calc_orientation_maps.py --img_path %DATA_PATH%\images_2 --mask_path %DATA_PATH%\masks_2\hair --orient_dir %DATA_PATH%\orientations_2\angles --conf_dir %DATA_PATH%\orientations_2\vars --filtered_img_dir %DATA_PATH%\orientations_2\filtered_imgs --vis_img_dir %DATA_PATH%\orientations_2\vis_imgs @@ -115,7 +116,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行OpenPose -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\openpose +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\openpose cd %PROJECT_DIR%\ext\openpose mkdir %DATA_PATH%\openpose set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% @@ -126,7 +127,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行Face-Alignment -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python calc_face_alignment.py --data_path %DATA_PATH% --image_dir "images_4" @@ -136,7 +137,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行PIXIE -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\pixie-env +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\pixie-env cd %PROJECT_DIR%\ext\PIXIE set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python demos\demo_fit_face.py -i %DATA_PATH%\images_4 -s %DATA_PATH%\pixie --saveParam True --lightTex False --useTex False --rasterizer_type pytorch3d @@ -146,7 +147,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 合并所有PIXIE预测到单个文件 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python merge_smplx_predictions.py --data_path %DATA_PATH% @@ -156,7 +157,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 将COLMAP相机转换为txt -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair mkdir %DATA_PATH%\sparse_txt set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% colmap model_converter --input_path %DATA_PATH%\sparse\0 --output_path %DATA_PATH%\sparse_txt --output_type TXT @@ -166,7 +167,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 将COLMAP相机转换为H3DS格式 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python colmap_parsing.py --path_to_scene %DATA_PATH% @@ -195,7 +196,7 @@ echo [2/3] 重建阶段开始... set EXP_PATH_1=%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1% REM 运行3D Gaussian Splatting重建 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python train_gaussians.py -s %DATA_PATH% -m "%EXP_PATH_1%" -r 1 --port "888%CUDA_VISIBLE_DEVICES%" --trainable_cameras --trainable_intrinsics --use_barf --lambda_dorient 0.1 @@ -205,7 +206,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行FLAME网格拟合 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\ext\NeuralHaircut\src\multiview_optimization set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% @@ -228,7 +229,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 裁剪重建的场景 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python scale_scene_into_sphere.py --path_to_data %DATA_PATH% -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" --iter 30000 @@ -238,7 +239,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 移除与FLAME头部网格相交的头发高斯体 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python filter_flame_intersections.py --flame_mesh_dir %DATA_PATH%\flame_fitting\%EXP_NAME_1% -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" --iter 30000 --project_dir %PROJECT_DIR%\ext\NeuralHaircut @@ -248,7 +249,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 为训练视图运行渲染 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python render_gaussians.py -s %DATA_PATH% -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" --skip_test --scene_suffix "_cropped" --iteration 30000 --trainable_cameras --trainable_intrinsics --use_barf @@ -258,7 +259,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 获取FLAME网格头皮图 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python extract_non_visible_head_scalp.py --project_dir %PROJECT_DIR%\ext\NeuralHaircut --data_dir %DATA_PATH% --flame_mesh_dir %DATA_PATH%\flame_fitting\%EXP_NAME_1% --cams_path %DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%\cameras\30000_matrices.pkl -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" @@ -268,7 +269,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行潜在头发股线重建 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python train_latent_strands.py -s %DATA_PATH% -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" -r 1 --model_path_hair "%DATA_PATH%\strands_reconstruction\%EXP_NAME_2%" --flame_mesh_dir "%DATA_PATH%\flame_fitting\%EXP_NAME_1%" --pointcloud_path_head "%EXP_PATH_1%\point_cloud_filtered\iteration_30000\raw_point_cloud.ply" --hair_conf_path "%PROJECT_DIR%\src\arguments\hair_strands_textured.yaml" --lambda_dmask 0.1 --lambda_dorient 0.1 --lambda_dsds 0.01 --load_synthetic_rgba --load_synthetic_geom --binarize_masks --iteration_data 30000 --trainable_cameras --trainable_intrinsics --use_barf --iterations 20000 --port "800%CUDA_VISIBLE_DEVICES%" @@ -278,7 +279,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 运行头发股线重建 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python train_strands.py -s %DATA_PATH% -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" -r 1 --model_path_curves "%DATA_PATH%\curves_reconstruction\%EXP_NAME_3%" --flame_mesh_dir "%DATA_PATH%\flame_fitting\%EXP_NAME_1%" --pointcloud_path_head "%EXP_PATH_1%\point_cloud_filtered\iteration_30000\raw_point_cloud.ply" --start_checkpoint_hair "%DATA_PATH%\strands_reconstruction\%EXP_NAME_2%\checkpoints\20000.pth" --hair_conf_path "%PROJECT_DIR%\src\arguments\hair_strands_textured.yaml" --lambda_dmask 0.1 --lambda_dorient 0.1 --lambda_dsds 0.01 --load_synthetic_rgba --load_synthetic_geom --binarize_masks --iteration_data 30000 --position_lr_init 0.0000016 --position_lr_max_steps 10000 --trainable_cameras --trainable_intrinsics --use_barf --iterations 10000 --port "800%CUDA_VISIBLE_DEVICES%" @@ -301,7 +302,7 @@ REM 添加进度显示 echo [3/3] 可视化阶段开始... REM 导出结果的股线为pkl和ply格式 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\preprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python export_curves.py --data_dir %DATA_PATH% --model_name %EXP_NAME_3% --iter 10000 --flame_mesh_path "%DATA_PATH%\flame_fitting\%EXP_NAME_1%\stage_3\mesh_final.obj" --scalp_mesh_path "%DATA_PATH%\flame_fitting\%EXP_NAME_1%\scalp_data\scalp.obj" --hair_conf_path "%PROJECT_DIR%\src\arguments\hair_strands_textured.yaml" @@ -311,7 +312,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 渲染可视化 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\postprocessing set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python render_video.py --blender_path "%BLENDER_DIR%" --input_path "%DATA_PATH%" --exp_name_1 "%EXP_NAME_1%" --exp_name_3 "%EXP_NAME_3%" @@ -321,7 +322,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 渲染股线 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES% python render_strands.py -s %DATA_PATH% --data_dir "%DATA_PATH%" --data_device 'cpu' --skip_test -m "%DATA_PATH%\3d_gaussian_splatting\%EXP_NAME_1%" --iteration 30000 --flame_mesh_dir "%DATA_PATH%\flame_fitting\%EXP_NAME_1%" --model_hair_path "%DATA_PATH%\curves_reconstruction\%EXP_NAME_3%" --hair_conf_path "%PROJECT_DIR%\src\arguments\hair_strands_textured.yaml" --checkpoint_hair "%DATA_PATH%\strands_reconstruction\%EXP_NAME_2%\checkpoints\20000.pth" --checkpoint_curves "%DATA_PATH%\curves_reconstruction\%EXP_NAME_3%\checkpoints\10000.pth" --pointcloud_path_head "%EXP_PATH_1%\point_cloud\iteration_30000\raw_point_cloud.ply" --interpolate_cameras @@ -331,7 +332,7 @@ IF %ERRORLEVEL% NEQ 0 ( ) REM 制作视频 -CALL "%MICROMAMBA_EXE%" activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair +CALL %MICROMAMBA_EXE% activate -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair cd %PROJECT_DIR%\src\postprocessing echo 正在生成最终视频... set CUDA_VISIBLE_DEVICES=%CUDA_VISIBLE_DEVICES%