跳转到主要内容

Python的快速简单2D和3D结构张量实现。

项目描述

Python结构张量

Python的快速简单2D和3D 结构张量 实现。

安装

使用 pip install structure-tensor 安装软件包或克隆存储库。

CUDA支持

为了支持CUDA,安装额外的(可选)依赖项 CuPy。如果系统上已安装CUDA,则应使用 pip install cupy,但这可能较慢,因为CuPy将在安装期间编译代码。或者使用预编译包之一。

小型示例

结构张量计算参数为 $\rho$ (rho) 和 $\sigma$ (sigma),它们是标量值。

使用NumPy的2D和3D

structure_tensor 软件包支持进行2D或3D结构张量分析。特征值(val)按升序排序。

import numpy as np
from structure_tensor import eig_special_2d, structure_tensor_2d

sigma = 1.5
rho = 5.5

# Load 2D data.
image = np.random.random((128, 128))

S = structure_tensor_2d(image, sigma, rho)
val, vec = eig_special_2d(S)

对于形状为 (x, y, z) 的体积,特征向量(vec)返回为 zyx

import numpy as np
from structure_tensor import eig_special_3d, structure_tensor_3d

sigma = 1.5
rho = 5.5

# Load 3D data.
volume = np.random.random((128, 128, 128))

S = structure_tensor_3d(volume, sigma, rho)
val, vec = eig_special_3d(S)

使用CuPy的3D

CuPy函数在 structure_tensor.cp 模块中可用。它们的工作方式与它们的NumPy对应函数类似,但它们返回 cupy.ndarray。如果需要,函数将自动处理移动输入数据。

import cupy as cp
import numpy as np
from structure_tensor.cp import eig_special_3d, structure_tensor_3d

sigma = 1.5
rho = 5.5

# Load 3D data.
volume = np.random.random((128, 128, 128))

S = structure_tensor_3d(volume, sigma, rho)
val, vec = eig_special_3d(S)

# Convert from cupy to numpy. Moves data from GPU to CPU.
val = cp.asnumpy(val)
vec = cp.asnumpy(vec)

高级示例

structure_tensor模块还包含用于并行“分块”计算结构张量和特征值分解的函数。最简单的方法是使用内置函数structure_tensor.multiprocessing.parallel_structure_tensor_analysis。这允许计算分布在多个CPU和CUDA设备上。这可以加快计算速度数倍,并在计算过程中减少内存使用。

以下示例中,体积data被分割成200立方体的块,工作负载将分布在16个CPU上。

S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=16*['cpu'], block_size=200)

或者,如果我们有可用的CUDA启用GPU,我们可以用它来代替。

S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=['cuda'], block_size=200)

如果GPU有足够的内存,我们可以通过使用多个进程向GPU馈送数据来加快计算速度。

S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda'], block_size=200)

如果我们有四个CUDA设备可用,我们可以选择使用几个特定的设备,例如设备0和2。

S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda:0'] + 4*['cuda:2'], block_size=200)

我们甚至可以选择使用CPU和GPU进程的混合,例如,为GPU 0分配四个进程,为GPU 2分配两个进程,以及8个在CPU上运行计算的进程。

S, val, vec = parallel_structure_tensor_analysis(data, sigma, rho, devices=4*['cuda:0'] + 2*['cuda:2'] + 8*['cpu'], block_size=200)

理想的块大小取决于sigmarho、设备以及设备的内存。通常,100到400之间的值效果良好。如果您遇到内存不足错误,请尝试减小块大小和/或进程数。

其他高级用法

数据集中发布的笔记本也包含示例。笔记本StructureTensorFiberAnalysisDemo [ 笔记本 | HTML ] 和 StructureTensorFiberAnalysisAdvancedDemo [ 笔记本 | HTML ] 是一个好的起点。然而,这些笔记本是在添加parallel_structure_tensor_analysis函数之前制作的,因此使用自己的代码进行并行ST计算。

贡献

欢迎贡献,只需创建一个问题或一个PR

参考

如果您将这些用于学术工作,请考虑引用我们的工作。

主要参考

Jeppesen, N.,等人。“使用结构张量分析量化制造方法对单向复合材料纤维方向的影响。” 复合材料A:应用科学和制造 149(2021):106541。
[ 论文 ] [ 数据和笔记本 ]

@article{JEPPESEN2021106541,
title = {Quantifying effects of manufacturing methods on fiber orientation in unidirectional composites using structure tensor analysis},
journal = {Composites Part A: Applied Science and Manufacturing},
volume = {149},
pages = {106541},
year = {2021},
issn = {1359-835X},
doi = {https://doi.org/10.1016/j.compositesa.2021.106541},
url = {https://www.sciencedirect.com/science/article/pii/S1359835X21002633},
author = {N. Jeppesen and L.P. Mikkelsen and A.B. Dahl and A.N. Christensen and V.A. Dahl}
}

其他论文

Jeppesen, N.,等人。“使用结构张量表征非紧压玻璃纤维增强复合材料的纤维方向。” IOP会议系列:材料科学和工程。 第942卷。第1号。IOP出版,2020。
[ 论文 ] [ 数据和笔记本 ]

Auenhammer, Robert M.,等人。“从X射线计算机断层扫描图像数据中稳健地分析纤维增强复合材料的X射线计算机断层扫描数据——XAE。” 复合材料科学和技术 (2022):109458。
[ 论文 ] [ 数据 ]

Auenhammer, Robert M.,等人。“X射线计算机断层扫描数据结构张量方向映射用于有限元模型——STXAE。” 软件影响 11(2022):100216。
[ 论文 ]

数据和笔记本

Jeppesen, N,Dahl, VA,Christensen, AN,Dahl, AB,& Mikkelsen, LP.(2020)。使用结构张量表征非紧压玻璃纤维增强复合材料的纤维方向 [数据集]。Zenodo。 https://doi.org/10.5281/zenodo.3877522

Jeppesen, N, Mikkelsen, Lars P., Dahl, V.A., Nymark, A.N., & Dahl, A.B. (2021). 使用结构张量分析量化单向复合材料中制造方法对纤维取向的影响 [数据集]. Zenodo. https://doi.org/10.5281/zenodo.4446499

Auenhammer, R.M., Jeppesen, N, Mikkelsen, Lars P., Dahl, V.A., Blinzler, B.J., & Asp, L.E. (2021). 非褶皱织物增强复合材料的X射线计算机断层扫描辅助工程方法 [数据集] [数据集]. Zenodo. https://doi.org/10.5281/zenodo.5774920

CuPy

参见 CuPy 参考部分.

更多信息

许可证

MIT 许可证 (见 LICENSE 文件).

项目详情


下载文件

下载适合您平台的应用文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

此版本没有提供源分布文件。请参阅生成分布存档的教程

构建分布

structure_tensor-0.3.2-py3-none-any.whl (20.2 kB 查看散列值)

上传时间 Python 3

支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面