1.torchvision应用与源码分析
2.Spine界面与Unity组件代码直观对应(未完待续)
torchvision应用与源码分析
torchvision是源码PyTorch库中的一部分,用于计算机视觉任务,源码它包含了一系列的源码预训练模型和数据集。
一:torchvision应用
在计算机视觉领域,源码torchvision提供了方便的源码API,用于加载和处理图像数据,源码简单的文件源码训练模型和进行预测。源码它通常与PyTorch深度学习框架结合使用,源码为用户提供了一个完整的源码框架来开发和部署计算机视觉应用。
二:torchvision源码分析
1. setup.py分析
setup.py是源码Python包的配置文件,用于描述包的源码元数据和安装步骤。在torchvision中,源码setup.py文件被用来编译和安装包的源码飞翔 源码依赖库。
1.1 导入依赖的源码模块
1.2 从配置文件中获取当前torchvision的版本信息
1.3 获取依赖的torch版本信息
1.4 获取编译扩展信息,然后传递给setup函数,源码启动编译
1.5 重点:get_extensions分析
在torchvision的setup.py文件中,get_extensions函数是核心部分,它负责编译torchvision自身的源码以及一些第三方库,如jpeg和codec等。robotium 源码
1.5.1 获取ccsrc下面的cpp源码
1.5.2 获取环境变量中配置的编译选项
1.5.3 判断是AMD的HIP还是nVidia的CUDA,来获取到最终的cuda文件
1.5.4:依据环境上是否支持cuda来确定编译扩展
1.5.5 添加扩展
至此,torchvision就将整个版本包编译出来了,会调用torch的cpp和cuda编译扩展(即:通过gcc+nvcc来编译ccsrc下面的源码,而不用torchvision自行再来设置各种编译环境信息了)。
整个编译核心流程总结如下:
2. torchvision新增算子流程
以torchvision.ops.DeformConv2d为例
2.1 基础用法与模型结构
通过Netron工具打开模型结构,canopen源码可以看到torchvision的deform_conv2d是单独的IR定义的算子
2.2 python侧实现分析
deform_conv2d定义在Python侧,实际上做了参数初始化后,将转交给了C++侧对应的接口
2.3 C++侧分析:torch.ops.torchvision.deform_conv2d
2.3.1 接口定义
2.3.2 接口实现
关键在于这两个接口的注册
算子的具体实现和如何向pytorch完成注册呢?
该算子有C++和CUDA实现方式,C++方式可以在纯CPU版本中运行,cuda实现则依赖于GPU和CUDA
2.3.2.1 C++实现
2.3.2.2 CUDA实现
这种方式实现的算子,trace出来的外勤 源码模型中,为单个算子
总结:自定义算子向torch集成分为两步
三:基于torchvision新增一个算子
实现一个算子:my_add = 2*x + y
3.1 环境准备
Spine界面与Unity组件代码直观对应(未完待续)
对于不太熟悉Spine制作流程的开发者,理解源码可能会感到困惑。下面,我们将通过直观的和代码对应来帮助理解。
首先,让我们看下Spine的层级结构图,它清晰地展示了整个骨架的组织层次,就像一个树状结构,每个骨骼(Bone)都有多个子骨骼。
在代码中,骨骼与Spine中的槽(Slot)概念相对应。槽记录了其关联的骨骼,它们之间的关系在代码中体现得一目了然。
至于骨骼上的视觉元素,"占位符 + 带网格的"在代码中表现为MeshAttachment,它是图形数据的承载者。
动画控制是Spine的核心部分。面板中的所有动画动作都集中在这个区域。动画动作由多个Timeline构成,这些Timeline记录了美术设计的每一帧关键帧,控制着对象属性的变化过程。
举个例子,如果美术在动画中对网格顶点位置进行了关键帧设计,那么在代码中对应的子类就是DeformTimeline,它专门负责处理这类几何变形的动画变化。