Repository: lanl/OpenFWI
Branch: main
Commit: 48754806b7b4
Files: 38
Total size: 222.0 KB
Directory structure:
gitextract_szcesyxt/
├── LICENSE
├── README.md
├── dataset.py
├── dataset_config.json
├── gan_train.py
├── network.py
├── pytorch_ssim.py
├── rainbow256.npy
├── scheduler.py
├── split_files/
│ ├── curvefault_a_train.txt
│ ├── curvefault_a_val.txt
│ ├── curvefault_b_train.txt
│ ├── curvefault_b_val.txt
│ ├── curvevel_a_train.txt
│ ├── curvevel_a_val.txt
│ ├── curvevel_b_train.txt
│ ├── curvevel_b_val.txt
│ ├── flatfault_a_train.txt
│ ├── flatfault_a_val.txt
│ ├── flatfault_b_train.txt
│ ├── flatfault_b_val.txt
│ ├── flatvel_a_train.txt
│ ├── flatvel_a_val.txt
│ ├── flatvel_b_train.txt
│ ├── flatvel_b_val.txt
│ ├── kaggle_tutorial_train.txt
│ ├── kaggle_tutorial_val.txt
│ ├── style_a_train.txt
│ ├── style_a_val.txt
│ ├── style_b_train.txt
│ ├── style_b_val.txt
│ ├── tutorial_train.txt
│ └── tutorial_val.txt
├── test.py
├── train.py
├── transforms.py
├── utils.py
└── vis.py
================================================
FILE CONTENTS
================================================
================================================
FILE: LICENSE
================================================
BSD 3-Clause License
Copyright (c) 2022, Los Alamos National Laboratory
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
This program is open source under the BSD-3 License.
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
and the following disclaimer in the documentation and/or other materials provided with the
distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse
or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[](https://opensource.org/licenses/BSD-3-Clause)
# OpenFWI Benchmarks
> Pytorch Implementation on OpenFWI 2D datasets
## About
This repository officially supports the reproducibility of OpenFWI Benchmarks[[1]](#ref1). The mateirals will evolve with the further development of OpenFWI.
For the time being, it contains the codes for training and testing InversionNet[[2]](#ref2) and VelocityGAN[[3]](#ref3), and covers 10 datasets in __Vel family__, __Fault family__, and __Style family__.
## Prepare Data
First download any dataset from our [website](https://openfwi-lanl.github.io/docs/data.html#vel) and unzip it into your local directory.
### Load a pair of velocity map and seismic data
For any dataset in _Vel, Fault, Style_ family, the data is saved as `.npy` files, each file contains a batch of 500 samples. `datai.npy` refers to the `i-th` sample of seismic data. To load data and check:
```bash
import numpy as np
# load seismic data
seismic_data = np.load('data1.npy')
print(seismic_data.shape) #(500,5,1000,70)
# load velocity map
velocity_map = np.load('model1.npy')
print(velocity_map.shape) #(500,1,70,70)
```
### Prepare training and testing set
Note that there are many ways of organizing training and testing dataset, as long as it is compatible with the [DataLoader module](https://pytorch.org/docs/stable/data.html) in pytorch. Whichever way you choose, please refer to the following table for the train/test split.
| Dataset | Train / test Split | Corresponding `.npy` files |
| ----------- | ----------- | ------------ |
| Vel Family | 24k / 6k | data(model)1-48.npy / data(model)49-60.npy |
| Fault Family | 48k / 6k | data(model)1-96.npy / data(model)97-108.npy |
| Style Family | 60k / 7k | data(model)1-120.npy / data(model)121-134.npy |
A convenient way of loading the data is to use a `.txt` file containing the _location+filename_ of all `.npy` files, parse each line of the `.txt` file and push to the dataloader. Take **flatvel-A** as an exmaple, we create `flatvel-a-train.txt`, organized as the follows, and same for `flatvel-a-test.txt`.
```bash
Dataset_directory/data1.npy
Dataset_directory/data2.npy
...
Dataset_directory/data48.npy
```
**To save time, you can download all the text files from the `splitting_files` folder and change to your own directory.**
## Reproduce the OpenFWI Benchmarks
> For InversionNet and VelocityGAN, the current version supports training with a single GPU. For UPFWI and InversionNet3D, multiple-GPU is necessary due to the computation cost.
### Environment setup
The following packages are required:
- pytorch v1.7.1
- torchvision v0.8.2
- scikit learn
- numpy
- matplotlib (for visualization)
If you other versions of pytorch and torchvision, please make sure they align.
### InversionNet
To train from scratch on Flatvel-A dataset with $\ell_1$ loss, run the following codes:
```
python train.py -ds flatvel-a -n YOUR_DIRECTORY -m InversionNet -g2v 0 --tensorboard -t flatvel_a_train.txt -v flatvel_a_val.txt
```
`-ds` specifies the dataset, `-n` creates the folder containing the saved model other log files, `-g2v` sets the coefficient of $\ell_2$ loss to be zero, `-t` and `-v` assign the training data and test data loading files.
To continue training from a saved checkpoint, run the following codes:
```
python train.py -ds flatvel-a -n YOUR_DIRECTORY -r CHECKPOINT.PTH -m InversionNet -g2v 0 --tensorboard -t flatvel_a_train.txt -v flatvel_a_val.txt
```
Please refer to the details of the codes if you would like to change other parameters (*learning rate,* etc.). These commands suffice to reproduce the OpenFWI benchmarks.
The last step would be testing, where we include the visualization. Also we borrow the implementation of SSIM metric from [pytorch-ssim](https://github.com/Po-Hsun-Su/pytorch-ssim). Please make sure that `pytorch-ssim.py` and `rainbow256.npy` are placed together with others.
```
python test.py -ds flatvel-a -n YOUR_DIRECTORY -m InversionNet -v flatvel_a_val.txt -r CHECKPOINT.PTH --vis -vb 2 -vsa 3
```
`--vis` enables the visualization and creates a folder with the figures, you may also change the amount of velocity maps by playing with `-vb` and `-vsa`.
### VelocityGAN
The code logic of VelocityGAN is almost identical the that of InversionNet.
To train from scratch on Flatvel-A dataset with $\ell_1$ loss, run the following codes:
```
python gan_train.py -ds flatvel-a -n YOUR_DIRECTORY -m InversionNet -g2v 0 --tensorboard -t flatvel_a_train.txt -v flatvel_a_val.txt
```
To continue training from a saved checkpoint, run the following codes:
```
python gan_train.py -ds flatvel-a -n YOUR_DIRECTORY -r CHECKPOINT.PTH -m InversionNet -g2v 0 --tensorboard -t flatvel_a_train.txt -v flatvel_a_val.txt
```
The command for testing is the same with InversionNet
## Future Updates
- We will release the training configuration of Kimberlina-CO2 dataset very soon.
- We will improve the instruction with illustrations and other necessary details
- The codes of UPFWI and InversionNet3D is pending approval, they will be added to this repo once approved.
## References
[1]
Deng, Chengyuan, et al. "OpenFWI: Benchmark Seismic Datasets for Machine Learning-Based Full Waveform Inversion." arXiv preprint arXiv:2111.02926 (2021).
[1]
Wu, Yue, and Youzuo Lin. "InversionNet: An efficient and accurate data-driven full waveform inversion." IEEE Transactions on Computational Imaging 6 (2019): 419-433.
[1]
Zhang, Zhongping, and Youzuo Lin. "Data-driven seismic waveform inversion: A study on the robustness and generalization." IEEE Transactions on Geoscience and Remote sensing 58.10 (2020): 6900-6913.
================================================
FILE: dataset.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import os
import numpy as np
from torch.utils.data import Dataset
from torchvision.transforms import Compose
import transforms as T
class FWIDataset(Dataset):
''' FWI dataset
For convenience, in this class, a batch refers to a npy file
instead of the batch used during training.
Args:
anno: path to annotation file
preload: whether to load the whole dataset into memory
sample_ratio: downsample ratio for seismic data
file_size: # of samples in each npy file
transform_data|label: transformation applied to data or label
'''
def __init__(self, anno, preload=True, sample_ratio=1, file_size=500,
transform_data=None, transform_label=None):
if not os.path.exists(anno):
print(f'Annotation file {anno} does not exists')
self.preload = preload
self.sample_ratio = sample_ratio
self.file_size = file_size
self.transform_data = transform_data
self.transform_label = transform_label
with open(anno, 'r') as f:
self.batches = f.readlines()
if preload:
self.data_list, self.label_list = [], []
for batch in self.batches:
data, label = self.load_every(batch)
self.data_list.append(data)
if label is not None:
self.label_list.append(label)
# Load from one line
def load_every(self, batch):
batch = batch.split('\t')
data_path = batch[0] if len(batch) > 1 else batch[0][:-1]
data = np.load(data_path)[:, :, ::self.sample_ratio, :]
data = data.astype('float32')
if len(batch) > 1:
label_path = batch[1][:-1]
label = np.load(label_path)
label = label.astype('float32')
else:
label = None
return data, label
def __getitem__(self, idx):
batch_idx, sample_idx = idx // self.file_size, idx % self.file_size
if self.preload:
data = self.data_list[batch_idx][sample_idx]
label = self.label_list[batch_idx][sample_idx] if len(self.label_list) != 0 else None
else:
data, label = self.load_every(self.batches[batch_idx])
data = data[sample_idx]
label = label[sample_idx] if label is not None else None
if self.transform_data:
data = self.transform_data(data)
if self.transform_label and label is not None:
label = self.transform_label(label)
return data, label if label is not None else np.array([])
def __len__(self):
return len(self.batches) * self.file_size
if __name__ == '__main__':
transform_data = Compose([
T.LogTransform(k=1),
T.MinMaxNormalize(T.log_transform(-61, k=1), T.log_transform(120, k=1))
])
transform_label = Compose([
T.MinMaxNormalize(2000, 6000)
])
dataset = FWIDataset(f'relevant_files/temp.txt', transform_data=transform_data, transform_label=transform_label, file_size=1)
data, label = dataset[0]
print(data.shape)
print(label is None)
================================================
FILE: dataset_config.json
================================================
{
"flatvel-a": {
"data_min": -26.95,
"data_max": 52.77,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"curvevel-a": {
"data_min": -27.11,
"data_max": 55.10,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"flatvel-b": {
"data_min": -27.17,
"data_max": 56.05,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"curvevel-b": {
"data_min": -29.04,
"data_max": 57.03,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"flatfault-a": {
"data_min": -26.10,
"data_max": 50.86,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"curvefault-a": {
"data_min": -26.48,
"data_max": 52.32,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"flatfault-b": {
"data_min": -24.86,
"data_max": 50.28,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"curvefault-b": {
"data_min": -24.93,
"data_max": 50.98,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"style-a": {
"data_min": -24.96,
"data_max": 48.93,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"style-b": {
"data_min": -23.76,
"data_max": 46.01,
"label_min": 1500,
"label_max": 4500,
"file_size": 500,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
},
"flatvel-tutorial": {
"data_min": -26.95,
"data_max": 52.77,
"label_min": 1500,
"label_max": 4500,
"file_size": 120,
"nbc": 120,
"dx": 10,
"nt": 1000,
"dt": 1e-3,
"f": 15,
"n_grid": 70,
"ns": 5,
"ng": 70,
"sz": 10,
"gz": 10
}
}
================================================
FILE: gan_train.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import os
import sys
import time
import datetime
import json
import torch
from torch import nn
from torch.utils.data import RandomSampler, DataLoader
from torch.utils.data.dataloader import default_collate
from torch.utils.data.distributed import DistributedSampler
from torch.utils.tensorboard import SummaryWriter
import torchvision
from torchvision.transforms import Compose
import utils
import network
from dataset import FWIDataset
from scheduler import WarmupMultiStepLR
import transforms as T
# Need to use parallel in apex, torch ddp can cause bugs when computing gradient penalty
import apex.parallel as parallel
step = 0
def train_one_epoch(model, model_d, criterion_g, criterion_d, optimizer_g, optimizer_d,
lr_schedulers, dataloader, device, epoch, print_freq, writer, n_critic=5):
global step
model.train()
model_d.train()
# Logger setup
metric_logger = utils.MetricLogger(delimiter=' ')
metric_logger.add_meter('lr_g', utils.SmoothedValue(window_size=1, fmt='{value}'))
metric_logger.add_meter('lr_d', utils.SmoothedValue(window_size=1, fmt='{value}'))
metric_logger.add_meter('samples/s', utils.SmoothedValue(window_size=10, fmt='{value:.3f}'))
header = 'Epoch: [{}]'.format(epoch)
itr = 0 # step in this epoch
max_itr = len(dataloader)
for data, label in metric_logger.log_every(dataloader, print_freq, header):
start_time = time.time()
data, label = data.to(device), label.to(device)
# Update discribminator first
optimizer_d.zero_grad()
with torch.no_grad():
pred = model(data)
loss_d, loss_diff, loss_gp = criterion_d(label, pred, model_d)
loss_d.backward()
optimizer_d.step()
metric_logger.update(loss_diff=loss_diff, loss_gp=loss_gp)
# Update generator occasionally
if ((itr + 1) % n_critic == 0) or (itr == max_itr - 1):
optimizer_g.zero_grad()
pred = model(data)
loss_g, loss_g1v, loss_g2v = criterion_g(pred, label, model_d)
loss_g.backward()
optimizer_g.step()
metric_logger.update(loss_g1v=loss_g1v, loss_g2v=loss_g2v)
batch_size = data.shape[0]
metric_logger.update(lr_g=optimizer_g.param_groups[0]['lr'],
lr_d=optimizer_d.param_groups[0]['lr'])
metric_logger.meters['samples/s'].update(batch_size / (time.time() - start_time))
if writer:
writer.add_scalar('loss_diff', loss_diff, step)
writer.add_scalar('loss_gp', loss_gp, step)
if ((itr + 1) % n_critic == 0) or (itr == max_itr - 1):
writer.add_scalar('loss_g1v', loss_g1v, step)
writer.add_scalar('loss_g2v', loss_g2v, step)
step += 1
itr += 1
for lr_scheduler in lr_schedulers:
lr_scheduler.step()
def evaluate(model, criterion, dataloader, device, writer):
model.eval()
metric_logger = utils.MetricLogger(delimiter=' ')
header = 'Test:'
with torch.no_grad():
for data, label in metric_logger.log_every(dataloader, 20, header):
data = data.to(device, non_blocking=True)
label = label.to(device, non_blocking=True)
pred = model(data)
loss, loss_g1v, loss_g2v = criterion(pred, label)
metric_logger.update(loss=loss.item(),
loss_g1v=loss_g1v.item(), loss_g2v=loss_g2v.item())
# Gather the stats from all processes
metric_logger.synchronize_between_processes()
print(' * Loss {loss.global_avg:.8f}\n'.format(loss=metric_logger.loss))
if writer:
writer.add_scalar('loss', metric_logger.loss.global_avg, step)
writer.add_scalar('loss_g1v', metric_logger.loss_g1v.global_avg, step)
writer.add_scalar('loss_g2v', metric_logger.loss_g2v.global_avg, step)
return metric_logger.loss.global_avg
def main(args):
global step
print(args)
print('torch version: ', torch.__version__)
print('torchvision version: ', torchvision.__version__)
utils.mkdir(args.output_path) # create folder to store checkpoints
utils.init_distributed_mode(args) # distributed mode initialization
# Set up tensorboard summary writer
train_writer, val_writer = None, None
if args.tensorboard:
utils.mkdir(args.log_path) # create folder to store tensorboard logs
if not args.distributed or (args.rank == 0) and (args.local_rank == 0):
train_writer = SummaryWriter(os.path.join(args.output_path, 'logs', 'train'))
val_writer = SummaryWriter(os.path.join(args.output_path, 'logs', 'val'))
device = torch.device(args.device)
torch.backends.cudnn.benchmark = True
with open('dataset_config.json') as f:
try:
ctx = json.load(f)[args.dataset]
except KeyError:
print('Unsupported dataset.')
sys.exit()
if args.file_size is not None:
ctx['file_size'] = args.file_size
# Create dataset and dataloader
print('Loading data')
print('Loading training data')
log_data_min = T.log_transform(ctx['data_min'], k=args.k)
log_data_max = T.log_transform(ctx['data_max'], k=args.k)
transform_data = Compose([
T.LogTransform(k=args.k),
T.MinMaxNormalize(log_data_min, log_data_max)
])
transform_label = Compose([
T.MinMaxNormalize(ctx['label_min'], ctx['label_max'])
])
if args.train_anno[-3:] == 'txt':
dataset_train = FWIDataset(
args.train_anno,
preload=True,
sample_ratio=args.sample_temporal,
file_size=ctx['file_size'],
transform_data=transform_data,
transform_label=transform_label
)
else:
dataset_train = torch.load(args.train_anno)
print('Loading validation data')
if args.val_anno[-3:] == 'txt':
dataset_valid = FWIDataset(
args.val_anno,
preload=True,
sample_ratio=args.sample_temporal,
file_size=ctx['file_size'],
transform_data=transform_data,
transform_label=transform_label
)
else:
dataset_valid = torch.load(args.val_anno)
print('Creating data loaders')
if args.distributed:
train_sampler = DistributedSampler(dataset_train, shuffle=True)
valid_sampler = DistributedSampler(dataset_valid, shuffle=True)
else:
train_sampler = RandomSampler(dataset_train)
valid_sampler = RandomSampler(dataset_valid)
dataloader_train = DataLoader(
dataset_train, batch_size=args.batch_size,
sampler=train_sampler, num_workers=args.workers,
pin_memory=True, drop_last=True, collate_fn=default_collate)
dataloader_valid = DataLoader(
dataset_valid, batch_size=args.batch_size,
sampler=valid_sampler, num_workers=args.workers,
pin_memory=True, collate_fn=default_collate)
print('Creating model')
if args.model not in network.model_dict or args.model_d not in network.model_dict:
print('Unsupported model.')
sys.exit()
model = network.model_dict[args.model](upsample_mode=args.up_mode,
sample_spatial=args.sample_spatial, sample_temporal=args.sample_temporal).to(device)
model_d = network.model_dict[args.model_d]().to(device)
if args.distributed and args.sync_bn:
model = parallel.convert_syncbn_model(model)
model_d = parallel.convert_syncbn_model(model_d)
# Define loss function
l1loss = nn.L1Loss()
l2loss = nn.MSELoss()
def criterion_g(pred, gt, model_d=None):
loss_g1v = l1loss(pred, gt)
loss_g2v = l2loss(pred, gt)
loss = args.lambda_g1v * loss_g1v + args.lambda_g2v * loss_g2v
if model_d is not None:
loss_adv = -torch.mean(model_d(pred))
loss += args.lambda_adv * loss_adv
return loss, loss_g1v, loss_g2v
criterion_d = utils.Wasserstein_GP(device, args.lambda_gp)
# Scale lr according to effective batch size
lr_g = args.lr_g * args.world_size
lr_d = args.lr_d * args.world_size
optimizer_g = torch.optim.AdamW(model.parameters(), lr=lr_g, betas=(0, 0.9), weight_decay=args.weight_decay)
optimizer_d = torch.optim.AdamW(model_d.parameters(), lr=lr_d, betas=(0, 0.9), weight_decay=args.weight_decay)
# Convert scheduler to be per iteration instead of per epoch
warmup_iters = args.lr_warmup_epochs * len(dataloader_train)
lr_milestones = [len(dataloader_train) * m for m in args.lr_milestones]
lr_schedulers = [WarmupMultiStepLR(
optimizer, milestones=lr_milestones, gamma=args.lr_gamma,
warmup_iters=warmup_iters, warmup_factor=1e-5) for optimizer in [optimizer_g, optimizer_d]]
model_without_ddp = model
model_d_without_ddp = model_d
if args.distributed:
model = parallel.DistributedDataParallel(model)
model_d = parallel.DistributedDataParallel(model_d)
model_without_ddp = model.module
model_d_without_ddp = model_d.module
if args.resume:
checkpoint = torch.load(args.resume, map_location='cpu')
model_without_ddp.load_state_dict(network.replace_legacy(checkpoint['model']))
model_d_without_ddp.load_state_dict(network.replace_legacy(checkpoint['model_d']))
optimizer_g.load_state_dict(checkpoint['optimizer_g'])
optimizer_d.load_state_dict(checkpoint['optimizer_d'])
args.start_epoch = checkpoint['epoch'] + 1
step = checkpoint['step']
for i in range(len(lr_schedulers)):
lr_schedulers[i].load_state_dict(checkpoint['lr_schedulers'][i])
for lr_scheduler in lr_schedulers:
lr_scheduler.milestones = lr_milestones
print('Start training')
start_time = time.time()
for epoch in range(args.start_epoch, args.epochs):
if args.distributed:
train_sampler.set_epoch(epoch)
train_one_epoch(model, model_d, criterion_g, criterion_d, optimizer_g, optimizer_d,
lr_schedulers, dataloader_train, device, epoch,
args.print_freq, train_writer, args.n_critic)
evaluate(model, criterion_g, dataloader_valid, device, val_writer)
checkpoint = {
'model': model_without_ddp.state_dict(),
'model_d': model_d_without_ddp.state_dict(),
'optimizer_g': optimizer_g.state_dict(),
'optimizer_d': optimizer_d.state_dict(),
'lr_schedulers': [scheduler.state_dict() for scheduler in lr_schedulers],
'epoch': epoch,
'step': step,
'args': args}
# Save checkpoint per epoch
utils.save_on_master(
checkpoint,
os.path.join(args.output_path, 'checkpoint.pth'))
# Save checkpoint every epoch block
if args.output_path and (epoch + 1) % args.epoch_block == 0:
utils.save_on_master(
checkpoint,
os.path.join(args.output_path, 'model_{}.pth'.format(epoch + 1)))
total_time = time.time() - start_time
total_time_str = str(datetime.timedelta(seconds=int(total_time)))
print('Training time {}'.format(total_time_str))
def parse_args():
import argparse
parser = argparse.ArgumentParser(description='GAN Training')
parser.add_argument('-d', '--device', default='cuda', help='device')
parser.add_argument('-ds', '--dataset', default='flat', type=str, help='dataset name')
parser.add_argument('-fs', '--file-size', default=None, type=str, help='number of samples in each npy file')
# Path related
parser.add_argument('-ap', '--anno-path', default='/vast/home/aicyd/Desktop/OpenFWI/src/', help='annotation files location')
parser.add_argument('-t', '--train-anno', default='train_flatvel.json', help='name of train anno')
parser.add_argument('-v', '--val-anno', default='val_flatvel.json', help='name of val anno')
parser.add_argument('-o', '--output-path', default='models', help='path to parent folder to save checkpoints')
parser.add_argument('-l', '--log-path', default='models', help='path to parent folder to save logs')
parser.add_argument('-n', '--save-name', default='gan', help='folder name for this experiment')
parser.add_argument('-s', '--suffix', type=str, default=None, help='subfolder name for this run')
# Model related
parser.add_argument('-m', '--model', type=str, help='generator name')
parser.add_argument('-md', '--model-d', default='Discriminator', help='discriminator name')
parser.add_argument('-um', '--up-mode', default=None, help='upsampling layer mode such as "nearest", "bicubic", etc.')
parser.add_argument('-ss', '--sample-spatial', type=float, default=1.0, help='spatial sampling ratio')
parser.add_argument('-st', '--sample-temporal', type=int, default=1, help='temporal sampling ratio')
# Training related
parser.add_argument('-nc', '--n_critic', default=5, type=int, help='generator & discriminator update ratio')
parser.add_argument('-b', '--batch-size', default=64, type=int)
parser.add_argument('--lr_g', default=0.0001, type=float, help='initial learning rate of generator')
parser.add_argument('--lr_d', default=0.0001, type=float, help='initial learning rate of discriminator')
parser.add_argument('-lm', '--lr-milestones', nargs='+', default=[], type=int, help='decrease lr on milestones')
parser.add_argument('--momentum', default=0.9, type=float, help='momentum')
parser.add_argument('--weight-decay', default=1e-4 , type=float, help='weight decay (default: 1e-4)')
parser.add_argument('--lr-gamma', default=0.1, type=float, help='decrease lr by a factor of lr-gamma')
parser.add_argument('--lr-warmup-epochs', default=0, type=int, help='number of warmup epochs')
parser.add_argument('-eb', '--epoch_block', type=int, default=20, help='epochs in a saved block')
parser.add_argument('-nb', '--num_block', type=int, default=25, help='number of saved block')
parser.add_argument('-j', '--workers', default=16, type=int, help='number of data loading workers (default: 16)')
parser.add_argument('--k', default=1, type=float, help='k in log transformation')
parser.add_argument('--print-freq', default=20, type=int, help='print frequency')
parser.add_argument('-r', '--resume', default=None, help='resume from checkpoint')
parser.add_argument('--start-epoch', default=0, type=int, help='start epoch')
# Loss related
parser.add_argument('-g1v', '--lambda_g1v', type=float, default=100.0)
parser.add_argument('-g2v', '--lambda_g2v', type=float, default=100.0)
parser.add_argument('-adv', '--lambda_adv', type=float, default=1.0)
parser.add_argument('-gp', '--lambda_gp', type=float, default=10.0)
# Distributed training related
parser.add_argument('--sync-bn', action='store_true', help='Use sync batch norm')
parser.add_argument('--world-size', default=1, type=int, help='number of distributed processes')
parser.add_argument('--dist-url', default='env://', help='url used to set up distributed training')
# Tensorboard related
parser.add_argument('--tensorboard', action='store_true', help='Use tensorboard for logging.')
args = parser.parse_args()
args.output_path = os.path.join(args.output_path, args.save_name, args.suffix or '')
args.log_path = os.path.join(args.log_path, args.save_name, args.suffix or '')
args.train_anno = os.path.join(args.anno_path, args.train_anno)
args.val_anno = os.path.join(args.anno_path, args.val_anno)
args.epochs = args.epoch_block * args.num_block
if args.resume:
args.resume = os.path.join(args.output_path, args.resume)
return args
if __name__ == '__main__':
args = parse_args()
main(args)
================================================
FILE: network.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import torch
import torch.nn as nn
import torch.nn.functional as F
from math import ceil
from collections import OrderedDict
NORM_LAYERS = { 'bn': nn.BatchNorm2d, 'in': nn.InstanceNorm2d, 'ln': nn.LayerNorm }
# Replace the key names in the checkpoint in which legacy network building blocks are used
def replace_legacy(old_dict):
li = []
for k, v in old_dict.items():
k = (k.replace('Conv2DwithBN', 'layers')
.replace('Conv2DwithBN_Tanh', 'layers')
.replace('Deconv2DwithBN', 'layers')
.replace('ResizeConv2DwithBN', 'layers'))
li.append((k, v))
return OrderedDict(li)
class Conv2DwithBN(nn.Module):
def __init__(self, in_fea, out_fea,
kernel_size=3, stride=1, padding=1,
bn=True, relu_slop=0.2, dropout=None):
super(Conv2DwithBN,self).__init__()
layers = [nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=kernel_size, stride=stride, padding=padding)]
if bn:
layers.append(nn.BatchNorm2d(num_features=out_fea))
layers.append(nn.LeakyReLU(relu_slop, inplace=True))
if dropout:
layers.append(nn.Dropout2d(0.8))
self.Conv2DwithBN = nn.Sequential(*layers)
def forward(self, x):
return self.Conv2DwithBN(x)
class ResizeConv2DwithBN(nn.Module):
def __init__(self, in_fea, out_fea, scale_factor=2, mode='nearest'):
super(ResizeConv2DwithBN, self).__init__()
layers = [nn.Upsample(scale_factor=scale_factor, mode=mode)]
layers.append(nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=3, stride=1, padding=1))
layers.append(nn.BatchNorm2d(num_features=out_fea))
layers.append(nn.LeakyReLU(0.2, inplace=True))
self.ResizeConv2DwithBN = nn.Sequential(*layers)
def forward(self, x):
return self.ResizeConv2DwithBN(x)
class Conv2DwithBN_Tanh(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size=3, stride=1, padding=1):
super(Conv2DwithBN_Tanh, self).__init__()
layers = [nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=kernel_size, stride=stride, padding=padding)]
layers.append(nn.BatchNorm2d(num_features=out_fea))
layers.append(nn.Tanh())
self.Conv2DwithBN = nn.Sequential(*layers)
def forward(self, x):
return self.Conv2DwithBN(x)
class ConvBlock(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size=3, stride=1, padding=1, norm='bn', relu_slop=0.2, dropout=None):
super(ConvBlock,self).__init__()
layers = [nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=kernel_size, stride=stride, padding=padding)]
if norm in NORM_LAYERS:
layers.append(NORM_LAYERS[norm](out_fea))
layers.append(nn.LeakyReLU(relu_slop, inplace=True))
if dropout:
layers.append(nn.Dropout2d(0.8))
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
class ConvBlock_Tanh(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size=3, stride=1, padding=1, norm='bn'):
super(ConvBlock_Tanh, self).__init__()
layers = [nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=kernel_size, stride=stride, padding=padding)]
if norm in NORM_LAYERS:
layers.append(NORM_LAYERS[norm](out_fea))
layers.append(nn.Tanh())
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
class DeconvBlock(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size=2, stride=2, padding=0, output_padding=0, norm='bn'):
super(DeconvBlock, self).__init__()
layers = [nn.ConvTranspose2d(in_channels=in_fea, out_channels=out_fea, kernel_size=kernel_size, stride=stride, padding=padding, output_padding=output_padding)]
if norm in NORM_LAYERS:
layers.append(NORM_LAYERS[norm](out_fea))
layers.append(nn.LeakyReLU(0.2, inplace=True))
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
class ResizeBlock(nn.Module):
def __init__(self, in_fea, out_fea, scale_factor=2, mode='nearest', norm='bn'):
super(ResizeBlock, self).__init__()
layers = [nn.Upsample(scale_factor=scale_factor, mode=mode)]
layers.append(nn.Conv2d(in_channels=in_fea, out_channels=out_fea, kernel_size=3, stride=1, padding=1))
if norm in NORM_LAYERS:
layers.append(NORM_LAYERS[norm](out_fea))
layers.append(nn.LeakyReLU(0.2, inplace=True))
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
# FlatFault/CurveFault
# 1000, 70 -> 70, 70
class InversionNet(nn.Module):
def __init__(self, dim1=32, dim2=64, dim3=128, dim4=256, dim5=512, sample_spatial=1.0, **kwargs):
super(InversionNet, self).__init__()
self.convblock1 = ConvBlock(5, dim1, kernel_size=(7, 1), stride=(2, 1), padding=(3, 0))
self.convblock2_1 = ConvBlock(dim1, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock2_2 = ConvBlock(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
self.convblock3_1 = ConvBlock(dim2, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock3_2 = ConvBlock(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
self.convblock4_1 = ConvBlock(dim2, dim3, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock4_2 = ConvBlock(dim3, dim3, kernel_size=(3, 1), padding=(1, 0))
self.convblock5_1 = ConvBlock(dim3, dim3, stride=2)
self.convblock5_2 = ConvBlock(dim3, dim3)
self.convblock6_1 = ConvBlock(dim3, dim4, stride=2)
self.convblock6_2 = ConvBlock(dim4, dim4)
self.convblock7_1 = ConvBlock(dim4, dim4, stride=2)
self.convblock7_2 = ConvBlock(dim4, dim4)
self.convblock8 = ConvBlock(dim4, dim5, kernel_size=(8, ceil(70 * sample_spatial / 8)), padding=0)
self.deconv1_1 = DeconvBlock(dim5, dim5, kernel_size=5)
self.deconv1_2 = ConvBlock(dim5, dim5)
self.deconv2_1 = DeconvBlock(dim5, dim4, kernel_size=4, stride=2, padding=1)
self.deconv2_2 = ConvBlock(dim4, dim4)
self.deconv3_1 = DeconvBlock(dim4, dim3, kernel_size=4, stride=2, padding=1)
self.deconv3_2 = ConvBlock(dim3, dim3)
self.deconv4_1 = DeconvBlock(dim3, dim2, kernel_size=4, stride=2, padding=1)
self.deconv4_2 = ConvBlock(dim2, dim2)
self.deconv5_1 = DeconvBlock(dim2, dim1, kernel_size=4, stride=2, padding=1)
self.deconv5_2 = ConvBlock(dim1, dim1)
self.deconv6 = ConvBlock_Tanh(dim1, 1)
def forward(self,x):
# Encoder Part
x = self.convblock1(x) # (None, 32, 500, 70)
x = self.convblock2_1(x) # (None, 64, 250, 70)
x = self.convblock2_2(x) # (None, 64, 250, 70)
x = self.convblock3_1(x) # (None, 64, 125, 70)
x = self.convblock3_2(x) # (None, 64, 125, 70)
x = self.convblock4_1(x) # (None, 128, 63, 70)
x = self.convblock4_2(x) # (None, 128, 63, 70)
x = self.convblock5_1(x) # (None, 128, 32, 35)
x = self.convblock5_2(x) # (None, 128, 32, 35)
x = self.convblock6_1(x) # (None, 256, 16, 18)
x = self.convblock6_2(x) # (None, 256, 16, 18)
x = self.convblock7_1(x) # (None, 256, 8, 9)
x = self.convblock7_2(x) # (None, 256, 8, 9)
x = self.convblock8(x) # (None, 512, 1, 1)
# Decoder Part
x = self.deconv1_1(x) # (None, 512, 5, 5)
x = self.deconv1_2(x) # (None, 512, 5, 5)
x = self.deconv2_1(x) # (None, 256, 10, 10)
x = self.deconv2_2(x) # (None, 256, 10, 10)
x = self.deconv3_1(x) # (None, 128, 20, 20)
x = self.deconv3_2(x) # (None, 128, 20, 20)
x = self.deconv4_1(x) # (None, 64, 40, 40)
x = self.deconv4_2(x) # (None, 64, 40, 40)
x = self.deconv5_1(x) # (None, 32, 80, 80)
x = self.deconv5_2(x) # (None, 32, 80, 80)
x = F.pad(x, [-5, -5, -5, -5], mode="constant", value=0) # (None, 32, 70, 70) 125, 100
x = self.deconv6(x) # (None, 1, 70, 70)
return x
class FCN4_Deep_Resize_2(nn.Module):
def __init__(self, dim1=32, dim2=64, dim3=128, dim4=256, dim5=512, ratio=1.0, upsample_mode='nearest'):
super(FCN4_Deep_Resize_2, self).__init__()
self.convblock1 = Conv2DwithBN(5, dim1, kernel_size=(7, 1), stride=(2, 1), padding=(3, 0))
self.convblock2_1 = Conv2DwithBN(dim1, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock2_2 = Conv2DwithBN(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
self.convblock3_1 = Conv2DwithBN(dim2, dim2, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock3_2 = Conv2DwithBN(dim2, dim2, kernel_size=(3, 1), padding=(1, 0))
self.convblock4_1 = Conv2DwithBN(dim2, dim3, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))
self.convblock4_2 = Conv2DwithBN(dim3, dim3, kernel_size=(3, 1), padding=(1, 0))
self.convblock5_1 = Conv2DwithBN(dim3, dim3, stride=2)
self.convblock5_2 = Conv2DwithBN(dim3, dim3)
self.convblock6_1 = Conv2DwithBN(dim3, dim4, stride=2)
self.convblock6_2 = Conv2DwithBN(dim4, dim4)
self.convblock7_1 = Conv2DwithBN(dim4, dim4, stride=2)
self.convblock7_2 = Conv2DwithBN(dim4, dim4)
self.convblock8 = Conv2DwithBN(dim4, dim5, kernel_size=(8, ceil(70 * ratio / 8)), padding=0)
self.deconv1_1 = ResizeConv2DwithBN(dim5, dim5, scale_factor=5, mode=upsample_mode)
self.deconv1_2 = Conv2DwithBN(dim5, dim5)
self.deconv2_1 = ResizeConv2DwithBN(dim5, dim4, scale_factor=2, mode=upsample_mode)
self.deconv2_2 = Conv2DwithBN(dim4, dim4)
self.deconv3_1 = ResizeConv2DwithBN(dim4, dim3, scale_factor=2, mode=upsample_mode)
self.deconv3_2 = Conv2DwithBN(dim3, dim3)
self.deconv4_1 = ResizeConv2DwithBN(dim3, dim2, scale_factor=2, mode=upsample_mode)
self.deconv4_2 = Conv2DwithBN(dim2, dim2)
self.deconv5_1 = ResizeConv2DwithBN(dim2, dim1, scale_factor=2, mode=upsample_mode)
self.deconv5_2 = Conv2DwithBN(dim1, dim1)
self.deconv6 = Conv2DwithBN_Tanh(dim1, 1)
def forward(self,x):
# Encoder Part
x = self.convblock1(x) # (None, 32, 500, 70)
x = self.convblock2_1(x) # (None, 64, 250, 70)
x = self.convblock2_2(x) # (None, 64, 250, 70)
x = self.convblock3_1(x) # (None, 64, 125, 70)
x = self.convblock3_2(x) # (None, 64, 125, 70)
x = self.convblock4_1(x) # (None, 128, 63, 70)
x = self.convblock4_2(x) # (None, 128, 63, 70)
x = self.convblock5_1(x) # (None, 128, 32, 35)
x = self.convblock5_2(x) # (None, 128, 32, 35)
x = self.convblock6_1(x) # (None, 256, 16, 18)
x = self.convblock6_2(x) # (None, 256, 16, 18)
x = self.convblock7_1(x) # (None, 256, 8, 9)
x = self.convblock7_2(x) # (None, 256, 8, 9)
x = self.convblock8(x) # (None, 512, 1, 1)
# Decoder Part
x = self.deconv1_1(x) # (None, 512, 5, 5)
x = self.deconv1_2(x) # (None, 512, 5, 5)
x = self.deconv2_1(x) # (None, 256, 10, 10)
x = self.deconv2_2(x) # (None, 256, 10, 10)
x = self.deconv3_1(x) # (None, 128, 20, 20)
x = self.deconv3_2(x) # (None, 128, 20, 20)
x = self.deconv4_1(x) # (None, 64, 40, 40)
x = self.deconv4_2(x) # (None, 64, 40, 40)
x = self.deconv5_1(x) # (None, 32, 80, 80)
x = self.deconv5_2(x) # (None, 32, 80, 80)
x = F.pad(x, [-5, -5, -5, -5], mode="constant", value=0) # (None, 32, 70, 70)
x = self.deconv6(x) # (None, 1, 70, 70)
return x
class Discriminator(nn.Module):
def __init__(self, dim1=32, dim2=64, dim3=128, dim4=256, **kwargs):
super(Discriminator, self).__init__()
self.convblock1_1 = ConvBlock(1, dim1, stride=2)
self.convblock1_2 = ConvBlock(dim1, dim1)
self.convblock2_1 = ConvBlock(dim1, dim2, stride=2)
self.convblock2_2 = ConvBlock(dim2, dim2)
self.convblock3_1 = ConvBlock(dim2, dim3, stride=2)
self.convblock3_2 = ConvBlock(dim3, dim3)
self.convblock4_1 = ConvBlock(dim3, dim4, stride=2)
self.convblock4_2 = ConvBlock(dim4, dim4)
self.convblock5 = ConvBlock(dim4, 1, kernel_size=5, padding=0)
def forward(self, x):
x = self.convblock1_1(x)
x = self.convblock1_2(x)
x = self.convblock2_1(x)
x = self.convblock2_2(x)
x = self.convblock3_1(x)
x = self.convblock3_2(x)
x = self.convblock4_1(x)
x = self.convblock4_2(x)
x = self.convblock5(x)
x = x.view(x.shape[0], -1)
return x
class Conv_HPGNN(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size=None, stride=None, padding=None, **kwargs):
super(Conv_HPGNN, self).__init__()
layers = [
ConvBlock(in_fea, out_fea, relu_slop=0.1, dropout=0.8),
ConvBlock(out_fea, out_fea, relu_slop=0.1, dropout=0.8),
]
if kernel_size is not None:
layers.append(nn.MaxPool2d(kernel_size=kernel_size, stride=stride, padding=padding))
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
class Deconv_HPGNN(nn.Module):
def __init__(self, in_fea, out_fea, kernel_size, **kwargs):
super(Deconv_HPGNN, self).__init__()
layers = [
nn.ConvTranspose2d(in_fea, in_fea, kernel_size=kernel_size, stride=2, padding=0),
ConvBlock(in_fea, out_fea, relu_slop=0.1, dropout=0.8),
ConvBlock(out_fea, out_fea, relu_slop=0.1, dropout=0.8)
]
self.layers = nn.Sequential(*layers)
def forward(self, x):
return self.layers(x)
model_dict = {
'InversionNet': InversionNet,
'Discriminator': Discriminator,
'UPFWI': FCN4_Deep_Resize_2
}
================================================
FILE: pytorch_ssim.py
================================================
# From https://github.com/Po-Hsun-Su/pytorch-ssim/blob/master/pytorch_ssim/__init__.py
import torch
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
from math import exp
def gaussian(window_size, sigma):
gauss = torch.Tensor([exp(-(x - window_size//2)**2/float(2*sigma**2)) for x in range(window_size)])
return gauss/gauss.sum()
def create_window(window_size, channel):
_1D_window = gaussian(window_size, 1.5).unsqueeze(1)
_2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0)
window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous())
return window
def _ssim(img1, img2, window, window_size, channel, size_average = True):
mu1 = F.conv2d(img1, window, padding = window_size//2, groups = channel)
mu2 = F.conv2d(img2, window, padding = window_size//2, groups = channel)
mu1_sq = mu1.pow(2)
mu2_sq = mu2.pow(2)
mu1_mu2 = mu1*mu2
sigma1_sq = F.conv2d(img1*img1, window, padding = window_size//2, groups = channel) - mu1_sq
sigma2_sq = F.conv2d(img2*img2, window, padding = window_size//2, groups = channel) - mu2_sq
sigma12 = F.conv2d(img1*img2, window, padding = window_size//2, groups = channel) - mu1_mu2
C1 = 0.01**2
C2 = 0.03**2
ssim_map = ((2*mu1_mu2 + C1)*(2*sigma12 + C2))/((mu1_sq + mu2_sq + C1)*(sigma1_sq + sigma2_sq + C2))
if size_average:
return ssim_map.mean()
else:
return ssim_map.mean(1).mean(1).mean(1)
class SSIM(torch.nn.Module):
def __init__(self, window_size = 11, size_average = True):
super(SSIM, self).__init__()
self.window_size = window_size
self.size_average = size_average
self.channel = 1
self.window = create_window(window_size, self.channel)
def forward(self, img1, img2):
(_, channel, _, _) = img1.size()
if channel == self.channel and self.window.data.type() == img1.data.type():
window = self.window
else:
window = create_window(self.window_size, channel)
if img1.is_cuda:
window = window.cuda(img1.get_device())
window = window.type_as(img1)
self.window = window
self.channel = channel
return _ssim(img1, img2, window, self.window_size, channel, self.size_average)
def ssim(img1, img2, window_size = 11, size_average = True):
(_, channel, _, _) = img1.size()
window = create_window(window_size, channel)
if img1.is_cuda:
window = window.cuda(img1.get_device())
window = window.type_as(img1)
return _ssim(img1, img2, window, window_size, channel, size_average)
================================================
FILE: scheduler.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import torch
from bisect import bisect_right
# Scheduler adopted from the original repo
class WarmupMultiStepLR(torch.optim.lr_scheduler._LRScheduler):
def __init__(
self,
optimizer,
milestones,
gamma=0.1,
warmup_factor=1.0 / 3,
warmup_iters=5,
warmup_method="linear",
last_epoch=-1,
):
if not milestones == sorted(milestones):
raise ValueError(
"Milestones should be a list of" " increasing integers. Got {}",
milestones,
)
if warmup_method not in ("constant", "linear"):
raise ValueError(
"Only 'constant' or 'linear' warmup_method accepted"
"got {}".format(warmup_method)
)
self.milestones = milestones
self.gamma = gamma
self.warmup_factor = warmup_factor
self.warmup_iters = warmup_iters
self.warmup_method = warmup_method
super(WarmupMultiStepLR, self).__init__(optimizer, last_epoch)
def get_lr(self):
warmup_factor = 1
if self.last_epoch < self.warmup_iters:
if self.warmup_method == "constant":
warmup_factor = self.warmup_factor
elif self.warmup_method == "linear":
alpha = float(self.last_epoch) / self.warmup_iters
warmup_factor = self.warmup_factor * (1 - alpha) + alpha
return [
base_lr *
warmup_factor *
self.gamma ** bisect_right(self.milestones, self.last_epoch)
for base_lr in self.base_lrs
]
================================================
FILE: split_files/curvefault_a_train.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_31.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_31.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_31.npy
================================================
FILE: split_files/curvefault_a_val.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis2_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel2_1_35.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis3_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel3_1_35.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_A/seis4_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_A/vel4_1_35.npy
================================================
FILE: split_files/curvefault_b_train.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_31.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_31.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_0.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_0.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_1.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_1.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_2.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_2.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_3.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_3.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_4.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_4.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_5.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_5.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_6.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_6.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_7.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_7.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_8.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_8.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_9.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_9.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_10.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_10.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_11.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_11.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_12.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_12.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_13.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_13.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_14.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_14.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_15.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_15.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_16.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_16.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_17.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_17.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_18.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_18.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_19.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_19.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_20.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_20.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_21.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_21.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_22.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_22.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_23.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_23.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_24.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_24.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_25.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_25.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_26.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_26.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_27.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_27.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_28.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_28.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_29.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_29.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_30.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_30.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_31.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_31.npy
================================================
FILE: split_files/curvefault_b_val.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis6_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel6_1_35.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis7_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel7_1_35.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_32.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_32.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_33.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_33.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_34.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_34.npy
/projects/piml_inversion/FWIOpenData/CurveFault_B/seis8_1_35.npy /projects/piml_inversion/FWIOpenData/CurveFault_B/vel8_1_35.npy
================================================
FILE: split_files/curvevel_a_train.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data1.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model1.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data2.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model2.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data3.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model3.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data4.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model4.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data5.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model5.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data6.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model6.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data7.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model7.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data8.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model8.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data9.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model9.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data10.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model10.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data11.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model11.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data12.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model12.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data13.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model13.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data14.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model14.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data15.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model15.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data16.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model16.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data17.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model17.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data18.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model18.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data19.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model19.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data20.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model20.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data21.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model21.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data22.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model22.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data23.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model23.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data24.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model24.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data25.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model25.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data26.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model26.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data27.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model27.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data28.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model28.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data29.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model29.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data30.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model30.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data31.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model31.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data32.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model32.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data33.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model33.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data34.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model34.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data35.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model35.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data36.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model36.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data37.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model37.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data38.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model38.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data39.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model39.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data40.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model40.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data41.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model41.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data42.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model42.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data43.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model43.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data44.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model44.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data45.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model45.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data46.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model46.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data47.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model47.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data48.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model48.npy
================================================
FILE: split_files/curvevel_a_val.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data49.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model49.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data50.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model50.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data51.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model51.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data52.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model52.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data53.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model53.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data54.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model54.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data55.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model55.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data56.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model56.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data57.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model57.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data58.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model58.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data59.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model59.npy
/projects/piml_inversion/FWIOpenData/CurveVel_A/data/data60.npy /projects/piml_inversion/FWIOpenData/CurveVel_A/model/model60.npy
================================================
FILE: split_files/curvevel_b_train.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data1.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model1.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data2.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model2.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data3.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model3.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data4.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model4.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data5.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model5.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data6.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model6.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data7.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model7.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data8.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model8.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data9.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model9.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data10.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model10.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data11.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model11.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data12.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model12.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data13.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model13.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data14.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model14.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data15.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model15.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data16.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model16.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data17.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model17.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data18.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model18.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data19.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model19.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data20.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model20.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data21.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model21.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data22.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model22.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data23.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model23.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data24.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model24.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data25.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model25.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data26.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model26.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data27.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model27.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data28.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model28.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data29.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model29.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data30.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model30.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data31.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model31.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data32.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model32.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data33.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model33.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data34.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model34.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data35.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model35.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data36.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model36.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data37.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model37.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data38.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model38.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data39.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model39.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data40.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model40.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data41.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model41.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data42.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model42.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data43.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model43.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data44.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model44.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data45.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model45.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data46.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model46.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data47.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model47.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data48.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model48.npy
================================================
FILE: split_files/curvevel_b_val.txt
================================================
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data49.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model49.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data50.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model50.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data51.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model51.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data52.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model52.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data53.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model53.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data54.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model54.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data55.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model55.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data56.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model56.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data57.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model57.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data58.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model58.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data59.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model59.npy
/projects/piml_inversion/FWIOpenData/CurveVel_B/data/data60.npy /projects/piml_inversion/FWIOpenData/CurveVel_B/model/model60.npy
================================================
FILE: split_files/flatfault_a_train.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_31.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_31.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_31.npy
================================================
FILE: split_files/flatfault_a_val.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis2_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel2_1_35.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis3_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel3_1_35.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_A/seis4_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_A/vel4_1_35.npy
================================================
FILE: split_files/flatfault_b_train.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_31.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_31.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_0.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_0.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_1.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_1.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_2.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_2.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_3.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_3.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_4.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_4.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_5.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_5.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_6.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_6.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_7.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_7.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_8.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_8.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_9.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_9.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_10.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_10.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_11.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_11.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_12.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_12.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_13.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_13.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_14.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_14.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_15.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_15.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_16.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_16.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_17.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_17.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_18.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_18.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_19.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_19.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_20.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_20.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_21.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_21.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_22.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_22.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_23.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_23.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_24.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_24.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_25.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_25.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_26.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_26.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_27.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_27.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_28.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_28.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_29.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_29.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_30.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_30.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_31.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_31.npy
================================================
FILE: split_files/flatfault_b_val.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis6_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel6_1_35.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis7_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel7_1_35.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_32.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_32.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_33.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_33.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_34.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_34.npy
/projects/piml_inversion/FWIOpenData/FlatFault_B/seis8_1_35.npy /projects/piml_inversion/FWIOpenData/FlatFault_B/vel8_1_35.npy
================================================
FILE: split_files/flatvel_a_train.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data1.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model1.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data2.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model2.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data3.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model3.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data4.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model4.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data5.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model5.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data6.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model6.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data7.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model7.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data8.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model8.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data9.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model9.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data10.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model10.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data11.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model11.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data12.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model12.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data13.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model13.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data14.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model14.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data15.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model15.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data16.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model16.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data17.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model17.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data18.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model18.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data19.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model19.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data20.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model20.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data21.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model21.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data22.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model22.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data23.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model23.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data24.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model24.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data25.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model25.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data26.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model26.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data27.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model27.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data28.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model28.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data29.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model29.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data30.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model30.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data31.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model31.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data32.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model32.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data33.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model33.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data34.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model34.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data35.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model35.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data36.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model36.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data37.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model37.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data38.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model38.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data39.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model39.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data40.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model40.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data41.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model41.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data42.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model42.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data43.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model43.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data44.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model44.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data45.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model45.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data46.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model46.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data47.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model47.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data48.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model48.npy
================================================
FILE: split_files/flatvel_a_val.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data49.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model49.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data50.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model50.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data51.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model51.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data52.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model52.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data53.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model53.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data54.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model54.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data55.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model55.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data56.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model56.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data57.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model57.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data58.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model58.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data59.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model59.npy
/projects/piml_inversion/FWIOpenData/FlatVel_A/data/data60.npy /projects/piml_inversion/FWIOpenData/FlatVel_A/model/model60.npy
================================================
FILE: split_files/flatvel_b_train.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data1.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model1.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data2.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model2.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data3.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model3.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data4.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model4.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data5.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model5.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data6.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model6.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data7.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model7.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data8.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model8.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data9.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model9.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data10.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model10.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data11.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model11.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data12.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model12.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data13.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model13.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data14.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model14.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data15.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model15.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data16.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model16.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data17.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model17.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data18.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model18.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data19.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model19.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data20.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model20.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data21.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model21.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data22.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model22.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data23.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model23.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data24.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model24.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data25.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model25.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data26.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model26.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data27.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model27.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data28.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model28.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data29.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model29.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data30.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model30.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data31.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model31.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data32.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model32.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data33.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model33.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data34.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model34.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data35.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model35.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data36.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model36.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data37.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model37.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data38.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model38.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data39.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model39.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data40.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model40.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data41.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model41.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data42.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model42.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data43.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model43.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data44.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model44.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data45.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model45.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data46.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model46.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data47.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model47.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data48.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model48.npy
================================================
FILE: split_files/flatvel_b_val.txt
================================================
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data49.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model49.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data50.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model50.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data51.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model51.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data52.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model52.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data53.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model53.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data54.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model54.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data55.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model55.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data56.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model56.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data57.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model57.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data58.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model58.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data59.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model59.npy
/projects/piml_inversion/FWIOpenData/FlatVel_B/data/data60.npy /projects/piml_inversion/FWIOpenData/FlatVel_B/model/model60.npy
================================================
FILE: split_files/kaggle_tutorial_train.txt
================================================
/kaggle/input/waveform-inversion/train_samples/FlatVel_A/data/data1.npy /kaggle/input/waveform-inversion/train_samples/FlatVel_A/model/model1.npy
================================================
FILE: split_files/kaggle_tutorial_val.txt
================================================
/kaggle/input/waveform-inversion/train_samples/FlatVel_A/data/data2.npy /kaggle/input/waveform-inversion/train_samples/FlatVel_A/model/model2.npy
================================================
FILE: split_files/style_a_train.txt
================================================
/projects/piml_inversion/FWIOpenData/Style_A/data/data1.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model1.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data2.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model2.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data3.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model3.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data4.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model4.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data5.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model5.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data6.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model6.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data7.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model7.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data8.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model8.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data9.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model9.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data10.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model10.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data11.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model11.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data12.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model12.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data13.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model13.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data14.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model14.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data15.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model15.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data16.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model16.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data17.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model17.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data18.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model18.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data19.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model19.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data20.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model20.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data21.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model21.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data22.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model22.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data23.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model23.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data24.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model24.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data25.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model25.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data26.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model26.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data27.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model27.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data28.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model28.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data29.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model29.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data30.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model30.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data31.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model31.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data32.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model32.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data33.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model33.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data34.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model34.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data35.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model35.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data36.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model36.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data37.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model37.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data38.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model38.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data39.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model39.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data40.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model40.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data41.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model41.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data42.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model42.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data43.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model43.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data44.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model44.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data45.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model45.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data46.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model46.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data47.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model47.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data48.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model48.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data49.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model49.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data50.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model50.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data51.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model51.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data52.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model52.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data53.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model53.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data54.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model54.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data55.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model55.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data56.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model56.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data57.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model57.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data58.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model58.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data59.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model59.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data60.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model60.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data61.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model61.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data62.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model62.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data63.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model63.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data64.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model64.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data65.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model65.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data66.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model66.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data67.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model67.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data68.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model68.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data69.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model69.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data70.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model70.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data71.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model71.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data72.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model72.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data73.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model73.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data74.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model74.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data75.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model75.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data76.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model76.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data77.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model77.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data78.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model78.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data79.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model79.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data80.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model80.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data81.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model81.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data82.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model82.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data83.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model83.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data84.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model84.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data85.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model85.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data86.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model86.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data87.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model87.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data88.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model88.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data89.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model89.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data90.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model90.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data91.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model91.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data92.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model92.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data93.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model93.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data94.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model94.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data95.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model95.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data96.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model96.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data97.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model97.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data98.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model98.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data99.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model99.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data100.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model100.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data101.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model101.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data102.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model102.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data103.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model103.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data104.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model104.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data105.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model105.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data106.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model106.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data107.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model107.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data108.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model108.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data109.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model109.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data110.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model110.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data111.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model111.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data112.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model112.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data113.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model113.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data114.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model114.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data115.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model115.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data116.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model116.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data117.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model117.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data118.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model118.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data119.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model119.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data120.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model120.npy
================================================
FILE: split_files/style_a_val.txt
================================================
/projects/piml_inversion/FWIOpenData/Style_A/data/data121.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model121.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data122.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model122.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data123.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model123.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data124.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model124.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data125.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model125.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data126.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model126.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data127.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model127.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data128.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model128.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data129.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model129.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data130.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model130.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data131.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model131.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data132.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model132.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data133.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model133.npy
/projects/piml_inversion/FWIOpenData/Style_A/data/data134.npy /projects/piml_inversion/FWIOpenData/Style_A/model/model134.npy
================================================
FILE: split_files/style_b_train.txt
================================================
/projects/piml_inversion/FWIOpenData/Style_B/data/data1.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model1.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data2.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model2.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data3.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model3.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data4.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model4.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data5.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model5.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data6.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model6.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data7.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model7.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data8.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model8.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data9.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model9.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data10.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model10.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data11.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model11.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data12.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model12.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data13.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model13.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data14.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model14.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data15.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model15.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data16.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model16.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data17.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model17.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data18.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model18.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data19.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model19.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data20.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model20.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data21.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model21.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data22.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model22.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data23.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model23.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data24.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model24.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data25.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model25.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data26.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model26.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data27.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model27.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data28.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model28.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data29.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model29.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data30.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model30.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data31.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model31.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data32.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model32.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data33.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model33.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data34.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model34.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data35.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model35.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data36.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model36.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data37.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model37.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data38.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model38.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data39.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model39.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data40.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model40.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data41.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model41.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data42.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model42.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data43.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model43.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data44.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model44.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data45.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model45.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data46.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model46.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data47.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model47.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data48.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model48.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data49.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model49.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data50.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model50.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data51.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model51.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data52.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model52.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data53.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model53.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data54.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model54.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data55.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model55.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data56.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model56.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data57.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model57.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data58.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model58.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data59.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model59.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data60.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model60.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data61.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model61.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data62.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model62.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data63.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model63.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data64.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model64.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data65.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model65.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data66.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model66.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data67.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model67.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data68.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model68.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data69.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model69.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data70.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model70.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data71.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model71.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data72.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model72.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data73.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model73.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data74.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model74.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data75.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model75.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data76.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model76.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data77.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model77.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data78.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model78.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data79.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model79.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data80.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model80.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data81.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model81.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data82.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model82.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data83.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model83.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data84.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model84.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data85.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model85.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data86.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model86.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data87.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model87.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data88.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model88.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data89.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model89.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data90.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model90.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data91.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model91.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data92.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model92.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data93.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model93.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data94.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model94.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data95.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model95.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data96.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model96.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data97.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model97.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data98.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model98.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data99.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model99.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data100.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model100.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data101.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model101.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data102.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model102.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data103.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model103.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data104.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model104.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data105.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model105.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data106.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model106.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data107.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model107.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data108.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model108.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data109.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model109.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data110.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model110.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data111.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model111.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data112.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model112.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data113.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model113.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data114.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model114.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data115.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model115.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data116.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model116.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data117.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model117.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data118.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model118.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data119.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model119.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data120.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model120.npy
================================================
FILE: split_files/style_b_val.txt
================================================
/projects/piml_inversion/FWIOpenData/Style_B/data/data121.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model121.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data122.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model122.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data123.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model123.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data124.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model124.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data125.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model125.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data126.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model126.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data127.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model127.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data128.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model128.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data129.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model129.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data130.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model130.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data131.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model131.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data132.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model132.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data133.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model133.npy
/projects/piml_inversion/FWIOpenData/Style_B/data/data134.npy /projects/piml_inversion/FWIOpenData/Style_B/model/model134.npy
================================================
FILE: split_files/tutorial_train.txt
================================================
./fva_data1.npy ./fva_velocity1.npy
./fva_data2.npy ./fva_velocity2.npy
================================================
FILE: split_files/tutorial_val.txt
================================================
./fva_data3.npy ./fva_velocity3.npy
================================================
FILE: test.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import os
import sys
import time
import datetime
import json
import torch
import torch.nn as nn
from torch.utils.data import SequentialSampler
from torch.utils.data.dataloader import default_collate
import torchvision
from torchvision.transforms import Compose
import numpy as np
import utils
import network
from vis import *
from dataset import FWIDataset
import transforms as T
import pytorch_ssim
def evaluate(model, criterions, dataloader, device, k, ctx,
vis_path, vis_batch, vis_sample, missing, std):
model.eval()
label_list, label_pred_list= [], [] # store denormalized predcition & gt in numpy
label_tensor, label_pred_tensor = [], [] # store normalized prediction & gt in tensor
if missing or std:
data_list, data_noise_list = [], [] # store original data and noisy/muted data
with torch.no_grad():
batch_idx = 0
for data, label in dataloader:
data = data.type(torch.FloatTensor).to(device, non_blocking=True)
label = label.type(torch.FloatTensor).to(device, non_blocking=True)
label_np = T.tonumpy_denormalize(label, ctx['label_min'], ctx['label_max'], exp=False)
label_list.append(label_np)
label_tensor.append(label)
if missing or std:
# Add gaussian noise
data_noise = torch.clip(data + (std ** 0.5) * torch.randn(data.shape).to(device, non_blocking=True), min=-1, max=1)
# Mute some traces
mute_idx = np.random.choice(data.shape[3], size=missing, replace=False)
data_noise[:, :, :, mute_idx] = data[0, 0, 0, 0]
data_np = T.tonumpy_denormalize(data, ctx['data_min'], ctx['data_max'], k=k)
data_noise_np = T.tonumpy_denormalize(data_noise, ctx['data_min'], ctx['data_max'], k=k)
data_list.append(data_np)
data_noise_list.append(data_noise_np)
pred = model(data_noise)
else:
pred = model(data)
label_pred_np = T.tonumpy_denormalize(pred, ctx['label_min'], ctx['label_max'], exp=False)
label_pred_list.append(label_pred_np)
label_pred_tensor.append(pred)
# Visualization
if vis_path and batch_idx < vis_batch:
for i in range(vis_sample):
plot_velocity(label_pred_np[i, 0], label_np[i, 0], f'{vis_path}/V_{batch_idx}_{i}.png') #, vmin=ctx['label_min'], vmax=ctx['label_max'])
if missing or std:
for ch in [2]: # range(data.shape[1]):
plot_seismic(data_np[i, ch], data_noise_np[i, ch], f'{vis_path}/S_{batch_idx}_{i}_{ch}.png',
vmin=ctx['data_min'] * 0.01, vmax=ctx['data_max'] * 0.01)
batch_idx += 1
label, label_pred = np.concatenate(label_list), np.concatenate(label_pred_list)
label_t, pred_t = torch.cat(label_tensor), torch.cat(label_pred_tensor)
l1 = nn.L1Loss()
l2 = nn.MSELoss()
print(f'MAE: {l1(label_t, pred_t)}')
print(f'MSE: {l2(label_t, pred_t)}')
ssim_loss = pytorch_ssim.SSIM(window_size=11)
print(f'SSIM: {ssim_loss(label_t / 2 + 0.5, pred_t / 2 + 0.5)}') # (-1, 1) to (0, 1)
for name, criterion in criterions.items():
print(f' * Velocity {name}: {criterion(label, label_pred)}')
# print(f' | Velocity 2 layers {name}: {criterion(label[:1000], label_pred[:1000])}')
# print(f' | Velocity 3 layers {name}: {criterion(label[1000:2000], label_pred[1000:2000])}')
# print(f' | Velocity 4 layers {name}: {criterion(label[2000:], label_pred[2000:])}')
def main(args):
print(args)
print("torch version: ", torch.__version__)
print("torchvision version: ", torchvision.__version__)
utils.mkdir(args.output_path)
device = torch.device(args.device)
torch.backends.cudnn.benchmark = True
with open('dataset_config.json') as f:
try:
ctx = json.load(f)[args.dataset]
except KeyError:
print('Unsupported dataset.')
sys.exit()
if args.file_size is not None:
ctx['file_size'] = args.file_size
print("Loading data")
print("Loading validation data")
log_data_min = T.log_transform(ctx['data_min'], k=args.k)
log_data_max = T.log_transform(ctx['data_max'], k=args.k)
transform_valid_data = Compose([
T.LogTransform(k=args.k),
T.MinMaxNormalize(log_data_min, log_data_max),
])
transform_valid_label = Compose([
T.MinMaxNormalize(ctx['label_min'], ctx['label_max'])
])
if args.val_anno[-3:] == 'txt':
dataset_valid = FWIDataset(
args.val_anno,
sample_ratio=args.sample_temporal,
file_size=ctx['file_size'],
transform_data=transform_valid_data,
transform_label=transform_valid_label
)
else:
dataset_valid = torch.load(args.val_anno)
print("Creating data loaders")
valid_sampler = SequentialSampler(dataset_valid)
dataloader_valid = torch.utils.data.DataLoader(
dataset_valid, batch_size=args.batch_size,
sampler=valid_sampler, num_workers=args.workers,
pin_memory=True, collate_fn=default_collate)
print("Creating model")
if args.model not in network.model_dict:
print('Unsupported model.')
sys.exit()
model = network.model_dict[args.model](upsample_mode=args.up_mode,
sample_spatial=args.sample_spatial, sample_temporal=args.sample_temporal, norm=args.norm).to(device)
criterions = {
'MAE': lambda x, y: np.mean(np.abs(x - y)),
'MSE': lambda x, y: np.mean((x - y) ** 2)
}
if args.resume:
print(args.resume)
checkpoint = torch.load(args.resume, map_location='cpu')
model.load_state_dict(network.replace_legacy(checkpoint['model']))
print('Loaded model checkpoint at Epoch {} / Step {}.'.format(checkpoint['epoch'], checkpoint['step']))
if args.vis:
# Create folder to store visualization results
vis_folder = f'visualization_{args.vis_suffix}' if args.vis_suffix else 'visualization'
vis_path = os.path.join(args.output_path, vis_folder)
utils.mkdir(vis_path)
else:
vis_path = None
print("Start testing")
start_time = time.time()
evaluate(model, criterions, dataloader_valid, device, args.k, ctx,
vis_path, args.vis_batch, args.vis_sample, args.missing, args.std)
total_time = time.time() - start_time
total_time_str = str(datetime.timedelta(seconds=int(total_time)))
print('Testing time {}'.format(total_time_str))
def parse_args():
import argparse
parser = argparse.ArgumentParser(description='FCN Testing')
parser.add_argument('-d', '--device', default='cuda', help='device')
parser.add_argument('-ds', '--dataset', default='flatfault-b', type=str, help='dataset name')
parser.add_argument('-fs', '--file-size', default=None, type=int, help='number of samples in each npy file')
# Path related
parser.add_argument('-ap', '--anno-path', default='split_files', help='annotation files location')
parser.add_argument('-v', '--val-anno', default='flatfault_b_val_invnet.txt', help='name of val anno')
parser.add_argument('-o', '--output-path', default='Invnet_models', help='path to parent folder to save checkpoints')
parser.add_argument('-n', '--save-name', default='fcn_l1loss_ffb', help='folder name for this experiment')
parser.add_argument('-s', '--suffix', type=str, default=None, help='subfolder name for this run')
# Model related
parser.add_argument('-m', '--model', type=str, help='inverse model name')
parser.add_argument('-no', '--norm', default='bn', help='normalization layer type, support bn, in, ln (default: bn)')
parser.add_argument('-um', '--up-mode', default=None, help='upsampling layer mode such as "nearest", "bicubic", etc.')
parser.add_argument('-ss', '--sample-spatial', type=float, default=1.0, help='spatial sampling ratio')
parser.add_argument('-st', '--sample-temporal', type=int, default=1, help='temporal sampling ratio')
# Test related
parser.add_argument('-b', '--batch-size', default=50, type=int)
parser.add_argument('-j', '--workers', default=16, type=int, help='number of data loading workers (default: 16)')
parser.add_argument('--k', default=1, type=float, help='k in log transformation')
parser.add_argument('-r', '--resume', default=None, help='resume from checkpoint')
parser.add_argument('--vis', help='visualization option', action="store_true")
parser.add_argument('-vsu','--vis-suffix', default=None, type=str, help='visualization suffix')
parser.add_argument('-vb','--vis-batch', help='number of batch to be visualized', default=0, type=int)
parser.add_argument('-vsa', '--vis-sample', help='number of samples in a batch to be visualized', default=0, type=int)
parser.add_argument('--missing', default=0, type=int, help='number of missing traces')
parser.add_argument('--std', default=0, type=float, help='standard deviation of gaussian noise')
args = parser.parse_args()
args.output_path = os.path.join(args.output_path, args.save_name, args.suffix or '')
args.val_anno = os.path.join(args.anno_path, args.val_anno)
args.resume = os.path.join(args.output_path, args.resume)
return args
if __name__ == '__main__':
args = parse_args()
main(args)
================================================
FILE: train.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import os
import sys
import time
import datetime
import json
import torch
from torch import nn
from torch.utils.data import RandomSampler, DataLoader
from torch.utils.data.dataloader import default_collate
from torch.utils.data.distributed import DistributedSampler
from torch.nn.parallel import DistributedDataParallel
from torch.utils.tensorboard import SummaryWriter
import torchvision
from torchvision.transforms import Compose
import utils
import network
from dataset import FWIDataset
from scheduler import WarmupMultiStepLR
import transforms as T
step = 0
def train_one_epoch(model, criterion, optimizer, lr_scheduler,
dataloader, device, epoch, print_freq, writer):
global step
model.train()
# Logger setup
metric_logger = utils.MetricLogger(delimiter=' ')
metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value}'))
metric_logger.add_meter('samples/s', utils.SmoothedValue(window_size=10, fmt='{value:.3f}'))
header = 'Epoch: [{}]'.format(epoch)
for data, label in metric_logger.log_every(dataloader, print_freq, header):
start_time = time.time()
optimizer.zero_grad()
data, label = data.to(device), label.to(device)
output = model(data)
loss, loss_g1v, loss_g2v = criterion(output, label)
loss.backward()
optimizer.step()
loss_val = loss.item()
loss_g1v_val = loss_g1v.item()
loss_g2v_val = loss_g2v.item()
batch_size = data.shape[0]
metric_logger.update(loss=loss_val, loss_g1v=loss_g1v_val,
loss_g2v=loss_g2v_val, lr=optimizer.param_groups[0]['lr'])
metric_logger.meters['samples/s'].update(batch_size / (time.time() - start_time))
if writer:
writer.add_scalar('loss', loss_val, step)
writer.add_scalar('loss_g1v', loss_g1v_val, step)
writer.add_scalar('loss_g2v', loss_g2v_val, step)
step += 1
lr_scheduler.step()
def evaluate(model, criterion, dataloader, device, writer):
model.eval()
metric_logger = utils.MetricLogger(delimiter=' ')
header = 'Test:'
with torch.no_grad():
for data, label in metric_logger.log_every(dataloader, 20, header):
data = data.to(device, non_blocking=True)
label = label.to(device, non_blocking=True)
output = model(data)
loss, loss_g1v, loss_g2v = criterion(output, label)
metric_logger.update(loss=loss.item(),
loss_g1v=loss_g1v.item(),
loss_g2v=loss_g2v.item())
# Gather the stats from all processes
metric_logger.synchronize_between_processes()
print(' * Loss {loss.global_avg:.8f}\n'.format(loss=metric_logger.loss))
if writer:
writer.add_scalar('loss', metric_logger.loss.global_avg, step)
writer.add_scalar('loss_g1v', metric_logger.loss_g1v.global_avg, step)
writer.add_scalar('loss_g2v', metric_logger.loss_g2v.global_avg, step)
return metric_logger.loss.global_avg
def main(args):
global step
print(args)
print('torch version: ', torch.__version__)
print('torchvision version: ', torchvision.__version__)
utils.mkdir(args.output_path) # create folder to store checkpoints
utils.init_distributed_mode(args) # distributed mode initialization
# Set up tensorboard summary writer
train_writer, val_writer = None, None
if args.tensorboard:
utils.mkdir(args.log_path) # create folder to store tensorboard logs
if not args.distributed or (args.rank == 0) and (args.local_rank == 0):
train_writer = SummaryWriter(os.path.join(args.output_path, 'logs', 'train'))
val_writer = SummaryWriter(os.path.join(args.output_path, 'logs', 'val'))
device = torch.device(args.device)
torch.backends.cudnn.benchmark = True
with open('dataset_config.json') as f:
try:
ctx = json.load(f)[args.dataset]
except KeyError:
print('Unsupported dataset.')
sys.exit()
if args.file_size is not None:
ctx['file_size'] = args.file_size
# Create dataset and dataloader
print('Loading data')
print('Loading training data')
# Normalize data and label to [-1, 1]
transform_data = Compose([
T.LogTransform(k=args.k),
T.MinMaxNormalize(T.log_transform(ctx['data_min'], k=args.k), T.log_transform(ctx['data_max'], k=args.k))
])
transform_label = Compose([
T.MinMaxNormalize(ctx['label_min'], ctx['label_max'])
])
if args.train_anno[-3:] == 'txt':
dataset_train = FWIDataset(
args.train_anno,
preload=True,
sample_ratio=args.sample_temporal,
file_size=ctx['file_size'],
transform_data=transform_data,
transform_label=transform_label
)
else:
dataset_train = torch.load(args.train_anno)
print('Loading validation data')
if args.val_anno[-3:] == 'txt':
dataset_valid = FWIDataset(
args.val_anno,
preload=True,
sample_ratio=args.sample_temporal,
file_size=ctx['file_size'],
transform_data=transform_data,
transform_label=transform_label
)
else:
dataset_valid = torch.load(args.val_anno)
print('Creating data loaders')
if args.distributed:
train_sampler = DistributedSampler(dataset_train, shuffle=True)
valid_sampler = DistributedSampler(dataset_valid, shuffle=True)
else:
train_sampler = RandomSampler(dataset_train)
valid_sampler = RandomSampler(dataset_valid)
dataloader_train = DataLoader(
dataset_train, batch_size=args.batch_size,
sampler=train_sampler, num_workers=args.workers,
pin_memory=True, drop_last=True, collate_fn=default_collate)
dataloader_valid = DataLoader(
dataset_valid, batch_size=args.batch_size,
sampler=valid_sampler, num_workers=args.workers,
pin_memory=True, collate_fn=default_collate)
print('Creating model')
if args.model not in network.model_dict:
print('Unsupported model.')
sys.exit()
model = network.model_dict[args.model](upsample_mode=args.up_mode,
sample_spatial=args.sample_spatial, sample_temporal=args.sample_temporal).to(device)
if args.distributed and args.sync_bn:
model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model)
# Define loss function
l1loss = nn.L1Loss()
l2loss = nn.MSELoss()
def criterion(pred, gt):
loss_g1v = l1loss(pred, gt)
loss_g2v = l2loss(pred, gt)
loss = args.lambda_g1v * loss_g1v + args.lambda_g2v * loss_g2v
return loss, loss_g1v, loss_g2v
# Scale lr according to effective batch size
lr = args.lr * args.world_size
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=(0.9, 0.999), weight_decay=args.weight_decay)
# Convert scheduler to be per iteration instead of per epoch
warmup_iters = args.lr_warmup_epochs * len(dataloader_train)
lr_milestones = [len(dataloader_train) * m for m in args.lr_milestones]
lr_scheduler = WarmupMultiStepLR(
optimizer, milestones=lr_milestones, gamma=args.lr_gamma,
warmup_iters=warmup_iters, warmup_factor=1e-5)
model_without_ddp = model
if args.distributed:
model = DistributedDataParallel(model, device_ids=[args.local_rank])
model_without_ddp = model.module
if args.resume:
checkpoint = torch.load(args.resume, map_location='cpu')
model_without_ddp.load_state_dict(network.replace_legacy(checkpoint['model']))
optimizer.load_state_dict(checkpoint['optimizer'])
lr_scheduler.load_state_dict(checkpoint['lr_scheduler'])
args.start_epoch = checkpoint['epoch'] + 1
step = checkpoint['step']
lr_scheduler.milestones=lr_milestones
print('Start training')
start_time = time.time()
best_loss = 10
chp=1
for epoch in range(args.start_epoch, args.epochs):
if args.distributed:
train_sampler.set_epoch(epoch)
train_one_epoch(model, criterion, optimizer, lr_scheduler, dataloader_train,
device, epoch, args.print_freq, train_writer)
loss = evaluate(model, criterion, dataloader_valid, device, val_writer)
checkpoint = {
'model': model_without_ddp.state_dict(),
'optimizer': optimizer.state_dict(),
'lr_scheduler': lr_scheduler.state_dict(),
'epoch': epoch,
'step': step,
'args': args}
# Save checkpoint per epoch
if loss < best_loss:
utils.save_on_master(
checkpoint,
os.path.join(args.output_path, 'checkpoint.pth'))
print('saving checkpoint at epoch: ', epoch)
chp = epoch
best_loss = loss
# Save checkpoint every epoch block
print('current best loss: ', best_loss)
print('current best epoch: ', chp)
if args.output_path and (epoch + 1) % args.epoch_block == 0:
utils.save_on_master(
checkpoint,
os.path.join(args.output_path, 'model_{}.pth'.format(epoch + 1)))
total_time = time.time() - start_time
total_time_str = str(datetime.timedelta(seconds=int(total_time)))
print('Training time {}'.format(total_time_str))
def parse_args():
import argparse
parser = argparse.ArgumentParser(description='FCN Training')
parser.add_argument('-d', '--device', default='cuda', help='device')
parser.add_argument('-ds', '--dataset', default='flatfault-b', type=str, help='dataset name')
parser.add_argument('-fs', '--file-size', default=None, type=int, help='number of samples in each npy file')
# Path related
parser.add_argument('-ap', '--anno-path', default='split_files', help='annotation files location')
parser.add_argument('-t', '--train-anno', default='flatfault_b_train_invnet.txt', help='name of train anno')
parser.add_argument('-v', '--val-anno', default='flatfault_b_val_invnet.txt', help='name of val anno')
parser.add_argument('-o', '--output-path', default='Invnet_models', help='path to parent folder to save checkpoints')
parser.add_argument('-l', '--log-path', default='Invnet_models', help='path to parent folder to save logs')
parser.add_argument('-n', '--save-name', default='fcn_l1loss_ffb', help='folder name for this experiment')
parser.add_argument('-s', '--suffix', type=str, default=None, help='subfolder name for this run')
# Model related
parser.add_argument('-m', '--model', type=str, help='inverse model name')
parser.add_argument('-um', '--up-mode', default=None, help='upsampling layer mode such as "nearest", "bicubic", etc.')
parser.add_argument('-ss', '--sample-spatial', type=float, default=1.0, help='spatial sampling ratio')
parser.add_argument('-st', '--sample-temporal', type=int, default=1, help='temporal sampling ratio')
# Training related
parser.add_argument('-b', '--batch-size', default=256, type=int)
parser.add_argument('--lr', default=0.0001, type=float, help='initial learning rate')
parser.add_argument('-lm', '--lr-milestones', nargs='+', default=[], type=int, help='decrease lr on milestones')
parser.add_argument('--momentum', default=0.9, type=float, help='momentum')
parser.add_argument('--weight-decay', default=1e-4 , type=float, help='weight decay (default: 1e-4)')
parser.add_argument('--lr-gamma', default=0.1, type=float, help='decrease lr by a factor of lr-gamma')
parser.add_argument('--lr-warmup-epochs', default=0, type=int, help='number of warmup epochs')
parser.add_argument('-eb', '--epoch_block', type=int, default=40, help='epochs in a saved block')
parser.add_argument('-nb', '--num_block', type=int, default=3, help='number of saved block')
parser.add_argument('-j', '--workers', default=16, type=int, help='number of data loading workers (default: 16)')
parser.add_argument('--k', default=1, type=float, help='k in log transformation')
parser.add_argument('--print-freq', default=50, type=int, help='print frequency')
parser.add_argument('-r', '--resume', default=None, help='resume from checkpoint')
parser.add_argument('--start-epoch', default=0, type=int, help='start epoch')
# Loss related
parser.add_argument('-g1v', '--lambda_g1v', type=float, default=1.0)
parser.add_argument('-g2v', '--lambda_g2v', type=float, default=1.0)
# Distributed training related
parser.add_argument('--sync-bn', action='store_true', help='Use sync batch norm')
parser.add_argument('--world-size', default=1, type=int, help='number of distributed processes')
parser.add_argument('--dist-url', default='env://', help='url used to set up distributed training')
# Tensorboard related
parser.add_argument('--tensorboard', action='store_true', help='Use tensorboard for logging.')
args = parser.parse_args()
args.output_path = os.path.join(args.output_path, args.save_name, args.suffix or '')
args.log_path = os.path.join(args.log_path, args.save_name, args.suffix or '')
args.train_anno = os.path.join(args.anno_path, args.train_anno)
args.val_anno = os.path.join(args.anno_path, args.val_anno)
args.epochs = args.epoch_block * args.num_block
if args.resume:
args.resume = os.path.join(args.output_path, args.resume)
return args
if __name__ == '__main__':
args = parse_args()
main(args)
================================================
FILE: transforms.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
import torch
import numpy as np
import random
from sklearn.decomposition import PCA
def crop(vid, i, j, h, w):
return vid[..., i:(i + h), j:(j + w)]
def center_crop(vid, output_size):
h, w = vid.shape[-2:]
th, tw = output_size
i = int(round((h - th) / 2.))
j = int(round((w - tw) / 2.))
return crop(vid, i, j, th, tw)
def hflip(vid):
return vid.flip(dims=(-1,))
# NOTE: for those functions, which generally expect mini-batches, we keep them
# as non-minibatch so that they are applied as if they were 4d (thus image).
# this way, we only apply the transformation in the spatial domain
def resize(vid, size, interpolation='bilinear'):
# NOTE: using bilinear interpolation because we don't work on minibatches
# at this level
scale = None
if isinstance(size, int):
scale = float(size) / min(vid.shape[-2:])
size = None
return torch.nn.functional.interpolate(
vid, size=size, scale_factor=scale, mode=interpolation, align_corners=False)
def random_resize(vid, size, random_factor, interpolation='bilinear'):
# NOTE: using bilinear interpolation because we don't work on minibatches
# at this level
scale = None
r = 1 + random.random() * (random_factor - 1)
if isinstance(size, int):
scale = float(size) / min(vid.shape[-2:]) * r
size = None
else:
size = tuple([int(elem * r) for elem in list(size)])
return torch.nn.functional.interpolate(
vid, size=size, scale_factor=scale, mode=interpolation, align_corners=False)
def pad(vid, padding, fill=0, padding_mode="constant"):
# NOTE: don't want to pad on temporal dimension, so let as non-batch
# (4d) before padding. This works as expected
return torch.nn.functional.pad(vid, padding, value=fill, mode=padding_mode)
def to_normalized_float_tensor(vid):
return vid.permute(3, 0, 1, 2).to(torch.float32) / 255
def normalize(vid, mean, std):
shape = (-1,) + (1,) * (vid.dim() - 1)
mean = torch.as_tensor(mean).reshape(shape)
std = torch.as_tensor(std).reshape(shape)
return (vid - mean) / std
def minmax_normalize(vid, vmin, vmax, scale=2):
vid -= vmin
vid /= (vmax - vmin)
return (vid - 0.5) * 2 if scale == 2 else vid
def minmax_denormalize(vid, vmin, vmax, scale=2):
if scale == 2:
vid = vid / 2 + 0.5
return vid * (vmax - vmin) + vmin
def add_noise(data, snr):
sig_avg_power_db = 10*np.log10(np.mean(data**2))
noise_avg_power_db = sig_avg_power_db - snr
noise_avg_power = 10**(noise_avg_power_db/10)
noise = np.random.normal(0, np.sqrt(noise_avg_power), data.shape)
noisy_data = data + noise
return noisy_data
def log_transform(data, k=1, c=0):
return (np.log1p(np.abs(k * data) + c)) * np.sign(data)
def log_transform_tensor(data, k=1, c=0):
return (torch.log1p(torch.abs(k * data) + c)) * torch.sign(data)
def exp_transform(data, k=1, c=0):
return (np.expm1(np.abs(data)) - c) * np.sign(data) / k
def tonumpy_denormalize(vid, vmin, vmax, exp=True, k=1, c=0, scale=2):
if exp:
vmin = log_transform(vmin, k=k, c=c)
vmax = log_transform(vmax, k=k, c=c)
vid = minmax_denormalize(vid.cpu().numpy(), vmin, vmax, scale)
return exp_transform(vid, k=k, c=c) if exp else vid
# Class interface
class RandomCrop(object):
def __init__(self, size):
self.size = size
@staticmethod
def get_params(vid, output_size):
"""Get parameters for ``crop`` for a random crop.
"""
h, w = vid.shape[-2:]
th, tw = output_size
if w == tw and h == th:
return 0, 0, h, w
i = random.randint(0, h - th)
j = random.randint(0, w - tw)
return i, j, th, tw
def __call__(self, vid):
i, j, h, w = self.get_params(vid, self.size)
return crop(vid, i, j, h, w)
class CenterCrop(object):
def __init__(self, size):
self.size = size
def __call__(self, vid):
return center_crop(vid, self.size)
class Resize(object):
def __init__(self, size):
self.size = size
def __call__(self, vid):
return resize(vid, self.size)
class RandomResize(object):
def __init__(self, size, random_factor=1.25):
self.size = size
self.factor = random_factor
def __call__(self, vid):
return random_resize(vid, self.size, self.factor)
class ToFloatTensorInZeroOne(object):
def __call__(self, vid):
return to_normalized_float_tensor(vid)
class Normalize(object):
def __init__(self, mean, std):
self.mean = mean
self.std = std
def __call__(self, vid):
return normalize(vid, self.mean, self.std)
class MinMaxNormalize(object):
def __init__(self, datamin, datamax, scale=2):
self.datamin = datamin
self.datamax = datamax
self.scale = scale
def __call__(self, vid):
return minmax_normalize(vid, self.datamin, self.datamax, self.scale)
class RandomHorizontalFlip(object):
def __init__(self, p=0.5):
self.p = p
def __call__(self, vid):
if random.random() < self.p:
return hflip(vid)
return vid
class Pad(object):
def __init__(self, padding, fill=0):
self.padding = padding
self.fill = fill
def __call__(self, vid):
return pad(vid, self.padding, self.fill)
class TemporalDownsample(object):
def __init__(self, rate=1):
self.rate = rate
def __call__(self, vid):
return vid[::self.rate]
class AddNoise(object):
def __init__(self, snr=10):
self.snr = snr
def __call__(self, vid):
return add_noise(vid, self.snr)
class PCD(object):
def __init__(self, n_comp=8):
self.pca = PCA(n_components=n_comp)
def __call__(self, data):
data= data.reshape((data.shape[0], -1))
feat_mean = data.mean(axis=0)
data -= np.tile(feat_mean, (data.shape[0], 1))
pc = self.pca.fit_transform(data)
pc = pc.reshape((-1,))
pc = pc[:, np.newaxis, np.newaxis]
return pc
class StackPCD(object):
def __init__(self, n_comp=(32, 8)):
self.primary_pca = PCA(n_components=n_comp[0])
self.secondary_pca = PCA(n_components=n_comp[1])
def __call__(self, data):
data = np.transpose(data, (0, 2, 1))
primary_pc = []
for sample in data:
feat_mean = sample.mean(axis=0)
sample -= np.tile(feat_mean, (sample.shape[0], 1))
primary_pc.append(self.primary_pca.fit_transform(sample))
primary_pc = np.array(primary_pc)
data = primary_pc.reshape((data.shape[0], -1))
feat_mean = data.mean(axis=0)
data -= np.tile(feat_mean, (data.shape[0], 1))
secondary_pc = self.secondary_pca.fit_transform(data)
secondary_pc = secondary_pc.reshape((-1,))
secondary_pc = pc[:, np.newaxis, np.newaxis]
return secondary_pc
class LogTransform(object):
def __init__(self, k=1, c=0):
self.k = k
self.c = c
def __call__(self, data):
return log_transform(data, k=self.k, c=self.c)
class ToTensor(object):
"""Convert ndarrays in sample to Tensors."""
# def __init__(self, device):
# self.device = device
def __call__(self, sample):
return torch.from_numpy(sample)
================================================
FILE: utils.py
================================================
# © 2022. Triad National Security, LLC. All rights reserved.
# This program was produced under U.S. Government contract 89233218CNA000001 for Los Alamos
# National Laboratory (LANL), which is operated by Triad National Security, LLC for the U.S.
# Department of Energy/National Nuclear Security Administration. All rights in the program are
# reserved by Triad National Security, LLC, and the U.S. Department of Energy/National Nuclear
# Security Administration. The Government is granted for itself and others acting on its behalf a
# nonexclusive, paid-up, irrevocable worldwide license in this material to reproduce, prepare
# derivative works, distribute copies to the public, perform publicly and display publicly, and to permit
# others to do so.
from collections import defaultdict, deque
import datetime
import time
import torch
import torch.distributed as dist
import torch.autograd as autograd
from torch.autograd import Variable
import torch.nn as nn
import errno
import os
import itertools
from torchvision.models import vgg16
import numpy as np
class SmoothedValue(object):
"""Track a series of values and provide access to smoothed values over a
window or the global series average.
"""
def __init__(self, window_size=20, fmt=None):
if fmt is None:
fmt = "{median:.4f} ({global_avg:.4f})"
self.deque = deque(maxlen=window_size)
self.total = 0.0
self.count = 0
self.fmt = fmt
def update(self, value, n=1):
self.deque.append(value)
self.count += n
self.total += value * n
def synchronize_between_processes(self):
"""
Warning: does not synchronize the deque!
"""
if not is_dist_avail_and_initialized():
return
t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda')
dist.barrier()
dist.all_reduce(t)
t = t.tolist()
self.count = int(t[0])
self.total = t[1]
@property
def median(self):
d = torch.tensor(list(self.deque))
return d.median().item()
@property
def avg(self):
d = torch.tensor(list(self.deque), dtype=torch.float32)
return d.mean().item()
@property
def global_avg(self):
return self.total / self.count
@property
def max(self):
return max(self.deque)
@property
def value(self):
return self.deque[-1]
def __str__(self):
return self.fmt.format(
median=self.median,
avg=self.avg,
global_avg=self.global_avg,
max=self.max,
value=self.value)
class MetricLogger(object):
def __init__(self, delimiter="\t"):
self.meters = defaultdict(SmoothedValue)
self.delimiter = delimiter
def update(self, **kwargs):
for k, v in kwargs.items():
if isinstance(v, torch.Tensor):
v = v.item()
assert isinstance(v, (float, int))
self.meters[k].update(v)
def __getattr__(self, attr):
if attr in self.meters:
return self.meters[attr]
if attr in self.__dict__:
return self.__dict__[attr]
raise AttributeError("'{}' object has no attribute '{}'".format(
type(self).__name__, attr))
def __str__(self):
loss_str = []
for name, meter in self.meters.items():
loss_str.append(
"{}: {}".format(name, str(meter))
)
return self.delimiter.join(loss_str)
def synchronize_between_processes(self):
for meter in self.meters.values():
meter.synchronize_between_processes()
def add_meter(self, name, meter):
self.meters[name] = meter
def log_every(self, iterable, print_freq, header=None):
if isinstance(iterable, list):
length = max(len(x) for x in iterable)
iterable = [x if len(x) == length else itertools.cycle(x) for x in iterable]
iterable = zip(*iterable)
else:
length = len(iterable)
i = 0
if not header:
header = ''
start_time = time.time()
end = time.time()
iter_time = SmoothedValue(fmt='{avg:.4f}')
data_time = SmoothedValue(fmt='{avg:.4f}')
space_fmt = ':' + str(len(str(length))) + 'd'
if torch.cuda.is_available():
log_msg = self.delimiter.join([
header,
'[{0' + space_fmt + '}/{1}]',
'eta: {eta}',
'{meters}',
'time: {time}',
'data: {data}',
'max mem: {memory:.0f}'
])
else:
log_msg = self.delimiter.join([
header,
'[{0' + space_fmt + '}/{1}]',
'eta: {eta}',
'{meters}',
'time: {time}',
'data: {data}'
])
MB = 1024.0 * 1024.0
for obj in iterable:
data_time.update(time.time() - end)
yield obj # <-- yield the batch in for loop
iter_time.update(time.time() - end)
if i % print_freq == 0:
eta_seconds = iter_time.global_avg * (length - i)
eta_string = str(datetime.timedelta(seconds=int(eta_seconds)))
if torch.cuda.is_available():
print(log_msg.format(
i, length, eta=eta_string,
meters=str(self),
time=str(iter_time), data=str(data_time),
memory=torch.cuda.max_memory_allocated() / MB))
else:
print(log_msg.format(
i, length, eta=eta_string,
meters=str(self),
time=str(iter_time), data=str(data_time)))
i += 1
end = time.time()
total_time = time.time() - start_time
total_time_str = str(datetime.timedelta(seconds=int(total_time)))
print('{} Total time: {}'.format(header, total_time_str))
# Legacy code
class ContentLoss(nn.Module):
def __init__(self, args):
super(ContentLoss, self).__init__()
names = ['l1', 'l2']
self.loss_names = ['loss_' + n for n in names]
for key in ['lambda_' + n for n in names]:
setattr(self, key, getattr(args, key))
self.l1loss = nn.L1Loss()
self.l2loss = nn.MSELoss()
def forward(self, model, input, target):
pred = model(input)
loss_l1 = self.l1loss(target, pred)
loss_l2 = self.l2loss(target, pred)
loss = loss_l1 * self.lambda_l1 + loss_l2 * self.lambda_l2
scope = locals()
return loss, { k: eval(k, scope) for k in self.loss_names }
# Legacy code
class IdenticalLoss(nn.Module):
def __init__(self, args):
super(IdenticalLoss, self).__init__()
names = ['id1s', 'id2s']
self.loss_names = ['loss_' + n for n in names]
for key in ['lambda_' + n for n in names]:
setattr(self, key, getattr(args, key))
self.l1loss = nn.L1Loss()
self.l2loss = nn.MSELoss()
def forward(self, model_s2v, model_v2s, input):
mid = model_s2v(input)
pred = model_v2s(mid)
cal_loss = lambda x, y: (self.l1loss(x, y), self.l2loss(x, y))
loss_id1s, loss_id2s = cal_loss(input, pred)
loss = loss_id1s * self.lambda_id1s + loss_id2s * self.lambda_id2s
scope = locals()
return loss, { k: eval(k, scope) for k in self.loss_names }
# Implemented according to H-PGNN, not useful
class NMSELoss(nn.Module):
def __init__(self):
super(NMSELoss, self).__init__()
def forward(self, pred, gt):
return torch.mean(((pred - gt) / (torch.amax(gt, (-2, -1), keepdim=True) + 1e-5)) ** 2)
class CycleLoss(nn.Module):
def __init__(self, args):
super(CycleLoss, self).__init__()
names = ['g1v', 'g2v', 'g1s', 'g2s', 'c1v', 'c2v', 'c1s', 'c2s']
self.loss_names = ['loss_' + n for n in names]
for key in ['lambda_' + n for n in names]:
setattr(self, key, getattr(args, key))
self.l1loss = nn.L1Loss()
self.l2loss = nn.MSELoss()
def forward(self, data, label, pred_s=None, pred_v=None, recon_s=None, recon_v=None):
cal_loss = lambda x, y: (self.l1loss(x, y), self.l2loss(x, y))
loss_g1v, loss_g2v, loss_g1s, loss_g2s = [0] * 4
if pred_v is not None:
loss_g1v, loss_g2v = cal_loss(pred_v, label)
if pred_s is not None:
loss_g1s, loss_g2s = cal_loss(pred_s, data)
loss_c1v, loss_c2v, loss_c1s , loss_c2s = [0] * 4
if recon_v is not None:
loss_c1v, loss_c2v = cal_loss(recon_v, label)
if recon_s is not None:
loss_c1s, loss_c2s = cal_loss(recon_s, data)
loss = loss_g1v * self.lambda_g1v + loss_g2v * self.lambda_g2v + \
loss_g1s * self.lambda_g1s + loss_g2s * self.lambda_g2s + \
loss_c1v * self.lambda_c1v + loss_c2v * self.lambda_c2v + \
loss_c1s * self.lambda_c1s + loss_c2s * self.lambda_c2s
scope = locals()
return loss, { k: eval(k, scope) for k in self.loss_names }
# Legacy code
class _CycleLoss(nn.Module):
def __init__(self, args):
super(_CycleLoss, self).__init__()
names = ['g1v', 'g2v', 'g1s', 'g2s', 'c1v', 'c2v', 'c1s', 'c2s']
self.loss_names = ['loss_' + n for n in names]
for key in ['lambda_' + n for n in names]:
setattr(self, key, getattr(args, key))
self.l1loss = nn.L1Loss()
self.l2loss = nn.MSELoss()
def forward(self, data, label, pred_s=None, pred_v=None, recon_s=None, recon_v=None):
cal_loss = lambda x, y: (self.l1loss(x, y), self.l2loss(x, y))
loss_g1v, loss_g2v, loss_g1s, loss_g2s = [0] * 4
if pred_v is not None and (self.lambda_g1v != 0 or self.lambda_g2v != 0):
loss_g1v, loss_g2v = cal_loss(pred_v, label)
if pred_s is not None and (self.lambda_g1s != 0 or self.lambda_g2s != 0):
loss_g1s, loss_g2s = cal_loss(pred_s, data)
loss_c1v, loss_c2v, loss_c1s , loss_c2s = [0] * 4
if recon_v is not None and (self.lambda_c1v != 0 or self.lambda_c2v != 0):
loss_c1v, loss_c2v = cal_loss(recon_v, label)
if recon_s is not None and (self.lambda_c1s != 0 or self.lambda_c2s != 0):
loss_c1s, loss_c2s = cal_loss(recon_s, data)
loss = loss_g1v * self.lambda_g1v + loss_g2v * self.lambda_g2v + \
loss_g1s * self.lambda_g1s + loss_g2s * self.lambda_g2s + \
loss_c1v * self.lambda_c1v + loss_c2v * self.lambda_c2v + \
loss_c1s * self.lambda_c1s + loss_c2s * self.lambda_c2s
scope = locals()
return loss, { k: eval(k, scope) for k in self.loss_names }
def accuracy(output, target, topk=(1,)):
"""Computes the accuracy over the k top predictions for the specified values of k"""
with torch.no_grad():
maxk = max(topk)
batch_size = target.size(0)
_, pred = output.topk(maxk, 1, True, True)
pred = pred.t()
correct = pred.eq(target[None])
res = []
for k in topk:
correct_k = correct[:k].flatten().sum(dtype=torch.float32)
res.append(correct_k * (100.0 / batch_size))
return res
def mkdir(path):
try:
os.makedirs(path)
except OSError as e:
if e.errno != errno.EEXIST:
raise
def setup_for_distributed(is_master):
"""
This function disables printing when not in master process
"""
import builtins as __builtin__
builtin_print = __builtin__.print
def print(*args, **kwargs):
force = kwargs.pop('force', False)
if is_master or force:
builtin_print(*args, **kwargs)
__builtin__.print = print
def is_dist_avail_and_initialized():
if not dist.is_available():
return False
if not dist.is_initialized():
return False
return True
def get_world_size():
if not is_dist_avail_and_initialized():
return 1
return dist.get_world_size()
def get_rank():
if not is_dist_avail_and_initialized():
return 0
return dist.get_rank()
def is_main_process():
return get_rank() == 0
def save_on_master(*args, **kwargs):
if is_main_process():
torch.save(*args, **kwargs)
def init_distributed_mode(args):
if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ:
args.rank = int(os.environ["RANK"])
args.world_size = int(os.environ['WORLD_SIZE'])
args.local_rank = int(os.environ['LOCAL_RANK'])
elif 'SLURM_PROCID' in os.environ and args.world_size > 1:
args.rank = int(os.environ['SLURM_PROCID'])
args.local_rank = args.rank % torch.cuda.device_count()
elif hasattr(args, "rank"):
pass
else:
print('Not using distributed mode')
args.distributed = False
return
args.distributed = True
torch.cuda.set_device(args.local_rank)
args.dist_backend = 'nccl'
print('| distributed init (rank {}): {}'.format(
args.rank, args.dist_url), flush=True)
torch.distributed.init_process_group(backend=args.dist_backend, init_method=args.dist_url,
world_size=args.world_size, rank=args.rank)
setup_for_distributed(args.rank == 0)
class Wasserstein_GP(nn.Module):
def __init__(self, device, lambda_gp):
super(Wasserstein_GP, self).__init__()
self.device = device
self.lambda_gp = lambda_gp
def forward(self, real, fake, model):
gradient_penalty = self.compute_gradient_penalty(model, real, fake)
loss_real = torch.mean(model(real))
loss_fake = torch.mean(model(fake))
loss = -loss_real + loss_fake + gradient_penalty * self.lambda_gp
return loss, loss_real-loss_fake, gradient_penalty
def compute_gradient_penalty(self, model, real_samples, fake_samples):
alpha = torch.rand(real_samples.size(0), 1, 1, 1, device=self.device)
interpolates = (alpha * real_samples + ((1 - alpha) * fake_samples)).requires_grad_(True)
d_interpolates = model(interpolates)
gradients = autograd.grad(
outputs=d_interpolates,
inputs=interpolates,
grad_outputs=torch.ones(real_samples.size(0), d_interpolates.size(1)).to(self.device),
create_graph=True,
retain_graph=True,
only_inputs=True,
)[0]
gradients = gradients.view(gradients.size(0), -1)
gradient_penalty = ((gradients.norm(2, dim=1) - 1) ** 2).mean()
return gradient_penalty
# Modified from https://gist.github.com/alper111/8233cdb0414b4cb5853f2f730ab95a49
class VGGPerceptualLoss(nn.Module):
def __init__(self, resize=True):
super(VGGPerceptualLoss, self).__init__()
blocks = []
blocks.append(vgg16(pretrained=True).features[:4].eval()) # relu1_2
blocks.append(vgg16(pretrained=True).features[4:9].eval()) # relu2_2
blocks.append(vgg16(pretrained=True).features[9:16].eval()) # relu3_3
blocks.append(vgg16(pretrained=True).features[16:23].eval()) # relu4_3
for bl in blocks:
for p in bl:
p.requires_grad = False
self.blocks = nn.ModuleList(blocks)
self.transform = nn.functional.interpolate
self.resize = resize
self.register_buffer("mean", torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1))
self.register_buffer("std", torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1))
self.l1loss = nn.L1Loss()
self.l2loss = nn.MSELoss()
def forward(self, input, target, rescale=True, feature_layers=[1]):
input = input.view(-1, 1, input.shape[-2], input.shape[-1]).repeat(1, 3, 1, 1)
target = target.view(-1, 1, target.shape[-2], target.shape[-1]).repeat(1, 3, 1, 1)
if rescale: # from [-1, 1] to [0, 1]
input = input / 2 + 0.5
target = target / 2 + 0.5
input = (input-self.mean) / self.std
target = (target-self.mean) / self.std
if self.resize:
input = self.transform(input, mode='bilinear', size=(224, 224), align_corners=False)
target = self.transform(target, mode='bilinear', size=(224, 224), align_corners=False)
loss_l1, loss_l2 = 0.0, 0.0
x = input
y = target
for i, block in enumerate(self.blocks):
x = block(x)
y = block(y)
if i in feature_layers:
loss_l1 += self.l1loss(x, y)
loss_l2 += self.l2loss(x, y)
return loss_l1, loss_l2
def cal_psnr(gt, data, max_value):
mse = np.mean((gt - data) ** 2)
if (mse == 0):
return 100
return 20 * np.log10(max_value / np.sqrt(mse))
================================================
FILE: vis.py
================================================
import os
import torch
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap
# Load colormap for velocity map visualization
rainbow_cmap = ListedColormap(np.load('rainbow256.npy'))
def plot_velocity(output, target, path, vmin=None, vmax=None):
fig, ax = plt.subplots(1, 2, figsize=(11, 5))
if vmin is None or vmax is None:
vmax, vmin = np.max(target), np.min(target)
im = ax[0].matshow(output, cmap=rainbow_cmap, vmin=vmin, vmax=vmax)
ax[0].set_title('Prediction', y=1.08)
ax[1].matshow(target, cmap=rainbow_cmap, vmin=vmin, vmax=vmax)
ax[1].set_title('Ground Truth', y=1.08)
for axis in ax:
# axis.set_xticks(range(0, 70, 10))
# axis.set_xticklabels(range(0, 1050, 150))
# axis.set_yticks(range(0, 70, 10))
# axis.set_yticklabels(range(0, 1050, 150))
axis.set_xticks(range(0, 70, 10))
axis.set_xticklabels(range(0, 700, 100))
axis.set_yticks(range(0, 70, 10))
axis.set_yticklabels(range(0, 700, 100))
axis.set_ylabel('Depth (m)', fontsize=12)
axis.set_xlabel('Offset (m)', fontsize=12)
fig.colorbar(im, ax=ax, shrink=0.75, label='Velocity(m/s)')
plt.savefig(path)
plt.close('all')
def plot_single_velocity(label, path):
plt.rcParams.update({'font.size': 16})
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
vmax, vmin = np.max(label), np.min(label)
im = ax.matshow(label, cmap=rainbow_cmap, vmin=vmin, vmax=vmax)
# im = ax.matshow(label, cmap="gist_rainbow", vmin=vmin, vmax=vmax)
# nx = label.shape[0]
# ax.set_aspect(aspect=1)
# ax.set_xticks(range(0, nx, int(150//(1050/nx)))[:7])
# ax.set_xticklabels(range(0, 1050, 150))
# ax.set_yticks(range(0, nx, int(150//(1050/nx)))[:7])
# ax.set_yticklabels(range(0, 1050, 150))
# ax.set_title('Offset (m)', y=1.08)
# ax.set_ylabel('Depth (m)', fontsize=18)
fig.colorbar(im, ax=ax, shrink=1.0, label='Velocity(m/s)')
plt.savefig(path)
plt.close('all')
# def plot_seismic(output, target, path, vmin=-1e-5, vmax=1e-5):
# fig, ax = plt.subplots(1, 3, figsize=(15, 6))
# im = ax[0].matshow(output, aspect='auto', cmap='gray', vmin=vmin, vmax=vmax)
# ax[0].set_title('Prediction')
# ax[1].matshow(target, aspect='auto', cmap='gray', vmin=vmin, vmax=vmax)
# ax[1].set_title('Ground Truth')
# ax[2].matshow(output - target, aspect='auto', cmap='gray', vmin=vmin, vmax=vmax)
# ax[2].set_title('Difference')
# fig.colorbar(im, ax=ax, format='%.1e')
# plt.savefig(path)
# plt.close('all')
def plot_seismic(output, target, path, vmin=-1e-5, vmax=1e-5):
fig, ax = plt.subplots(1, 3, figsize=(20, 5))
# fig, ax = plt.subplots(1, 2, figsize=(11, 5))
aspect = output.shape[1]/output.shape[0]
im = ax[0].matshow(target, aspect=aspect, cmap='gray', vmin=vmin, vmax=vmax)
ax[0].set_title('Ground Truth')
ax[1].matshow(output, aspect=aspect, cmap='gray', vmin=vmin, vmax=vmax)
ax[1].set_title('Prediction')
ax[2].matshow(output - target, aspect='auto', cmap='gray', vmin=vmin, vmax=vmax)
ax[2].set_title('Difference')
# for axis in ax:
# axis.set_xticks(range(0, 70, 10))
# axis.set_xticklabels(range(0, 1050, 150))
# axis.set_title('Offset (m)', y=1.1)
# axis.set_ylabel('Time (ms)', fontsize=12)
# fig.colorbar(im, ax=ax, shrink=1.0, pad=0.01, label='Amplitude')
fig.colorbar(im, ax=ax, shrink=0.75, label='Amplitude')
plt.savefig(path)
plt.close('all')
def plot_single_seismic(data, path):
nz, nx = data.shape
plt.rcParams.update({'font.size': 18})
vmin, vmax = np.min(data), np.max(data)
fig, ax = plt.subplots(1, 1, figsize=(8, 6))
im = ax.matshow(data, aspect='auto', cmap='gray', vmin=vmin * 0.01, vmax=vmax * 0.01)
ax.set_aspect(aspect=nx/nz)
ax.set_xticks(range(0, nx, int(300//(1050/nx)))[:5])
ax.set_xticklabels(range(0, 1050, 300))
ax.set_title('Offset (m)', y=1.08)
ax.set_yticks(range(0, nz, int(200//(1000/nz)))[:5])
ax.set_yticklabels(range(0, 1000, 200))
ax.set_ylabel('Time (ms)', fontsize=18)
fig.colorbar(im, ax=ax, shrink=1.0, pad=0.01, label='Amplitude')
plt.savefig(path)
plt.close('all')