1.3d稀疏卷积——spconv源码剖析(五)
2.揭开Three.js的动动画代码面纱,浅谈Three.js
3.[3D游戏开发实践] Cocos Cyberpunk 源码解读-目录结构
4.MMDetection3D之DETR3D源码解析:整体流程篇
5.3d稀疏卷积——spconv源码剖析(一)
3d稀疏卷积——spconv源码剖析(五)
介绍在构建的画源Rulebook指导下执行特定的稀疏卷积计算,关注于类SparseConvolution,动动画代码其代码位于spconv/conv.py。画源
Fsp.indice_subm_conv和Fsp.indice_conv经过spconv/functional.py中的动动画代码SubMConvFunction和SparseConvFunction对象转换,最终会调用spconv/ops.py模块中的画源字体颜色源码代码indice_conv等函数。
专注于子流线卷积接口:indice_subm_conv,动动画代码其代码位于spconv/functional.py。画源
通过Python接口调用底层C++函数可能不够直观,动动画代码因此使用torch.autograd.Function封装算子底层调用,画源该类表示PyTorch中的动动画代码可导函数,具备前向推理和反向传播实现时,画源即可作为普通PyTorch函数使用。动动画代码
值得注意的画源是,Function类在模型部署中具有优势,动动画代码若定义了symbolic静态方法,此Function在执行torch.onnx.export()时,可依据symbolic定义规则转换为ONNX算子。
apply方法是torch.autograd.Function的一部分,此方法负责在前向推理或反向传播时的调度工作。通过将indice_subm_conv = SubMConvFunction.apply简化为indice_subm_conv接口,结绳软件源码下载简化了算子使用,屏蔽了SubMConvFunction的具体实现。
SubMConvFunction的前向传播方法forward调用spconv/ops.py的indice_conv函数。在src/spconv/all.cc文件中,通过PyTorch提供的OP Register对底层C++API进行注册。
通过torch.ops.load_library加载.so文件,使用torch.ops.spconv.indice_conv调用src/spconv/spconv_ops.cc文件中的indiceConv函数。
深入探索src/spconv/spconv_ops.cc文件中的indiceConv函数。
代写部分代码内容...
揭开Three.js的面纱,浅谈Three.js
对WEBGL探索的旅程中,朋友推荐我尝试Three.js,这是一篇关于这款开源3D引擎的初步了解文档。
Three.js,一款在浏览器内运行的强大3D引擎,让你能够构建丰富多彩的三维场景,包括相机、光照、材质等元素,其主页上的示范作品令人赞叹。
作为WebGL三维引擎的答题脚本源码代表,Three.js以其丰富的中文资料和广泛的使用度在中国开发者中享有盛名。它是基于JavaScript的脚本库,利用WebGL技术,源代码在GitHub上开源。
Three.js的独特之处在于它以JavaScript实现GPU加速的3D动画,无需依赖浏览器插件,为网页开发提供了高效且直观的工具。它在3D图形编程中的常用对象上做了封装,提升了开发效率。
作为WebGL框架的佼佼者,Three.js凭借其易用性和扩展性,几乎能满足大部分开发者的3D需求。它的历史可以追溯到年,由Ricardo Cabello在GitHub上首次发布,早期源于他对3D场景的演示和ActionScript的使用,后来移植到JavaScript。
Three.js的应用范围广泛,只要是支持WebGL 1.0的现代浏览器,如Firefox、Chrome、吉林溯源码营销Opera、Safari、IE 及Microsoft Edge,都可以运行。WebGL,作为一个JavaScript API,允许在浏览器中以硬件加速的方式创建3D图形,无需插件,与OpenGL ES 2.0高度兼容。
要深入学习Three.js,可以访问其官方英文网站threejs.org和中文网站webgl3d.cn,那里有详细的文档和教程。此外,还有丰富的视频教程和参考文档供你参考。
[3D游戏开发实践] Cocos Cyberpunk 源码解读-目录结构
在深入解读Cocos Cyberpunk源码之前,首先,让我们打开scene-game-start场景,启动游戏预览,进入游戏场景。点击START按钮,救赎交易猫源码游戏正式开始。漫游摄像机将带你漫游整个场景,再次点击START,可以进入游戏。
在电脑端按ESC键或手机端点击设置按钮,查看操作说明。接下来,让我们浏览Cocos Cyberpunk项目的目录结构。在左下角的Assets窗口中,我们可以看到项目文件的分层。
首先,animations目录中仅包含用于场景漫游的摄像机动画文件。LightFX目录存储了光照贴图,这些是光照烘焙系统自动生成的,无需手动修改。res目录是整个游戏资源的集中地,包括动画、特效、模型、shader、UI、音效等资源。
resources目录则存放动态加载的资源,当前内容较少,随着游戏的完善,资源将会增多。scene目录包含了环境反射探针文件,与场景文件名对应的文件夹存放反射贴图。scene-development目录则包含一些用于单元测试的开发场景。
scripts目录存放所有游戏逻辑脚本,而src目录可能包含项目开发过程中的测试文件。test目录同样是用于测试的,存放的文件与项目无关。scene目录则是游戏主场景,而scene-game-start则为游戏启动场景,进行UI逻辑初始化,并加载游戏主场景。
自定义管线以编辑器扩展的形式存在,可将其移至项目中。管线对应自定义管线,通过在场景中新建节点并添加pipeline/graph/pipeline-graph.ts组件来查看可视化管线图。实时探针相关组件在反射探针节点上挂载,提供实时更新功能。
反射探针节点上的ReflectionUtils脚本组件实现了实时更新探针的逻辑,适用于需要实时探针的项目。此外,Cocos Cyberpunk还实现了SphereProjection修正,使得反射更符合物体形状。
静态遮挡剔除机制在Cocos Cyberpunk中实现,通过将可见关系预存入空间格子,渲染时直接查表获得渲染列表,极大提升效率。这一部分主要在scene场景中的static-occlusion-culling结点中处理。
机型适配策略在Cocos Cyberpunk中实现,根据设备性能选择渲染效果,确保流畅帧率。处理了不同设备上的效果调整,包括性能开关策略、机型分档策略,主要在href-settings.ts、gpu.ts和gpu-mobiles.ts文件中实现。
游戏逻辑方面,Cocos Cyberpunk包含完整的TPS游戏逻辑,init节点包含了特效、UI、对象池等节点,挂载的init.ts脚本组件确保游戏逻辑在主场景加载后持续运行。接下来,我们将对游戏逻辑相关源码进行深入解读。
MMDetection3D之DETR3D源码解析:整体流程篇
关于torch.distributed.launch的更多细节: blog.csdn.net/magic_ll/...
设置config file和work dir,work dir保存最终config,log等信息,work dir默认为path/to/user/work_dir/
作者将自定义的部分放在 'projects/mmdet3d_plugin/' 文件夹下,通过registry类注册模块,这里利用importlib导入模块并初始化自定义的类。
这里设置模型的输出信息保存路径、gpus等模型的运行时环境参数
这里初始化模型,初始化train_dataset和val_dataset
这部分完成了DataLoader的初始化,runner和hooks的初始化,并且按照workflow运行runner。
3d稀疏卷积——spconv源码剖析(一)
本文主要阐述卷积的基本理论,并以spconv源码为例进行解析。首先,介绍2D与3D卷积的基础知识及其分类。随后,深入探讨3D稀疏卷积的工作原理。
2D卷积涉及卷积核在二维图像空间上的滑动操作。它分为单通道卷积与多通道卷积。单通道卷积在输入图像的单一通道上进行,得到特征图。多通道卷积在同一图像中不同通道上进行,每个通道得到一个对应的新通道,最终通过相加生成特征图。
3D卷积在此基础上扩展到三维空间,涉及单通道与多通道情况。三维单通道卷积在立方体上进行,而三维多通道卷积则处理拥有多个通道的三维图像。
2D与3D卷积计算涉及输入层、输出层与参数关系的数学公式。考虑偏置参数与计算量,FLOPS(浮点运算量)也在此阶段被计算。
稀疏卷积分为SC(Sparse Convolution)与VSC(Valid Sparse Convolution)两种类型。SC卷积计算激活站点并丢弃非激活站点,而VSC卷积在SC的基础上进行了简化。
卷积神经网络对三维点云数据处理时,面临计算量增加的问题,而SC与VSC卷积利用稀疏性实现高效处理。构建输入与输出哈希表,对点云数据进行快速访问。GetOffset()函数用于定位卷积操作的位置,Rulebook用于存储原子操作规则,指导稀疏卷积过程。
稀疏卷积的关键在于构建输入、输出哈希表以及建立两者之间的联系,实现对稀疏数据的有效处理。spconv库中的get_indice_pairs函数通过调用getIndicePairs实现这一过程。