diary
个人来说,写博客占用学习时间大概是伪命题,因为不写博客可能真的没怎么学习ORZ
简单写一个学习和日常的记录
没更新就说明又摸大鱼去了,基本每周或每两周记录一次,当周报!
2024/4/25
腾讯远程课题基本弄完了
正好组会要每次的论文总结,以后同步点论文分析
2024/1/22
期末大摆!直到寒假!一些要做的
学习一下腾讯的远程课题,ue5一点不会
调研小论文方向的一些最新内容
养生了,直接开睡
2023/12/17
试了用RNN网络做图像分类实验,图像的处理太抽象了调了快一天,最后全靠GPT的帮助才把图像数据成功输入到网络里
下周估计很忙,很多实验课节课,还要准备知识点
2023/11/19
期中基本结束,但任务还是比较多,一点点来完成
这周接触了一下ResNet、GAN、Nerf,基本理解其由来和基本实现原理
准备看一下 games104,会同步更新到博客,学完可能会去看开源引擎的源码,分析其设计和尝试修改,教程的样例引擎Piccolo终于编译过了,最逆天的一集拿MinGW摁编译MSVC的东西
C ...
MNIST-about convolution
Convolution Neural NetworkDigit Recognizer | Kaggle
最近基本补完了卷积的相关知识,拿 MNIST 来实践巩固一下,torch封装的确实好,定义完网络基本就是调参,对外屏蔽了太多的细节,但对于开发者来说就可以把精力花在对具体问题的分析和解决上(努力达到这个目标!)
准备以这个实验为例子,仔细记录和分析一下CNN重点知识&代码相关的内容
在参考的时候还看到有纯数学实现的CNN网络,太逆天了
同样使用 pytorch 构建 CNN,score 为 0.99035
可以通过数据增强等方法进一步提升模型精度
Notebook基本的一些库,包括torch, numpy, pandas, matplotlib, sklearn,都是必须的库
有用到TensorDataset, DataLoader,进一步标准化训练流程,也是为了防止显存溢出(最后预测的代码段如果不分batch,会报显存 out of memory)
最后,device判断 GPU 是否可用,使用 Kaggle 平台的 GPU P100,有卷积层的情况下,CPU 和 GP ...
Titanic - start from disaster
Titanic_PyTorchTitanic - Machine Learning from Disaster | Kaggle
目标是对泰坦尼克号的幸存者做预测,一个很好的试验田
使用 pytorch 构建的 DNN 进行训练和预测,准确率约 0.772
通过查看相关文章,实验数据存在一定的特殊性,高准确率基本都是先通过特征分析选取强特征再使用决策树(随机森林)的方式进行判断
总结了一下大致的过程:
载入数据
分析数据
预处理数据(空值,独热编码,标签,标准化,类型转换)
网络模型定义(网络,损失函数,优化器,超参数)
训练(mini-batch SGD)
预测
在 CPU 和 GPU 上都实现了一下,但是数据量小看不太出来差异,同时也需要对测试数据进一步划分以求出最佳epoch
其实还可以进一步加入 Kfold 操作,对各种超参数也没有怎么理解
Notebook1234567import numpy as np # linear algebraimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_ ...
Games101总结
Games101总结时隔两年,当初的很多东西都快遗失了,简单做一个笔记备份,彻底和本科阶段的学习做个告别
记录从前对图形学的热枕
01 - 101光栅化,几何,光线追踪,动画(模拟)
相关学科
线性代数,微积分,统计
光学,力学
信号处理,数值分析
美学
线性代数
向量点乘
向量叉乘:右手螺旋定则,例子:已知两轴确定坐标轴,判定左右内外
x×y=z右手坐标系,a×a=0(0向量)
矩阵
矩阵*向量 变换
转置,逆,单位矩阵,伴随矩阵,向量乘法转矩阵形式(点乘和叉乘)
Games101-Transformation提纲
Modeling
Viewing
scale缩放
$$\left[ \begin{matrix} x’ \ y’ \end{matrix}\right]\left[ \begin{matrix} s_x & 0 \ 0 & s_y \end{matrix}\right]\left[ \begin{matrix} x \ y \end{matrix}\right]$$
scale matrix
$$\left[ \ ...
SGI STL内存配置器分析
stl的容器利用缺省的Alloc参数为自己分配内存,Alloc就是stl的空间配置器,用于空间的管理
12template <class T, class Alloc = alloc>class vector {}
空间配置器由内存池,链表来具体实现对空间的分配、回收和管理
在一个对象的创建和销毁时(new和delete),各需要经历了两个步骤
创建
分配空间
用构造函数构造对象
销毁
析构
释放空间
注意区分::operator new和placement new
进一步抽象,就像房子和内部物体结构,同样可以在上面的步骤中,将空间管理和具体结构管理分开
见框架图
构造:调用placement new在指定的位置上设定初值
析构:析构指定位置的东西
空间的管理使用一块内存而不加管理会导致很多问题,诸如向系统堆栈(system heap)请求空间,内存不足,内存碎片等
针对内存碎片,有双层级配置器
对于内存不足和请求system heap,有内存池(memory pool)
为什么不只用一级配置器,malloc似乎也可以分配小空间?
防 ...
Inside The C++ Object Model简单记录
此篇为阅读《Inside The C++ Object Model》时对其中相对重要的 data 语义和 function 语义的一些记录
data语义
编译器一般将多个access sections连锁在一起形成一个区块,这个操作不会降低效率,诸如多个public域
C\C++的边界调整有可能会在中间插入若干bit(类似c的结构体内存对齐)
编译器会自动生成一些内容以支撑对象例如vptr,一般vptr会被插入对象的开头或结尾,依赖编译器的处理
123456789// static data member 不从属于class// 对其的引用会得到一个指向其数据类型的指针,如下struct Test { static const int st_con = 10;};int main() { auto pt = &Test::st_con; //pt is const int*}
所以这时,当两个class都有同名static data member则会产生冲突,此时编译器为每个static data member编码(name ...
SpeedTree导入UE后花叶丢失问题解决
版本问题,speedtree7的树库导入speedtree8后会出bug,据说会在下一个版本解决
解决方法就是ue4中把贴图的alpha通道直接连接到opacity
通过修改
修改成:
C++高级宏操作
C++高级宏操作最近在看一个c++各数据类型和 JSON 或 xml 互转的库,重点阅读了其中宏的编写
xpack项目链接
123456// 结构体格式如下struct User{ long uid; string name; XPACK(A(uid, "id"), O(name)); //用于指示各变量的特殊操作}
1234#define XPACK(...) \ X_PACK_COMMON \ X_PACK_DECODE_BEGIN X_PACK_N(X_PACK_L1, X_PACK_L1_DECODE, __VA_ARGS__) } \ X_PACK_ENCODE_BEGIN X_PACK_N(X_PACK_L1, X_PACK_L1_ENCODE, __VA_ARGS__) }
结构体中的变量数目不定,采用可变参数宏:
...和__VA_ARGS__配合使用,...处填充的内容将填充到___VA_ARGS__处
__VA_ARGS__替换最后一个具体参数后所有内容包括逗 ...
Gamma校正详解
Gamma校正详解参考阅读
LearnOpenGL
首先,物理上灰度的变化是平滑的,两倍的光子就产生两倍的灰度变化,是线性的,但是在人眼中就不同了,人眼对暗部更加敏感,是非线性的
打个比方就是在暗处 0.5 倍的物理光子变化,在人眼中可能变化了 2-3 倍,而在亮处,要让人感到 2 倍的亮度变化,光子可能需要增加 3-4 倍
如上图,线性空间(物理空间)中的 0.2 在人看来就是美术意义上的中灰
简易的一个例子假设自然界中一个 0.218 的灰度,在人眼中就是 0.5
用相机等光学元件记录时,记录的就是 0.218(大多数数码相机以线性方式记录光线)
经过 gamma 校正(gamma 编码),0.218 通过传递函数以 0.5 存储在硬盘中(这一步在现实中,由绘图软件本身做了,存储在 jpg 等格式的文件中)
显示时经 gamma2.2 压暗,以 0.218 的光显示,人眼中就是 0.5,和最开始直接观察一致
如果不校正直接存储在硬盘中,经过 gamma2.2 的压暗输出 0.035,人眼中就是 0.218,结果我们直接看到了线性空间,就是图一的第二行,导致图片的视觉效果非常 ...
PBR 基础
概述之前渲染流水线中的光照模型都是经验模型,为了渲染更真实的物体就有了基于物理的渲染 PBR
光在介质中传播,发生吸收和散射
当介质的密度发生变化时,产生反射和折射
所以光照射到物体上时,一部分发生反射(高光反射),一部分发生折射,而折射光一部分被吸收,一部分被散射到外部(次表面散射,漫反射)
BRDF双向反射分布函数
用于解释物体表面一点和光作用的函数
定义为某微面元单位时间内接受的能量经表面材质交互后往特定方向(立体角)辐射的能量$$定义:f(l,v) = \frac{dL(v)}{dE(l)}$$
辐射率(radiance):单位面积,单位方向上的光源辐射通量,用L表示
辐照度(irradiance):单位面积上的光源辐射通量,用E表示
两个量都可以理解为单位时间内的能量,因为都是从功率推过来的
由定义可知:$E=\int_\Omega Ld\omega$
主要描述表面反射和次表面散射
表面反射:高光反射
次表面散射:漫反射,折射的光中一部分被吸收一部分被重新散射到外部
反射等式$$L_o=\int_\Omega f(l, v)*L_i ...