pytorch附加组件,用于处理图像映射和位移场,包括空间变压器
torchfields的Python项目详细描述
托奇菲尔德
一个PyTorch附加组件,用于处理图像映射和位移场,包括空间变压器
torchfields提供了一个抽象,它巧妙地封装了位移字段的功能。 在Spatial Transformer Networks中使用。
在大多数情况下,场可以被视为普通的pytorch张量。 用途,还包括用于编写 张量的位移和采样。
安装
要安装torchfields,只需执行
pip install torchfields
简介
displacement字段表示指示应如何扭曲图像的mapping或flow。
它本质上是一个包含每个像素处位移向量的空间张量,其中每个位移向量指示该像素处的位移距离和方向。
位移场惯例
单位
位移的标准单位是half image,因此大小为2的位移矢量意味着位移距离等于位移图像的边长。
注意:此约定源于原始的Spatial Transformer Networks文档,其中这些字段显示为映射,其中-1表示图像的左边缘或上边缘,+1表示图像的右边缘或下边缘。
torchfields
还支持使用pixels()
和from_pixels()
函数在pixels的单位之间无缝转换。
位移方向
通过位移场扭曲图像的最常见方法是在场向量指向的点处对其进行采样。
这通常被称为eulerian或pull约定,因为字段中的向量指向图像应该pull的位置。
这是通过调用sample()
函数实现的(事实上,该函数包装了pytorch的内置grid_sample()
,同时根据需要转换约定)。
通过位移场扭曲图像的另一种方法是将图像的每个像素沿着相应的位移矢量发送到其新位置。这称为lagrangian或push约定,因为字段的向量指示图像像素应push到的位置。这个方向虽然看起来很直观,但实现起来却不那么直接,因为没有确定的方法来处理离散化(例如,当目的地不是整个像素坐标时,当两个源映射到同一目的地时,当没有任何东西映射到目的地像素时,该怎么办)。
拉格朗日方向扭曲的解决方案是首先反转场,然后通常使用sample()
扭曲图像。
要了解有关描述流字段的两种方法的更多信息,请参阅主题上的Wikipedia article。
与pytorch张量的关系
位移场继承自torch.Tensor
,因此PyTorch张量的所有功能也适用于位移场。也就是说,任何接受torch.Tensor
类型的pytorch函数也将隐式接受torchfields
置换字段。
此外,模块自身安装(通过猴子补丁)为
torch.Field
镜像torch.Tensor
模块,通过该快捷方式可以方便地访问torchfields
包的所有功能。此快捷方式在第一次导入时激活(使用import torchfields
)。
不过,请注意,torchfields
包既没有得到pytorch开发人员社区的认可,也没有得到他们的维护,而是由普林斯顿大学的研究人员维护的一个独立项目。
教程
要了解更多信息并开始使用torchfields
,请查看tutorial。