Neural3D: Light-weight Neural Portrait Scanning via Context-aware Correspondence Learning

  • 论文动机
  • 方法
    • 整体框架
      • 1 .兴趣点位置提取&兴趣点特征提取
      • 2. Correspondence 估计
      • 3.几何三维重建
      • 4.渲染
    • Correspondence估计网络
      • 1. Appearance Module
      • 2.Motion Module
      • 3. Classifier
      • 4. Loss
    • 渲染
      • 框架图
      • 损失函数
  • 实验

这篇文章值得一读,至少我花的几个小时很值得,这文章工作量比较大,比较扎实,不错的文章。想看原文,但是又下载不了的可以在下面的评论里联系我。

论文动机

使用RGB-D相机能重建出栩栩如生的高质量三维人像,但是使用深度传感器在室外等场景受到限制。而基于RGB的方法比如:PIFU,通过使用重建每个顶点的颜色值或者UV纹理图进行多角度呈现,这种方法会因为形状重建的错误而导致纹理的瑕疵(从实验结果可视化方面来说,这个理由成立)。而近期神经渲染的方法能够重建出质量更高的结果,所以作者决定使用神经渲染(neural rendering)。而从多视角进行渲染需要知道输入图片的相机姿态和Correspondence。这两个量的求解是先后关系,在多视角几何中,先求解两张图像的Correspondence,然后再解基本矩阵,从而得到相机参数。而获取Correspondence的时候,传统方法一般采用手工特征SIFT去提取描述子。然后用RANSAC方法进行匹配,RANSAC主要聚焦于局部特征。而最近的基于深度学习的方法通过挖掘全局上下文信息Global Information进行更好的特征匹配。而上述深度学习方法只考虑上下文编码(局部、全局上下文编码)没有考虑到匹配点之间潜在的几何或者拓扑关系。

基于此,作者针对特征匹配算法中的RANSAC以及深度学习方法的不足,提出了新的特征点匹配预测深度网络。这个网络对每一对匹配候选点进行纹理、运动以及图像屏幕坐标的联合建模,获取更准确的匹配。

方法

整体框架

1 .兴趣点位置提取&兴趣点特征提取

对图像使用SIFT检测器,获得N个兴趣点以及它们的SIFT特征[N, 128]。

sift = cv.SIFT_create()
p, f = sift.detectAndCompute(gray,None)

其中p为兴趣点在图片中的位置,形状为[N, 2]。f为SIFT特征,形状为[N, 128]。

2. Correspondence 估计


网络的输入为 f i 1 f^1_{i} fi1​, p i 1 p^1_{i} pi1​, f i 2 f^2_{i} fi2​, p i 2 p^2_{i} pi2​。 f i 1 , 2 f^{1,2}_{i} fi1,2​表示为图片第 i i i对兴趣点的128维SIFT特征, p i 1 , 2 p^{1,2}_{i} pi1,2​表示图片第 i i i对兴趣点在图片中的坐标位置。输出为第 i i i对兴趣点的匹配得分 c i c_{i} ci​。这部分会在后面详细讲解。

3.几何三维重建

1.通过Bundle Adjustment(捆集调整)进行三维稀疏重建
通过用上一阶段对每一对兴趣点的Correspondence Match Score的得分估计,剔除离群点,得到最终的兴趣点。于是接着用捆集调整法重建出稀疏的三维点。BA的目标函数为:
min ⁡ p ^ i , X ^ j ∑ i j d ( P ^ i X ^ j , x j i ) \min \limits_{\hat p^i, \hat X^j}\sum_{ij}d(\hat P^i \hat X^j, x^i_{j}) p^​i,X^jmin​ij∑​d(P^iX^j,xji​)
其中, P ^ i \hat P^i P^i为相机矩阵, X ^ j \hat X^j X^j为待求三维点,这两者均为待求量。 x j i x^i_{j} xji​为兴趣点的位置。方程求解方法有LM法、牛顿法、最速下降法,这里不过多介绍。需要的可以看博客,最好是去看多视几何的第18章。

2.用传统的shape from silhousette方法进行密集重建。

4.渲染

用可微分渲染进行新视角人身图像生成,这部分在后面继续讲。

Correspondence估计网络


该网络包含两个部分:Appearance Module、Motion Module。下面逐一分析。

1. Appearance Module

在这里使用了图结构来建立兴趣点之间的关系,目的是为了获取Global的Contex信息,而不仅仅是原始SIFT特征只有局部的信息。输出为 S a p p S_{app} Sapp​

2.Motion Module

把兴趣点的位置 p i 1 p^1_{i} pi1​, p i 2 p^2_{i} pi2​,送入PointCN block,得到特征 F ∈ R N × C F \in \mathbb{R^{N\times C}} F∈RN×C,其中 N N N为对应点的数量, C C C为特征维度。接着送入一个Global Context block,获取全局上下文信息。这个过程可以表示为:
F ∗ = A t t e n t i o n ( F ) . F F^* = Attention(F).F F∗=Attention(F).F
而 A t t e n t i o n ( F ) = s o f t m a x ( F F T / C ) Attention(F)=softmax(FF^T/C) Attention(F)=softmax(FFT/C),C就是特征 F F F的维度。这样看一下 A t t e n t i o n ( F ) Attention(F) Attention(F)和王小龙的non-local的操作是不是有点像?这样获取了全局的上下文信息。为了获取局部上下文信息,这里引入了ICCV2019论文:《Learning Two-View Correspondences and Geometry Using Order-Aware Network》中的可微池化操作。该操作包含可微池化、可微上采样,可微池化用下面图表示

用数学表达式可以写成:
S p = s o f t m a x ( h p o o l ( F ∗ ) ) S_{p}=softmax(h_{pool}(F^*)) Sp​=softmax(hpool​(F∗))
可微上采样用数学表达式可以写成:
S u p = s o f t m a x ( h u n p o o l ( F ∗ ) ) S_{up}=softmax(h_{unpool}(F^*)) Sup​=softmax(hunpool​(F∗))
然后直接把 S p S_{p} Sp​、 S u p S_{up} Sup​直接进行融合,融合的方法是把 S p T F ∗ S_{p}^TF^* SpT​F∗与 S u p T F ∗ S_{up}^TF^* SupT​F∗直接进行concate操作得到 S m o t i o n S_{motion} Smotion​。

3. Classifier

把 S a p p S_{app} Sapp​、 S m o t i o n S_{motion} Smotion​进行拼接后,送入MLP中得到最后的得分 c i c_{i} ci​。

4. Loss

这个网络的训练损失函数有两个:二值交叉熵损失函数 L c L_{c} Lc​、对极距离损失函数
L e L_{e} Le​。下面分别介绍。
(1)交叉熵损失函数。很显然这是一个二分类问题,对预测的兴趣点,判断其是不是离线点。很显然就是把预测的 c i c_{i} ci​作为交叉熵损失中的概率进行判断。
(2)对极距离损失函数。直接上公式:
L e = ∑ ( p i 1 , p i 2 ) ∈ M ∥ dist ⁡ ( p i 1 , p i 2 , E ) ∥ 2 2 L_{\mathrm{e}}=\sum_{\left(p_{i}^{1}, p_{i}^{2}\right) \in \mathrm{M}}\left\|\operatorname{dist}\left(p_{i}^{1}, p_{i}^{2}, \mathrm{E}\right)\right\|_{2}^{2} Le​=(pi1​,pi2​)∈M∑​∥∥​dist(pi1​,pi2​,E)∥∥​22​

其中:
dist ⁡ ( p i 1 , p i 2 , E ) = p i 2 E i p i 1 ∥ E p i 1 ∥ [ 1 ] 2 + ∥ E p i 1 ∥ [ 2 ] 2 + ∥ E p i 2 ∥ [ 1 ] 2 + ∥ E p i 2 ∥ [ 2 ] 2 \operatorname{dist}\left(p_{i}^{1}, p_{i}^{2}, \mathrm{E}\right)=\frac{p_{i}^{2} \mathrm{~E}_{i} p_{i}^{1}}{\sqrt{\left\|\mathrm{E} p_{i}^{1}\right\|_{[1]}^{2}+\left\|\mathrm{E} p_{i}^{1}\right\|_{[2]}^{2}+\left\|\mathrm{E} p_{i}^{2}\right\|_{[1]}^{2}+\left\|\mathrm{E} p_{i}^{2}\right\|_{[2]}^{2}}} dist(pi1​,pi2​,E)=∥Epi1​∥[1]2​+∥Epi1​∥[2]2​+∥Epi2​∥[1]2​+∥Epi2​∥[2]2​ ​pi2​ Ei​pi1​​
咱们来分析以下,对于分子 p i 2 E i p i 1 p_{i}^{2} \mathrm{~E}_{i} p_{i}^{1} pi2​ Ei​pi1​,根据对极几何的基本性质,如果兴趣点 p i 2 p^2_{i} pi2​、 p i 1 p^1_{i} pi1​是完全匹配的点,那么有 p i 2 E i p i 1 = 0 p_{i}^{2} \mathrm{~E}_{i} p_{i}^{1}=0 pi2​ Ei​pi1​=0,E为本质矩阵。分母可以看成是分母对 p p p求偏导构成的式子,具体是什么意思,只能看书了。但是没关系,这里偷个懒,理解分子是什么意思就行了。

渲染

框架图

回到几何三维重建这一部分,使用了shape from silhousette方法重建稠密三维点之后,就可以进行渲染了。但是这个时候直接渲染会因为三维重建的噪声和缺陷导致渲染结果比较糟糕。为了压制这种与形状相关的缺陷,这篇文章的作者使用了一种新的渲染框架,可以从低保真度的三维点云中(而不是像传统方法哪一要从Mesh进行渲染)渲染出高质量的人形图像。具体怎么做的呢,我们先来看一下整体框架图:

3D Point Features渲染后得到特征 f i , f 0 f_{i},f_{0} fi​,f0​、 d ⃗ i , d ⃗ 0 \vec{d}_{i},\vec{d}_{0} d i​,d 0​分别表示三维点 X i X_{i} Xi​渲染后的特征值和深度值。 f 0 f_{0} f0​、 d ⃗ 0 \vec{d}_{0} d 0​表示背景处的值。然后把 M = [ f i , d ⃗ i ] M=[f_{i}, \vec{d}_{i}] M=[fi​,d i​]送入UNet中,得到渲染结果。

损失函数

有两个损失函数,一个是二值化交叉熵GAN损失函数,另一个是重建损失函数。
(1)GAN损失函数。这个没什么好说的,判定渲染的图片是不是真实图片。
L gan  = E x [ log ⁡ ( D ( x ) ) ] + E M [ log ⁡ ( 1 − D ( G ( M ) ) ) ] \boldsymbol{L}_{\text {gan }}=E_{x}[\log (\mathcal{D}(x))]+E_{M}[\log (1-\mathcal{D}(\mathcal{G}(\mathbf{M})))] Lgan ​=Ex​[log(D(x))]+EM​[log(1−D(G(M)))]
(2)重建损失函数。姿态 q q q渲染的图片和原始真实图片之间的距离。
L i m g = ∑ q = 1 ∥ I q − I ^ q ∥ 2 2 \boldsymbol{L}_{\mathrm{img}}=\sum_{q=1}\left\|\mathbf{I}_{q}-\hat{\mathbf{I}}_{q}\right\|_{2}^{2} Limg​=q=1∑​∥∥∥​Iq​−I^q​∥∥∥​22​

实验

定量分析,去看论文吧,这里我想展示一下这篇论文和PIFU模型的对比。可以看到这结果呼应了论文在Introduction部分提到的PIFU这一类方法因为Geometry不准确导致的纹理质量低下的问题。而使用GAN当然能明显提升渲染结果,这个没什么好说的。

论文阅读笔记:《Neural3D: Light-weight Neural Portrait Scanning via Context-aware Correspondence Learning》相关推荐

  1. 《Beta Embeddings for Multi-Hop Logical Reasoning in Knowledge Graphs》论文阅读笔记

    <Beta Embeddings for Multi-Hop Logical Reasoning in Knowledge Graphs>论文阅读笔记 主要挑战贡献: KG上的推理挑战主要 ...

  2. 论文阅读 | NIPS‘20 | Beta Embeddings for Multi-Hop Logical Reasoning in Knowledge Graphs

    很有意思的一篇paper.在众多Knowledge Graph Embedding (KGE) 的论文中通过问题设计和有意思的解决方式脱颖而出. 首先来看看问题设计. 一般的KGE model都是利用 ...

  3. Beta Distribution Guided Aspect-aware Graph for Aspect Category Sentiment Analysis论文阅读笔记(EMNLP2021)

    目录 标题翻译:基于Beta分布引导方面感知图的方面类别情感分析 原文链接:https://aclanthology.org/2021.emnlp-main.19.pdf 摘要: 1 引言 2 相关工 ...

  4. Phrase-BERT: Improved Phrase Embeddings from BERT with an Application to Corpus Exploration论文阅读笔记

    问题: 因为bert是在长文本(512token长度)预训练的,因此,如果没有特定于任务的微调,BERT在短语和句子上的表现通常比简单基线(如GLoVe的平均池化)更差.且字节2020在EMNLP上的 ...

  5. DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记

    DeepWeak: Reasoning Common Software Weaknesses via Knowledge Graph Embedding 阅读笔记 Article Background ...

  6. [论文阅读笔记] Are Meta-Paths Necessary, Revisiting Heterogeneous Graph Embeddings

    [论文阅读笔记] Are Meta-Paths Necessary? Revisiting Heterogeneous Graph Embeddings 购物返利 www.cpa5.cn 本文结构 解 ...

  7. 论文阅读笔记—Reasoning on Knowledge Graphs with Debate Dynamics(AAAI,2020)

    这是一篇非常有趣的工作,看完会觉得眼前一亮. 论文标题:Reasoning on Knowledge Graphs with Debate Dynamics 发表于AAAI,2020 动机  很多机器 ...

  8. 论文阅读笔记——《a simple but tough-to-beat baseline for sentence embeddings》

    <a simple but tough-to-beat baseline for sentence embeddings>published at ICLR 2017. ICLR会议的论文 ...

  9. Learning Hierarchy-Aware Knowledge Graph Embeddings for Link Prediction论文阅读笔记

    我的博客链接 0. 前言 1. 作者试图解决什么问题? 作者想在KGE中对语义层级(semantic hierarchies)进行建模. 2. 这篇论文的关键元素是什么? semantic hiera ...

  10. 斯坦福图机器学习CS224W笔记自用: Reasoning in Knowledge Graphs using Embeddings

    1. 基于嵌入的知识图推理 目标:如何对知识图进行多跳推理? 知识图推理: 回答多跳查询 路径查询 连接查询 Query2box 示例:生物医学图 知识图谱上的预测查询 我们是否可以进行多跳推理,即在 ...

最新文章

  1. Linux三剑客之awk详解
  2. 【赠书】阿里巴巴官方出品,工业级知识图谱最新书籍领取!
  3. ITK:过滤图像而没有复制其数据
  4. centos安装ES(elasticsearch)
  5. 给IT新人的15个建议:程序员的辛酸反省与总结!
  6. 你心中有这样的人吗?
  7. 一个html文件创造多个页面,使页眉和页脚文件包含在多个html页面中。
  8. Mariadb数据库设置及操作 一主多从 备份还原(实测笔记)
  9. Uva 12063 Zero and Ones
  10. python基础--面向对象之封装
  11. alias 为命令定义别名、unalias删除别名
  12. 实战之多有米项目测试环境搭建
  13. 变压器次级输出为0v的原因_加速tensorflow中的Google临时融合变压器2 0
  14. 磁盘、u盘、移动硬盘被写保护了,不能复制文件,解决方案
  15. 目标检测概述-VOC COCO数据集 IOU AP NMS
  16. 电影O2O烧钱大战,百度成收割者?
  17. Linux内核地址空间分布
  18. C程序设计语言逆波兰式计算器学习心得
  19. reactHooks中使用events全局通信
  20. 生命不息学习不止 分析几个大牛爱用的在线笔记工具

热门文章

  1. NoSQL数据库简单学习
  2. Tekton笔记(四)之Authentication及catalog skopeo
  3. timeval 计时器
  4. Python数据可视化第 9 讲:matplotlib极坐标图绘制函数polar
  5. Revit快速标注 | 有求必应的【万能标注】操作步骤
  6. AUTOCAD——云线命令、滚动条设置
  7. 冯诺依曼结构图-2020-09-05
  8. Windows10 CUDA11.0安装cudnn8.0.4安装环境配置VS运行及卸载方法
  9. C#在获得客户端ip的时候,获得的ip地址为::1
  10. github中clone代码到本地与直接下载压缩包的区别