K-Planes代码记录

随记

原文 K-Planes: Explicit Radiance Fields in Space, Time, and Appearance,又要换baseline,可是效果不好能怎么办呢,我可不可以发疯。k-planes的代码又是非常工程琐碎的,大佬的代码果然不顾小白死活。随便记录下整个过程。
在这里插入图片描述

代码记录

main.py

主要用于:加载config文件,data,初始化等

loda_data() # 加载数据
init_trainer()	# 初始化模型(包括k-planes loss function等各种)
load_model()

type有几个参数可选,其中phototourism等价于NeRF-Wvideo相当于动态场景,其他是静态;从line 70进入各种初始化步骤。

在这里插入图片描述
所有参数都初始化完毕后,开始训练

line 160      trainer.train()

base_train.py

一系列参数的初始化
在这里插入图片描述

还有损失函数的计算和优化
在这里插入图片描述

lowran_model.py

经过一系列跳转,在这个文件下进行KPlaneField,KPlaneDensityField,ProposalNetworkSampler等一系列采样和plane的生成和初始化操作,还有forward()函数,插值,query_rgb query_density。这里我只关心k-plane生成
在这里插入图片描述

kplane_field.py

1. 生成并初始化K-planes

在这里插入图片描述

最后生成以下k-planes:

在这里插入图片描述
2. Init appearance code-related parameters等价于NeRF-W(略)
3. Init decoder params: 对方向进行编码
4. 初始化decoder
这里有两种选择,使用论文中的线性解码器还是MLP,直接看else line189-217

video_trainer.py

其他的初始化都没那么重要,第二重要的loss,k-plane添加了很多正则化的loss,就在这个函数里进行初始化
在这里插入图片描述

需要注意的点

  1. pytorch提供的插值函数需要将x归一化的[-1,1]之间
  2. 损失函数的计算
  3. F.grid_sample()双线性差值函数的坑

这里详细说下第三点:

torch.nn.functional.grid_sample(input, grid, mode='bilinear', padding_mode='zeros', align_corners=None)
# input = [N, C , H, W]
# grid = [B, 1, n, 2]   coordinate

关于grid最后两维是uv,举例:如果u=x, v=time,则是在往input里的W和H处插值,即:x对应W,time对应H,刚好是相反的对应关系。在kplane中 第三个plane (一个6个)是 (x,t),获得 grid = torch.Size([1, 1, 194915, 2]) 其中最后一维是xt,但是去看要插值的网格 [1,32,25,128],这里的25肯定是t的分辨率,所以刚好是 [batch_size, feature_dim, t_res, x_res]和gird最后一维的顺序相反
关于这点就是非常非常小的细节,虽然不影响使用,但是如果想修改的话一定注意!

记录一下求ray还是什么的区别,暂时没有很重要。不过原文里的这部分好像被删掉了,这里是在B站up那里截的图。

在这里插入图片描述

在这里插入图片描述

在MATLAB中直接提供完整的飞机大战游戏代码是不可能的,因为这需要大量的代码和详细的结构设计,而且MATLAB更适合做数据分析和科学计算,而不是游戏开发。然而,我可以为你提供一个简化的飞机模型和基本的游戏循环框架,你需要根据这个基础自行扩展和完善。 ```matlab % 定义飞机类 classdef Plane < handle properties x, y, width, height, speed % 飞机的位置、尺寸和速度 direction = 'right' % 初始方向 end methods function this = Plane(x, y) this.x = x; this.y = y; end function move(this, dx, dy) switch this.direction case 'left' this.x = this.x - dx; case 'right' this.x = this.x + dx; case 'up' this.y = this.y - dy; case 'down' this.y = this.y + dy; end end end end % 主游戏循环 function gameLoop() % 初始化飞机和敌机 playerPlane = Plane(0, 0); enemyPlanes = cell(5, 1); % 五个敌机实例 % 游戏主循环 while true % 更新敌机位置 for i = 1:numel(enemyPlanes) % 更新代码... end % 检查碰撞 if any(playerPlane.x == [enemyPlanes.x]) && any(playerPlane.y == [enemyPlanes.y]) disp('Game Over!'); break; end % 玩家操作 key = keyboard; % 获取按键 switch key.Key case 'd' % 右移 playerPlane.move(10, 0); case 'a' % 左移 playerPlane.move(-10, 0); % 其他方向键类似 end % 刷新屏幕 % 这里假设你有一个显示飞机的函数 displayPlanes([playerPlane, enemyPlanes]); pause(0.1) % 控制游戏帧率 end end % 显示飞机的简单函数 function displayPlanes(planes) % 这里只是一个示例,实际应使用imshow或其他方法绘制 for plane = planes rectangle('Position', [plane.x, plane.y, plane.width, plane.height], 'EdgeColor', 'k'); end end gameLoop() ``` 请注意,上述代码仅为示例,你需要自己填充敌机生成、碰撞检测、得分记录以及游戏规则的部分。同时,真正的飞机大战游戏会更复杂,涉及到更多细节和优化。如果想深入了解游戏开发,推荐使用Unity或pygame这样的专业游戏引擎配合Matlab。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值