Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
[AI4S Cup - 超声CT成像中的声场预测] 可视化数据
AI4SCUP-USCT
AI4SCUP-Helmholtz
python
AI4SCUP-USCTPredict
AI4SCUP-USCTAI4SCUP-HelmholtzpythonAI4SCUP-USCTPredict
Koolo233
发布于 2024-04-02
推荐镜像 :Basic Image:ubuntu22.04-mojo0.3-notebook
推荐机型 :c2_m4_cpu
赞 10
13
3
BaselineHelmholtz(v1)
helmholtz(v3)

本Notebook的主要目的是对输入输出数据进行可视化从而更好的理解待解决问题。

代码
文本

加载必要的库

代码
文本
[1]
import os
import glob

import numpy as np
import matplotlib.pyplot as plt
代码
文本

加载所有文件

代码
文本
[2]
data_folds = glob.glob('/bohr/helmholtz-o7w7/v3/dataset_*')

data_path_dict = dict()

for data_fold in data_folds:
field_root = os.path.join(data_fold, 'field')
speed_root = os.path.join(data_fold, 'speed')

field_files_list = glob.glob(field_root+'/*')
speed_files_list = glob.glob(speed_root+'/*')
print(f"find {len(field_files_list)} field files and {len(speed_files_list)} speed files in {data_fold}")

for speed_file_path in speed_files_list:
sample_id = int(os.path.basename(speed_file_path).split('.')[0].split('_')[1])

data_path_dict[sample_id] = {
'field_path': [os.path.join(field_root, f'train_{sample_id}_{i}.npy') for i in range(1, 5)],
'speed_path': speed_file_path
}

print(f'find {len(data_path_dict)} samples')
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_1
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_2
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_3
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_4
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_5
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_6
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_7
find 3600 field files and 900 speed files in /bohr/helmholtz-o7w7/v3/dataset_train_8
find 7200 samples
代码
文本

本次比赛训练集一共有7200个不同ID的样本。共分为8个子文件夹,每一个存储了900个样本。

每一个子文件夹下有两个子目录:fieldspeed。其中speed存储的是输入的波速;field存储的是输出结果。

对于每一个波速样本,使用32个不同位置的波源进行仿真,因此一个speed文件对应多个field文件。具体而言,这32个不同位置波源的仿真数据存储为4个field文件。

代码
文本

可视化

代码
文本
[3]
plot_sample_id = list(data_path_dict.keys())[0]
for key, value in data_path_dict[plot_sample_id].items():
print(key, value)
field_path ['/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_1.npy', '/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_2.npy', '/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_3.npy', '/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_4.npy']
speed_path /bohr/helmholtz-o7w7/v3/dataset_train_1/speed/train_1.npy
代码
文本

speed可视化

代码
文本
[4]
speed_data = np.load(data_path_dict[plot_sample_id]['speed_path'], mmap_mode='r')
print(speed_data.shape)
print(type(speed_data[0][0]), speed_data[0][0])
(480, 480)
<class 'numpy.float32'> 1500.0
代码
文本
[5]
plt.figure(figsize=(8, 8))
plt.title('Speed')
plt.imshow(speed_data, cmap="jet")
plt.colorbar()
plt.show()
代码
文本

样本基本上都是类似于上图的样子。周围是均匀介质,中间有一个比较复杂的结果。因此体现到波速上,周围是等同的波速(1500),中间有一个比较复杂的波速分布,由此形成比较复杂的波场分布。

代码
文本

field可视化

代码
文本
[6]
field_data = list()

for sub_file in data_path_dict[plot_sample_id]['field_path']:
print(sub_file)
field_data.append(np.load(sub_file, mmap_mode='r'))

field_data = np.concatenate(field_data, axis=0)
print(field_data.shape)
print(type(field_data[0][0][0]), field_data[0][0][0])
/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_1.npy
/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_2.npy
/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_3.npy
/bohr/helmholtz-o7w7/v3/dataset_train_1/field/train_1_4.npy
(32, 480, 480)
<class 'numpy.complex64'> (-326.2337+190.77359j)
代码
文本

field共存储为4个文件,每一个文件存储8个波源位置对应的结果。值得注意的是,field文件的存储格式是numpy.complex64。与数据集描述相同,待预测结果是一个复数。

代码
文本

实部可视化

代码
文本
[7]
fig = plt.figure(figsize=(40, 40))

for i in range(32):

plot_img = np.real(field_data)[i, ...]
ax = fig.add_subplot(8, 4, i + 1, xticks=[], yticks=[])
ax.imshow(plot_img, cmap="RdBu_r")
ax.set_title(f'Filed Id: {i}')
fig.subplots_adjust(wspace=-0.8)
plt.show()
代码
文本

上图展示了32个波源对应的仿真结果的实部结果。波源按照逆时针方向旋转。可视化结果与数据集描述中的:圆周上 32 个等角度间隔的不同点为发射器一致。

代码
文本

虚部可视化

代码
文本
[8]
fig = plt.figure(figsize=(40, 40))

for i in range(32):

plot_img = np.imag(field_data)[i, ...]
ax = fig.add_subplot(8, 4, i + 1, xticks=[], yticks=[])
ax.imshow(plot_img, cmap="RdBu_r")
ax.set_title(f'Filed Id: {i}')
fig.subplots_adjust(wspace=-0.8)
plt.show()
代码
文本

情况与实部类似。

代码
文本

u_homo.npy

除了数据集中的文件外,在官方baseline中还提供了u_homo.npy数据。这个数据是任务中32个不同发射点作为波源,在均匀介质(水)中传播得到的波场

在baseline中,这一数据作为额外的补充数据,用于定义输入波源的参数(src),此外还有一个由field index定义的theta用于定义输入波源的位置。详细实现可以参考baseline/dataset.py - File_Loader - __getitem__方法。

代码
文本
[9]
u_homo_data = np.load('/bohr/BaselineHelmholtz-uq2o/v1/AI4S-cupv2/u_homo.npy')
print(u_homo_data.shape)
print(type(u_homo_data[0][0][0][0]), u_homo_data[0][0][0][0])
(32, 480, 480, 2)
<class 'numpy.float32'> -295.13464
代码
文本

u_homo实部可视化

代码
文本
[10]
fig = plt.figure(figsize=(40, 40))

for i in range(32):

plot_img = u_homo_data[i, :, :, 0]
ax = fig.add_subplot(8, 4, i + 1, xticks=[], yticks=[])
ax.imshow(plot_img, cmap="RdBu_r")
ax.set_title(f'Filed Id: {i}')
fig.subplots_adjust(wspace=-0.8)
plt.show()
代码
文本

u_homo虚部可视化

代码
文本
[11]
fig = plt.figure(figsize=(40, 40))

for i in range(32):

plot_img = u_homo_data[i, :, :, 1]
ax = fig.add_subplot(8, 4, i + 1, xticks=[], yticks=[])
ax.imshow(plot_img, cmap="RdBu_r")
ax.set_title(f'Filed Id: {i}')
fig.subplots_adjust(wspace=-0.8)
plt.show()
代码
文本

可以看到u_homo的波源位置-Index的关系与训练集一致。但是由于是在均质介质中的波场,因此只反映了发射源的特性。

代码
文本
AI4SCUP-USCT
AI4SCUP-Helmholtz
python
AI4SCUP-USCTPredict
AI4SCUP-USCTAI4SCUP-HelmholtzpythonAI4SCUP-USCTPredict
已赞10
本文被以下合集收录
Helmholtz
fixxx
更新于 2024-06-16
6 篇1 人关注
推荐阅读
公开
[AI4S Cup - 超声CT成像中的声场预测] 可视化数据副本
AI4SCUP-USCTAI4SCUP-HelmholtzpythonAI4SCUP-USCTPredict
AI4SCUP-USCTAI4SCUP-HelmholtzpythonAI4SCUP-USCTPredict
bohr4b81a3
发布于 2024-04-14
公开
[WIP]DOAS在无定形结构分析中的运用
TutorialLAMMPSMD
TutorialLAMMPSMD
shenh@dp.tech
发布于 2023-10-10
1 赞1 转存文件