Sample with the paper's Euler 100 steps; model card with the paper's final results.
Browse files- README.md +11 -8
- config.json +1 -1
README.md
CHANGED
|
@@ -39,13 +39,14 @@ model = resflow.load_pretrained() # this repository
|
|
| 39 |
|
| 40 |
vols = model.generate('meander', n=8) # (8, 64, 64, 32) uint8, 1 = sand
|
| 41 |
vols = model.generate('lobe', n=4, ntg=0.35, width_cells=30, azimuth=45)
|
|
|
|
| 42 |
ens = model.generate('meander', n=32, # every realisation honours the well exactly
|
| 43 |
wells=[resflow.Well(x=32, y=32, facies=column)])
|
| 44 |
field = model.generate_field('lobe', shape=(512, 512, 32), ntg=0.5)
|
| 45 |
```
|
| 46 |
|
| 47 |
A walkthrough notebook is in the code repository at `examples/pretrained/quickstart.ipynb`. A GPU is recommended:
|
| 48 |
-
on an NVIDIA GH200 a 64×64×32 volume takes about
|
| 49 |
A CPU works, but takes tens of minutes per volume.
|
| 50 |
|
| 51 |
## Inputs
|
|
@@ -73,7 +74,7 @@ Parameters left out take the environment's typical value (the median over its tr
|
|
| 73 |
A 32.6M-parameter 3D diffusion transformer (4×4×2 patches, 12 blocks, width 384, 6 heads, QK-norm, 3D rotary
|
| 74 |
positions with θ = 100, adaptive layer norm) trained with conditional flow matching. The 18-number condition vector
|
| 75 |
holds the environment one-hot, NTG, width, depth, the sine and cosine of the azimuth, and five environment-specific
|
| 76 |
-
parameters; wells enter as two extra input channels. Sampling uses
|
| 77 |
classifier-free guidance 3. Volumes use global attention as in training; fields switch to sliding-window attention
|
| 78 |
of ±12 tokens per axis, so any extent is generated whole, without tiling.
|
| 79 |
|
|
@@ -84,10 +85,12 @@ the final epoch-40 exponential moving average.
|
|
| 84 |
## Evaluation
|
| 85 |
|
| 86 |
On ResBench, which scores each check against the simulator's own run-to-run variability (1 means
|
| 87 |
-
indistinguishable from the simulator, lower is better), ResFlow scores
|
| 88 |
-
volumes,
|
| 89 |
-
|
| 90 |
-
|
|
|
|
|
|
|
| 91 |
|
| 92 |
## Limitations
|
| 93 |
|
|
@@ -97,8 +100,8 @@ architecture and recipe in six of eight environments. Details are in the paper.
|
|
| 97 |
(the API warns).
|
| 98 |
- Under a fixed input it underestimates the simulator's uncertainty in most channel environments, so its ensembles
|
| 99 |
understate uncertainty there.
|
| 100 |
-
-
|
| 101 |
-
|
| 102 |
|
| 103 |
## Citation
|
| 104 |
|
|
|
|
| 39 |
|
| 40 |
vols = model.generate('meander', n=8) # (8, 64, 64, 32) uint8, 1 = sand
|
| 41 |
vols = model.generate('lobe', n=4, ntg=0.35, width_cells=30, azimuth=45)
|
| 42 |
+
column = [0] * 10 + [1] * 8 + [0] * 14 # a well log, base to top: 1 sand, 0 mud, -1 unknown
|
| 43 |
ens = model.generate('meander', n=32, # every realisation honours the well exactly
|
| 44 |
wells=[resflow.Well(x=32, y=32, facies=column)])
|
| 45 |
field = model.generate_field('lobe', shape=(512, 512, 32), ntg=0.5)
|
| 46 |
```
|
| 47 |
|
| 48 |
A walkthrough notebook is in the code repository at `examples/pretrained/quickstart.ipynb`. A GPU is recommended:
|
| 49 |
+
on an NVIDIA GH200 a 64×64×32 volume takes about 0.8 s in batches of 128 and a 512×512×32 field about 2 minutes.
|
| 50 |
A CPU works, but takes tens of minutes per volume.
|
| 51 |
|
| 52 |
## Inputs
|
|
|
|
| 74 |
A 32.6M-parameter 3D diffusion transformer (4×4×2 patches, 12 blocks, width 384, 6 heads, QK-norm, 3D rotary
|
| 75 |
positions with θ = 100, adaptive layer norm) trained with conditional flow matching. The 18-number condition vector
|
| 76 |
holds the environment one-hot, NTG, width, depth, the sine and cosine of the azimuth, and five environment-specific
|
| 77 |
+
parameters; wells enter as two extra input channels. Sampling uses Euler's method with 100 steps and
|
| 78 |
classifier-free guidance 3. Volumes use global attention as in training; fields switch to sliding-window attention
|
| 79 |
of ±12 tokens per axis, so any extent is generated whole, without tiling.
|
| 80 |
|
|
|
|
| 85 |
## Evaluation
|
| 86 |
|
| 87 |
On ResBench, which scores each check against the simulator's own run-to-run variability (1 means
|
| 88 |
+
indistinguishable from the simulator, lower is better), ResFlow scores 1.70 overall: 1.24 on unconditional
|
| 89 |
+
volumes, 1.96 on well-conditioned volumes, and 1.90 on fields. It beats single-environment specialists with its own
|
| 90 |
+
architecture and recipe in seven of eight environments. Given the same inputs, it is far closer to the simulator
|
| 91 |
+
than GANSim-3D and a 3D latent diffusion model, and on par with DiffSIM, a diffusion model five times larger that
|
| 92 |
+
is trained per environment and not built for heterogeneous fields (meander 1.67 against 1.81, PV shoestring 1.55
|
| 93 |
+
against 1.52, SH proximal 1.84 against 1.67). Details are in the paper.
|
| 94 |
|
| 95 |
## Limitations
|
| 96 |
|
|
|
|
| 100 |
(the API warns).
|
| 101 |
- Under a fixed input it underestimates the simulator's uncertainty in most channel environments, so its ensembles
|
| 102 |
understate uncertainty there.
|
| 103 |
+
- At field scale, connectivity and variograms deviate most from the simulator, in shoestring, delta and SH proximal
|
| 104 |
+
fields, and lobe fields carry more isolated sand specks than the simulator's.
|
| 105 |
|
| 106 |
## Citation
|
| 107 |
|
config.json
CHANGED
|
@@ -351,7 +351,7 @@
|
|
| 351 |
}
|
| 352 |
},
|
| 353 |
"sampler": {
|
| 354 |
-
"solver": "
|
| 355 |
"steps": 100,
|
| 356 |
"guidance": 3.0,
|
| 357 |
"field_radius": 12
|
|
|
|
| 351 |
}
|
| 352 |
},
|
| 353 |
"sampler": {
|
| 354 |
+
"solver": "euler",
|
| 355 |
"steps": 100,
|
| 356 |
"guidance": 3.0,
|
| 357 |
"field_radius": 12
|