首页 > 其他分享 >II. 在 Google Colab 上运行 NeRF

II. 在 Google Colab 上运行 NeRF

时间:2024-05-28 19:56:03浏览次数:31  
标签:Google 结果 模型 II Mesh 坐标 Colab NeRF 3D

在 Google Colab 上运行 NeRF 算法。

一、运行官方数据集

直接跟着 NeRF (Neural Radiance Fields) tutorial using google colab 这个视频操作即可,顺便验证一下 CoLab 作为以后深度学习环境的可行性。

二、训练自己的数据

博主是以 Silica GGO,他自己拍摄的二次元玩偶。

工程链接:kewa123/nerf_pl

作者建议的拍摄方式:
(1)360°环绕、共 32 张;
(2)保证 only the object;

Avoid Random Backgrounds: 杂乱的背景会影响最后的渲染效果,建议尽量避免在桌子上拍,可以放在更大的平面上拍(比如床上)。

下面是整体操作流程:

(一)数据预处理:COLMAP 进行标定

using colmap.notebook and upload all images to your own Google Drive in the post.

Question: How the code can calculate accurate pose of all cameras? seems like using a python file.

(二)运行 NeRF 脚本

和官方部分一致。

三、导出 3D Mesh 模型

Photogrammetry: 利用多相机阵列,生成 Mesh 结果,从而可以在 Unity 等 3D 建模软件中使用该结果,这个技术已经比较成熟了。

(一)predict occupancy

导出 3D Mesh 的原理:把大的 3D 空间分成很多小方块(cubes),生成模型时只需要推断出每个小方块的位置处是否有模型即可。那么问题来了:如何知道这点呢?

对 NeRF 的模型输入 \((x,y,z)\) 坐标,会返回 occupancy score(记为 \(\sigma\) 值),如果这个坐标没有东西,那么 \(\sigma\) 会很小(0~10),因此我们只需要把所有 cubes 的坐标输入到 NeRF 模型中,即可得到该处是否被模型“占用”。此外会设定一个 \(\sigma\) 阀值,大于这个阀值的会被认为是有东西。

(二)Matching cube algorithm

该算法的输入是每个 cube 是否被 occupied 的布尔值,输出是 Mesh 的顶点(vertices)坐标,也就是 Mesh 边缘的顶点坐标。

这一步可以理解成把上一步离散的点”融合“成一个整体,形成 Mesh 的形状 Shape。这一步的结果如下图所示:

8e3f8c26db060d9cace4f99055ae01ef.png
这是原作者论文中给出的结果,只有白色,没有颜色。

(三)Remove the noise

外部有很多离散点,去除的方式是:Keep the largest cluster(保留最大簇) 。模型中所有三角形都是连通的,但是噪声的三角形和模型是不连通的。所以我们可以计算每个 cluster 的三角形数,就能把小块的 cluster 去掉,也就是噪声

To count the number of triangles a cluster have, and we can eliminate the clusters which are not the largest, so we can eliminate these small noise.

四、为 3D Mesh 上色

我们想知道 Mesh 上每个 vectex 的颜色,需要把顶点反投影原始图片中,得到每个点在每张图片的投影点的 RGB 值,计算平均值作为最终的 RGB 结果。

4a7580eeefec3675bb039cc6f3a7e7ab.png
上图是直接使用反投影的结果。我们发现:occlusion(被遮挡)处反投影的结果是遮挡住它的像素颜色

Let’s take a vertex on the back of the mantle, what is its RGB value? If we draw a line connecting this vertex on the mantle to our camera plane,  it actully passes through the face. So the vertex in the back actually get assigned with the color on the face, which end up with this face on the mantle.
The problem actually comes down to how to predict the occlusion correctly, so how to know whether a vertex is occluded in a camera view.
We can use NeRF model again.

cd060739fa083e5a0cfe7dd6403fd7d9.png
利用 occupance-distance 坐标图,计算曲线和坐标轴的面积作为 score ,如果分数很大说明该点之前存在遮挡,该点在本相机内不可见,不需要计算它的反投影 RGB 值

把 Mesh 中所有点都如此操作,最终的结果如下图所示:
55cf1029d91e056cf9d56368cc56aedb.png

可以看出:最终的 Mesh 结果还是很棒的。这部分也是该作者在该视频中做出的比较具有创新点的工作,值得借鉴!

题外话

其实 NeRF 主要做虚拟视点生成方案的,而 3D Mesh 只是它的副产品,并且它的结果也并不平滑(主要是因为 \(\sigma\) 的值,导致会产生很多噪音)。也有的研究者在做如何把这两者结合起来的工作,比如博主提供了 neus 和 neurecon 这两个方法,后者的效果更好一些。

五、利用 unity 实现实时 3D 渲染

https://youtu.be/8AJIIVImPWo?si=DDiHebadsryzlchY

标签:Google,结果,模型,II,Mesh,坐标,Colab,NeRF,3D
From: https://www.cnblogs.com/7ytr5/p/18218712

相关文章

  • III. NeRF 代码框架
    NeRF代码框架。一、所有深度学习的大致框架我们看任何一个深度学习代码,都是找这三部分的位置,分析其作用。最后把Loss的梯度更新到DNN中,便能不断提高网络的准确度。二、训练代码的细节(一)采样区间首先,作者通过设置near和far限制了采样区间,如下图所示为\([2,6]\)之......
  • 解决 IIS Express 启动错误:“拒绝访问”问题
    报错StartingIISExpress...stderr:FailedtoregisterURL"http://localhost:8378/"forsite"app-3344e220-8b03-465c-8df1-3c41981352a1"application"/".Errordescription:拒绝访问。(0x80070005)Unabletostartiisexpress.拒绝......
  • II. 在 Google Colab 上运行 NeRF
     一、运行官方数据集直接跟着NeRF(NeuralRadianceFields)tutorialusinggooglecolab这个视频操作即可,顺便验证一下CoLab作为以后深度学习环境的可行性。二、训练自己的数据博主是以SilicaGGO,他自己拍摄的二次元玩偶。工程链接:kewa123/nerf_pl作者建议的拍摄方......
  • III. NeRF 代码框架
    本文介绍了初代NeRF的训练大致框架。一、所有深度学习的大致框架我们看任何一个深度学习代码,都是找这三部分的位置,分析其作用。​最后把Loss的梯度更新到DNN中,便能不断提高网络的准确度。二、训练代码的细节(一)采样区间首先,作者通过设置near和far限制了采样区间,如......
  • ctfshow web 月饼杯II
    web签到<?php//Author:H3h3QAQinclude"flag.php";highlight_file(__FILE__);error_reporting(0);if(isset($_GET["YBB"])){if(hash("md5",$_GET["YBB"])==$_GET["YBB"]){echo"小伙子不错嘛!!......
  • 推推宝藏会议-RAIIC 2024
    【IEEE出版|往届3个月完成检索】第三届机器人、人工智能与智能控制国际会议(RAIIC2024)The3rd InternationalConferenceonRobotics,ArtificialIntelligenceandIntelligentControl 重要信息会议时间:2024年7月5-7日会议地点:中国·绵阳二轮截稿时间:2024年6月......
  • .net 8 api部署到iis出现500.19
    1.先下载了.net8sdk包,sdk包自带运行时。2.通过文件发布api到iis3.点击运行出现500.19,已经程序池改为无托管代码,并无效果4.点击模块发现core的api无法展示模块列表,framework可以展示 5.下载dotnet-hosting-2.2.5-win 问题解决链接:https://download.visualstudio.microsoft.com......
  • yii2好用的数组封装函数
    之前用yii2的时候框架封装的几个数组函数很好用,中间换了框架,把函数封装成了util<?phpnamespaceapp\utils;interfaceArrayable{/***Returnsthelistoffieldsthatshouldbereturnedbydefaultby[[toArray()]]whennospecificfieldsarespecified.......
  • 【链表】Leetcode 92. 反转链表 II【中等】
    反转链表II给你单链表的头指针head和两个整数left和right,其中left<=right请你反转从位置left到位置right的链表节点,返回反转后的链表。示例1:输入:head=[1,2,3,4,5],left=2,right=4输出:[1,4,3,2,5]解题思路11、遍历链表:找到left前面的节......
  • 谷歌地图 | Google I/O '24 重磅发布助力企业拓展海外市场的新功能!
    编者按:本文是GoogleI/O2024系列的一部分,该系列分享了Google年度开发者大会上最新的GoogleMapsPlatform新闻。距全球首个GoogleMapsAPI问世已近20年。它引领了网络和移动端地理空间体验的革命。从那时起,GoogleMapsPlatform始终与开发者社区携手共进,不断发展,功能......