存放一些有所帮助、但又没写成自己的博客的网页文章。
Unity
ADVANCED PROGRAMMING AND CODE ARCHITECTURE
存放一些有所帮助、但又没写成自己的博客的网页文章。
ADVANCED PROGRAMMING AND CODE ARCHITECTURE
为了写一个半透明物体的shader,有以下几点基础要求:
在三维空间中描述旋转是一件挺麻烦的事。常用的欧拉角虽然直观简单,但是存在顺序依赖和万向节死锁的问题,在通用的旋转运算上并不可行。进而引入的四维数虽然在运算上很有效,但是对于第一次见到的人来说一点也不算直观、易懂。
Krasjet的文章从二维复数出发,进而理解三维四元数的表示意义,循序渐进,通俗易懂,因此记录一下学习笔记。
复数的定义和运算性质不再赘述。对于$ z = a + bi $,相当于对复数基底 $ (1,i) $ 的线性组合,因此可以表示为一个列向量 \(z=[a,b]^T\),但更进一步,其实我们能把复数表示为矩阵。
对于两个复数\(z_1 = a + bi , z_2=c + di\),可以得到观察一下其乘法结果:
\[ \begin{aligned} z_1z_2&=a \boldsymbol{c} -b \boldsymbol{d} \\ &+(b \boldsymbol{c}+a \boldsymbol{d})i \\ &=\left[\begin{array}{cc} a & -b \\ b & a \end{array}\right]\left[\begin{array}{l} c \\ d \end{array}\right] \end{aligned} \]
我们知道右边的\([c,d]^T\)是\(z_2\)的列向量表示形式,而左边的矩阵,也只和\(z_1\)的系数有关,因此也可以看做是\(z_1=a+bi\)的矩阵表示。我们不妨尝试将两边都写成矩阵形式:
\[ z_1z_2=\left[\begin{array}{cc} a & -b \\ b & a \end{array}\right] \left[\begin{array}{l} c & -d\\ d & c \end{array}\right] =\left[\begin{array}{cc} ac-bd & -(bc+ad) \\ bc+ad & ac-bd \end{array}\right] =ac-bd + (bc+ad)i \]
上式可以看出\(z_1,z_2,z_1z_2\)在矩阵表示下也同样满足复数基本运算。这时我们可以发现一个神奇的现象:复数可以表示为矩阵,复数乘法可以表示为矩阵乘法,而矩阵乘法进而可以让我们联想到矩阵表示的仿射变换:
\[ z=\left[\begin{array}{cc} a & -b \\ b & a \end{array}\right] =\sqrt{a^2+b^2} \left[\begin{array}{cc} \frac{a}{\sqrt{a^2+b^2}} & \frac{-b}{\sqrt{a^2+b^2}} \\ \frac{b}{\sqrt{a^2+b^2}} & \frac{a}{\sqrt{a^2+b^2}} \end{array}\right] \]
这种式子是不是很眼熟——即以a,b为边的三角变换式:
\[ z=\sqrt{a^2+b^2}\left[\begin{array}{cc} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{array}\right] =\left[\begin{array}{cc} ||z|| & 0 \\ 0 & ||z|| \end{array}\right] \left[\begin{array}{cc} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{array}\right] \]
此时复数\(z=a+bi=||z||(cos\theta+sin\theta i)\)表示的二维变换水落石出,左边的矩阵是一个 等比放缩矩阵,右边的矩阵是一个 旋转矩阵。复数乘法,即是两个变换矩阵的作用。
并且再将复数的三角形式代回\(z_1z_2\)可知,\(z_1z_2=cos(\theta+\alpha)+sin(\theta+\alpha) i\) ,即复数的累乘,在变换上体现为旋转角度的累加\(\theta+\alpha\),以及缩放上的累乘。
看到几篇很棒的博客,如何阅读——刘未鹏,怎样花两年时间去面试一个人,想要从中汲取一些知识,并且记录一些自己的思绪。
其实现在的在校生根本不缺学习的动力(特别是计算机,特别是研究生),毕竟现在的大环境已经卷的不成样子。看着各大公司的招聘简历,以及相关面经,会发现大学的课程完全不足以培养你进入大厂工作,如果真只是按部就班上完了全部课程,那恭喜你达到了新成就毕业即失业。在这个能力为硬指标的行业,但凡对工作有所期望的人,都会想方设法去学习更多的东西,起码面试三轮可以有能力通过一轮吧。
在视觉中做Transformer有两大问题,图片比起语言分辨率过高,以及图片中的目标尺度有大有小,变化很大。为了解决这两个问题,Swim Transformer一方面做了多分辨率的层级式结构,另一方面设计了 shift of the window partition between consecutive self-attention layers。