PIFU
论文部分
Paper: PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization
题目:PIFu:像素对齐的隐式函数的高分辨率服装人体数字化
摘要:我们引入了像素对齐的隐式函数(PIFu),这是一种隐式表示方法,它将二维图像的像素与其对应的三维对象的全局上下文进行局部对齐。利用PIFu,我们提出了一种端到端深度学习方法,用于数字化高度详细的穿衣服的人类,该方法可以从单一图像和选择性的多个输入图像中推断出三维表面和纹理。高度复杂的形状,如发型、服装,以及它们的变化和变形,都可以以一种统一的方式进行数字化。与现有的用于3D深度学习的表示方法相比,PIFu可以产生高分辨率的表面,其中包括大部分看不见的区域,比如一个人的背部.特别是,与体素表示不同,它的内存效率很高,可以处理任意拓扑,并且得到的表面与输入图像的空间对齐。此外,虽然以前的技术被设计为处理单个图像或多个视图,但PIFu可以自然地扩展到任意数量的视图。我们演示了来自DeepFashion 数据集的真实世界图像的高分辨率和健棒的重建,该数据集包含各种具有挑战性的服装类型。我们的方法在一个公共基准上取得了最先进的性能,并优于之前的工作,从单一图像的人体数字化工作.
总结:虽然我们的纹理预测是合理的,并且不受所推断的三维曲面的拓扑结构或参数化的限制,但我们相信可以推断出更高分辨率的外观,可能使用生成的对抗网络或增加输入图像的分辨率。在这项工作中,重建发生在像素坐标空间,对齐主体的尺度作为预处理。与其他单视图方法一样,推断尺度因子仍然是一个有待解决的问题,未来的工作可以解决这个问题。最后,在我们所有的例子中,没有一个被分割的主题被任何其他对象或场景元素遮挡。在现实世界中,遮挡经常发生,可能只有身体的一部分被锁定。能够在部分可见的环境下数字化和预测完整的物体,对于在无约束的环境下分析人类是非常有价值的。
代码:https://shunsukesaito.github.io/PIFu/
开源数据集: RenderPeople , BUFF, DeepFashion
PIFu训练思路:
上分支训练:首先原图(2D)进入一个编码器,为图像的每个像素学习单独的特征向量,以此来考虑到相对于其位置的全局特征。然后给出这个每个像素的特征向量x和指定的沿该像素流出的相机射线的Z深度,学习一个隐函数,该函数可以对这个Z深度对应的三维点是在表面之内还是之外进行分类。
其中,Xi∈R3,FV (x) = g(I(x))是图像编码器g的图像特征,n是采样点的数量。给定一对输入图像和相应的与输入图像进行空间对齐的三维网格,通过最小化Eq,共同更新图像编码器g和PIFu fv的参数。
下分支Tex-PIFu训练:首先原图(2D)可以与上分支训练所得到的全局3D模型表面几何形状像素对齐,用学习到的图像特征对图像编码器进行纹理推断。通过这种方式,图像编码器可以专注于给几何形状的颜色推断,即使未看到的对象具有不同的形状、姿态或拓扑结构。此外,我们在沿表面法线N的表面点上引入了一个偏移量(0,d),这样颜色不仅可以在精确的表面上定义,也可以在它周围的三维空间上定义。
实验部分
Demo测试样例
这里面需要先编译官方github的PIFu,conda创建虚拟环境时最好先看下该仓支持的python版本
# 下载和编译
git clone https://github.com/shunsukesaito/PIFu
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 下载已训练好的权重
sh ./scripts/download_trained_model.sh
# demo测试
sh ./scripts/test.sh
#!/usr/bin/env bash
set -ex
# Training
GPU_ID=0
DISPLAY_ID=$((GPU_ID*10+10))
NAME='pifu_demo'
# Network configuration
BATCH_SIZE=1
MLP_DIM='257 1024 512 256 128 1'
MLP_DIM_COLOR='513 1024 512 256 128 3'
# Reconstruction resolution
# NOTE: one can change here to reconstruct mesh in a different resolution.
VOL_RES=256
CHECKPOINTS_NETG_PATH='./checkpoints/net_G'
CHECKPOINTS_NETC_PATH='./checkpoints/net_C'
TEST_FOLDER_PATH='./sample_images'
# command
CUDA_VISIBLE_DEVICES=${GPU_ID} python ./apps/eval.py \
--name ${NAME} \
--batch_size ${BATCH_SIZE} \
--mlp_dim ${