Project Icon

s2fft

基于JAX和PyTorch的球谐变换Python库

S2FFT是一个用于计算球面和旋转群傅里叶变换的Python库。基于JAX和PyTorch实现,S2FFT提供可微分的球谐变换和维格纳变换,支持在GPU和TPU等硬件加速器上运行。该库采用高度并行化的新算法结构,提供多种优化选项和采样方案,包括等角采样和HEALPix采样。用户可根据可用资源和所需角分辨率灵活选择。

图片 图片 图片 图片 图片 所有贡献者 在Colab中打开

可微分和加速的球面变换

S2FFT是一个Python包,用于使用JAX或PyTorch计算球面和旋转群上的傅里叶变换(Price & McEwen 2023)。它利用自动微分提供可微分变换,这些变换也可以部署在硬件加速器(如GPU和TPU)上。

更具体地说,S2FFT支持自旋球谐和Wigner变换(适用于实信号和复信号),在需要的地方支持伴随变换,并提供不同的优化选项(预计算或不预计算),用户可以根据可用资源和所需的角分辨率$L$进行选择。

[!重要] HEALPix在CPU上的长时间JIT编译问题已修复!GPU版本的修复即将推出。

[!提示] 从1.0.2版本开始,S2FFT还提供了底层预计算变换的PyTorch实现。在未来的版本中,这种支持将扩展到我们的即时算法。

[!提示] 从1.1.0版本开始,S2FFT还为现有的C/C++包提供JAX支持,特别是HEALPixSSHT。这是通过用自定义JAX前端包装Python绑定来实现的。请注意,目前这种C/C++到JAX的互操作性仅限于CPU。

算法 :zap:

S2FFT利用了可以高度并行化和分布式的新算法结构,因此非常适合硬件加速器(即GPU和TPU)的架构。特别是,这些算法基于新的Wigner-d递归,在高角分辨率$L$下稳定。下图说明了递归过程(更多详情请参见Price & McEwen,准备中)。

图片 有了这个递归,可以通过两步过程计算等纬度采样地图的球谐系数。首先,对每个纬度环进行经度上的1D傅里叶变换。其次,投影到实极坐标d函数上。可以预计算并存储所有实极坐标d函数以实现极端加速,但这会带来同样极端的内存开销,在L ~ 1024时是不可行的。另一种选择是递归计算实极坐标d函数,每次只计算投影的一部分,从而产生可忽略的内存开销,但执行速度略慢。下图说明了可分离的球谐变换(更多详情请参见Price & McEwen,准备中)。

图片

采样 :earth_africa:

S2FFT中实现的算法结构可以支持任何等纬度采样方案。目前支持多种采样方案。

支持McEwen & Wiaux (2012)Driscoll & Healy (1995)Gauss-Legendre (1986)的等角度采样方案,它们具有相关的采样定理,因此可以以机器精度计算谐波变换。请注意,McEwen & Wiaux采样定理将球面上的奈奎斯特率降低了一半,与Driscoll & Healy方法相比,将所需的球面样本数量减半。

还支持流行的HEALPix采样方案(Gorski et al. 2005)。HEALPix采样不具有采样定理,因此相应的谐波变换无法达到机器精度,但会有一些误差。然而,HEALPix采样提供了面积相等的像素,这有许多实际优势。

[!注意]
出于算法原因,在高带限时HEALPix变换的JIT编译可能会变慢,这是由于XLA展开循环,目前无法避免。编译完成后,HEALPix变换应该以相关论文中概述的效率执行,因此这个额外的时间开销只需要承担一次。我们知道这个问题,正在努力修复。CPU执行的修复已经实现(请参见示例notebook)。GPU执行的修复即将推出。

安装 :computer:

S2FFT包的Python依赖项列在requirements/requirements-core.txt文件中,当运行以下命令时,pip将自动将它们安装到活动的Python环境中:

pip install s2fft

这将安装所有核心功能,包括JAX支持(也包括PyTorch支持)。 或者,可以直接从GitHub安装S2FFT包,方法是克隆此仓库,然后在仓库的根目录下运行:

pip install .        

安装完成后,可以执行单元测试以确保安装成功。首先安装测试依赖,然后运行pytest:

pip install -r requirements/requirements-tests.txt
pytest tests/  

发布版本的文档可在这里查看。要在本地构建文档,请运行:

pip install -r requirements/requirements-docs.txt
cd docs 
make html
open _build/html/index.html

[!注意]
对于在各种notebook中可以找到的绘图功能,必须安装requirements/requirements-plotting.txt中的依赖项。

使用 :rocket:

导入和使用S2FFT非常简单,如下所示:

对于球面上的信号:

# 计算谐波系数
flm = s2fft.forward_jax(f, L)  
# 映射回像素空间信号
f = s2fft.inverse_jax(flm, L)

对于旋转群上的信号:

# 计算Wigner系数
flmn = s2fft.wigner.forward_jax(f, L, N)
# 映射回像素空间信号
f = fft.wigner.inverse_jax(flmn, L, N)

有关使用的更多详细信息,请参阅文档和相关的notebooks

[!注意]
我们还为预计算版本的变换提供PyTorch支持。这些可以通过forward/inverse_torch()调用。完整的PyTorch支持将在未来版本中提供。

SSHT/HEALPix的C/C++ JAX前端 :bulb:

S2FFT还为现有的C/C++包提供JAX支持,特别是HEALPixSSHT。这是通过将Python绑定与自定义JAX前端包装来实现的。请注意,这种C/C++到JAX的互操作性目前仅限于CPU。

例如,可以通过以下方式调用这些球谐变换的替代后端:

# SSHT球谐正变换
flm = s2fft.forward(f, L, sampling=["mw"], method="jax_ssht")  

# HEALPix球谐正变换
flm = s2fft.forward(f, L, nside=nside, sampling="healpix", method="jax_healpy")  

所有这些JAX前端都支持开箱即用的反向模式自动微分,底层实际上只是链接到您熟悉的C/C++包。通过这种方式,S2fft为现有包增加了梯度功能,适用于现代科学计算或机器学习应用!

有关使用的更多详细信息,请参阅相关的notebooks

贡献者 ✨

感谢以下这些wonderful贡献者(表情符号对照表):

我们鼓励任何感兴趣的开发者做出贡献。一个简单的首次贡献可以是添加对更多球面采样模式的支持!

引用 :books:

如果以任何方式使用此代码,我们恳请引用以下文章。该参考文献的BibTeX条目可能如下所示:

@article{price:s2fft, 
   author      = "Matthew A. Price and Jason D. McEwen",
   title       = "Differentiable and accelerated spherical harmonic and Wigner transforms",
   journal     = "Journal of Computational Physics, submitted",
   year        = "2023",
   eprint      = "arXiv:2311.14670"        
}

你可能还想考虑引用我们的相关论文,这些论文是此代码的基础:

@article{mcewen:fssht,
    author      = "Jason D. McEwen and Yves Wiaux",
    title       = "A novel sampling theorem on the sphere",
    journal     = "IEEE Trans. Sig. Proc.",
    year        = "2011",
    volume      = "59",
    number      = "12",
    pages       = "5876--5887",        
    eprint      = "arXiv:1110.6298",
    doi         = "10.1109/TSP.2011.2166394"
}
@article{mcewen:so3,
    作者        = "Jason D. McEwen 和 Martin Büttner 和 Boris Leistedt 和 Hiranya V. Peiris 和 Yves Wiaux",
    标题        = "旋转群上的一种新颖采样定理",
    期刊        = "IEEE 信号处理快报",
    年份        = "2015",
    卷          = "22",
    期          = "12",
    页码        = "2425--2429",
    预印本      = "arXiv:1508.03101",
    DOI         = "10.1109/LSP.2015.2490676"    
}

许可证 :memo:

我们希望这段代码能够为更广泛的社区所用,因此我们以MIT开源许可证提供此代码。

版权所有 2023 Matthew Price、Jason McEwen 及贡献者。

S2FFT是根据MIT许可证提供的免费软件。详情请参阅LICENSE文件。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号