Using AI based diffusive size factors for extracted networks#

This notebook illustrates the use of the deep learning based diffusive conductance algorithm decribed here. PoreSpy’s diffusive_size_factor_AI includes the steps for predicting the diffusive size factors of the conduit images. Note that the diffusive conductance of the conduits can be then calculated by multiplying the size factor by diffusivity of the phase. The function takes in the images of segmented porous medium and returns an array of diffusive size factors for all conduits in the image. Therefore, the framework can be applied to both one conduit image as well as a segmented image of porous medium:

PS_dl

Trained model and supplementary materials#

To use the diffusive_size_factor_AI, the trained model, and training data distribution are required. The AI model files and additional files used in this example are available here. The folder contains following files:

  • Trained model weights: This file includes only weights of the deep learning layers. To use this file, the Resnet50 model structure must be built first.

  • Trained data distribution: This file will be used in denormalizing predicted values based on normalized transform applied on training data. The denormalizing step is included in diffusive_size_factor_AI method.

  • Finite difference diffusive conductance: This file is used in this example to compare the prediction results with finite difference method for segmented regions

  • Pair of regions: This file is used in this example to compare the prediction results with finite difference method for a pair of regions

Let’s download the tensorflow files required to run this notebook:

try:
    import tensorflow as tf
except ImportError:
    !pip install tensorflow

try:
    import sklearn
except ImportError:
    !pip install scikit-learn

import os

if not os.path.exists("sf-model-lib"):
    !git clone https://github.com/PMEAL/sf-model-lib
Collecting tensorflow
  Downloading tensorflow-2.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (578.1 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/578.1 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/578.1 MB 64.7 MB/s eta 0:00:09
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/578.1 MB 83.2 MB/s eta 0:00:07
     ╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4/578.1 MB 89.8 MB/s eta 0:00:07
     ╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2/578.1 MB 114.3 MB/s eta 0:00:05
     ━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.4/578.1 MB 140.3 MB/s eta 0:00:04
     ━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.5/578.1 MB 148.8 MB/s eta 0:00:04
     ━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 29.7/578.1 MB 148.9 MB/s eta 0:00:04
     ━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 35.0/578.1 MB 150.0 MB/s eta 0:00:04
     ━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 40.7/578.1 MB 157.3 MB/s eta 0:00:04
     ━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.8/578.1 MB 177.9 MB/s eta 0:00:03
     ━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.4/578.1 MB 181.1 MB/s eta 0:00:03
     ━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.5/578.1 MB 182.1 MB/s eta 0:00:03
     ━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.6/578.1 MB 180.7 MB/s eta 0:00:03
     ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.1/578.1 MB 180.6 MB/s eta 0:00:03
     ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.3/578.1 MB 182.3 MB/s eta 0:00:03
     ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.5/578.1 MB 182.2 MB/s eta 0:00:03
     ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.1/578.1 MB 183.0 MB/s eta 0:00:03
     ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.1/578.1 MB 180.2 MB/s eta 0:00:03
     ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.8/578.1 MB 160.5 MB/s eta 0:00:03
     ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.0/578.1 MB 139.9 MB/s eta 0:00:04
     ━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 112.5/578.1 MB 146.7 MB/s eta 0:00:04
     ━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.5/578.1 MB 145.9 MB/s eta 0:00:04
     ━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 122.6/578.1 MB 141.3 MB/s eta 0:00:04
     ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.7/578.1 MB 141.8 MB/s eta 0:00:04
     ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.7/578.1 MB 141.8 MB/s eta 0:00:04
     ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 137.8/578.1 MB 141.6 MB/s eta 0:00:04
     ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━ 142.8/578.1 MB 140.9 MB/s eta 0:00:04
     ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.8/578.1 MB 140.2 MB/s eta 0:00:04
     ━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━ 153.0/578.1 MB 141.9 MB/s eta 0:00:03
     ━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━ 158.1/578.1 MB 148.2 MB/s eta 0:00:03
     ━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━ 163.1/578.1 MB 141.3 MB/s eta 0:00:03
     ━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━ 168.1/578.1 MB 140.2 MB/s eta 0:00:03
     ━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━ 173.2/578.1 MB 141.6 MB/s eta 0:00:03
     ━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━ 179.3/578.1 MB 162.3 MB/s eta 0:00:03
     ━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━ 185.4/578.1 MB 181.7 MB/s eta 0:00:03
     ━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━ 191.8/578.1 MB 178.0 MB/s eta 0:00:03
     ━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━ 197.2/578.1 MB 164.2 MB/s eta 0:00:03
     ━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━ 203.3/578.1 MB 182.9 MB/s eta 0:00:03
     ━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━ 210.0/578.1 MB 183.1 MB/s eta 0:00:03
     ━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━ 216.1/578.1 MB 182.8 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━ 222.2/578.1 MB 181.8 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━ 228.8/578.1 MB 181.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━ 235.0/578.1 MB 183.2 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━ 241.1/578.1 MB 182.7 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━ 246.0/578.1 MB 156.6 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━ 251.0/578.1 MB 139.6 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━ 256.3/578.1 MB 148.4 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━ 261.6/578.1 MB 150.2 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━ 266.9/578.1 MB 147.8 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━ 273.6/578.1 MB 151.5 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━ 278.7/578.1 MB 150.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━ 284.5/578.1 MB 158.6 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━ 290.1/578.1 MB 156.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━ 293.0/578.1 MB 119.2 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━ 297.4/578.1 MB 111.1 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━ 301.4/578.1 MB 106.2 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━ 304.3/578.1 MB 109.7 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━ 307.2/578.1 MB 93.0 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━ 313.3/578.1 MB 119.1 MB/s eta 0:00:03
     ━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━ 318.8/578.1 MB 166.1 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━ 324.4/578.1 MB 166.4 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━ 330.3/578.1 MB 163.6 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━ 336.0/578.1 MB 169.6 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━ 341.3/578.1 MB 164.1 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━ 347.1/578.1 MB 160.5 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━ 353.2/578.1 MB 168.0 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━ 358.5/578.1 MB 165.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━ 364.2/578.1 MB 163.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━ 370.1/578.1 MB 165.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━ 375.7/578.1 MB 165.3 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━ 381.3/578.1 MB 156.0 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━ 387.4/578.1 MB 170.2 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━ 393.1/578.1 MB 164.0 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━ 398.6/578.1 MB 160.9 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━ 404.3/578.1 MB 158.6 MB/s eta 0:00:02
     ━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━ 409.9/578.1 MB 172.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━ 415.9/578.1 MB 172.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━ 422.1/578.1 MB 172.4 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━ 426.8/578.1 MB 155.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━ 432.8/578.1 MB 157.6 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━ 439.3/578.1 MB 177.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━ 444.4/578.1 MB 165.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━ 450.3/578.1 MB 177.8 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━ 456.9/578.1 MB 181.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ 463.1/578.1 MB 182.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ 467.7/578.1 MB 161.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━ 474.3/578.1 MB 160.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━ 480.5/578.1 MB 183.4 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━ 485.4/578.1 MB 164.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━ 492.1/578.1 MB 183.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━ 498.1/578.1 MB 184.3 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━ 504.0/578.1 MB 163.0 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━ 510.1/578.1 MB 172.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━ 516.9/578.1 MB 183.6 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━ 522.6/578.1 MB 183.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━ 528.7/578.1 MB 156.1 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━━ 535.3/578.1 MB 181.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━ 540.2/578.1 MB 163.1 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━ 546.2/578.1 MB 154.6 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺━ 553.0/578.1 MB 182.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━ 558.0/578.1 MB 166.1 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺ 563.2/578.1 MB 139.0 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺ 568.6/578.1 MB 150.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 574.0/578.1 MB 150.0 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 578.1/578.1 MB 157.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 578.1/578.1 MB 1.8 MB/s eta 0:00:00
?25h
Collecting tensorflow-estimator<2.11,>=2.10.0
  Downloading tensorflow_estimator-2.10.0-py2.py3-none-any.whl (438 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/438.7 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 438.7/438.7 kB 69.0 MB/s eta 0:00:00
?25h
Collecting absl-py>=1.0.0
  Downloading absl_py-1.2.0-py3-none-any.whl (123 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/123.4 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.4/123.4 kB 32.0 MB/s eta 0:00:00
?25hCollecting termcolor>=1.1.0
  Downloading termcolor-1.1.0.tar.gz (3.9 kB)
  Preparing metadata (setup.py) ... ?25l-
 done
?25hCollecting opt-einsum>=2.3.2
  Downloading opt_einsum-3.3.0-py3-none-any.whl (65 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/65.5 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.5/65.5 kB 19.5 MB/s eta 0:00:00
?25h
Collecting grpcio<2.0,>=1.24.3
  Downloading grpcio-1.48.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/4.6 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 4.6/4.6 MB 202.3 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 93.2 MB/s eta 0:00:00
?25hRequirement already satisfied: numpy>=1.20 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (1.23.3)
Requirement already satisfied: wrapt>=1.11.0 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (1.14.1)
Collecting protobuf<3.20,>=3.9.2
  Downloading protobuf-3.19.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.1 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 84.4 MB/s eta 0:00:00
?25h
Collecting tensorboard<2.11,>=2.10
  Downloading tensorboard-2.10.0-py3-none-any.whl (5.9 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/5.9 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 5.9/5.9 MB 181.8 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.9/5.9 MB 93.1 MB/s eta 0:00:00
?25h
Requirement already satisfied: six>=1.12.0 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (1.16.0)
Requirement already satisfied: h5py>=2.9.0 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (3.7.0)
Collecting keras-preprocessing>=1.1.1
  Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)
?25l
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/42.6 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.6/42.6 kB 13.3 MB/s eta 0:00:00
?25hCollecting keras<2.11,>=2.10.0
  Downloading keras-2.10.0-py2.py3-none-any.whl (1.7 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.7 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 80.6 MB/s eta 0:00:00
?25hCollecting astunparse>=1.6.0
  Downloading astunparse-1.6.3-py2.py3-none-any.whl (12 kB)
Requirement already satisfied: typing-extensions>=3.6.6 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (4.3.0)
Collecting gast<=0.4.0,>=0.2.1
  Downloading gast-0.4.0-py3-none-any.whl (9.8 kB)
Collecting google-pasta>=0.1.1
  Downloading google_pasta-0.2.0-py3-none-any.whl (57 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/57.5 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 5.7 MB/s eta 0:00:00
?25h
Collecting libclang>=13.0.0
  Downloading libclang-14.0.6-py2.py3-none-manylinux2010_x86_64.whl (14.1 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/14.1 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━ 7.1/14.1 MB 180.5 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺ 13.7/14.1 MB 178.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 14.1/14.1 MB 171.1 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1/14.1 MB 76.0 MB/s eta 0:00:00
?25h
Collecting tensorflow-io-gcs-filesystem>=0.23.1
  Downloading tensorflow_io_gcs_filesystem-0.27.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.4 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/2.4 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 2.4/2.4 MB 169.8 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 64.9 MB/s eta 0:00:00
?25hRequirement already satisfied: packaging in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (21.3)
Collecting flatbuffers>=2.0
  Downloading flatbuffers-2.0.7-py2.py3-none-any.whl (26 kB)
Requirement already satisfied: setuptools in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorflow) (59.8.0)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from astunparse>=1.6.0->tensorflow) (0.37.1)
Collecting tensorboard-plugin-wit>=1.6.0
  Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/781.3 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 781.3/781.3 kB 80.7 MB/s eta 0:00:00
?25hCollecting werkzeug>=1.0.1
  Downloading Werkzeug-2.2.2-py3-none-any.whl (232 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/232.7 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 232.7/232.7 kB 52.5 MB/s eta 0:00:00
?25hCollecting markdown>=2.6.8
  Downloading Markdown-3.4.1-py3-none-any.whl (93 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/93.3 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.3/93.3 kB 29.3 MB/s eta 0:00:00
?25h
Collecting google-auth<3,>=1.6.3
  Downloading google_auth-2.11.0-py2.py3-none-any.whl (167 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/167.2 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 167.2/167.2 kB 42.2 MB/s eta 0:00:00
?25hCollecting google-auth-oauthlib<0.5,>=0.4.1
  Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB)
Collecting tensorboard-data-server<0.7.0,>=0.6.0
  Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/4.9 MB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━ 4.2/4.9 MB 94.8 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 4.9/4.9 MB 97.8 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.9/4.9 MB 58.5 MB/s eta 0:00:00
?25hRequirement already satisfied: requests<3,>=2.21.0 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from tensorboard<2.11,>=2.10->tensorflow) (2.28.1)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from packaging->tensorflow) (3.0.9)
Collecting cachetools<6.0,>=2.0.0
  Downloading cachetools-5.2.0-py3-none-any.whl (9.3 kB)
Collecting rsa<5,>=3.1.4
  Downloading rsa-4.9-py3-none-any.whl (34 kB)
Collecting pyasn1-modules>=0.2.1
  Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/155.3 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 39.8 MB/s eta 0:00:00
?25hCollecting requests-oauthlib>=0.7.0
  Downloading requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB)
Requirement already satisfied: importlib-metadata>=4.4 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from markdown>=2.6.8->tensorboard<2.11,>=2.10->tensorflow) (4.11.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow) (2022.6.15.1)
Requirement already satisfied: charset-normalizer<3,>=2 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow) (2.1.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow) (3.3)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.11,>=2.10->tensorflow) (1.26.11)
Requirement already satisfied: MarkupSafe>=2.1.1 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from werkzeug>=1.0.1->tensorboard<2.11,>=2.10->tensorflow) (2.1.1)
Requirement already satisfied: zipp>=0.5 in /usr/share/miniconda/envs/test/lib/python3.8/site-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.11,>=2.10->tensorflow) (3.8.1)
Collecting pyasn1<0.5.0,>=0.4.6
  Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/77.1 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 24.4 MB/s eta 0:00:00
?25h
Collecting oauthlib>=3.0.0
  Downloading oauthlib-3.2.1-py3-none-any.whl (151 kB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/151.7 kB ? eta -:--:--
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 151.7/151.7 kB 40.4 MB/s eta 0:00:00
?25h
Building wheels for collected packages: termcolor
  Building wheel for termcolor (setup.py) ... ?25l-
 done
?25h  Created wheel for termcolor: filename=termcolor-1.1.0-py3-none-any.whl size=4848 sha256=0d1650162dcf5907e84454bb8b745b7be16745606b45845b2ef0e8bea5ba6b6e
  Stored in directory: /home/runner/.cache/pip/wheels/a0/16/9c/5473df82468f958445479c59e784896fa24f4a5fc024b0f501
Successfully built termcolor
Installing collected packages: termcolor, tensorboard-plugin-wit, pyasn1, libclang, keras, flatbuffers, werkzeug, tensorflow-io-gcs-filesystem, tensorflow-estimator, tensorboard-data-server, rsa, pyasn1-modules, protobuf, opt-einsum, oauthlib, keras-preprocessing, grpcio, google-pasta, gast, cachetools, astunparse, absl-py, requests-oauthlib, markdown, google-auth, google-auth-oauthlib, tensorboard, tensorflow
^C
ERROR: Operation cancelled by user

Collecting scikit-learn
  Downloading scikit_learn-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.2 MB)
?25l     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/31.2 MB ? eta -:--:--
     ━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/31.2 MB 82.2 MB/s eta 0:00:01
     ━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/31.2 MB 115.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━ 13.6/31.2 MB 159.2 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━ 19.5/31.2 MB 163.7 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ 25.5/31.2 MB 177.1 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 31.2/31.2 MB 179.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 31.2/31.2 MB 179.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 31.2/31.2 MB 179.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 31.2/31.2 MB 179.9 MB/s eta 0:00:01
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 31.2/31.2 MB 52.8 MB/s eta 0:00:00
?25h

Also, since the model weights have been stored in chunks, they need to be recombined first:

import importlib
h5tools = importlib.import_module("sf-model-lib.h5tools")
DIR_WEIGHTS = "sf-model-lib/diffusion"
fname_in = [f"{DIR_WEIGHTS}/model_weights_part{j}.h5" for j in [0, 1]]
h5tools.combine(fname_in, fname_out=f"{DIR_WEIGHTS}/model_weights.h5")

Note that to use diffusive_size_factor_AI, Scikit-learn and Tensorflow must be installed. Import necessary packages and the AI model:

import os
import warnings

import h5py
import numpy as np
import openpnm as op
import porespy as ps
import scipy as sp
from matplotlib import pyplot as plt
from sklearn.metrics import r2_score

ps.visualization.set_mpl_style()
warnings.filterwarnings("ignore")
path = "./sf-model-lib/diffusion"
path_train = os.path.join(path, 'g_train_original.hdf5')
path_weights = os.path.join(path, 'model_weights.h5')
g_train = h5py.File(path_train, 'r')['g_train'][()]
model = ps.networks.create_model()
model.load_weights(path_weights)

Create test image#

We can create a 3D image using PoreSpy’s poly_disperese_spheres generator:

np.random.seed(17)
shape = [120, 120, 120]
dist = sp.stats.norm(loc=7, scale=5)
im = ps.generators.polydisperse_spheres(shape=shape,
                                        porosity=0.7,
                                        dist=dist,
                                        r_min=7)
fig, ax = plt.subplots(1, 1, figsize=[4, 4])
ax.imshow(im[:, :, 20], origin='lower', interpolation='none')
ax.axis(False);
../../../_images/05f48eb1cef53ef812dfbdd5ff5f7625c507ae1f64d2628b65f624df3c812b35.svg

Extract the network#

We then extract the pore network of the porous medium image using PoreSpy’s snow2 algorithm. snow2 returns the segmented image of the porous medium as well as extracted network data.

snow = ps.networks.snow2(im, boundary_width=0, parallelization=None)
regions = snow.regions
net = snow.network

Apply diffusive_size_factor_AI#

AI_based diffusive size factors of conduits in the extracted network can then be calculated applying diffusive_size_factor_AI on the segmented regions. We can then define throat.diffusive_size_factor_AI property and assign the predicted size_factor to this property.

conns = net['throat.conns']
size_factors = ps.networks.diffusive_size_factor_AI(regions,
                                                    model=model,
                                                    g_train=g_train,
                                                    throat_conns=conns)
net['throat.diffusive_size_factor_AI'] = size_factors

The resulting network can then be imported to OpenPNM for later use such as diffusive mass transport simulations problems. Let’s visualize the network:

try:
    pn, geo = op.io.PoreSpy.import_data(net)
except AttributeError:
    pn, geo = op.io.from_porespy(net)
fig, ax = plt.subplots(1, 1, figsize=[5, 5])
ax = op.topotools.plot_connections(network=pn, alpha=0.8, color='grey', ax=ax)
ax = op.topotools.plot_coordinates(network=pn, ax=ax, color='b', markersize=50)
../../../_images/cc9e14caaf1e7e9993e959544897f6ad5391be9014bdba3b326c38ff1b170288.svg

Compare with finite difference method#

Now that the extracted network includes AI_based diffusive size factor data, we can use the network to compare the accuracy of diffusive_size_factor_AI, shape factor method,and geometry method (no shape factor) in contrast to finite difference method. Assuming a generic phase with diffusivity of 1, the diffusive conductance of the conduits will be equal to their diffusive size factors. The diffusive conductance of the conduits can be calculated using OpenPNM’s generic_diffusive method. The diffusive conductance of the conduits using shape factor based method assuming cones and cylinders shapes for pores and throats can be calculated as follows:

geo.add_model(propname='throat.diffusive_size_factor',
              model=op.models.geometry.diffusive_size_factors.cones_and_cylinders)
try:
    phase = op.phases.GenericPhase(network=pn)
except AttributeError:
    phase = op.phase.GenericPhase(network=pn)
phys = op.physics.GenericPhysics(network=pn, phase=phase, geometry=geo)
phase['pore.diffusivity'] = 1
phase['throat.diffusivity'] = 1
phys.add_model(propname='throat.diffusive_conductance',
               model=op.models.physics.diffusive_conductance.generic_diffusive)
g_SF = phys['throat.diffusive_conductance']

To find the diffusive conductance of the conduit using geometry method (no shape factor) we assume cylindrical pores and throats:

cn = pn.conns
L1, Lt, L2 = geo['pore.diameter'][
    cn[:, 0]] / 2, geo['throat.length'], geo['pore.diameter'][cn[:, 1]] / 2
D1, Dt, D2 = geo['pore.diameter'][
    cn[:, 0]], geo['throat.diameter'], geo['pore.diameter'][cn[:, 1]]
A1, At, A2 = np.pi * D1**2 / 4, np.pi * Dt**2 / 4, np.pi * D2**2 / 4
g_Geo = 1 / (L1 / A1 + L2 / A2 + Lt / At)

The diffusive conductance of the conduit using AI-based method:

phys.add_model(propname='throat.diffusive_conductance',
               model=op.models.physics.diffusive_conductance.generic_diffusive,
               size_factors='throat.diffusive_size_factor_AI')
g_AI = phys['throat.diffusive_conductance']

Now let’s compare the diffusive conductance calculated from geometry-based method, shape factor based-method, and AI-based method with reference finite difference method. he reference diffusive conductance values for comparisons are calculated using finite difference method explained here and saved in the example data folder.

fname = os.path.join(path, 'g_finite_difference120-phi7.hdf5')
g_FD = h5py.File(fname, 'r')['g_finite_difference'][()]

fig, ax = plt.subplots(1, 3, figsize=[10, 4])

ax[0].plot(g_FD, g_Geo, '*', [0, 80], [0, 80], 'r')
ax[0].set_xlim([0, 80])
ax[0].set_ylim([0, 80])
ax[0].set_xlabel('finite difference $g_d$')
ax[0].set_ylabel('geometry based $g_d$')
ax[0].set_title('$R^2$ = ' + str(np.round(r2_score(g_FD, g_Geo), 2)))

ax[1].plot(g_FD, g_SF, '*', [0, 80], [0, 80], 'r')
ax[1].set_xlim([0, 80])
ax[1].set_ylim([0, 80])
ax[1].set_xlabel('finite difference $g_d$')
ax[1].set_ylabel('shape factor based $g_d$')
ax[1].set_title('$R^2$ = ' + str(np.round(r2_score(g_FD, g_SF), 2)))

ax[2].plot(g_FD, g_AI, '*', [0, 80], [0, 80], 'r')
ax[2].set_xlim([0, 80])
ax[2].set_ylim([0, 80])
ax[2].set_xlabel('finite difference $g_d$')
ax[2].set_ylabel('AI based $g_d$')
ax[2].set_title(r'$R^2$ = ' + str(np.round(r2_score(g_FD, g_AI), 2)));
../../../_images/d23866196e7c2962e41e0dc2e44409287c5346d9f7f3dfb26ce51c74d3ef5c0c.svg

As shown in the scatter plots, the AI-based diffusive conductance method predicts the conductance values with a higher accuracy than geometry-based and shape factor-based methods. A comprehensive comparison between these methods for a large dataset can be found here.