Category: Study

17 Posts

神经辐射场 (NeRF) – 代码剖析
神经辐射场 (NeRF) - 代码剖析 感谢 刘志松师兄 对此文的指导。 基于 Nerf-pl 的代码做进一步剖析。参考代码:Nerf-pl: https://github.com/kwea123/nerf_pl 论文信息: 网站: https://www.matthewtancik.com/nerf 论文:https://arxiv.org/pdf/2003.08934.pdf 代码:https://github.com/bmild/nerf 位置编码 NeRF的输入是一个五维向量: (物体)空间点的位置 [katex]\mathbf{x}=(x,y,z)[/katex] 和 (相机)观测方向 [katex]\mathbf{d}=(\theta, \phi)[/katex]。NeRF使用了位置编码(positional encoding)把一维的位置坐标,转换为高维的表征。例如 [katex]p\in\mathbb{R^1}[/katex], 通过函数[katex]\gamma(\cdot)[/katex]映射到 [katex]\mathbb{R^{2L}}[/katex] 空间中,这里[katex]L[/katex]指的是编码的数量,对于位置坐标,[katex]L=10[/katex];对于观测角度,[katex]L=4[/katex]。 [katex display=true] \gamma(p)=\left(\sin \left(2^{0} \pi p\right), \cos \left(2^{0} \pi p\right), \cdots, \sin \left(2^{L-1} \pi p\right), \cos \left(2^{L-1} \pi p\right)\right) [/katex] 代码实现…
神经辐射场 (NeRF) – 下
神经辐射场 (NeRF) - 下 NeRF: 网站: https://www.matthewtancik.com/nerf 论文:https://arxiv.org/pdf/2003.08934.pdf 代码:https://github.com/bmild/nerf 参考文献: NeRF:用深度学习完成3D渲染任务的蹿红 【NeRF论文笔记】用于视图合成的神经辐射场技术 NeRF的数学推导 NeRF论文阅读 基本流程 NeRF的输入是一个五维向量: (物体)空间点的位置 [katex]\mathbf{x}=(x,y,z)[/katex] 和 (相机)观测方向 [katex]\mathbf{d}=(\theta, \phi)[/katex]。输出是体密度(volume density, [katex]\sigma[/katex],可以理解为透明度)和基于观测角度的物体的空间点色彩 [katex]\mathbf{c}=(r,g,b)[/katex]。 通过对每一束从相机射出的光线,计算途径空间点的色彩 [katex]\mathbf{c}[/katex] 和体密度 [katex]\sigma[/katex]。然后基于获得的空间点的色彩和体密度,进行体素渲染 (Volume Rendering)得到预测的像素值。 NeRF的网络模型(以下简称 NeRF-Model) 实现的功能实际上是 [katex]F_{\Theta}:(\mathbf{x}, \mathbf{d}) \rightarrow(\mathbf{c}, \sigma)[/katex]。实现了从 【空间点位置 + 观测角度】 到 【空间点色彩+体密度】 的映射。 辐射场体素渲染 辐射场体素渲染(Volume Rendering with Radiance Fields)…
神经辐射场 (NeRF) – 上
神经辐射场 (NeRF) - 上 网站: https://www.matthewtancik.com/nerf 论文:https://arxiv.org/pdf/2003.08934.pdf 代码:https://github.com/bmild/nerf 参考文献: NeRF:用深度学习完成3D渲染任务的蹿红 【NeRF论文笔记】用于视图合成的神经辐射场技术 体素渲染 体素渲染 (Volume Rendering) [2] Kajiya J T, Von Herzen B P. Ray tracing volume densities[J]. ACM SIGGRAPH computer graphics, 1984, 18(3): 165-174. 论文中首先介绍了经典的体素渲染(volume rendering) [2] 方法。体素密度 [katex]\sigma(\mathbf{x})[/katex] 可以被理解为,一条射线 [katex]\mathbf{r}[/katex] 在经过 [katex]x[/katex] 处的一个无穷小的粒子时被终止的概率,这个概率是可微的。换句话说,有点类似于这个点的不透明度。由于一条射线上的点是连续的,自然的想法是这条射线的颜色可以由积分的方式得到。将一个相机射线标记为 [katex]\mathbf{r}(t)=\mathbf{o}+t\mathbf{d}[/katex] ,这里 [katex]\mathbf{o}[/katex] 是射线原点, [katex]\mathbf{d}[/katex] 是前述的相机射线角度,[katex]t[/katex]…
对极几何(Epipolar Geometry)
对极几何(Epipolar Geometry) 参考文献: 对极几何与基本矩阵 视觉SLAM 十四讲——对极约束求解相机运动(2D-2D) 视频(【高翔】视觉SLAM十四讲):https://www.bilibili.com/video/BV16t411g7FR?p=6 视觉SLAM十四讲 PDF 目的 我们希望求取两帧图像[katex]I_1[/katex]和 [katex]I_2[/katex] 之间的运动,设第一帧到第二帧的运动为R; t。两个相机中心分别为[katex]O_1[/katex];[katex]O_2[/katex]。现在,考虑I1 中有一个特征点[katex]p_1[/katex],它在[katex]I_2[/katex] 中对应着特征点[katex]p_2[/katex]。我们晓得图像上这两个点对应的是空间中的同一个点[katex]P[/katex]。即 [katex]p_{1}=K P, \quad p_{2}=K(R P+t)[/katex]。[katex]K[/katex] 为相机内参矩阵. 本质矩阵(Essential matrix) 我们知道由相机1到相机2是刚体运动,那么观测点P在相机1坐标系的坐标就可以通过刚体转换变成相机2坐标系下, 这里的 [katex]x_1[/katex] 和 [katex]x_2[/katex] 是两个像素点的归一化平面上的坐标: [katex]x_{1}=K^{-1} p_{1}, \quad x_{2}=K^{-1} p_{2}[/katex]。 [katex display=true] x_2=R x_1 +T [/katex] 其中[katex]R[/katex]和[katex]T[/katex]分别表示旋转和平移,如果我们将其左叉乘一个[katex]T[/katex],即: [katex display=true] \begin{align*} T\times x_2&=T\times \left( Rx_1+T \right)…
成像模型 (Camera Projection)
成像模型 (Camera_Projection) 参考自课件: (Camera Projection - 1)[https://www.cse.psu.edu/~rtc12/CSE486/lecture12.pdf] (Camera Projection - 2)[https://www.cse.psu.edu/~rtc12/CSE486/lecture13.pdf] https://mp.weixin.qq.com/s/qxLgnWELQ2ZI4MyreXGOYQ 我们需要一个数学模型来描述如何将3D世界坐标系中的点 (U,V,W) 投影到2D图片坐标系([katex]u[/katex],[katex]v[/katex])中。 Camera Coords to Film Coords (3D to 2D) 相机坐标系 Camera Coords ([katex]X[/katex],[katex]Y[/katex],[katex]Z[/katex]) to 画布坐标系 Film Coords ([katex]x[/katex],[katex]y[/katex]): 对于相机坐标系中的点([katex]X[/katex],[katex]Y[/katex],[katex]Z[/katex]),其中[katex]Z[/katex]是从相机原点到该点的距离。已知焦距[katex]f[/katex],因此,相机坐标系到画布坐标系的比例关系为 [katex]f/Z[/katex]。 对应的,我们想求此点在画布坐标系中的横纵坐标([katex]x,y[/katex]),只需要按比例缩放: [katex display=true] x=X \cdot \frac{f}{Z} = f\frac{X}{Z} [/katex] [katex display=true] y=Y \cdot \frac{f}{Z} = f\frac{Y}{Z}…
【笔记】实用机器学习 – 模型整合
李沐老师实用机器学习笔记: Model Combination 5.1 方差和偏差 5.2 Bagging 5.3 Boosting 5.4 Stacking 模型整合(Model Combination) 授课材料 ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili 5.1 方差和偏差 5.2 Bagging 5.3 Boosting 5.4 Stacking ? 课件: 讲义下载地址 7 - Model Combination Bias and variance Bagging Boosting Stacking 偏差(bias)和方差(variance) 定义 参考自: https://zhuanlan.zhihu.com/p/412268381 泛化误差可分解为偏差、方差与噪声之和。 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了算法本身的拟合能力。 方差度量了同样大小的训练集的变动所导致的学习性能变化,即刻画了数据扰动所造成的影响。 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。 偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。 设计机器学习模型时,我们需要考虑: 准。bias表示模型相对真实模型的差异。想要低bias,需要复杂化模型,增加参数,但是容易过拟合造成high variance。low…
【笔记】实用机器学习 – 机器学习模型
李沐老师实用机器学习笔记: Machine Learning Model 3.1 机器学习模型概览 ML Model Overview ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 机器学习算法的类型 监督学习:有label的训练数据 (最常使用) 半监督学习:有label和无label的数据都用来训练,例如,self-trianing 无监督学习:使用无label的数据进行训练,例如,聚类,密度估计 强化学习:使用交互式的观测,最大化奖惩 监督学习的元素 模型:有一系列可以训练的参数,能把输入映射为输出 损失函数(loss):测量模型的输出和实际label的差距 目标(objective): 优化模型的目标,例如,最小化loss 优化(optimization):用来实现目标的算法,例如,SGD 3.2 决策树 ?️ 授课视频: 授课视频【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 这里课程介绍的很简洁,详细的介绍请参考我们的文章 (Wan-Chi Siu, Xue-Fei Yang, Li-Wen Wang, Jun-Jie Huang and Zhi-Song Liu, “Introduction to Random…
【笔记】实用机器学习 – Data 爬虫
网页数据的抓取-爬虫 实验环境 OS: windows 11 Python 3.6 Chrome (我的版本是 98.0.4758.102) 使用的python工具是 selenium. 从https://chromedriver.chromium.org/home下载对应版本的chromedriver。我的chrome版本是98,所以chromedriver也是98。把解压出来的chromedriver.exe 放到工程目录下。 参考文章: https://selenium-python-zh.readthedocs.io/en/latest/getting-started.html 测试样例 from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('headless') driver = webdriver.Chrome(executable_path="./chromedriver.exe", chrome_options=options) driver.get("https://www.baidu.com/") print(driver.title) driver.close() 流程: 首先打开一个chrome浏览器。指定chromedriver的地址 "./chromedriver.exe"。打开百度网页,输出题目。 通过百度获取天气 xpath 可以通过chrome里右键单击所需元素“检查”,后右键单击元素选择“复制”==》“复制xpath” from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait…
【笔记】实用机器学习 – Data III
李沐老师实用机器学习笔记: Data III 2.2 数据清理 数据往往不是完美的,经常存在很多错误,包括 丢失某些特征,异常值等, 好的机器学习模型应该容忍这些错误。 使用存在错误的数据训练模型,模型可能会收敛,但会影响精度和训练速度,而且,对于新收集的数据,也可能带来不利的影响。 因此,应当数据应该尽可能的干净。 ?️ 授课视频: 2.2 数据清理【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 数据错误的类型 Outliers 离群值: 某一些值与其他的观测值显著不同 违背规则:例如,价值应当大于0 违背模式:例如,singlefamily 写成了 singlefamily, 中间多了 找出数据中存在的错误的方法 异常值检测 对于异常值的检测,我们可以使用boxplot。首先我们找出中值,并计算出25~75%的区间。在图上,这个区间是蓝色或棕色的矩形。我们找出上下1.5倍矩形框之外的值,这些值通常情况下是有问题(错误)的值。 基于规则的检测 我们可以制定规则来找出错误, 依赖性约束:基于邮编,我们可以验证城市名称。基于纳税号,我们可以验证公司名称 拒绝性(Denial)约束:例如,如果有纳税号,电话号码通常不为空 基于模式的检测 句法模式:例如检测到eng(简写),我们就知道此项应该为English 字符。 语义模式:国家应该有首都,如果国家检测到斯坦福,斯坦福没有首都,因此无效 我们通常情况下可以使用图形化界面帮助我们指定规则,这里可以使用数据工程师常用的软件,例如Trifacta(如果需要使用的话,需要进一步学习)。 2.2 数据变换 机器学习算法需要固定长度,条件固定,理想分布的输入数据。这要求了我们需要提前预处理数据。 ?️ 授课视频: 2.3 数据变换【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义下载地址 实数值 归一化0到1…
【笔记】实用机器学习 – Data II
李沐老师实用机器学习笔记: Data II 1.3 网页数据的抓取 网页数据的抓取是获取训练数据的一个重要的方式。与爬虫不同,数据抓取是为了获取特定的信息,而非爬取整个网页的内容。 ?️ 授课视频: 1.3 网页数据抓取【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义 工具 通常情况下,网站都会有防护措施,防止机器爬取数据。因此我们一般要使用 headless browser 像selenium。 而且,我们还需要大量的IP,一旦ip被禁止,我们可以换IP继续抓取数据。 案例学习 房屋价格的抓取 (省略),使用云平台,可以方便的更换ip,而且机器要求不高,价格不贵。 法律问题 数据抓取本身并不违法 但是,我们要避免抓取敏感数据:(1)需要登陆才能访问的数据,一般比较敏感。(2)不要爬取有版权的信息,(3)网站声明不允许爬取。 如果用做商业用途请咨询律师 1.4 数据标注 ?️ 授课视频: 1.4 数据标注【斯坦福21秋季:实用机器学习中文版】_哔哩哔哩_bilibili ? 课件: 讲义 流程图 只有部分标签,没钱,不想人工标注数据:半监督学习 如果仅有一小部分的数据,可以使用半监督学习进行数据标注。这里我们的假设是: 数据有连续性:拥有相似特征的样本有相同的标签 聚类性:数据有聚类的特性,同一类有相同的标签 流体假设:数据的复杂度比输入的维度要小 自学习 首先,我们先用有限的标签训练一个模型。然后,我们用模型去预测未标记的数据,对于高置信的预测样本,我们把他们融合到标记的数据中,再继续训练我们的模型。 这里我们可以使用更深的模型,或者多个模型做集合预测。因为这里的深度学习模型只是用来打标签,并不会用来实际部署。 只有部分标签,不差钱,可以标注数据:众包标注 可以使用类似于Amazon Mechanical Turk的众包平台,人工标记大量数据。需要注意的是: 用户标注页面要尽可能地简单:越简单,对标记人员的要求越低,就可以找到更多的标记人员,就可以拿到更低的价格。比如,对于一个365类的分类问题,可以简化为365个二分类问题,标注人员只需要回答是或者否。 花费…