欢迎来到【汕尾网络打包源码】【linuxcn源码】【kestrel源码】dice 源码-皮皮网网站!!!

皮皮网

【汕尾网络打包源码】【linuxcn源码】【kestrel源码】dice 源码-皮皮网 扫描左侧二维码访问本站手机端

【汕尾网络打包源码】【linuxcn源码】【kestrel源码】dice 源码

2024-11-25 03:35:38 来源:{typename type="name"/} 分类:{typename type="name"/}

1.3d稀疏卷积——spconv源码剖析(三)
2.除了虚幻4还有啥高级引擎
3.PyYAML官方教程
4.各游戏引擎比较,源码游戏引擎都有哪些
5.nnUNet使用笔记:如何自定义你的nnUNet?

dice 源码

3d稀疏卷积——spconv源码剖析(三)

       构建Rulebook

       下面看ops.get_indice_pairs,位于:spconv/ops.py

       构建Rulebook由ops.get_indice_pairs接口完成

       get_indice_pairs函数具体实现:

       主要就是源码完成了一些参数的校验和预处理。首先,源码对于3d普通稀疏卷积,源码根据输入shape大小,源码kernel size,源码汕尾网络打包源码stride等参数计算出输出输出shape,源码子流行稀疏卷积就不必计算了,源码输出shape和输入shape一样大小

       准备好参数之后就进入最核心的源码get_indice_pairs函数。因为spconv通过torch.ops.load_library加载.so文件注册,源码所以这里通torch.ops.spconv.get_indice_pairs这种方式来调用该函数。

       算子注册:在src/spconv/all.cc文件中通过Pytorch提供的源码OP Register(算子注册的方式)对底层c++ api进行了注册,可以python接口形式调用c++算子

       同C++ extension方式一样,源码OP Register也是源码Pytorch提供的一种底层扩展算子注册的方式。注册的源码算子可以通过 torch.xxx或者 tensor.xxx的方式进行调用,该方式同样与pytorch源码解耦,源码增加和修改算子不需要重新编译pytorch源码。用该方式注册一个新的算子,流程非常简单:先编写C++相关的算子实现,然后通过pytorch底层的注册接口(torch::RegisterOperators),将该算子注册即可。

       构建Rulebook实际通过python接口get_indice_pairs调用src/spconv/spconv_ops.cc文件种的getIndicePairs函数

       代码位于:src/spconv/spconv_ops.cc

       分析getIndicePairs直接将重心锁定在GPU逻辑部分,并且子流行3d稀疏卷积和正常3d稀疏卷积分开讨论,优先子流行3d稀疏卷积。

       代码中最重要的3个变量分别为:indicePairs,indiceNum和gridOut,其建立过程如下:

       indicePairs代表了稀疏卷积输入输出的映射规则,即Input Hash Table 和 Output Hash Table。这里分配理论最大的内存,它的shape为{ 2,kernelVolume,numAct},2表示输入和输出两个方向,linuxcn源码kernelVolume为卷积核的volume size。例如一个3x3x3的卷积核,其volume size就是(3*3*3)。numAct表示输入有效(active)特征的数量。indiceNum用于保存卷积核每一个位置上的总的计算的次数,indiceNum对应中的count

       代码中关于gpu建立rulebook调用create_submconv_indice_pair_cuda函数来完成,下面具体分析下create_submconv_indice_pair_cuda函数

       子流线稀疏卷积

       子流线稀疏卷积是调用create_submconv_indice_pair_cuda函数来构建rulebook

       在create_submconv_indice_pair_cuda大可不必深究以下动态分发机制的运行原理。

       直接将重心锁定在核函数:

       prepareSubMGridKernel核函数中grid_size和block_size实则都是用的整形变量。其中block_size为tv::cuda::CUDA_NUM_THREADS,在include/tensorview/cuda_utils.h文件中定义,大小为。而grid_size大小通过tv::cuda::getBlocks(numActIn)计算得到,其中numActIn表示有效(active)输入数据的数量。

       prepareSubMGridKernel作用:建立输出张量坐标(通过index表示)到输出序号之间的一张哈希表

       见:include/spconv/indice.cu.h

       这里计算index换了一种模板加递归的写法,看起来比较复杂而已。令:new_indicesIn = indicesIn.data(),可以推导得出index为:

       ArrayIndexRowMajor位于include/tensorview/tensorview.h,其递归调用写法如下:

       接着看核函数getSubMIndicePairsKernel3:

       位于:include/spconv/indice.cu.h

       看:

       上述写法类似我们函数中常见的循环的写法,具体可以查看include/tensorview/kernel_utils.h

       NumILP按默认值等于1的话,其stride也是gridDim.x*blockDim.x。索引最大值要小于该线程块的线程上限索引blockDim.x * gridDim.x,功能与下面代码类似:

       参考: blog.csdn.net/ChuiGeDaQ...

除了虚幻4还有啥高级引擎

       游戏引擎除了虚幻引擎,还有Unity、寒霜引擎、Source Engine起源引擎、IW无尽引擎、Cry Engine 尖叫引擎、RAGE狂暴引擎、Cocos2D、Avalanche Engine雪崩引擎、Thekestrel源码 Dead Engine死亡引擎、Naughty Dog Game Engine顽皮狗等。

1、虚幻引擎

       虚幻引擎是美国Epic游戏公司研发的一款3A级游戏引擎,目前世界最知名授权最广的顶尖游戏引擎,占有全球商用游戏引擎%的市场份额,次世代画面标准最高的一款游戏引擎。

       优点:源代码开源;画质秒杀Unity;蓝图设计;应用范围广;

       缺点:网上教程少;功能太多;开发成本较高;需要精通C++;

2、Unity

       Unity是由Unity Technologies公司开发的一个让玩家能够轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

       优点:可定制性高;开发成本较低;网上教程多;入门简单,略懂C#即可;

       缺点:内建工具不够完善源;代码不开源;游戏渲染不如虚幻引擎;控制器支持较差;

3、寒霜引擎

       寒霜引擎是EA旗下的”DICE“工作室所开发的一款3D游戏引擎,自年开始启动研发,也是目前世界上知名度最广的游戏引擎之一。

       优点:可以运作庞大的游戏地图;超强可破坏场景和音效系统;

       缺点:细节粗糙;

4、起源引擎

       起源(source)引擎是一款3D游戏引擎,由Valve软件公司为了第一人称射击游戏《半条命2》开发,并且对其他的游戏开发者开放授权。作为一款整合引擎,起源引擎可以对开发者提供从物理模拟、画面渲染到服务器管理、用户界面设计等所有服务。

       起源引擎

       优点:优化性比较好,电脑配置要求不高;兼容性强;

       缺点:渲染效率不高,不适合大地图制作;实时光影不好;

5、IW无尽引擎

       IW引擎是一个游戏引擎,中文名为“无尽引擎”,swiftui 源码是由动视暴雪旗下游戏工作室Infinity Ward工作室开发应用于使命召唤系列,并作为游戏的主要引擎。引擎包含了id Software开发的GtkRadiant关卡开发软件。它已被用于由Infinity Ward,Treyarch,Raven Software开发的游戏中。

       优点:支持DirectX 技术;画质还不错;

       缺点:贴图较为粗糙

6、Cry3引擎

       Cry Engine3,是德国的CRYTEK公司出品一款对应最新技术DirectX的游戏引擎,允许实时创作跨平台游戏。

       优点:音频工具比较强悍;AI代码技术简单;工具齐全;

       缺点:免费榜缺乏客户支持;推出时间相对较晚,开发者社区还不够强大;学习门槛对于初入行这比较高。

7、RAGE狂暴引擎

       Rockstar高级游戏引擎(简称RAGE)是由电视游戏开发方Rockstar(圣地亚哥)RAGE技术组以及Rockstar其它制作组出资开发的一款游戏引擎,适于在PC、PS3、Wii和Xbox 平台上的游戏开发。

       优点:世界地图流缓冲技术;复杂人工智能管理;快速网络代码;

       缺点:和其他顶级引擎相比界面比较差;对于键盘和鼠标控制优化做的不足。

8、Cocos2D

       Cocos2D是一个基于MIT协议的开源框架,用于构建游戏、应用程序和其他图形界面交互应用。可以让你在创建自己的多平台游戏时节省很多的时间。

       优点:强大灵活;提供成熟的框架和多种工具;开源、免费,社区支持强大;

       缺点:和同类引擎相比比较复杂;学习门槛相对较高;不支持跨平台引擎。

PyYAML官方教程

       PyYAML是Python的一个YAML解析器和发射器。

       安装

       简单安装,从源代码安装,enca源码请下载源代码包PyYAML-5.1.tar.gz并进行解压。转到目录PyYAML-5.1,运行安装命令。若需使用比纯Python版本快的LibYAML绑定,则需下载并安装 LibYAML。运行安装命令以使用基于LibYAML的解析器和发射器。注意,纯Python和基于LibYAML的解析器和发射器之间存在细微差异。

       常见问题解答

       未正确转储的词典没有嵌套集合。这是正确的输出,尽管嵌套映射的样式不同。默认情况下,PyYAML选择集合的样式,如果集合具有嵌套集合则为块样式,否则为流样式。若希望始终以块样式序列化集合,请将dump()的参数default_flow_style设置为False。

       Python 3支持从3.版本开始,PyYAML和LibYAML绑定为Python3提供完整支持。这是PyYAML API在Python 2和Python 3版本之间的差异的简短概述。

       教程

       从导入yaml包开始。加载YAML使用yaml.load或yaml.safe_load函数。yaml.load将YAML文档转换为Python对象。yaml.safe_load限制了构造任意Python对象的能力,仅允许简单的Python对象如整数或列表。python对象可以被标记为安全,以便被yaml.safe_load识别。导出YAML使用yaml.dump函数。pyyaml支持多种关键字参数以指定发射器的格式细节。

       Constructors, representers, resolvers

       定义应用程序特定标签。最简单的方法是定义yaml.YAMLObject的子类。yaml.YAMLObject使用元类魔术注册Constructors和Representers。如果你不想使用元类,可以使用函数yaml.add_constructor和yaml.add_represent注册Constructors和Representers。例如,为Dice类添加一个Constructor和一个Representer。

       YAML语法

       YAML语法介绍在YAML规范的第2章。查看YAML cookbook,专注于Ruby实现,并使用旧的YAML1.0语法。在这里,将介绍最常见的YAML构造以及相应的Python对象。文档是零个或多个文档的集合。Block序列和Block映射分别由-和:表示。Flow集合语法与Python中列表和字典构造函数的语法相似。标量有5种样式:plain、单引号、双引号、literal和折叠。

       Aliases别名

       使用YAML表示任意图形结构的对象。需要从文档的不同部分引用同一对象时,使用锚点和别名。PyYAML现在完全支持递归对象。

       Tags标签

       用于表示YAML节点的类型。标准YAML标签定义于yaml.org/type/index.htm...。标签可能是隐含的或显式的。没有显式定义标记的plain标量受到隐式标记解析的约束。

       YAML标记和Python类型

       下表描述了如何将具有不同标记的节点转换为Python对象。在Python 3中,str对象被转换为!!str标量、bytes对象被转换为!!binary标量。出于兼容性原因,标记!!python/str和!!python/unicode仍然受支持,并转换为str对象。为了表示静态Python对象,使用复杂的!!python/name标记。例如,函数yaml.dump表示为!python/name:yaml.dump。类似地,模块使用标记表示!python/module。

各游戏引擎比较,游戏引擎都有哪些

       寒霜引擎,寒霜引擎,是瑞典DICE游戏工作室为著名电子游戏产品《战地》系列设计的一款3D游戏引擎。一、引擎的介绍随着游戏开发的不断进步,游戏开发越来越庞大复杂,因此游戏引擎已经成为游戏开发必不可少的工具,虚幻引擎数年以来,虚幻引擎一直是做高端EA游戏最受欢迎的引擎。

       1、游戏引擎都有哪些?游戏公司都用这些引擎做出过哪些好游戏?

       比较有名的首先是epic出的虚幻引擎到现在已经出了4代了,虚幻4也是印象中应用最广,游戏作品最多的引擎之一。很多大作都是基于虚幻4制作的,代表作有《堡垒之夜》,《腐烂国度2》,《灵魂能力6》,《绝地求生刺激战场》等。然后是寒霜引擎,寒霜引擎,是瑞典DICE游戏工作室为著名电子游戏产品《战地》系列设计的一款3D游戏引擎,

       该引擎从年起开始研发,第一款使用寒霜引擎的游戏在年问世。代表作有《战地》系列《荣誉勋章》,《植物大战僵尸花园战争》,《龙腾世纪审判》等,再之后是Unity3D引擎,Unity3D是由UnityTechnologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

       Unity3D也是游戏应用最多的引擎之一,很多手游,网页游戏都是使用的此引擎,代表作有《神庙逃亡2》,《炉石传说》等,起源引擎,“起源引擎”包含了尖端的人物动画、先进的AI、真实的物理解析、以着色器为基础的画面渲染,以及高度可扩展的开发环境。代表作有《半条命2》,《Dota2》等,除了上述之外还有Creation引擎,IWEngine,铁砧引擎等也都诞生了不少好游戏。

       2、目前主流的游戏引擎有哪些?

       最近,不知道各位小伙伴有没有去Epic游戏商城领取《GTA5》,而几乎在同一时间,Epic方面也揭开了虚幻引擎5的神秘面纱,并为广大玩家与游戏开发者展示了一个能够让渲染细节媲美**CG与真实世界的次世代游戏引擎。尽管虚幻引擎5的预览版要到年初才会发布,完整版目前来看还遥遥无期,但这显然并没有妨碍大家对于次世代游戏的美好展望,

       而对于游戏开发者来说,无论R星知名大作《GTA5》还是虚幻引擎5,显然都没有Epic的新政策更有影响力。在Epic公开了虚幻引擎5在PlayStation5上运行实时演示视频的同时,还宣布将修改虚幻引擎的抽成正常,并降低了分成比例,从此前每季度总营收超过美金触发5%的分成协议,更改为仅针对万美元以上的游戏进行抽成,并且此次修改后的抽成门槛效力可追溯到今年1月1日。

       之所以说Epic这一决定对于开发者来说影响重大,其实是因为引擎对于一款游戏的开发工作来说极为重要,没有接触过游戏开发玩家可能会笼统的说一句,“游戏引擎是用来开发游戏的”,但实际上,游戏引擎是指一些已编写好的可编辑工具,以及互交式实时图像应用程序的核心组件集合。在这个集合中已经提供了各种编写游戏的工具,物理引擎、音效、动画渲染、碰撞测试、光效粒子、场景管理等,以实现让开发者更快捷开发游戏的目标,

       而不至于像多年前的前辈一样,在开发游戏时不得不从零开始搭建脚本库。事实上,从位机时代开始,游戏引擎的概念就已经出现,第一款进行商业授权的游戏引擎,则是用于开发《毁灭战士》的IDTech1,也就是俗称的DOOM引擎。由于其有着能够降低开发难度,以及提升研发速度的优势,因此游戏引擎也得以迅速商业化,

       在游戏引擎的商业化授权市场上,GDC则是有着里程碑意义的一年。不仅是因为当时Epic推出了影响深远的虚幻引擎4,而是在GDC上,三大主流商业引擎虚幻、Unity、CryEngine一起调整了收费方式,并答复降低了授权费用,其中,Epic将虚幻引擎3时代游戏的前5万美元利润免费,5万美元以上部分须交纳%的条款,改为了每月美元加上5%游戏收入分成,并且还开源了虚幻引擎的全部C 源代码。

nnUNet使用笔记:如何自定义你的nnUNet?

       nnUNet在许多医学challenge的分割任务上都达到了SOTA水平,身边一些人也实际使用过,验证了有效性。nnUNet的一大优点就是可以直接命令行调用,无需手动调参;但这也是他的问题,手动修改网络/Loss/超参的方式并不是那么简明。

        本文主要是笔者的个人使用笔记,用于记录如何调整nnUNet框架下的lr、epoch、网络结构、loss函数等配置。内容主要是分享如何在享受nnUNet的方便性的同时,也能够享受调参的快 (zhe) 乐 (mo)。

        这个可以简单的通过修改Trainer源码来实现,比如对于

        可以修改nnUNetTrainerV2.py对应的源码。

        默认loss是nnunet/training/loss_functions/dice_loss.py中的DC_and_CE_loss,一种不太便于维护的方法就是,直接修改这个Loss的源码,在准备接下来的实验中都使用同一个Loss时可以这么搞。

        比较建议的方式是,通过修改plan中的ExperimentPlanner,然后重新进行nnUNet_plan_and_preprocess来修改(网络模型也同样可以使用这种方式进行修改)。

        [TO-DO] 给个例子说明