2024年8月4日更新:图床跑路,所有图片均丢失
0x0 什么是PIFuHD ?
PIFuHD:用于高分辨率 3D 人体数字化的多级像素对齐隐式函数,基于Shunsuke Saito, Tomas, Simon, Jason Saragih, Hanbyul Joo, University of Southern California, Facebook Reality Labs, Facebook AI Research等研究人员及企业在2020年四月发表在arxiv上的论文,使用Python打造,可以通过深度学习计算的方式将平面2D人体照片转换为3D空间模型。
0x1 环境准备
硬件配置:
- 显卡:RTX 4060 Laptop
- CPU:Intel i9-13900HX
- 内存:32GB
软件配置:
- 操作系统:Ubuntu 22.04.3 LTS
- 显卡驱动:NVIDIA-Linux-x86_64-525.125.06
- CUDA版本:11.8
- cudnn版本:8.9.5
- python版本:3.10
- pytorch版本:1.12.0
- 编译器版本:gcc 9.4.0
0x2 环境准备
安装Ubuntu22.04
在Ubuntu官网下载安装镜像,使用UltraISO等软件制作启动U盘,在BIOS中设置U盘启动,进入Ubuntu安装界面,选择安装Ubuntu,一路默认安装即可,注意勾选“安装专有的硬件驱动”。由于虚拟机无法使用CUDA,所以请不要使用虚拟机安装!!!
安装显卡驱动
安装完成Ubuntu后,打开终端,输入命令:
1 | sudo apt update |
此时系统会列出适用于当前设备的显卡驱动,比如
1 | nvidia-driver-535-server-open, (kernel modules provided by linux-modules-nvidia-535-server-open-generic-hwe-22.04) |
选择合适的版本运行,比如
1 | sudo apt install nvidia-driver-535 |
进行安装
安装CUDA
注意!注意!注意! ,由于需要用到 openpose
,而openpose
年久未修,建议最高cuda版本为11.8,高于此版本可能会出现bug。
首先,在终端中运行nvidia-smi
,查看显卡支持的最高cuda版本
1 | +-----------------------------------------------------------------------------+ |
可以看到CUDA Version: 12.0
,就是说当前显卡支持的最大cuda版本是12.0,考虑到前文提到的兼容性问题,我们选择安装cuda11.8
。
进入CUDA Toolkit Archive,选择合适的版本号,此处以11.8.0
为例。
点击CUDA Toolkit 11.8.0
,跳转安装页面,依次选择Linux -> x86_64 -> Ubuntu-22.04 -> runfile(local)
然后分别运行下方显示的两条指令。
1 | wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run |
在安装过程中,会询问你是否接受协议,输入accept,然后弹出安装选项,需要取消勾选显卡驱动。
1 | []Driver |
安装完成后,需要配置环境变量,打开~/.bashrc文件,添加如下内容:
1 | export PATH=$PATH:/usr/local/cuda-11.8/bin |
最后重载:
1 | source ~/.bashrc |
安装cuDNN
在官网先登录NVIDIA,然后点击Download cuDNN
并勾选I Agree To the Terms of the cuDNN Software License Agreement
,这里只显示11.x和12.x,如果需要历史版本就在文末进入存档版本。这里下载11.x的 v8.9.5版本,下载Local Installer for Ubuntu22.04 x86_64 (Deb)
安装包。
接着安装zliblg
1 | sudo apt-get install zlib1g |
安装cudnn包
1 | sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.5.29_1.0-1_amd64.deb |
安装结束后会提示安装key,直接复制运行弹出的命令即可,以下命令仅为示例,以自己终端输出的内容为准。
1 | sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.5.29/cudnn-local-72322D7F-keyring.gpg /usr/share/keyrings/ |
更新库
1 | sudo apt-get update |
查看libcudnn8版本,下列命令均需要根据这个版本号修改
1 | apt-cache policy libcudnn8 |
得到输出结果,包含以下内容
1 | ... |
记下版本号并在下面命令中替换。
1 | sudo apt-get install libcudnn8=8.9.5.29-1+cuda11.8 |
测试
运行:
1 | sudo apt-get install libfreeimage3 libfreeimage-dev |
得到输出结果
1 | Test passed! |
即为安装成功。
0x2 部署PIFuHD代码
拉取源码
方法一:使用官方源码
1 | git clone https://github.com/facebookresearch/pifuhd.git |
然后将所有文件中的np.int
替换为int
,所有np.bool
替换为bool
。
方法二:使用我修改好的的源码
1 | git clone https://github.com/SeimoDev/pifuhd.git |
安装依赖
1 | sudo apt install python3-pip python-is-python3 |
下载预训练模型
1 | sh ./scripts/download_trained_model.sh |
测试
1 | sh ./scripts/demo.sh |
得到输出结果,如果没有报错且正常输出模型展示页面,即为安装成功。
配置openpose
获取源代码
1 | git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose.git |
编译源代码
1 | sudo apt-get install cmake-qt-gui |
将Where is the source code
设置为Openpose源码目录
将Where to build binaries
设置为build目录
点击Configure
选择Unix Makefiles
然后点击Finish
,关闭后勾选BUILD_PYTHON
,取消勾选USE_CUDNN
然后点击Generate
。
待下方输出
1 | Configuring done |
关闭cmake-gui窗口,执行
1 | make -j`nproc` |
如果不出意外,这样会自动完成openpose的编译。
下载预训练模型
由于官方模型下载服务器Shutdown了,这里提供一个存档,可以自行下载放到models文件夹下
测试
运行以下命令
1 | ./build/examples/openpose/openpose.bin --video examples/media/video.avi |
如果成功输出食品并且带有人体骨架即为成功
开始使用
恭喜你,截至这里,前期工作已经完成,下面开始正式使用
切换到PIFuHD项目目录,将需要渲染的图片放到sample_images
文件夹,然后运行如下命令:
1 | python apps/batch_openpose.py -d openpose/ -i sample_images -o sample_images |
到此,如果你没有遇到报错,那么恭喜你,你已经成功运行了PIFuHD,并将人体图片转换为了三维模型。
你可以在results/pifuhd_final/recon
下找到生成的obj文件,拖入需要的建模程序即可使用。
也可以运行下面这个命令将其渲染为视频展示
1 | python -m apps.render_turntable -f results/pifuhd_final/recon -ww 512 -hh 512 |
关于部分报错的处理:
- 在进行cmake编译时如遇到报错缺少库文件,请自行搜索相关库安装补全,一般报错时会有提示。
- 如果在最后生成模型时报错
CUDA out of Memory
,请降低图片分辨率后在次尝试。实测8GB显存可以渲染96*108分辨率的图片。