[读论文] Monocular 3D Object Reconstruction with GAN inversion (ECCV2022)

news2024/9/22 5:27:01

概述

项目主页:https://www.mmlab-ntu.com/project/meshinversion/
方法名称:MeshInversion
输入:单目图像 (in the wild,有背景的,没有抠图的)
输出:textured 3D mesh
key challenge: 缺少3D或multiview supervision
方法核心:先预训练一个3D GAN ,可以从latent code z生成textured mesh。然后在inference的时候,从输入的图片倒推最符合的z。(这是一个inferece optimization的方法!!
在这里插入图片描述

Related Work

Single View 3D Reconstruction

image-3D object pairs [46,35,32,39]
multi-view images [33,28,51,47,34]
SMPL for humans and 3DMM for faces [8,40,18],

CMR [19] reconstructs categoryspecific
textured mesh

texture一般有两种方法,一个是direct regression of pixel values in the UV texture map – often blurry 但作者用的这个。
主流方法是learning the texture flow。

GAN inversion

textured mesh generation

6.Learning to predict 3D objects with an interpolation-based differentiable renderer.
In: NeurIPS (2019)
重建的mesh可微渲染之后,用渲染得到的multi view images做discriminaive 监督

13.Leveraging 2D data to learn textured
3D mesh generation. In: CVPR (2020)
VAE 方法,face colors instead of texture maps

38.Convolutional generation of textured 3D meshes
topology-aligned texture maps and deformation maps in the UV space. (本文就用了他的pretrained model)

Method

看起来大体方法是用Generator从latent code生成geometry和texture,然后用chamfer mask loss和chamfer texture loss来监督。

Preliminaries

mesh表示为O = (V,F,T), 即点,面,texture map。
其中,由于

An individual mesh is iso-morphic to a 2-pole sphere.

因此点的位置可用球体的deformation Δ V \Delta \mathbf{V} ΔV表示:
V = V s p h e r e + Δ V \mathbf{V} = \mathbf{V}_{sphere} + \Delta \mathbf{V} V=Vsphere+ΔV
以前的方法大多用MLP来regress delta V,本文使用CNN。

渲染是,使用弱透视投影。(区别于透视投影和正交投影的一种投影方法),参数为π, 包含scale s, translation t和rotation r。

3.1 Reconstruction with Generative Prior

Pre-training Stage

这个阶段训练了一个3D GAN。主要参考ConvMesh和PatchGAN。

Inversion Stage

  • 目的:find the z that best recovers the 3D object from the input image I i n \mathbf{I}_{in} Iin.

  • 需要:原始的image,其对应的mask,还有将3Dshape进行渲染的相机参数。

    • 其中mask 用现成的segmentation tool (PointRend)来获取。
    • 理由在此:https://github.com/junzhezhang/mesh-inversion/issues/5 是为了fair comparison以及强调这是test time optimization
    • shape用的latent code z和渲染用的相机参数π用本文的网络来预测。也就是mesh用ConvMesh,相机用CMR。
  • 如何预测相机参数π:如果直接regress camera pose from scratch,存在camera-shape ambiguity问题。[24] 所以我们用CMR来initialize the camera。

由于这个相机位置是不断oprimize的,image不可能完美对齐,需要一个鲁棒的texture loss,见下文

3.2 chamfer texture loss

  • 将image看做2D点云,每个点有2D坐标和3D的RGB颜色值。
  • 两个图像的dissimilarity就用chamfer distance来表达。
    • 其中distance D 被分解为 appearance term and spatial term, 都用的l2 distance。
    • 重要:具体来说,考虑到我们只想让他tolerant on local misalignment, 因此在spatial term上增加了一个exp操作来惩罚空间距离过远的点,变成这样:
    • 在这里插入图片描述
    • 解释:首先是Da和Ds相乘。
      • 增加epsilon是如果有一样位置的点,颜色相差极大,那应该算作不同的点,免得给他弄成零了;
      • 然后Ds这边加上指数,惩罚距离太远的,因为我只想要较小的misalignment
      • 取个max
    • 注意:Ds这一项是不可微的,他只是训练Da(texture)用的权重。

这个东西挺有用的,请看消融实验:
在这里插入图片描述

3.3 Chamfer Mask Loss

  • 从3D shape 得到mask需要rasterization that discretizes the mesh into a grid of pixels. 这一部会导致信息丢失,引入误差,对训练好的ConvMesh影响尤其大。
  • 为此,作者提出Chamfer Mask Loss Lcm.
    • 不是将mesh渲染为binary mask,而是把mesh的点直接投影到image plane,得到Sv。
    • 然后把用现成工具分割得到的前景点的坐标给normalize到-1到1之间,得到Sf。
    • 然后计算Sv和Sf的chamfer distance

总loss

  • pixel-level chamfer texture loss (appearance)
  • feature-level chamfer texture loss (appearance)
  • chamfer mask loss (geometry)
  • smooth loss (neighboring faces to have similar normals i.e. low cosine)
  • latent space loss (L2 norm of z to ensure Gaussian distribution)

等下仔细看看代码,尤其是这个latent space loss。
以及那个feature level是咋搞啊。

Experiments

  • datasets:
    • CUB-200-2011 (鸟类)
    • PASCAL3D: cars
  • pretrain ConvMesh: pseudo ground truths ??? 感觉是指上文提到的那个segmentation和camera pose prediction网络得到的结果。
  • inference 时GAN inversion: 似乎也是pseudo ground truths。
  • evaluation: 用的GT了
    • geometry accuracy: rendered masks 和 GT masks的2D mask IoU
    • appearance quality: image synthesis metric FID (single view and multi view), 反映了GT images和generated images的分布的相似性。
    • user study: 找了40个user来打分。
    • (PASCAL3D 特有:有approximated 3D CAD shapes,可以用3D IoU)

Texture Flow vs. Texture Regression

Texture Flow 更常用,但在invisible的地方容易出错;因为容易copy foreground pixies including the obstacles.

实现(主要来自补充材料)

时间,显存,设备GPU

Pre-training:
600 epochs, with a batch size of 128,
15 hours on four Nvidia V100 GPUs.

网络结构:和ConvMesh一样。

  • convolutional generator G with 2 branches.
    • 输入:latent code z (64)
    • 输出:deformation map S 32*32; texture map T 512-512
  • UV space discriminator
    • deformation map
    • texture map
  • image space discriminator (PatchGAN)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【metaRTC学习】metaRTC的demo运行说明(一)

metaRTC的github的地址为:GitHub - metartc/metaRTC: A cross-platform WebRTC SDK 其作者杨高峰的博客为:metaRTC的博客_CSDN博客-metaRTC,解决方案领域博主 其博客对其自己的demo的运行说明不够详细,刚入门的会一脸懵,本文对其…

Netty(二)- NIO三大组件之Buffer

文章目录一、Buffer 基本介绍二、Buffer 类及其子类三、Buffer 的使用四、关于Buffer 的注意事项和细节1. put和get的数据类型应该相同2. 可以将一个普通 Buffer 转成只读 Buffer3. 可以使用MappedByteBuffer让文件直接在内存中修改4. 可以通过 Buffer 数组完成读写操作&#x…

富文本编辑器 ck-editor5 的使用

最近在项目中需要用到富文本编辑器,据说ck-editor5很不错,于是就使用它了,不过在期间也遇到了很多问题,这里记录下。 一、引入ck-editor5 文档地址:Predefined builds - CKEditor 5 Documentation 这里有个坑&#…

YOLOv2-yolo9000-batter,faster,stronger 论文精度

参考大佬:同济子豪兄 YOLOv2-yolo9000 yolo9000-batter,faster,stronger Introduction 我们提出了一种新的方法来利用大量的图像分类数据,来扩大当前检测系统的范围。我们的方法使用目标分类的分层视图,允许我们将不同的数据集组合在一起…

个人需求1:代码提交这块的做法

老早之前的代码提交的步骤,真的是很繁琐在这里提交代码,现在和大家分析一下我当初的心得。 1.首先黄老师建立了一个jira号,记得把功能背景/方案说明/测试范围提前了解,问起来的时候也能回答,如下图1: 15324就是我本次的jira号,每次开发前先建立jira号,这…

小区访客导航GIS方案

1 应用功能设计 1.1 小区地图 1.1.1 小区地图浏览 基于GIS平台,对小区地图进行渲染发布,提供可视化显示浏览地图可以选择2D地图模式,用户可以在地图上快速查询和点击选择某个小区内的建筑物、POI等信息,并查看其相关属性信息&…

【现代机器人学】学习笔记二:刚体运动

这一节内容最开始在学之前是有些不屑的,这些坐标变换的内容天天都在玩,有什么复杂的?高翔博士的14讲貌似讲这些内容只用了几页。 不过认真一读才发现自己自大肤浅了。 之前我在北大研究院的时候,有一个实验室双聘的浙农林的老师&…

每天一个面试题:ThreadLocal底层原理和实现Demo

ThreadLocal底层原理和实现Demo每天一个面试题:ThreadLocal实现ThreadLocal的DemoThreadLocal底层原理为什么ThreadLocalMap的key设计为弱引用今天开始一个新专栏:每天一个面试题系列 也没有拿到令人心动的offer,看来自己学习方式和能力还是差…

fastapi_No.25_获取配置项

文章目录方式1:隐藏在环境变量中配置环境变量Windows中配置环境变量Linux中配置环境变量在代码中获取环境变量方式2:隐藏在配置文件中装包在代码中获取配置文件内容在之前的代码中,像数据库连接信息等敏感信息,都直接写在代码中&a…

每日一题 —— 882. 细分图中的可到达节点

882. 细分图中的可到达节点 给你一个无向图(原始图),图中有 n 个节点,编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链,每条边之间的新节点数各不相同。 图用由边组成的二维数组 edgesedgesedges 表示&…

182:vue+openlayers 使用d3实现地图区块呈现不同颜色的效果

第182个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载解析geojson文件,同时利用d3的颜色功能,使得美国每个州呈现出不同的颜色区块,方便识别。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,…

UNIX环境高级编程_文件IO_文件描述符

这篇文章记录文件描述符,下一篇文章记录文件描述表。 1 文件描述符 先说说什么是文件IO。文件的IO就是文件的输入输出,也就是文件的读写。读和写是以CPU为参考的,从CPU向文件中写入数据,就是写操作;从文件中读取数据…

Aviation turbofan starting model

Aviation turbofan starting model 涡扇发动机(Turbofan)即涡轮风扇发动机,来源于涡轮喷气发动机,主要是为了解决涡轮喷气发动机耗油率过高的问题。其结构特点是流过风扇的空气一部分进入压气机(内涵道),一部分进入由压气机外部通道(外涵道)流过,这部分气流不经过燃烧…

01 - Linux系统概要(再论计算机系统)

---- 整理自狄泰软件唐佐林老师课程 1. 再论计算机系统 计算机系统由躯体和灵魂两部分组成 – 躯体:构成计算机系统的电子设备(硬件) – 灵魂:指挥躯体完成动作的指令序列(软件) 躯体核心:中央…

2022-12-05 优化el-tree懒加载选人树

今后就都拼抵抗力了嗷 需求描述 此处有一棵懒加载树(可选人),右侧展示已选中的人。且父子关联,可以通过选中一个部门勾选所有子节点。问题是,选中父节点,当子节点未加载时,是获取不到勾选的子…

Redis配置、持久化以及相命令

Redis 什么是Redis Redis(远程字典服务器)是一个开源的、使用C语言编写的NoSQL数据库 Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。 Redis服务…

新来的性能测试工程师工资25K,看了他做的性能测试,那才真叫牛

一直深耕于互联网行业的测试工作,前期测试主要以项目为主,也就是 一个人负责2-3个项目 的测试工作,当然包括项目上功能、自动化和性能等一切测试工作。 我有几个朋友也在互联网大厂工作,从他们当中了解到其实真正的互联网大厂&…

【前端CSS】网站都变成灰色了,它是怎么实现的?(含源代码解析)

目录:网站都变成灰色了,它是怎么实现的?一、前言二、如何实现的三、代码的理解3.1 CSS3 filter(滤镜) 属性3.2 定义和使用3.2.1 CSS动画演示3.2.2 JS语法演示3.3 浏览器支持3.4 CSS 语法3.5 Filter 函数四、实例展示4.1 模糊实例4.2 Brightne…

3、JSP——Servlet、IDEA创建Web项目、IDEA创建JSP页面

目录 一、Servlet的概念 二、Servlet的作用 三、IDEA中创建Web项目 四、手动部署 五、自动部署 1、IDEA部署Tomcat服务器 2、IDEA部署JavaWeb项目 3、JSP页面 一、Servlet的概念 (1)Servlet:Server Applet的简称,是运…

云服务器配置Code-Server环境并运行Python和C++

目录1、前言2、部署流程2.1 前置准备2.2 运行docker安装Code-Server3、运行Code-Server3.1 配置运行环境3.2 运行Python3.3 运行C1、前言 云服务器需要配置C开发环境,了解到有code-server这个VsCode提供的云端服务,因此选择在云服务器上部署。 2、部署流…