diff --git a/download_resource.bat b/download_resource.bat index b716fa6..d5152a7 100644 --- a/download_resource.bat +++ b/download_resource.bat @@ -1,6 +1,53 @@ @echo off setlocal enabledelayedexpansion +REM 清理旧的资源目录 +IF EXIST "resource" ( + echo 清理旧的资源目录... + rmdir /s /q "resource" +) + +REM 清理错误路径的资源 +IF EXIST "NeuralHaircut" rmdir /s /q "NeuralHaircut" +IF EXIST "Matte-Anything" rmdir /s /q "Matte-Anything" +IF EXIST "openpose" rmdir /s /q "openpose" +IF EXIST "hyperIQA" rmdir /s /q "hyperIQA" + +REM 定义模型信息 +SET "MODEL_NEURAL_HAIRCUT_NAME=Neural Haircut模型" +SET "MODEL_NEURAL_HAIRCUT_PATH=resource\NeuralHaircut\diffusion_prior\model.pt" +SET "MODEL_NEURAL_HAIRCUT_URL=1_9EOUXHayKiGH5nkrayncln3d6m1uV7f" + +SET "MODEL_PIXIE_NAME=PIXIE模型数据" +SET "MODEL_PIXIE_PATH=resource\NeuralHaircut\PIXIE\pixie_data" +SET "MODEL_PIXIE_URL=1mPcGu62YPc4MdkT8FFiOCP629xsENHZf" + +SET "MODEL_MATTE_NAME=Matte-Anything模型" +SET "MODEL_MATTE_PATH=resource\Matte-Anything\model.pth" +SET "MODEL_MATTE_URL=1d97oKuITCeWgai2Tf3iNilt6rMSSYzkW" + +SET "MODEL_SAM_NAME=SAM模型" +SET "MODEL_SAM_PATH=resource\Matte-Anything\sam_vit_h_4b8939.pth" +SET "MODEL_SAM_URL=https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth" + +SET "MODEL_DINO_NAME=GroundingDINO模型" +SET "MODEL_DINO_PATH=resource\Matte-Anything\groundingdino_swint_ogc.pth" +SET "MODEL_DINO_URL=https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth" + +SET "MODEL_OPENPOSE_NAME=OpenPose模型" +SET "MODEL_OPENPOSE_PATH=resource\openpose\models\pose_iter_584000.caffemodel" +SET "MODEL_OPENPOSE_URL=1Yn03cKKfVOq4qXmgBMQD20UMRRRkd_tV" + +SET "MODEL_HYPERIQA_NAME=hyperIQA模型" +SET "MODEL_HYPERIQA_PATH=resource\hyperIQA\pretrained\hyperIQA.pth" +SET "MODEL_HYPERIQA_URL=1OOUmnbvpGea0LIGpIWEbOyxfWx6UCiiE" + +REM 下载设置 +SET "RETRY_COUNT=3" +SET "TIMEOUT_SECONDS=600" +SET "CURL_OPTS=--connect-timeout 30 --max-time %TIMEOUT_SECONDS% --retry %RETRY_COUNT% -L -C -" +SET "MIN_FILE_SIZE=1000000" + REM 设置当前目录 SET PROJECT_DIR=%~dp0 cd %PROJECT_DIR% @@ -64,7 +111,7 @@ cd resource mkdir NeuralHaircut\diffusion_prior 2>nul mkdir NeuralHaircut\PIXIE 2>nul mkdir Matte-Anything 2>nul -mkdir openpose\models 2>nul +mkdir openpose\models\pose\coco 2>nul mkdir hyperIQA\pretrained 2>nul REM 验证已有文件 @@ -75,69 +122,63 @@ SET /A EXISTING_FILES=0 SET MISSING_LIST= REM Neural Haircut 模型检查 -SET MODEL_PATH=NeuralHaircut\diffusion_prior\model.pt -IF EXIST "%MODEL_PATH%" ( - echo [√] Neural Haircut模型已存在 +IF EXIST "%MODEL_NEURAL_HAIRCUT_PATH%" ( + echo [√] %MODEL_NEURAL_HAIRCUT_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少Neural Haircut模型 + echo [×] 缺少%MODEL_NEURAL_HAIRCUT_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!Neural Haircut模型, + SET MISSING_LIST=!MISSING_LIST!%MODEL_NEURAL_HAIRCUT_NAME%, ) REM PIXIE 模型检查 -SET MODEL_PATH=NeuralHaircut\PIXIE\pixie_data\data -IF EXIST "%MODEL_PATH%" ( - echo [√] PIXIE模型数据已存在 +IF EXIST "%MODEL_PIXIE_PATH%" ( + echo [√] %MODEL_PIXIE_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少PIXIE模型数据 + echo [×] 缺少%MODEL_PIXIE_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!PIXIE模型数据, + SET MISSING_LIST=!MISSING_LIST!%MODEL_PIXIE_NAME%, ) REM SAM 模型检查 -SET MODEL_PATH=Matte-Anything\sam_vit_h_4b8939.pth -IF EXIST "%MODEL_PATH%" ( - echo [√] SAM模型已存在 +IF EXIST "%MODEL_SAM_PATH%" ( + echo [√] %MODEL_SAM_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少SAM模型 + echo [×] 缺少%MODEL_SAM_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!SAM模型, + SET MISSING_LIST=!MISSING_LIST!%MODEL_SAM_NAME%, ) REM GroundingDINO 模型检查 -SET MODEL_PATH=Matte-Anything\groundingdino_swint_ogc.pth -IF EXIST "%MODEL_PATH%" ( - echo [√] GroundingDINO模型已存在 +IF EXIST "%MODEL_DINO_PATH%" ( + echo [√] %MODEL_DINO_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少GroundingDINO模型 + echo [×] 缺少%MODEL_DINO_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!GroundingDINO模型, + SET MISSING_LIST=!MISSING_LIST!%MODEL_DINO_NAME%, ) REM OpenPose 模型检查 -SET MODEL_PATH=openpose\models\pose\coco\pose_iter_584000.caffemodel -IF EXIST "%MODEL_PATH%" ( - echo [√] OpenPose模型已存在 +IF EXIST "%MODEL_OPENPOSE_PATH%" ( + echo [√] %MODEL_OPENPOSE_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少OpenPose模型 + echo [×] 缺少%MODEL_OPENPOSE_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!OpenPose模型, + SET MISSING_LIST=!MISSING_LIST!%MODEL_OPENPOSE_NAME%, ) REM hyperIQA 模型检查 -SET MODEL_PATH=hyperIQA\pretrained\hyperIQA.pth -IF EXIST "%MODEL_PATH%" ( - echo [√] hyperIQA模型已存在 +IF EXIST "%MODEL_HYPERIQA_PATH%" ( + echo [√] %MODEL_HYPERIQA_NAME%已存在 SET /A EXISTING_FILES+=1 ) ELSE ( - echo [×] 缺少hyperIQA模型 + echo [×] 缺少%MODEL_HYPERIQA_NAME% SET /A MISSING_FILES+=1 - SET MISSING_LIST=!MISSING_LIST!hyperIQA模型, + SET MISSING_LIST=!MISSING_LIST!%MODEL_HYPERIQA_NAME%, ) echo. @@ -156,43 +197,29 @@ IF %MISSING_FILES% GTR 0 ( exit /b 0 ) -REM 设置下载重试次数和超时时间 -SET RETRY_COUNT=3 -SET TIMEOUT_SECONDS=600 -SET CURL_OPTS=--connect-timeout 30 --max-time %TIMEOUT_SECONDS% --retry %RETRY_COUNT% -L -C - - REM 设置代理选项(可选) IF DEFINED HTTP_PROXY ( SET CURL_OPTS=%CURL_OPTS% --proxy %HTTP_PROXY% SET REQUESTS_CA_BUNDLE=%PROJECT_DIR%\certs\cacert.pem ) -REM 添加文件大小检查 -SET MIN_FILE_SIZE=1000000 REM 1MB - REM 下载 Neural Haircut 文件 -cd NeuralHaircut -IF EXIST "diffusion_prior\model.pt" ( - echo 跳过Neural Haircut模型下载... +cd resource\NeuralHaircut +IF EXIST "%MODEL_NEURAL_HAIRCUT_PATH%" ( + echo 跳过%MODEL_NEURAL_HAIRCUT_NAME%下载... ) ELSE ( - echo 正在下载Neural Haircut文件... - python -m gdown --folder "https://drive.google.com/drive/folders/1TCdJ0CKR3Q6LviovndOkJaKm8S1T9F_8" --continue + echo 正在下载%MODEL_NEURAL_HAIRCUT_NAME%... + cd diffusion_prior + python -m gdown "%MODEL_NEURAL_HAIRCUT_URL%" + cd ..\.. ) -cd diffusion_prior -IF EXIST "model.pt" ( - echo 跳过扩散先验模型下载... -) ELSE ( - echo 正在下载扩散先验模型... - python -m gdown "1_9EOUXHayKiGH5nkrayncln3d6m1uV7f" -) - -cd ..\PIXIE +cd PIXIE IF EXIST "pixie_data.tar" ( echo PIXIE模型已存在,跳过下载... ) ELSE ( echo 正在下载PIXIE模型... - python -m gdown "1mPcGu62YPc4MdkT8FFiOCP629xsENHZf" + python -m gdown "%MODEL_PIXIE_URL%" REM 使用7-Zip解压tar.gz文件 IF NOT EXIST pixie_data.tar.gz ( @@ -208,37 +235,37 @@ IF EXIST "pixie_data.tar" ( REM 下载 Matte-Anything 文件 cd ..\..\Matte-Anything echo 正在下载Matte-Anything文件... -IF EXIST "sam_vit_h_4b8939.pth" ( - echo SAM模型已存在,跳过下载... +IF EXIST "%MODEL_SAM_PATH%" ( + echo %MODEL_SAM_NAME%已存在,跳过下载... ) ELSE ( - echo 正在下载SAM模型... - curl %CURL_OPTS% -o sam_vit_h_4b8939.pth https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth + echo 正在下载%MODEL_SAM_NAME%... + curl %CURL_OPTS% -o "%MODEL_SAM_PATH%" "%MODEL_SAM_URL%" IF %ERRORLEVEL% NEQ 0 ( - echo 错误:下载SAM模型失败 + echo 错误:下载%MODEL_SAM_NAME%失败 exit /b 1 ) ) -IF EXIST "groundingdino_swint_ogc.pth" ( - echo GroundingDINO模型已存在,跳过下载... +IF EXIST "%MODEL_DINO_PATH%" ( + echo %MODEL_DINO_NAME%已存在,跳过下载... ) ELSE ( - echo 正在下载GroundingDINO模型... - curl -L --retry 5 -C - -o groundingdino_swint_ogc.pth https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth + echo 正在下载%MODEL_DINO_NAME%... + curl -L --retry 5 -C - -o "%MODEL_DINO_PATH%" "%MODEL_DINO_URL%" ) -IF EXIST "model.pth" ( - echo Matte-Anything模型已存在,跳过下载... +IF EXIST "%MODEL_MATTE_PATH%" ( + echo %MODEL_MATTE_NAME%已存在,跳过下载... ) ELSE ( - echo 正在下载Matte-Anything模型... - python -m gdown "1d97oKuITCeWgai2Tf3iNilt6rMSSYzkW" -O model.pth + echo 正在下载%MODEL_MATTE_NAME%... + python -m gdown "%MODEL_MATTE_URL%" -O model.pth ) REM 下载 OpenPose 模型 -cd ..\openpose +cd ..\openpose\models\pose\coco echo 正在下载OpenPose模型... -IF EXIST "models\pose\coco\pose_iter_584000.caffemodel" ( - echo OpenPose模型已存在,跳过下载... +IF EXIST "%MODEL_OPENPOSE_PATH%" ( + echo %MODEL_OPENPOSE_NAME%已存在,跳过下载... ) ELSE ( echo 正在下载OpenPose模型... - python -m gdown "1Yn03cKKfVOq4qXmgBMQD20UMRRRkd_tV" -O models.tar.gz + python -m gdown "%MODEL_OPENPOSE_URL%" -O models.tar.gz IF NOT EXIST models.tar.gz ( echo 错误:下载models.tar.gz失败 exit /b 1 @@ -250,16 +277,16 @@ IF EXIST "models\pose\coco\pose_iter_584000.caffemodel" ( ) REM 下载 hyperIQA 模型 -cd ..\hyperIQA\pretrained +cd ..\..\..\..\..\hyperIQA\pretrained echo 正在下载hyperIQA模型... -IF EXIST "hyperIQA.pth" ( - echo hyperIQA模型已存在,跳过下载... +IF EXIST "%MODEL_HYPERIQA_PATH%" ( + echo %MODEL_HYPERIQA_NAME%已存在,跳过下载... ) ELSE ( - echo 正在下载hyperIQA模型... - python -m gdown "1OOUmnbvpGea0LIGpIWEbOyxfWx6UCiiE" + echo 正在下载%MODEL_HYPERIQA_NAME%... + python -m gdown "%MODEL_HYPERIQA_URL%" ) -cd ..\.. +cd ..\..\.. echo. IF %ERRORLEVEL% EQU 0 ( echo ************************************************************ @@ -276,21 +303,21 @@ IF %ERRORLEVEL% EQU 0 ( REM 验证下载的文件完整性 echo 正在验证下载文件... -cd %PROJECT_DIR%\resource +cd %PROJECT_DIR% SET VERIFY_FAILED=0 -IF NOT EXIST "NeuralHaircut\diffusion_prior\model.pt" ( - echo [×] 缺少扩散先验模型文件 +IF NOT EXIST "%MODEL_NEURAL_HAIRCUT_PATH%" ( + echo [×] 缺少%MODEL_NEURAL_HAIRCUT_NAME% SET /A VERIFY_FAILED+=1 ) ELSE ( - echo [√] 扩散先验模型文件验证成功 + echo [√] %MODEL_NEURAL_HAIRCUT_NAME%验证成功 ) -IF NOT EXIST "NeuralHaircut\PIXIE\pixie_data" echo 警告:缺少PIXIE模型数据 -IF NOT EXIST "Matte-Anything\sam_vit_h_4b8939.pth" echo 警告:缺少SAM模型文件 -IF NOT EXIST "Matte-Anything\groundingdino_swint_ogc.pth" echo 警告:缺少GroundingDINO模型文件 +IF NOT EXIST "%MODEL_PIXIE_PATH%" echo 警告:缺少%MODEL_PIXIE_NAME% +IF NOT EXIST "%MODEL_SAM_PATH%" echo 警告:缺少%MODEL_SAM_NAME% +IF NOT EXIST "%MODEL_DINO_PATH%" echo 警告:缺少%MODEL_DINO_NAME% IF NOT EXIST "openpose\models\pose\coco" echo 警告:缺少OpenPose姿态模型 -IF NOT EXIST "hyperIQA\pretrained\hyperIQA.pth" echo 警告:缺少hyperIQA模型文件 +IF NOT EXIST "%MODEL_HYPERIQA_PATH%" echo 警告:缺少%MODEL_HYPERIQA_NAME% IF %VERIFY_FAILED% GTR 0 ( echo. diff --git a/install.bat b/install.bat index 3ee7ffc..805ef18 100644 --- a/install.bat +++ b/install.bat @@ -96,40 +96,35 @@ mkdir cache\gdown 2>nul mkdir cache\torch 2>nul mkdir cache\huggingface 2>nul -REM 创建ext目录 +REM 创建ext目录并克隆仓库 mkdir ext 2>nul cd ext -REM 克隆外部库 -git clone --depth 1 https://github.com/CMU-Perceptual-Computing-Lab/openpose -cd openpose -git submodule update --init --recursive --remote +REM 克隆必要的仓库 +git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose --depth 1 +cd openpose && git submodule update --init --recursive --remote cd .. git clone https://github.com/hustvl/Matte-Anything -cd Matte-Anything -git clone https://github.com/IDEA-Research/GroundingDINO.git +cd Matte-Anything && git clone https://github.com/IDEA-Research/GroundingDINO.git cd .. -git clone https://github.com/egorzakharov/NeuralHaircut.git --recursive +git clone git@github.com:egorzakharov/NeuralHaircut.git --recursive git clone https://github.com/facebookresearch/pytorch3d -cd pytorch3d -git checkout 2f11ddc5ee7d6bd56f2fb6744a16776fab6536f7 +cd pytorch3d && git checkout 2f11ddc5ee7d6bd56f2fb6744a16776fab6536f7 cd .. git clone https://github.com/camenduru/simple-knn -cd diff_gaussian_rasterization_hair\third_party -git clone https://github.com/g-truc/glm -cd glm -git checkout 5c46b9c07008ae65cb81ab79cd677ecc1934b903 -cd ..\..\.. +cd diff_gaussian_rasterization_hair/third_party && git clone https://github.com/g-truc/glm +cd glm && git checkout 5c46b9c07008ae65cb81ab79cd677ecc1934b903 +cd ../.. git clone --recursive https://github.com/NVIDIAGameWorks/kaolin -cd kaolin -git checkout v0.15.0 +cd kaolin && git checkout v0.15.0 cd .. git clone https://github.com/SSL92/hyperIQA +cd .. REM 创建环境 CALL "%MICROMAMBA_EXE%" create -p %MAMBA_ROOT_PREFIX%\envs\gaussian_splatting_hair python=3.8 pytorch=2.0.0 torchvision pytorch-cuda=11.8 cmake ninja setuptools=58.2.0 -c pytorch -c nvidia -c conda-forge -y @@ -170,13 +165,34 @@ IF NOT EXIST "%PROJECT_DIR%\resource" ( exit /b 1 ) -REM 下载 Neural Haircut 文件 -cd %PROJECT_DIR%\ext\NeuralHaircut -xcopy /E /I /Y "%PROJECT_DIR%\resource\NeuralHaircut\*" . -cd pretrained_models\diffusion_prior -xcopy /Y "%PROJECT_DIR%\resource\NeuralHaircut\diffusion_prior\*" . -cd ..\..\PIXIE -xcopy /E /I /Y "%PROJECT_DIR%\resource\NeuralHaircut\PIXIE\*" . +REM 复制模型文件到对应位置 +echo 正在复制模型文件... +REM Neural Haircut +xcopy /Y "%PROJECT_DIR%\resource\NeuralHaircut\diffusion_prior\model.pt" "%PROJECT_DIR%\ext\NeuralHaircut\pretrained_models\diffusion_prior\" + +REM PIXIE +xcopy /E /I /Y "%PROJECT_DIR%\resource\NeuralHaircut\PIXIE\pixie_data" "%PROJECT_DIR%\ext\PIXIE\" + +REM Matte-Anything +xcopy /Y "%PROJECT_DIR%\resource\Matte-Anything\sam_vit_h_4b8939.pth" "%PROJECT_DIR%\ext\Matte-Anything\pretrained\" +xcopy /Y "%PROJECT_DIR%\resource\Matte-Anything\groundingdino_swint_ogc.pth" "%PROJECT_DIR%\ext\Matte-Anything\pretrained\" +xcopy /Y "%PROJECT_DIR%\resource\Matte-Anything\model.pth" "%PROJECT_DIR%\ext\Matte-Anything\" + +REM OpenPose +xcopy /Y "%PROJECT_DIR%\resource\openpose\models\pose_iter_584000.caffemodel" "%PROJECT_DIR%\ext\openpose\models\pose\coco\" + +REM hyperIQA +xcopy /Y "%PROJECT_DIR%\resource\hyperIQA\pretrained\hyperIQA.pth" "%PROJECT_DIR%\ext\hyperIQA\pretrained\" + +REM 安装 PIXIE 环境 +CALL activate_pixie-env.bat +cd %PROJECT_DIR%\ext\NeuralHaircut\PIXIE +echo 正在安装PIXIE依赖... +pip install pyyaml==5.4.1 +pip install git+https://github.com/1adrianb/face-alignment.git@54623537fd9618ca7c15688fd85aba706ad92b59 + +REM 复制PIXIE数据 +xcopy /E /I /Y "%PROJECT_DIR%\ext\PIXIE\*" "%PROJECT_DIR%\ext\NeuralHaircut\PIXIE\" REM 安装 Matte-Anything 环境 CALL activate_matte_anything.bat @@ -206,18 +222,6 @@ cmake .. -DBUILD_PYTHON=true -DUSE_CUDNN=off -DBUILD_CAFFE=false -G "Visual Stud cmake --build . --config Release cd %PROJECT_DIR% -REM 复制 hyperIQA 模型 -cd %PROJECT_DIR%\ext\hyperIQA -mkdir pretrained 2>nul -xcopy /Y "%PROJECT_DIR%\resource\hyperIQA\pretrained\*" pretrained\ - -REM 安装 PIXIE 环境 -CALL activate_pixie-env.bat -cd %PROJECT_DIR%\ext\PIXIE -echo 正在安装PIXIE依赖... -pip install pyyaml==5.4.1 -pip install git+https://github.com/1adrianb/face-alignment.git@54623537fd9618ca7c15688fd85aba706ad92b59 - REM 检查资源文件是否已下载 IF NOT EXIST "resource" ( echo 错误:未找到resource目录,请先运行download_resource.bat