1.3d稀疏卷积——spconv源码剖析(三)
2.除了虚幻4还有啥高级引擎
3.PyYAML官方教程
4.各游戏引擎比较,源码游戏引擎都有哪些
5.nnUNet使ç¨ç¬è®°ï¼å¦ä½èªå®ä¹ä½ çnnUNetï¼
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表示输入和输出两个方向,过峰源码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雪崩引擎、Theork软件源码 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引擎是一个游戏引擎,中文名为“无尽引擎”,开元666源码是由动视暴雪旗下游戏工作室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解析器和发射器。
安装
简单安装,从源代码安装,恐惧之间源码请下载源代码包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] ç»ä¸ªä¾å说æ