Full Code of beezeetee/TDPDNE for AI

master ba58849417e1 cached
87 files
1.9 MB
930.4k tokens
790 symbols
1 requests
Download .txt
Showing preview only (1,993K chars total). Download the full file or copy to clipboard to get everything.
Repository: beezeetee/TDPDNE
Branch: master
Commit: ba58849417e1
Files: 87
Total size: 1.9 MB

Directory structure:
gitextract_ffogpws4/

├── Image Processor/
│   ├── .gitignore
│   ├── Dick_Pic_Mask-RCNN_Trainer.ipynb
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── README.md
│   ├── __init__.py
│   ├── align_images.py
│   ├── cv_tools.py
│   ├── download_utils.py
│   ├── mrcnn/
│   │   ├── __init__.py
│   │   ├── config.py
│   │   ├── model.py
│   │   ├── parallel_model.py
│   │   ├── utils.py
│   │   └── visualize.py
│   ├── requirements.txt
│   ├── scratch.py
│   ├── setup.cfg
│   └── setup.py
├── README.md
├── requirements.txt
└── stylegan2-tpu/
    ├── Dockerfile
    ├── LICENSE.txt
    ├── README.md
    ├── align_mammos.py
    ├── convert_ckpt_to_pkl.py
    ├── convert_pkl_to_ckpt.py
    ├── dataset_tool.py
    ├── dnnlib/
    │   ├── __init__.py
    │   ├── submission/
    │   │   ├── __init__.py
    │   │   ├── internal/
    │   │   │   ├── __init__.py
    │   │   │   └── local.py
    │   │   ├── run_context.py
    │   │   └── submit.py
    │   ├── tflib/
    │   │   ├── __init__.py
    │   │   ├── autosummary.py
    │   │   ├── custom_ops.py
    │   │   ├── network.py
    │   │   ├── ops/
    │   │   │   ├── __init__.py
    │   │   │   ├── fused_bias_act.cu
    │   │   │   ├── fused_bias_act.py
    │   │   │   ├── upfirdn_2d.cu
    │   │   │   └── upfirdn_2d.py
    │   │   ├── optimizer.py
    │   │   ├── tfutil.py
    │   │   └── tpu_summaries.py
    │   └── util.py
    ├── docs/
    │   ├── license.html
    │   └── versions.html
    ├── encoder/
    │   ├── __init__.py
    │   ├── generator_model.py
    │   └── perceptual_model.py
    ├── ext.l
    ├── generate_images_tpu.py
    ├── mammos.py
    ├── metrics/
    │   ├── __init__.py
    │   ├── frechet_inception_distance.py
    │   ├── inception_score.py
    │   ├── linear_separability.py
    │   ├── metric_base.py
    │   ├── metric_defaults.py
    │   ├── perceptual_path_length.py
    │   └── precision_recall.py
    ├── prepare_image.py
    ├── pretrained_networks.py
    ├── projector.py
    ├── random_crops.py
    ├── repl.l
    ├── requirements.txt
    ├── run_generator.py
    ├── run_metrics.py
    ├── run_projector.py
    ├── run_training.py
    ├── test_nvcc.cu
    ├── tflex.py
    ├── tflex_test.py
    ├── train_tpu.sh
    ├── training/
    │   ├── __init__.py
    │   ├── dataset.py
    │   ├── imagenet_input.py
    │   ├── loss.py
    │   ├── misc.py
    │   ├── networks_stylegan.py
    │   ├── networks_stylegan2.py
    │   ├── train_runner.py
    │   └── training_loop.py
    └── view.py

================================================
FILE CONTENTS
================================================

================================================
FILE: Image Processor/.gitignore
================================================
# Data files and directories common in repo root
datasets/
logs/
*.h5
results/
temp/
test/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# VS Studio Code
.vscode

# PyCharm
.idea/

# Dropbox
.dropbox.attr

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# dotenv
.env

# virtualenv
.venv
venv/
ENV/


================================================
FILE: Image Processor/Dick_Pic_Mask-RCNN_Trainer.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "from mrcnn.config import Config\n",
    "from mrcnn import model as modellib\n",
    "from mrcnn import visualize\n",
    "import mrcnn\n",
    "from mrcnn import utils\n",
    "from mrcnn.utils import Dataset\n",
    "from mrcnn.model import MaskRCNN\n",
    "\n",
    "import numpy as np\n",
    "from numpy import zeros\n",
    "from numpy import asarray\n",
    "import colorsys\n",
    "import argparse\n",
    "import imutils\n",
    "import random\n",
    "import cv2\n",
    "import os\n",
    "import time\n",
    "\n",
    "from matplotlib import pyplot\n",
    "from matplotlib.patches import Rectangle\n",
    "from keras.models import load_model\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "from os import listdir\n",
    "from pathlib import Path\n",
    "import tarfile\n",
    "from xml.etree import ElementTree\n",
    "\n",
    "from download_utils import download_file_from_google_drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#inherting  from Config class\n",
    "\n",
    "class myMaskRCNNConfig(Config):\n",
    "    # give the configuration a recognizable name\n",
    "    NAME = \"MaskRCNN_config\"\n",
    " \n",
    "    # set the number of GPUs to use along with the number of images\n",
    "    # per GPU\n",
    "    GPU_COUNT = 1\n",
    "    IMAGES_PER_GPU = 1\n",
    " \n",
    "    # number of classes (we would normally add +1 for the background)\n",
    "     # kangaroo + BG\n",
    "    NUM_CLASSES = 1+1\n",
    "   \n",
    "    # Number of training steps per epoch\n",
    "    STEPS_PER_EPOCH = 131\n",
    "    \n",
    "    # Learning rate\n",
    "    LEARNING_RATE=0.006\n",
    "    \n",
    "    # Skip detections with < 90% confidence\n",
    "    DETECTION_MIN_CONFIDENCE = 0.9\n",
    "    \n",
    "    # setting Max ground truth instances\n",
    "    MAX_GT_INSTANCES=10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "config= myMaskRCNNConfig()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "\nConfigurations:\nBACKBONE                       resnet101\nBACKBONE_STRIDES               [4, 8, 16, 32, 64]\nBATCH_SIZE                     1\nBBOX_STD_DEV                   [0.1 0.1 0.2 0.2]\nCOMPUTE_BACKBONE_SHAPE         None\nDETECTION_MAX_INSTANCES        100\nDETECTION_MIN_CONFIDENCE       0.9\nDETECTION_NMS_THRESHOLD        0.3\nFPN_CLASSIF_FC_LAYERS_SIZE     1024\nGPU_COUNT                      1\nGRADIENT_CLIP_NORM             5.0\nIMAGES_PER_GPU                 1\nIMAGE_CHANNEL_COUNT            3\nIMAGE_MAX_DIM                  1024\nIMAGE_META_SIZE                14\nIMAGE_MIN_DIM                  800\nIMAGE_MIN_SCALE                0\nIMAGE_RESIZE_MODE              square\nIMAGE_SHAPE                    [1024 1024    3]\nLEARNING_MOMENTUM              0.9\nLEARNING_RATE                  0.006\nLOSS_WEIGHTS                   {'rpn_class_loss': 1.0, 'rpn_bbox_loss': 1.0, 'mrcnn_class_loss': 1.0, 'mrcnn_bbox_loss': 1.0, 'mrcnn_mask_loss': 1.0}\nMASK_POOL_SIZE                 14\nMASK_SHAPE                     [28, 28]\nMAX_GT_INSTANCES               10\nMEAN_PIXEL                     [123.7 116.8 103.9]\nMINI_MASK_SHAPE                (56, 56)\nNAME                           MaskRCNN_config\nNUM_CLASSES                    2\nPOOL_SIZE                      7\nPOST_NMS_ROIS_INFERENCE        1000\nPOST_NMS_ROIS_TRAINING         2000\nPRE_NMS_LIMIT                  6000\nROI_POSITIVE_RATIO             0.33\nRPN_ANCHOR_RATIOS              [0.5, 1, 2]\nRPN_ANCHOR_SCALES              (32, 64, 128, 256, 512)\nRPN_ANCHOR_STRIDE              1\nRPN_BBOX_STD_DEV               [0.1 0.1 0.2 0.2]\nRPN_NMS_THRESHOLD              0.7\nRPN_TRAIN_ANCHORS_PER_IMAGE    256\nSTEPS_PER_EPOCH                131\nTOP_DOWN_PYRAMID_SIZE          256\nTRAIN_BN                       False\nTRAIN_ROIS_PER_IMAGE           200\nUSE_MINI_MASK                  True\nUSE_RPN_ROIS                   True\nVALIDATION_STEPS               50\nWEIGHT_DECAY                   0.0001\n\n\n"
    }
   ],
   "source": [
    "config.display()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Loading Mask R-CNN model...\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:541: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:66: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4432: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:2139: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:4267: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:2239: The name tf.image.resize_nearest_neighbor is deprecated. Please use tf.compat.v1.image.resize_nearest_neighbor instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\tensorflow_core\\python\\ops\\array_ops.py:1475: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\nInstructions for updating:\nUse tf.where in 2.0, which has the same broadcast rule as np.where\nWARNING:tensorflow:From d:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\model.py:553: The name tf.random_shuffle is deprecated. Please use tf.random.shuffle instead.\n\nWARNING:tensorflow:From d:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\utils.py:202: The name tf.log is deprecated. Please use tf.math.log instead.\n\nWARNING:tensorflow:From d:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\model.py:600: calling crop_and_resize_v1 (from tensorflow.python.ops.image_ops_impl) with box_ind is deprecated and will be removed in a future version.\nInstructions for updating:\nbox_ind is deprecated, use box_indices instead\n"
    }
   ],
   "source": [
    "# initialize the Mask R-CNN model for inference \n",
    "print(\"Loading Mask R-CNN model...\")\n",
    "model = modellib.MaskRCNN(mode=\"training\", config=config, model_dir='./')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": [
     "outputPrepend"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "0]              \n__________________________________________________________________________________________________\nres5b_branch2c (Conv2D)         (None, None, None, 2 1050624     activation_65[0][0]              \n__________________________________________________________________________________________________\nbn5b_branch2c (BatchNorm)       (None, None, None, 2 8192        res5b_branch2c[0][0]             \n__________________________________________________________________________________________________\nadd_32 (Add)                    (None, None, None, 2 0           bn5b_branch2c[0][0]              \n                                                                 res5a_out[0][0]                  \n__________________________________________________________________________________________________\nres5b_out (Activation)          (None, None, None, 2 0           add_32[0][0]                     \n__________________________________________________________________________________________________\nres5c_branch2a (Conv2D)         (None, None, None, 5 1049088     res5b_out[0][0]                  \n__________________________________________________________________________________________________\nbn5c_branch2a (BatchNorm)       (None, None, None, 5 2048        res5c_branch2a[0][0]             \n__________________________________________________________________________________________________\nactivation_66 (Activation)      (None, None, None, 5 0           bn5c_branch2a[0][0]              \n__________________________________________________________________________________________________\nres5c_branch2b (Conv2D)         (None, None, None, 5 2359808     activation_66[0][0]              \n__________________________________________________________________________________________________\nbn5c_branch2b (BatchNorm)       (None, None, None, 5 2048        res5c_branch2b[0][0]             \n__________________________________________________________________________________________________\nactivation_67 (Activation)      (None, None, None, 5 0           bn5c_branch2b[0][0]              \n__________________________________________________________________________________________________\nres5c_branch2c (Conv2D)         (None, None, None, 2 1050624     activation_67[0][0]              \n__________________________________________________________________________________________________\nbn5c_branch2c (BatchNorm)       (None, None, None, 2 8192        res5c_branch2c[0][0]             \n__________________________________________________________________________________________________\nadd_33 (Add)                    (None, None, None, 2 0           bn5c_branch2c[0][0]              \n                                                                 res5b_out[0][0]                  \n__________________________________________________________________________________________________\nres5c_out (Activation)          (None, None, None, 2 0           add_33[0][0]                     \n__________________________________________________________________________________________________\nfpn_c5p5 (Conv2D)               (None, None, None, 2 524544      res5c_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p5upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_c5p5[0][0]                   \n__________________________________________________________________________________________________\nfpn_c4p4 (Conv2D)               (None, None, None, 2 262400      res4w_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p4add (Add)                 (None, None, None, 2 0           fpn_p5upsampled[0][0]            \n                                                                 fpn_c4p4[0][0]                   \n__________________________________________________________________________________________________\nfpn_p4upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_p4add[0][0]                  \n__________________________________________________________________________________________________\nfpn_c3p3 (Conv2D)               (None, None, None, 2 131328      res3d_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p3add (Add)                 (None, None, None, 2 0           fpn_p4upsampled[0][0]            \n                                                                 fpn_c3p3[0][0]                   \n__________________________________________________________________________________________________\nfpn_p3upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_p3add[0][0]                  \n__________________________________________________________________________________________________\nfpn_c2p2 (Conv2D)               (None, None, None, 2 65792       res2c_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p2add (Add)                 (None, None, None, 2 0           fpn_p3upsampled[0][0]            \n                                                                 fpn_c2p2[0][0]                   \n__________________________________________________________________________________________________\nfpn_p5 (Conv2D)                 (None, None, None, 2 590080      fpn_c5p5[0][0]                   \n__________________________________________________________________________________________________\nfpn_p2 (Conv2D)                 (None, None, None, 2 590080      fpn_p2add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p3 (Conv2D)                 (None, None, None, 2 590080      fpn_p3add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p4 (Conv2D)                 (None, None, None, 2 590080      fpn_p4add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p6 (MaxPooling2D)           (None, None, None, 2 0           fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nrpn_model (Model)               [(None, None, 2), (N 1189394     fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n                                                                 fpn_p6[0][0]                     \n__________________________________________________________________________________________________\nrpn_class (Concatenate)         (None, None, 2)      0           rpn_model[1][1]                  \n                                                                 rpn_model[2][1]                  \n                                                                 rpn_model[3][1]                  \n                                                                 rpn_model[4][1]                  \n                                                                 rpn_model[5][1]                  \n__________________________________________________________________________________________________\nrpn_bbox (Concatenate)          (None, None, 4)      0           rpn_model[1][2]                  \n                                                                 rpn_model[2][2]                  \n                                                                 rpn_model[3][2]                  \n                                                                 rpn_model[4][2]                  \n                                                                 rpn_model[5][2]                  \n__________________________________________________________________________________________________\nanchors (Lambda)                (1, 261888, 4)       0           input_image[0][0]                \n__________________________________________________________________________________________________\ninput_gt_boxes (InputLayer)     (None, None, 4)      0                                            \n__________________________________________________________________________________________________\nROI (ProposalLayer)             (None, 2000, 4)      0           rpn_class[0][0]                  \n                                                                 rpn_bbox[0][0]                   \n                                                                 anchors[0][0]                    \n__________________________________________________________________________________________________\ninput_gt_class_ids (InputLayer) (None, None)         0                                            \n__________________________________________________________________________________________________\nlambda_1 (Lambda)               (None, None, 4)      0           input_gt_boxes[0][0]             \n__________________________________________________________________________________________________\ninput_gt_masks (InputLayer)     (None, 56, 56, None) 0                                            \n__________________________________________________________________________________________________\nproposal_targets (DetectionTarg [(None, 200, 4), (No 0           ROI[0][0]                        \n                                                                 input_gt_class_ids[0][0]         \n                                                                 lambda_1[0][0]                   \n                                                                 input_gt_masks[0][0]             \n__________________________________________________________________________________________________\ninput_image_meta (InputLayer)   (None, 14)           0                                            \n__________________________________________________________________________________________________\nroi_align_mask (PyramidROIAlign (None, 200, 14, 14,  0           proposal_targets[0][0]           \n                                                                 input_image_meta[0][0]           \n                                                                 fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nmrcnn_mask_conv1 (TimeDistribut (None, 200, 14, 14,  590080      roi_align_mask[0][0]             \n__________________________________________________________________________________________________\nmrcnn_mask_bn1 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv1[0][0]           \n__________________________________________________________________________________________________\nactivation_71 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn1[0][0]             \n__________________________________________________________________________________________________\nmrcnn_mask_conv2 (TimeDistribut (None, 200, 14, 14,  590080      activation_71[0][0]              \n__________________________________________________________________________________________________\nroi_align_classifier (PyramidRO (None, 200, 7, 7, 25 0           proposal_targets[0][0]           \n                                                                 input_image_meta[0][0]           \n                                                                 fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nmrcnn_mask_bn2 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv2[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class_conv1 (TimeDistribu (None, 200, 1, 1, 10 12846080    roi_align_classifier[0][0]       \n__________________________________________________________________________________________________\nactivation_72 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn2[0][0]             \n__________________________________________________________________________________________________\nmrcnn_class_bn1 (TimeDistribute (None, 200, 1, 1, 10 4096        mrcnn_class_conv1[0][0]          \n__________________________________________________________________________________________________\nmrcnn_mask_conv3 (TimeDistribut (None, 200, 14, 14,  590080      activation_72[0][0]              \n__________________________________________________________________________________________________\nactivation_68 (Activation)      (None, 200, 1, 1, 10 0           mrcnn_class_bn1[0][0]            \n__________________________________________________________________________________________________\nmrcnn_mask_bn3 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv3[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class_conv2 (TimeDistribu (None, 200, 1, 1, 10 1049600     activation_68[0][0]              \n__________________________________________________________________________________________________\nactivation_73 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn3[0][0]             \n__________________________________________________________________________________________________\nmrcnn_class_bn2 (TimeDistribute (None, 200, 1, 1, 10 4096        mrcnn_class_conv2[0][0]          \n__________________________________________________________________________________________________\nmrcnn_mask_conv4 (TimeDistribut (None, 200, 14, 14,  590080      activation_73[0][0]              \n__________________________________________________________________________________________________\nactivation_69 (Activation)      (None, 200, 1, 1, 10 0           mrcnn_class_bn2[0][0]            \n__________________________________________________________________________________________________\nmrcnn_mask_bn4 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv4[0][0]           \n__________________________________________________________________________________________________\npool_squeeze (Lambda)           (None, 200, 1024)    0           activation_69[0][0]              \n__________________________________________________________________________________________________\nactivation_74 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn4[0][0]             \n__________________________________________________________________________________________________\nmrcnn_bbox_fc (TimeDistributed) (None, 200, 8)       8200        pool_squeeze[0][0]               \n__________________________________________________________________________________________________\nmrcnn_mask_deconv (TimeDistribu (None, 200, 28, 28,  262400      activation_74[0][0]              \n__________________________________________________________________________________________________\nrpn_class_logits (Concatenate)  (None, None, 2)      0           rpn_model[1][0]                  \n                                                                 rpn_model[2][0]                  \n                                                                 rpn_model[3][0]                  \n                                                                 rpn_model[4][0]                  \n                                                                 rpn_model[5][0]                  \n__________________________________________________________________________________________________\nmrcnn_class_logits (TimeDistrib (None, 200, 2)       2050        pool_squeeze[0][0]               \n__________________________________________________________________________________________________\nmrcnn_bbox (Reshape)            (None, 200, 2, 4)    0           mrcnn_bbox_fc[0][0]              \n__________________________________________________________________________________________________\nmrcnn_mask (TimeDistributed)    (None, 200, 28, 28,  514         mrcnn_mask_deconv[0][0]          \n__________________________________________________________________________________________________\ninput_rpn_match (InputLayer)    (None, None, 1)      0                                            \n__________________________________________________________________________________________________\ninput_rpn_bbox (InputLayer)     (None, None, 4)      0                                            \n__________________________________________________________________________________________________\nlambda_4 (Lambda)               (None, 2)            0           input_image_meta[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class (TimeDistributed)   (None, 200, 2)       0           mrcnn_class_logits[0][0]         \n__________________________________________________________________________________________________\noutput_rois (Lambda)            (None, 200, 4)       0           proposal_targets[0][0]           \n__________________________________________________________________________________________________\nrpn_class_loss (Lambda)         ()                   0           input_rpn_match[0][0]            \n                                                                 rpn_class_logits[0][0]           \n__________________________________________________________________________________________________\nrpn_bbox_loss (Lambda)          ()                   0           input_rpn_bbox[0][0]             \n                                                                 input_rpn_match[0][0]            \n                                                                 rpn_bbox[0][0]                   \n__________________________________________________________________________________________________\nmrcnn_class_loss (Lambda)       ()                   0           proposal_targets[0][1]           \n                                                                 mrcnn_class_logits[0][0]         \n                                                                 lambda_4[0][0]                   \n__________________________________________________________________________________________________\nmrcnn_bbox_loss (Lambda)        ()                   0           proposal_targets[0][2]           \n                                                                 proposal_targets[0][1]           \n                                                                 mrcnn_bbox[0][0]                 \n__________________________________________________________________________________________________\nmrcnn_mask_loss (Lambda)        ()                   0           proposal_targets[0][3]           \n                                                                 proposal_targets[0][1]           \n                                                                 mrcnn_mask[0][0]                 \n==================================================================================================\nTotal params: 63,733,406\nTrainable params: 63,621,918\nNon-trainable params: 111,488\n__________________________________________________________________________________________________\n"
    }
   ],
   "source": [
    "model.keras_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Downloading pretrained model to mask_rcnn_coco.h5 ...\n... done downloading pretrained model!\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:190: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:200: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:203: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:207: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:216: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n\nWARNING:tensorflow:From C:\\Users\\Sayon_Desktop\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\backend\\tensorflow_backend.py:223: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n\n"
    }
   ],
   "source": [
    "# Local path to trained weights file\n",
    "COCO_MODEL_PATH = \"mask_rcnn_coco.h5\"\n",
    "# Download COCO trained weights from Releases if needed\n",
    "if not os.path.exists(COCO_MODEL_PATH):\n",
    "    utils.download_trained_weights(COCO_MODEL_PATH)\n",
    "\n",
    "#n load the weights for COCO\n",
    "model.load_weights(COCO_MODEL_PATH,\n",
    "                   by_name=True, \n",
    "                   exclude=[\"mrcnn_class_logits\", \"mrcnn_bbox_fc\",  \"mrcnn_bbox\", \"mrcnn_mask\"])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": [
     "outputPrepend"
    ]
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "0]              \n__________________________________________________________________________________________________\nres5b_branch2c (Conv2D)         (None, None, None, 2 1050624     activation_65[0][0]              \n__________________________________________________________________________________________________\nbn5b_branch2c (BatchNorm)       (None, None, None, 2 8192        res5b_branch2c[0][0]             \n__________________________________________________________________________________________________\nadd_32 (Add)                    (None, None, None, 2 0           bn5b_branch2c[0][0]              \n                                                                 res5a_out[0][0]                  \n__________________________________________________________________________________________________\nres5b_out (Activation)          (None, None, None, 2 0           add_32[0][0]                     \n__________________________________________________________________________________________________\nres5c_branch2a (Conv2D)         (None, None, None, 5 1049088     res5b_out[0][0]                  \n__________________________________________________________________________________________________\nbn5c_branch2a (BatchNorm)       (None, None, None, 5 2048        res5c_branch2a[0][0]             \n__________________________________________________________________________________________________\nactivation_66 (Activation)      (None, None, None, 5 0           bn5c_branch2a[0][0]              \n__________________________________________________________________________________________________\nres5c_branch2b (Conv2D)         (None, None, None, 5 2359808     activation_66[0][0]              \n__________________________________________________________________________________________________\nbn5c_branch2b (BatchNorm)       (None, None, None, 5 2048        res5c_branch2b[0][0]             \n__________________________________________________________________________________________________\nactivation_67 (Activation)      (None, None, None, 5 0           bn5c_branch2b[0][0]              \n__________________________________________________________________________________________________\nres5c_branch2c (Conv2D)         (None, None, None, 2 1050624     activation_67[0][0]              \n__________________________________________________________________________________________________\nbn5c_branch2c (BatchNorm)       (None, None, None, 2 8192        res5c_branch2c[0][0]             \n__________________________________________________________________________________________________\nadd_33 (Add)                    (None, None, None, 2 0           bn5c_branch2c[0][0]              \n                                                                 res5b_out[0][0]                  \n__________________________________________________________________________________________________\nres5c_out (Activation)          (None, None, None, 2 0           add_33[0][0]                     \n__________________________________________________________________________________________________\nfpn_c5p5 (Conv2D)               (None, None, None, 2 524544      res5c_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p5upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_c5p5[0][0]                   \n__________________________________________________________________________________________________\nfpn_c4p4 (Conv2D)               (None, None, None, 2 262400      res4w_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p4add (Add)                 (None, None, None, 2 0           fpn_p5upsampled[0][0]            \n                                                                 fpn_c4p4[0][0]                   \n__________________________________________________________________________________________________\nfpn_p4upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_p4add[0][0]                  \n__________________________________________________________________________________________________\nfpn_c3p3 (Conv2D)               (None, None, None, 2 131328      res3d_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p3add (Add)                 (None, None, None, 2 0           fpn_p4upsampled[0][0]            \n                                                                 fpn_c3p3[0][0]                   \n__________________________________________________________________________________________________\nfpn_p3upsampled (UpSampling2D)  (None, None, None, 2 0           fpn_p3add[0][0]                  \n__________________________________________________________________________________________________\nfpn_c2p2 (Conv2D)               (None, None, None, 2 65792       res2c_out[0][0]                  \n__________________________________________________________________________________________________\nfpn_p2add (Add)                 (None, None, None, 2 0           fpn_p3upsampled[0][0]            \n                                                                 fpn_c2p2[0][0]                   \n__________________________________________________________________________________________________\nfpn_p5 (Conv2D)                 (None, None, None, 2 590080      fpn_c5p5[0][0]                   \n__________________________________________________________________________________________________\nfpn_p2 (Conv2D)                 (None, None, None, 2 590080      fpn_p2add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p3 (Conv2D)                 (None, None, None, 2 590080      fpn_p3add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p4 (Conv2D)                 (None, None, None, 2 590080      fpn_p4add[0][0]                  \n__________________________________________________________________________________________________\nfpn_p6 (MaxPooling2D)           (None, None, None, 2 0           fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nrpn_model (Model)               [(None, None, 2), (N 1189394     fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n                                                                 fpn_p6[0][0]                     \n__________________________________________________________________________________________________\nrpn_class (Concatenate)         (None, None, 2)      0           rpn_model[1][1]                  \n                                                                 rpn_model[2][1]                  \n                                                                 rpn_model[3][1]                  \n                                                                 rpn_model[4][1]                  \n                                                                 rpn_model[5][1]                  \n__________________________________________________________________________________________________\nrpn_bbox (Concatenate)          (None, None, 4)      0           rpn_model[1][2]                  \n                                                                 rpn_model[2][2]                  \n                                                                 rpn_model[3][2]                  \n                                                                 rpn_model[4][2]                  \n                                                                 rpn_model[5][2]                  \n__________________________________________________________________________________________________\nanchors (Lambda)                (1, 261888, 4)       0           input_image[0][0]                \n__________________________________________________________________________________________________\ninput_gt_boxes (InputLayer)     (None, None, 4)      0                                            \n__________________________________________________________________________________________________\nROI (ProposalLayer)             (None, 2000, 4)      0           rpn_class[0][0]                  \n                                                                 rpn_bbox[0][0]                   \n                                                                 anchors[0][0]                    \n__________________________________________________________________________________________________\ninput_gt_class_ids (InputLayer) (None, None)         0                                            \n__________________________________________________________________________________________________\nlambda_1 (Lambda)               (None, None, 4)      0           input_gt_boxes[0][0]             \n__________________________________________________________________________________________________\ninput_gt_masks (InputLayer)     (None, 56, 56, None) 0                                            \n__________________________________________________________________________________________________\nproposal_targets (DetectionTarg [(None, 200, 4), (No 0           ROI[0][0]                        \n                                                                 input_gt_class_ids[0][0]         \n                                                                 lambda_1[0][0]                   \n                                                                 input_gt_masks[0][0]             \n__________________________________________________________________________________________________\ninput_image_meta (InputLayer)   (None, 14)           0                                            \n__________________________________________________________________________________________________\nroi_align_mask (PyramidROIAlign (None, 200, 14, 14,  0           proposal_targets[0][0]           \n                                                                 input_image_meta[0][0]           \n                                                                 fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nmrcnn_mask_conv1 (TimeDistribut (None, 200, 14, 14,  590080      roi_align_mask[0][0]             \n__________________________________________________________________________________________________\nmrcnn_mask_bn1 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv1[0][0]           \n__________________________________________________________________________________________________\nactivation_71 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn1[0][0]             \n__________________________________________________________________________________________________\nmrcnn_mask_conv2 (TimeDistribut (None, 200, 14, 14,  590080      activation_71[0][0]              \n__________________________________________________________________________________________________\nroi_align_classifier (PyramidRO (None, 200, 7, 7, 25 0           proposal_targets[0][0]           \n                                                                 input_image_meta[0][0]           \n                                                                 fpn_p2[0][0]                     \n                                                                 fpn_p3[0][0]                     \n                                                                 fpn_p4[0][0]                     \n                                                                 fpn_p5[0][0]                     \n__________________________________________________________________________________________________\nmrcnn_mask_bn2 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv2[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class_conv1 (TimeDistribu (None, 200, 1, 1, 10 12846080    roi_align_classifier[0][0]       \n__________________________________________________________________________________________________\nactivation_72 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn2[0][0]             \n__________________________________________________________________________________________________\nmrcnn_class_bn1 (TimeDistribute (None, 200, 1, 1, 10 4096        mrcnn_class_conv1[0][0]          \n__________________________________________________________________________________________________\nmrcnn_mask_conv3 (TimeDistribut (None, 200, 14, 14,  590080      activation_72[0][0]              \n__________________________________________________________________________________________________\nactivation_68 (Activation)      (None, 200, 1, 1, 10 0           mrcnn_class_bn1[0][0]            \n__________________________________________________________________________________________________\nmrcnn_mask_bn3 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv3[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class_conv2 (TimeDistribu (None, 200, 1, 1, 10 1049600     activation_68[0][0]              \n__________________________________________________________________________________________________\nactivation_73 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn3[0][0]             \n__________________________________________________________________________________________________\nmrcnn_class_bn2 (TimeDistribute (None, 200, 1, 1, 10 4096        mrcnn_class_conv2[0][0]          \n__________________________________________________________________________________________________\nmrcnn_mask_conv4 (TimeDistribut (None, 200, 14, 14,  590080      activation_73[0][0]              \n__________________________________________________________________________________________________\nactivation_69 (Activation)      (None, 200, 1, 1, 10 0           mrcnn_class_bn2[0][0]            \n__________________________________________________________________________________________________\nmrcnn_mask_bn4 (TimeDistributed (None, 200, 14, 14,  1024        mrcnn_mask_conv4[0][0]           \n__________________________________________________________________________________________________\npool_squeeze (Lambda)           (None, 200, 1024)    0           activation_69[0][0]              \n__________________________________________________________________________________________________\nactivation_74 (Activation)      (None, 200, 14, 14,  0           mrcnn_mask_bn4[0][0]             \n__________________________________________________________________________________________________\nmrcnn_bbox_fc (TimeDistributed) (None, 200, 8)       8200        pool_squeeze[0][0]               \n__________________________________________________________________________________________________\nmrcnn_mask_deconv (TimeDistribu (None, 200, 28, 28,  262400      activation_74[0][0]              \n__________________________________________________________________________________________________\nrpn_class_logits (Concatenate)  (None, None, 2)      0           rpn_model[1][0]                  \n                                                                 rpn_model[2][0]                  \n                                                                 rpn_model[3][0]                  \n                                                                 rpn_model[4][0]                  \n                                                                 rpn_model[5][0]                  \n__________________________________________________________________________________________________\nmrcnn_class_logits (TimeDistrib (None, 200, 2)       2050        pool_squeeze[0][0]               \n__________________________________________________________________________________________________\nmrcnn_bbox (Reshape)            (None, 200, 2, 4)    0           mrcnn_bbox_fc[0][0]              \n__________________________________________________________________________________________________\nmrcnn_mask (TimeDistributed)    (None, 200, 28, 28,  514         mrcnn_mask_deconv[0][0]          \n__________________________________________________________________________________________________\ninput_rpn_match (InputLayer)    (None, None, 1)      0                                            \n__________________________________________________________________________________________________\ninput_rpn_bbox (InputLayer)     (None, None, 4)      0                                            \n__________________________________________________________________________________________________\nlambda_4 (Lambda)               (None, 2)            0           input_image_meta[0][0]           \n__________________________________________________________________________________________________\nmrcnn_class (TimeDistributed)   (None, 200, 2)       0           mrcnn_class_logits[0][0]         \n__________________________________________________________________________________________________\noutput_rois (Lambda)            (None, 200, 4)       0           proposal_targets[0][0]           \n__________________________________________________________________________________________________\nrpn_class_loss (Lambda)         ()                   0           input_rpn_match[0][0]            \n                                                                 rpn_class_logits[0][0]           \n__________________________________________________________________________________________________\nrpn_bbox_loss (Lambda)          ()                   0           input_rpn_bbox[0][0]             \n                                                                 input_rpn_match[0][0]            \n                                                                 rpn_bbox[0][0]                   \n__________________________________________________________________________________________________\nmrcnn_class_loss (Lambda)       ()                   0           proposal_targets[0][1]           \n                                                                 mrcnn_class_logits[0][0]         \n                                                                 lambda_4[0][0]                   \n__________________________________________________________________________________________________\nmrcnn_bbox_loss (Lambda)        ()                   0           proposal_targets[0][2]           \n                                                                 proposal_targets[0][1]           \n                                                                 mrcnn_bbox[0][0]                 \n__________________________________________________________________________________________________\nmrcnn_mask_loss (Lambda)        ()                   0           proposal_targets[0][3]           \n                                                                 proposal_targets[0][1]           \n                                                                 mrcnn_mask[0][0]                 \n==================================================================================================\nTotal params: 63,733,406\nTrainable params: 63,621,918\nNon-trainable params: 111,488\n__________________________________________________________________________________________________\n"
    }
   ],
   "source": [
    "model.keras_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "class PPDataset(Dataset):\n",
    "    # load the dataset definitions\n",
    "    def load_dataset(self, dataset_dir, is_train=True):\n",
    "        \n",
    "        # Add classes. We have only one class to add.\n",
    "        self.add_class(\"dataset\", 1, \"pp\")\n",
    "\n",
    "        # define data locations for images and annotations\n",
    "        images_dir = dataset_dir/'images'\n",
    "        annotations_dir = dataset_dir/'annotations'\n",
    "        \n",
    "        # Iterate through all files in the folder to \n",
    "        #add class, images and annotaions\n",
    "        for i, image_path in enumerate(images_dir.iterdir()):\n",
    "            \n",
    "            # extract image id\n",
    "            image_id = image_path.stem\n",
    "    \n",
    "            # skip all images after 150 if we are building the train set\n",
    "            if is_train and i >= 200:\n",
    "                continue\n",
    "            # skip all images before 150 if we are building the test/val set\n",
    "            if not is_train and i < 200:\n",
    "                continue\n",
    "            \n",
    "            # setting annotations file\n",
    "            ann_path = annotations_dir/(str(image_id) + '.xml')\n",
    "            \n",
    "            # adding images and annotations to dataset\n",
    "            self.add_image('dataset', image_id=image_id, path=image_path, annotation=ann_path)\n",
    "\n",
    "    # extract bounding boxes from an annotation file\n",
    "    def extract_boxes(self, filename):\n",
    "        \n",
    "        # load and parse the file\n",
    "        tree = ElementTree.parse(filename)\n",
    "        # get the root of the document\n",
    "        root = tree.getroot()\n",
    "        # extract each bounding box\n",
    "        boxes = list()\n",
    "        for box in root.findall('.//bndbox'):\n",
    "            xmin = int(box.find('xmin').text)\n",
    "            ymin = int(box.find('ymin').text)\n",
    "            xmax = int(box.find('xmax').text)\n",
    "            ymax = int(box.find('ymax').text)\n",
    "            coors = [xmin, ymin, xmax, ymax]\n",
    "            boxes.append(coors)\n",
    "        \n",
    "        # extract image dimensions\n",
    "        width = int(root.find('.//size/width').text)\n",
    "        height = int(root.find('.//size/height').text)\n",
    "        return boxes, width, height\n",
    "\n",
    "    # load the masks for an image\n",
    "    \"\"\"Generate instance masks for an image.\n",
    "       Returns:\n",
    "        masks: A bool array of shape [height, width, instance count] with\n",
    "            one mask per instance.\n",
    "        class_ids: a 1D array of class IDs of the instance masks.\n",
    "     \"\"\"\n",
    "    def load_mask(self, image_id):\n",
    "        # get details of image\n",
    "        info = self.image_info[image_id]\n",
    "        \n",
    "        # define anntation  file location\n",
    "        path = info['annotation']\n",
    "        \n",
    "        # load XML\n",
    "        boxes, w, h = self.extract_boxes(path)\n",
    "       \n",
    "        # create one array for all masks, each on a different channel\n",
    "        masks = zeros([h, w, len(boxes)], dtype='uint8')\n",
    "        \n",
    "        # create masks\n",
    "        class_ids = list()\n",
    "        for i in range(len(boxes)):\n",
    "            box = boxes[i]\n",
    "            row_s, row_e = box[1], box[3]\n",
    "            col_s, col_e = box[0], box[2]\n",
    "            masks[row_s:row_e, col_s:col_e, i] = 1\n",
    "            class_ids.append(self.class_names.index('pp'))\n",
    "        return masks, asarray(class_ids, dtype='int32')\n",
    "\n",
    "    # load an image reference\n",
    "    #Return the path of the image.\"\"\"\n",
    "    def image_reference(self, image_id):\n",
    "        info = self.image_info[image_id]\n",
    "        print(info)\n",
    "        return info['path']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_folder = Path('labeled_images')\n",
    "\n",
    "if not data_folder.exists():\n",
    "    if not (data_folder/'.tar.gz').exists():\n",
    "        download_file_from_google_drive('1bFiLPB2z4SF6ebJ_gurwyQKYAlmtpeqL', f'{data_folder}.tar.gz')\n",
    "\n",
    "    tar = tarfile.open(f'{data_folder}.tar.gz', \"r:gz\")\n",
    "    tar.extractall()\n",
    "    tar.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "Train: 200\nTest: 110\n"
    }
   ],
   "source": [
    "# prepare train set\n",
    "train_set = PPDataset()\n",
    "train_set.load_dataset(data_folder, is_train=True)\n",
    "train_set.prepare()\n",
    "print('Train: %d' % len(train_set.image_ids))\n",
    "# prepare test/val set\n",
    "test_set = PPDataset()\n",
    "test_set.load_dataset(data_folder, is_train=False)\n",
    "test_set.prepare()\n",
    "print('Test: %d' % len(test_set.image_ids))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "\nStarting at epoch 0. LR=0.006\n\nCheckpoint Path: ./maskrcnn_config20200730T1557\\mask_rcnn_maskrcnn_config_{epoch:04d}.h5\nSelecting layers to train\nfpn_c5p5               (Conv2D)\nfpn_c4p4               (Conv2D)\nfpn_c3p3               (Conv2D)\nfpn_c2p2               (Conv2D)\nfpn_p5                 (Conv2D)\nfpn_p2                 (Conv2D)\nfpn_p3                 (Conv2D)\nfpn_p4                 (Conv2D)\nIn model:  rpn_model\n    rpn_conv_shared        (Conv2D)\n    rpn_class_raw          (Conv2D)\n    rpn_bbox_pred          (Conv2D)\nmrcnn_mask_conv1       (TimeDistributed)\nmrcnn_mask_bn1         (TimeDistributed)\nmrcnn_mask_conv2       (TimeDistributed)\nmrcnn_mask_bn2         (TimeDistributed)\nmrcnn_class_conv1      (TimeDistributed)\nmrcnn_class_bn1        (TimeDistributed)\nmrcnn_mask_conv3       (TimeDistributed)\nmrcnn_mask_bn3         (TimeDistributed)\nmrcnn_class_conv2      (TimeDistributed)\nmrcnn_class_bn2        (TimeDistributed)\nmrcnn_mask_conv4       (TimeDistributed)\nmrcnn_mask_bn4         (TimeDistributed)\nmrcnn_bbox_fc          (TimeDistributed)\nmrcnn_mask_deconv      (TimeDistributed)\nmrcnn_class_logits     (TimeDistributed)\nmrcnn_mask             (TimeDistributed)\nEpoch 1/1\n  6/131 [>.............................] - ETA: 44:14 - loss: 3.7280 - rpn_class_loss: 0.0043 - rpn_bbox_loss: 0.2835 - mrcnn_class_loss: 0.5508 - mrcnn_bbox_loss: 1.4554 - mrcnn_mask_loss: 1.4340"
    },
    {
     "output_type": "error",
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-27-70409532d318>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[1;31m## train heads with higher lr to speedup the learning\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mepochs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrain\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtrain_set\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtest_set\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlearning_rate\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mLEARNING_RATE\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mepochs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlayers\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'heads'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[0mhistory\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mkeras_model\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\model.py\u001b[0m in \u001b[0;36mtrain\u001b[1;34m(self, train_dataset, val_dataset, learning_rate, epochs, layers, augmentation, custom_callbacks, no_augmentation_sources)\u001b[0m\n\u001b[0;32m   2372\u001b[0m             \u001b[0mmax_queue_size\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2373\u001b[0m             \u001b[0mworkers\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mworkers\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2374\u001b[1;33m             \u001b[0muse_multiprocessing\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2375\u001b[0m         )\n\u001b[0;32m   2376\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mepoch\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmax\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mepoch\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\legacy\\interfaces.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m     89\u001b[0m                 warnings.warn('Update your `' + object_name + '` call to the ' +\n\u001b[0;32m     90\u001b[0m                               'Keras 2 API: ' + signature, stacklevel=2)\n\u001b[1;32m---> 91\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     92\u001b[0m         \u001b[0mwrapper\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_original_function\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     93\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\engine\\training.py\u001b[0m in \u001b[0;36mfit_generator\u001b[1;34m(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)\u001b[0m\n\u001b[0;32m   1656\u001b[0m             \u001b[0muse_multiprocessing\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0muse_multiprocessing\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1657\u001b[0m             \u001b[0mshuffle\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mshuffle\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1658\u001b[1;33m             initial_epoch=initial_epoch)\n\u001b[0m\u001b[0;32m   1659\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1660\u001b[0m     \u001b[1;33m@\u001b[0m\u001b[0minterfaces\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlegacy_generator_methods_support\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\keras\\engine\\training_generator.py\u001b[0m in \u001b[0;36mfit_generator\u001b[1;34m(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)\u001b[0m\n\u001b[0;32m    179\u001b[0m             \u001b[0mbatch_index\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    180\u001b[0m             \u001b[1;32mwhile\u001b[0m \u001b[0msteps_done\u001b[0m \u001b[1;33m<\u001b[0m \u001b[0msteps_per_epoch\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 181\u001b[1;33m                 \u001b[0mgenerator_output\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnext\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0moutput_generator\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    182\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    183\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgenerator_output\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'__len__'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\model.py\u001b[0m in \u001b[0;36mdata_generator\u001b[1;34m(dataset, config, shuffle, augment, augmentation, random_rois, batch_size, detection_targets, no_augmentation_sources)\u001b[0m\n\u001b[0;32m   1707\u001b[0m                     load_image_gt(dataset, config, image_id, augment=augment,\n\u001b[0;32m   1708\u001b[0m                                 \u001b[0maugmentation\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0maugmentation\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1709\u001b[1;33m                                 use_mini_mask=config.USE_MINI_MASK)\n\u001b[0m\u001b[0;32m   1710\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1711\u001b[0m             \u001b[1;31m# Skip images that have no instances. This can happen in cases\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\model.py\u001b[0m in \u001b[0;36mload_image_gt\u001b[1;34m(dataset, config, image_id, augment, augmentation, use_mini_mask)\u001b[0m\n\u001b[0;32m   1217\u001b[0m         \u001b[0mmin_scale\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mIMAGE_MIN_SCALE\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1218\u001b[0m         \u001b[0mmax_dim\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mIMAGE_MAX_DIM\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1219\u001b[1;33m         mode=config.IMAGE_RESIZE_MODE)\n\u001b[0m\u001b[0;32m   1220\u001b[0m     \u001b[0mmask\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mutils\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresize_mask\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmask\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mscale\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpadding\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcrop\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1221\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\utils.py\u001b[0m in \u001b[0;36mresize_image\u001b[1;34m(image, min_dim, max_dim, min_scale, mode)\u001b[0m\n\u001b[0;32m    446\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mscale\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    447\u001b[0m         image = resize(image, (round(h * scale), round(w * scale)),\n\u001b[1;32m--> 448\u001b[1;33m                        preserve_range=True)\n\u001b[0m\u001b[0;32m    449\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    450\u001b[0m     \u001b[1;31m# Need padding or cropping?\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32md:\\Vue\\TDPDNE\\git_repo\\Dataset Creator\\Mask_RCNN\\mrcnn\\utils.py\u001b[0m in \u001b[0;36mresize\u001b[1;34m(image, output_shape, order, mode, cval, clip, preserve_range, anti_aliasing, anti_aliasing_sigma)\u001b[0m\n\u001b[0;32m    901\u001b[0m             \u001b[0morder\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0morder\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcval\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcval\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mclip\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mclip\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    902\u001b[0m             \u001b[0mpreserve_range\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mpreserve_range\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0manti_aliasing\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0manti_aliasing\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 903\u001b[1;33m             anti_aliasing_sigma=anti_aliasing_sigma)\n\u001b[0m\u001b[0;32m    904\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    905\u001b[0m         return skimage.transform.resize(\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\skimage\\transform\\_warps.py\u001b[0m in \u001b[0;36mresize\u001b[1;34m(image, output_shape, order, mode, cval, clip, preserve_range, anti_aliasing, anti_aliasing_sigma)\u001b[0m\n\u001b[0;32m    164\u001b[0m         out = warp(image, tform, output_shape=output_shape, order=order,\n\u001b[0;32m    165\u001b[0m                    \u001b[0mmode\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcval\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcval\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mclip\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mclip\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 166\u001b[1;33m                    preserve_range=preserve_range)\n\u001b[0m\u001b[0;32m    167\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    168\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m  \u001b[1;31m# n-dimensional interpolation\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\skimage\\transform\\_warps.py\u001b[0m in \u001b[0;36mwarp\u001b[1;34m(image, inverse_map, map_args, output_shape, order, mode, cval, clip, preserve_range)\u001b[0m\n\u001b[0;32m    807\u001b[0m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Cannot warp empty image with dimensions\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    808\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 809\u001b[1;33m     \u001b[0mimage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconvert_to_float\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpreserve_range\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    810\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    811\u001b[0m     \u001b[0minput_shape\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m~\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages\\skimage\\_shared\\utils.py\u001b[0m in \u001b[0;36mconvert_to_float\u001b[1;34m(image, preserve_range)\u001b[0m\n\u001b[0;32m    252\u001b[0m         \u001b[1;31m# precision float\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    253\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mchar\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;34m'df'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 254\u001b[1;33m             \u001b[0mimage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfloat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    255\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    256\u001b[0m         \u001b[0mimage\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mimg_as_float\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# train weights (output layers or 'heads')\n",
    "## train heads with higher lr to speedup the learning\n",
    "epochs = 1\n",
    "model.train(train_set, test_set, learning_rate=config.LEARNING_RATE, epochs=epochs, layers='heads')\n",
    "\n",
    "history = model.keras_model.history.history"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "[<keras.layers.convolutional.Conv2D at 0x1ec6c7b2fc8>,\n <mrcnn.model.BatchNorm at 0x1ec6c7b68c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c7deac8>,\n <mrcnn.model.BatchNorm at 0x1ec6c7e8308>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c7f2dc8>,\n <mrcnn.model.BatchNorm at 0x1ec6c7f1588>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c813bc8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c821148>,\n <mrcnn.model.BatchNorm at 0x1ec6c805888>,\n <mrcnn.model.BatchNorm at 0x1ec6c82b748>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c844248>,\n <mrcnn.model.BatchNorm at 0x1ec6c841d48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c85cb48>,\n <mrcnn.model.BatchNorm at 0x1ec6c85ef88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c872bc8>,\n <mrcnn.model.BatchNorm at 0x1ec6c873308>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c88d308>,\n <mrcnn.model.BatchNorm at 0x1ec6c87ad88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c8a4c08>,\n <mrcnn.model.BatchNorm at 0x1ec6c8aa0c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c8bbc88>,\n <mrcnn.model.BatchNorm at 0x1ec6c8c13c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c8d60c8>,\n <mrcnn.model.BatchNorm at 0x1ec6c8d7e88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c8e7d48>,\n <mrcnn.model.BatchNorm at 0x1ec6c8ed208>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c905cc8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c911148>,\n <mrcnn.model.BatchNorm at 0x1ec6c908588>,\n <mrcnn.model.BatchNorm at 0x1ec6c920488>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c937788>,\n <mrcnn.model.BatchNorm at 0x1ec6c934c08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c949b08>,\n <mrcnn.model.BatchNorm at 0x1ec6c952f88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c965e88>,\n <mrcnn.model.BatchNorm at 0x1ec6c96a348>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c977188>,\n <mrcnn.model.BatchNorm at 0x1ec6c982ec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c998dc8>,\n <mrcnn.model.BatchNorm at 0x1ec6c994288>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c9aed48>,\n <mrcnn.model.BatchNorm at 0x1ec6c9b1608>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c9ca3c8>,\n <mrcnn.model.BatchNorm at 0x1ec6c9ce1c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c9dfc88>,\n <mrcnn.model.BatchNorm at 0x1ec6c9e4548>,\n <keras.layers.convolutional.Conv2D at 0x1ec6c9fcc08>,\n <mrcnn.model.BatchNorm at 0x1ec6c9f68c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ca10048>,\n <mrcnn.model.BatchNorm at 0x1ec6ca14448>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ca2cb48>,\n <mrcnn.model.BatchNorm at 0x1ec6ca1f808>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ca44ec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ca51388>,\n <mrcnn.model.BatchNorm at 0x1ec6ca35b88>,\n <mrcnn.model.BatchNorm at 0x1ec6ca5f308>,\n <keras.layers.convolutional.Conv2D at 0x1ec6da43408>,\n <mrcnn.model.BatchNorm at 0x1ec6da48248>,\n <keras.layers.convolutional.Conv2D at 0x1ec6da5bd08>,\n <mrcnn.model.BatchNorm at 0x1ec6da575c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6da76c88>,\n <mrcnn.model.BatchNorm at 0x1ec6da78948>,\n <keras.layers.convolutional.Conv2D at 0x1ec6da850c8>,\n <mrcnn.model.BatchNorm at 0x1ec6da93508>,\n <keras.layers.convolutional.Conv2D at 0x1ec6daa8bc8>,\n <mrcnn.model.BatchNorm at 0x1ec6daa1888>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dabf988>,\n <mrcnn.model.BatchNorm at 0x1ec6dabcc08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dad93c8>,\n <mrcnn.model.BatchNorm at 0x1ec6dadb7c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6daf0e88>,\n <mrcnn.model.BatchNorm at 0x1ec6daedb48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db07848>,\n <mrcnn.model.BatchNorm at 0x1ec6db0bec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db26688>,\n <mrcnn.model.BatchNorm at 0x1ec6db22a88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db3a748>,\n <mrcnn.model.BatchNorm at 0x1ec6db3fe08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db52d08>,\n <mrcnn.model.BatchNorm at 0x1ec6db581c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db6b248>,\n <mrcnn.model.BatchNorm at 0x1ec6db6dd48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db83c48>,\n <mrcnn.model.BatchNorm at 0x1ec6db8a108>,\n <keras.layers.convolutional.Conv2D at 0x1ec6db9bfc8>,\n <mrcnn.model.BatchNorm at 0x1ec6db96488>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dbb6248>,\n <mrcnn.model.BatchNorm at 0x1ec6dbbb048>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dbcdf08>,\n <mrcnn.model.BatchNorm at 0x1ec6dbd33c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dbe1b08>,\n <mrcnn.model.BatchNorm at 0x1ec6dbe8748>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dbfe608>,\n <mrcnn.model.BatchNorm at 0x1ec6dc04308>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc0bc88>,\n <mrcnn.model.BatchNorm at 0x1ec6dc12948>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc2dc08>,\n <mrcnn.model.BatchNorm at 0x1ec6dc1fd08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc4b4c8>,\n <mrcnn.model.BatchNorm at 0x1ec6dc4c8c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc61748>,\n <mrcnn.model.BatchNorm at 0x1ec6dc5fc48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc78948>,\n <mrcnn.model.BatchNorm at 0x1ec6dc7f048>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dc93788>,\n <mrcnn.model.BatchNorm at 0x1ec6dc96bc8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dca9ac8>,\n <mrcnn.model.BatchNorm at 0x1ec6dcadf48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dcc2c48>,\n <mrcnn.model.BatchNorm at 0x1ec6dcc7348>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dcd93c8>,\n <mrcnn.model.BatchNorm at 0x1ec6dcddec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dcf4dc8>,\n <mrcnn.model.BatchNorm at 0x1ec6dcfa288>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd0bf88>,\n <mrcnn.model.BatchNorm at 0x1ec6dd0f648>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd27408>,\n <mrcnn.model.BatchNorm at 0x1ec6dd2b208>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd3dcc8>,\n <mrcnn.model.BatchNorm at 0x1ec6dd35588>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd57c48>,\n <mrcnn.model.BatchNorm at 0x1ec6dd58908>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd67088>,\n <mrcnn.model.BatchNorm at 0x1ec6dd76508>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dd8abc8>,\n <mrcnn.model.BatchNorm at 0x1ec6dd85888>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dda2748>,\n <mrcnn.model.BatchNorm at 0x1ec6dda4c48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ddbc408>,\n <mrcnn.model.BatchNorm at 0x1ec6ddbf808>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ddd48c8>,\n <mrcnn.model.BatchNorm at 0x1ec6ddd3b88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6ddeaac8>,\n <mrcnn.model.BatchNorm at 0x1ec6ddeef48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de08688>,\n <mrcnn.model.BatchNorm at 0x1ec6de00b08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de1e808>,\n <mrcnn.model.BatchNorm at 0x1ec6de21e88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de36dc8>,\n <mrcnn.model.BatchNorm at 0x1ec6de3a288>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de4f308>,\n <mrcnn.model.BatchNorm at 0x1ec6de51e08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de62d08>,\n <mrcnn.model.BatchNorm at 0x1ec6de6c1c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de7fcc8>,\n <mrcnn.model.BatchNorm at 0x1ec6de83588>,\n <keras.layers.convolutional.Conv2D at 0x1ec6de9a348>,\n <mrcnn.model.BatchNorm at 0x1ec6de9f148>,\n <keras.layers.convolutional.Conv2D at 0x1ec6deb0388>,\n <mrcnn.model.BatchNorm at 0x1ec6deb64c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6deccbc8>,\n <mrcnn.model.BatchNorm at 0x1ec6decd888>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dee0108>,\n <mrcnn.model.BatchNorm at 0x1ec6dee4448>,\n <keras.layers.convolutional.Conv2D at 0x1ec6defcb08>,\n <mrcnn.model.BatchNorm at 0x1ec6deee7c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df15ec8>,\n <mrcnn.model.BatchNorm at 0x1ec6df05b88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df32348>,\n <mrcnn.model.BatchNorm at 0x1ec6df2f748>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df48e08>,\n <mrcnn.model.BatchNorm at 0x1ec6df38ac8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df5e808>,\n <mrcnn.model.BatchNorm at 0x1ec6df63e88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df7a5c8>,\n <mrcnn.model.BatchNorm at 0x1ec6df7ca48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6df8c708>,\n <mrcnn.model.BatchNorm at 0x1ec6df93dc8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dfa6d08>,\n <mrcnn.model.BatchNorm at 0x1ec6dfad1c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dfc1248>,\n <mrcnn.model.BatchNorm at 0x1ec6dfc4d48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dfd9c48>,\n <mrcnn.model.BatchNorm at 0x1ec6dfe1108>,\n <keras.layers.convolutional.Conv2D at 0x1ec6dff13c8>,\n <mrcnn.model.BatchNorm at 0x1ec6dff64c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e00c288>,\n <mrcnn.model.BatchNorm at 0x1ec6e011088>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e024f48>,\n <mrcnn.model.BatchNorm at 0x1ec6e029408>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e038508>,\n <mrcnn.model.BatchNorm at 0x1ec6e02f7c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e057588>,\n <mrcnn.model.BatchNorm at 0x1ec6e05c388>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e070ac8>,\n <mrcnn.model.BatchNorm at 0x1ec6e071708>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e088e08>,\n <mrcnn.model.BatchNorm at 0x1ec6e084ac8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e0a3288>,\n <mrcnn.model.BatchNorm at 0x1ec6e0a5688>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e0b9d48>,\n <mrcnn.model.BatchNorm at 0x1ec6e0baa08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e0d2708>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e0de5c8>,\n <mrcnn.model.BatchNorm at 0x1ec6e0d6dc8>,\n <mrcnn.model.BatchNorm at 0x1ec6e0ed548>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e0f8048>,\n <mrcnn.model.BatchNorm at 0x1ec6e103488>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e11db48>,\n <mrcnn.model.BatchNorm at 0x1ec6e116808>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e130f08>,\n <mrcnn.model.BatchNorm at 0x1ec6e124bc8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e14f308>,\n <mrcnn.model.BatchNorm at 0x1ec6e14e788>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e165e48>,\n <mrcnn.model.BatchNorm at 0x1ec6e163b08>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e178908>,\n <mrcnn.model.BatchNorm at 0x1ec6e182ec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e14f288>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e1a5208>,\n <keras.layers.convolutional.Conv2D at 0x1ec6e1b6ec8>,\n <keras.layers.convolutional.Conv2D at 0x1ec6f195188>,\n <keras.layers.convolutional.Conv2D at 0x1ec6f1bde88>,\n <keras.layers.convolutional.Conv2D at 0x1ec6f199e48>,\n <keras.layers.convolutional.Conv2D at 0x1ec6f1aa388>,\n <keras.layers.convolutional.Conv2D at 0x1ec6f1b2bc8>,\n <keras.engine.training.Model at 0x1ec6f2150c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec70173d88>,\n <mrcnn.model.BatchNorm at 0x1ec701d9288>,\n <keras.layers.convolutional.Conv2D at 0x1ec701efd08>,\n <mrcnn.model.BatchNorm at 0x1ec701f5048>,\n <keras.layers.convolutional.Conv2D at 0x1ec700a83c8>,\n <mrcnn.model.BatchNorm at 0x1ec7010f488>,\n <keras.layers.convolutional.Conv2D at 0x1ec70211b48>,\n <mrcnn.model.BatchNorm at 0x1ec70213e48>,\n <keras.layers.convolutional.Conv2D at 0x1ec7012ae88>,\n <mrcnn.model.BatchNorm at 0x1ec701321c8>,\n <keras.layers.convolutional.Conv2D at 0x1ec7022e988>,\n <mrcnn.model.BatchNorm at 0x1ec70232c88>,\n <keras.layers.core.Dense at 0x1ec70157188>,\n <keras.layers.convolutional.Conv2DTranspose at 0x1ec7024c788>,\n <keras.layers.core.Dense at 0x1ec7014a788>,\n <keras.layers.convolutional.Conv2D at 0x1ec7024fa48>]"
     },
     "metadata": {},
     "execution_count": 20
    }
   ],
   "source": [
    "model.get_trainable_layers()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_path = f'mask_rcnn_model.h5'\n",
    "model.keras_model.save_weights(model_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "\nConfigurations:\nBACKBONE                       resnet101\nBACKBONE_STRIDES               [4, 8, 16, 32, 64]\nBATCH_SIZE                     1\nBBOX_STD_DEV                   [0.1 0.1 0.2 0.2]\nCOMPUTE_BACKBONE_SHAPE         None\nDETECTION_MAX_INSTANCES        100\nDETECTION_MIN_CONFIDENCE       0.9\nDETECTION_NMS_THRESHOLD        0.3\nFPN_CLASSIF_FC_LAYERS_SIZE     1024\nGPU_COUNT                      1\nGRADIENT_CLIP_NORM             5.0\nIMAGES_PER_GPU                 1\nIMAGE_CHANNEL_COUNT            3\nIMAGE_MAX_DIM                  1024\nIMAGE_META_SIZE                14\nIMAGE_MIN_DIM                  800\nIMAGE_MIN_SCALE                0\nIMAGE_RESIZE_MODE              square\nIMAGE_SHAPE                    [1024 1024    3]\nLEARNING_MOMENTUM              0.9\nLEARNING_RATE                  0.006\nLOSS_WEIGHTS                   {'rpn_class_loss': 1.0, 'rpn_bbox_loss': 1.0, 'mrcnn_class_loss': 1.0, 'mrcnn_bbox_loss': 1.0, 'mrcnn_mask_loss': 1.0}\nMASK_POOL_SIZE                 14\nMASK_SHAPE                     [28, 28]\nMAX_GT_INSTANCES               10\nMEAN_PIXEL                     [123.7 116.8 103.9]\nMINI_MASK_SHAPE                (56, 56)\nNAME                           MaskRCNN_config\nNUM_CLASSES                    2\nPOOL_SIZE                      7\nPOST_NMS_ROIS_INFERENCE        1000\nPOST_NMS_ROIS_TRAINING         2000\nPRE_NMS_LIMIT                  6000\nROI_POSITIVE_RATIO             0.33\nRPN_ANCHOR_RATIOS              [0.5, 1, 2]\nRPN_ANCHOR_SCALES              (32, 64, 128, 256, 512)\nRPN_ANCHOR_STRIDE              1\nRPN_BBOX_STD_DEV               [0.1 0.1 0.2 0.2]\nRPN_NMS_THRESHOLD              0.7\nRPN_TRAIN_ANCHORS_PER_IMAGE    256\nSTEPS_PER_EPOCH                131\nTOP_DOWN_PYRAMID_SIZE          256\nTRAIN_BN                       False\nTRAIN_ROIS_PER_IMAGE           200\nUSE_MINI_MASK                  True\nUSE_RPN_ROIS                   True\nVALIDATION_STEPS               50\nWEIGHT_DECAY                   0.0001\n\n\n"
    }
   ],
   "source": [
    "# class that defines and loads the kangaroo dataset\n",
    "\n",
    "# prepare config\n",
    "config = myMaskRCNNConfig()\n",
    "config.display()\n",
    "# define the model\n",
    "model = MaskRCNN(mode='training', model_dir='./', config=config)\n",
    "\n",
    "# load weights (mscoco) and exclude the output layers\n",
    "\n",
    "model.load_weights(model_path, by_name=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": "(800, 600, 3)\n[0 1]\n(800, 600, 1)\n[1]\n"
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/svg+xml": "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n<!-- Created with matplotlib (https://matplotlib.org/) -->\r\n<svg height=\"252.181444pt\" version=\"1.1\" viewBox=\"0 0 203.5675 252.181444\" width=\"203.5675pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <defs>\r\n  <style type=\"text/css\">\r\n*{stroke-linecap:butt;stroke-linejoin:round;}\r\n  </style>\r\n </defs>\r\n <g id=\"figure_1\">\r\n  <g id=\"patch_1\">\r\n   <path d=\"M 0 252.181444 \r\nL 203.5675 252.181444 \r\nL 203.5675 0 \r\nL 0 0 \r\nz\r\n\" style=\"fill:none;\"/>\r\n  </g>\r\n  <g id=\"axes_1\">\r\n   <g id=\"patch_2\">\r\n    <path d=\"M 33.2875 228.303319 \r\nL 196.3675 228.303319 \r\nL 196.3675 10.863319 \r\nL 33.2875 10.863319 \r\nz\r\n\" style=\"fill:#ffffff;\"/>\r\n   </g>\r\n   <g clip-path=\"url(#p54fb5baeed)\">\r\n    <image height=\"218\" id=\"imagec4dd16c967\" transform=\"scale(1 -1)translate(0 -218)\" width=\"164\" x=\"33\" xlink:href=\"data:image/png;base64,\r\n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\" y=\"-10.181444\"/>\r\n   </g>\r\n   <g id=\"matplotlib.axis_1\">\r\n    <g id=\"xtick_1\">\r\n     <g id=\"line2d_1\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL 0 3.5 \r\n\" id=\"md3ad19a830\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.4234\" xlink:href=\"#md3ad19a830\" y=\"228.303319\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_1\">\r\n      <!-- 0 -->\r\n      <defs>\r\n       <path d=\"M 31.78125 66.40625 \r\nQ 24.171875 66.40625 20.328125 58.90625 \r\nQ 16.5 51.421875 16.5 36.375 \r\nQ 16.5 21.390625 20.328125 13.890625 \r\nQ 24.171875 6.390625 31.78125 6.390625 \r\nQ 39.453125 6.390625 43.28125 13.890625 \r\nQ 47.125 21.390625 47.125 36.375 \r\nQ 47.125 51.421875 43.28125 58.90625 \r\nQ 39.453125 66.40625 31.78125 66.40625 \r\nz\r\nM 31.78125 74.21875 \r\nQ 44.046875 74.21875 50.515625 64.515625 \r\nQ 56.984375 54.828125 56.984375 36.375 \r\nQ 56.984375 17.96875 50.515625 8.265625 \r\nQ 44.046875 -1.421875 31.78125 -1.421875 \r\nQ 19.53125 -1.421875 13.0625 8.265625 \r\nQ 6.59375 17.96875 6.59375 36.375 \r\nQ 6.59375 54.828125 13.0625 64.515625 \r\nQ 19.53125 74.21875 31.78125 74.21875 \r\nz\r\n\" id=\"DejaVuSans-48\"/>\r\n      </defs>\r\n      <g transform=\"translate(30.24215 242.901756)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_2\">\r\n     <g id=\"line2d_2\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"87.7834\" xlink:href=\"#md3ad19a830\" y=\"228.303319\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_2\">\r\n      <!-- 200 -->\r\n      <defs>\r\n       <path d=\"M 19.1875 8.296875 \r\nL 53.609375 8.296875 \r\nL 53.609375 0 \r\nL 7.328125 0 \r\nL 7.328125 8.296875 \r\nQ 12.9375 14.109375 22.625 23.890625 \r\nQ 32.328125 33.6875 34.8125 36.53125 \r\nQ 39.546875 41.84375 41.421875 45.53125 \r\nQ 43.3125 49.21875 43.3125 52.78125 \r\nQ 43.3125 58.59375 39.234375 62.25 \r\nQ 35.15625 65.921875 28.609375 65.921875 \r\nQ 23.96875 65.921875 18.8125 64.3125 \r\nQ 13.671875 62.703125 7.8125 59.421875 \r\nL 7.8125 69.390625 \r\nQ 13.765625 71.78125 18.9375 73 \r\nQ 24.125 74.21875 28.421875 74.21875 \r\nQ 39.75 74.21875 46.484375 68.546875 \r\nQ 53.21875 62.890625 53.21875 53.421875 \r\nQ 53.21875 48.921875 51.53125 44.890625 \r\nQ 49.859375 40.875 45.40625 35.40625 \r\nQ 44.1875 33.984375 37.640625 27.21875 \r\nQ 31.109375 20.453125 19.1875 8.296875 \r\nz\r\n\" id=\"DejaVuSans-50\"/>\r\n      </defs>\r\n      <g transform=\"translate(78.23965 242.901756)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"xtick_3\">\r\n     <g id=\"line2d_3\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"142.1434\" xlink:href=\"#md3ad19a830\" y=\"228.303319\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_3\">\r\n      <!-- 400 -->\r\n      <defs>\r\n       <path d=\"M 37.796875 64.3125 \r\nL 12.890625 25.390625 \r\nL 37.796875 25.390625 \r\nz\r\nM 35.203125 72.90625 \r\nL 47.609375 72.90625 \r\nL 47.609375 25.390625 \r\nL 58.015625 25.390625 \r\nL 58.015625 17.1875 \r\nL 47.609375 17.1875 \r\nL 47.609375 0 \r\nL 37.796875 0 \r\nL 37.796875 17.1875 \r\nL 4.890625 17.1875 \r\nL 4.890625 26.703125 \r\nz\r\n\" id=\"DejaVuSans-52\"/>\r\n      </defs>\r\n      <g transform=\"translate(132.59965 242.901756)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"matplotlib.axis_2\">\r\n    <g id=\"ytick_1\">\r\n     <g id=\"line2d_4\">\r\n      <defs>\r\n       <path d=\"M 0 0 \r\nL -3.5 0 \r\n\" id=\"mad14233197\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n      </defs>\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"10.999219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_4\">\r\n      <!-- 0 -->\r\n      <g transform=\"translate(19.925 14.798438)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_2\">\r\n     <g id=\"line2d_5\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"38.179219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_5\">\r\n      <!-- 100 -->\r\n      <defs>\r\n       <path d=\"M 12.40625 8.296875 \r\nL 28.515625 8.296875 \r\nL 28.515625 63.921875 \r\nL 10.984375 60.40625 \r\nL 10.984375 69.390625 \r\nL 28.421875 72.90625 \r\nL 38.28125 72.90625 \r\nL 38.28125 8.296875 \r\nL 54.390625 8.296875 \r\nL 54.390625 0 \r\nL 12.40625 0 \r\nz\r\n\" id=\"DejaVuSans-49\"/>\r\n      </defs>\r\n      <g transform=\"translate(7.2 41.978438)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-49\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_3\">\r\n     <g id=\"line2d_6\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"65.359219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_6\">\r\n      <!-- 200 -->\r\n      <g transform=\"translate(7.2 69.158438)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-50\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_4\">\r\n     <g id=\"line2d_7\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"92.539219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_7\">\r\n      <!-- 300 -->\r\n      <defs>\r\n       <path d=\"M 40.578125 39.3125 \r\nQ 47.65625 37.796875 51.625 33 \r\nQ 55.609375 28.21875 55.609375 21.1875 \r\nQ 55.609375 10.40625 48.1875 4.484375 \r\nQ 40.765625 -1.421875 27.09375 -1.421875 \r\nQ 22.515625 -1.421875 17.65625 -0.515625 \r\nQ 12.796875 0.390625 7.625 2.203125 \r\nL 7.625 11.71875 \r\nQ 11.71875 9.328125 16.59375 8.109375 \r\nQ 21.484375 6.890625 26.8125 6.890625 \r\nQ 36.078125 6.890625 40.9375 10.546875 \r\nQ 45.796875 14.203125 45.796875 21.1875 \r\nQ 45.796875 27.640625 41.28125 31.265625 \r\nQ 36.765625 34.90625 28.71875 34.90625 \r\nL 20.21875 34.90625 \r\nL 20.21875 43.015625 \r\nL 29.109375 43.015625 \r\nQ 36.375 43.015625 40.234375 45.921875 \r\nQ 44.09375 48.828125 44.09375 54.296875 \r\nQ 44.09375 59.90625 40.109375 62.90625 \r\nQ 36.140625 65.921875 28.71875 65.921875 \r\nQ 24.65625 65.921875 20.015625 65.03125 \r\nQ 15.375 64.15625 9.8125 62.3125 \r\nL 9.8125 71.09375 \r\nQ 15.4375 72.65625 20.34375 73.4375 \r\nQ 25.25 74.21875 29.59375 74.21875 \r\nQ 40.828125 74.21875 47.359375 69.109375 \r\nQ 53.90625 64.015625 53.90625 55.328125 \r\nQ 53.90625 49.265625 50.4375 45.09375 \r\nQ 46.96875 40.921875 40.578125 39.3125 \r\nz\r\n\" id=\"DejaVuSans-51\"/>\r\n      </defs>\r\n      <g transform=\"translate(7.2 96.338437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-51\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_5\">\r\n     <g id=\"line2d_8\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"119.719219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_8\">\r\n      <!-- 400 -->\r\n      <g transform=\"translate(7.2 123.518438)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-52\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_6\">\r\n     <g id=\"line2d_9\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"146.899219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_9\">\r\n      <!-- 500 -->\r\n      <defs>\r\n       <path d=\"M 10.796875 72.90625 \r\nL 49.515625 72.90625 \r\nL 49.515625 64.59375 \r\nL 19.828125 64.59375 \r\nL 19.828125 46.734375 \r\nQ 21.96875 47.46875 24.109375 47.828125 \r\nQ 26.265625 48.1875 28.421875 48.1875 \r\nQ 40.625 48.1875 47.75 41.5 \r\nQ 54.890625 34.8125 54.890625 23.390625 \r\nQ 54.890625 11.625 47.5625 5.09375 \r\nQ 40.234375 -1.421875 26.90625 -1.421875 \r\nQ 22.3125 -1.421875 17.546875 -0.640625 \r\nQ 12.796875 0.140625 7.71875 1.703125 \r\nL 7.71875 11.625 \r\nQ 12.109375 9.234375 16.796875 8.0625 \r\nQ 21.484375 6.890625 26.703125 6.890625 \r\nQ 35.15625 6.890625 40.078125 11.328125 \r\nQ 45.015625 15.765625 45.015625 23.390625 \r\nQ 45.015625 31 40.078125 35.4375 \r\nQ 35.15625 39.890625 26.703125 39.890625 \r\nQ 22.75 39.890625 18.8125 39.015625 \r\nQ 14.890625 38.140625 10.796875 36.28125 \r\nz\r\n\" id=\"DejaVuSans-53\"/>\r\n      </defs>\r\n      <g transform=\"translate(7.2 150.698438)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-53\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_7\">\r\n     <g id=\"line2d_10\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"174.079219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_10\">\r\n      <!-- 600 -->\r\n      <defs>\r\n       <path d=\"M 33.015625 40.375 \r\nQ 26.375 40.375 22.484375 35.828125 \r\nQ 18.609375 31.296875 18.609375 23.390625 \r\nQ 18.609375 15.53125 22.484375 10.953125 \r\nQ 26.375 6.390625 33.015625 6.390625 \r\nQ 39.65625 6.390625 43.53125 10.953125 \r\nQ 47.40625 15.53125 47.40625 23.390625 \r\nQ 47.40625 31.296875 43.53125 35.828125 \r\nQ 39.65625 40.375 33.015625 40.375 \r\nz\r\nM 52.59375 71.296875 \r\nL 52.59375 62.3125 \r\nQ 48.875 64.0625 45.09375 64.984375 \r\nQ 41.3125 65.921875 37.59375 65.921875 \r\nQ 27.828125 65.921875 22.671875 59.328125 \r\nQ 17.53125 52.734375 16.796875 39.40625 \r\nQ 19.671875 43.65625 24.015625 45.921875 \r\nQ 28.375 48.1875 33.59375 48.1875 \r\nQ 44.578125 48.1875 50.953125 41.515625 \r\nQ 57.328125 34.859375 57.328125 23.390625 \r\nQ 57.328125 12.15625 50.6875 5.359375 \r\nQ 44.046875 -1.421875 33.015625 -1.421875 \r\nQ 20.359375 -1.421875 13.671875 8.265625 \r\nQ 6.984375 17.96875 6.984375 36.375 \r\nQ 6.984375 53.65625 15.1875 63.9375 \r\nQ 23.390625 74.21875 37.203125 74.21875 \r\nQ 40.921875 74.21875 44.703125 73.484375 \r\nQ 48.484375 72.75 52.59375 71.296875 \r\nz\r\n\" id=\"DejaVuSans-54\"/>\r\n      </defs>\r\n      <g transform=\"translate(7.2 177.878437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-54\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n    <g id=\"ytick_8\">\r\n     <g id=\"line2d_11\">\r\n      <g>\r\n       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mad14233197\" y=\"201.259219\"/>\r\n      </g>\r\n     </g>\r\n     <g id=\"text_11\">\r\n      <!-- 700 -->\r\n      <defs>\r\n       <path d=\"M 8.203125 72.90625 \r\nL 55.078125 72.90625 \r\nL 55.078125 68.703125 \r\nL 28.609375 0 \r\nL 18.3125 0 \r\nL 43.21875 64.59375 \r\nL 8.203125 64.59375 \r\nz\r\n\" id=\"DejaVuSans-55\"/>\r\n      </defs>\r\n      <g transform=\"translate(7.2 205.058437)scale(0.1 -0.1)\">\r\n       <use xlink:href=\"#DejaVuSans-55\"/>\r\n       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n      </g>\r\n     </g>\r\n    </g>\r\n   </g>\r\n   <g id=\"patch_3\">\r\n    <path d=\"M 33.2875 228.303319 \r\nL 33.2875 10.863319 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_4\">\r\n    <path d=\"M 196.3675 228.303319 \r\nL 196.3675 10.863319 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_5\">\r\n    <path d=\"M 33.2875 228.303319 \r\nL 196.3675 228.303319 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n   <g id=\"patch_6\">\r\n    <path d=\"M 33.2875 10.863319 \r\nL 196.3675 10.863319 \r\n\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n   </g>\r\n  </g>\r\n </g>\r\n <defs>\r\n  <clipPath id=\"p54fb5baeed\">\r\n   <rect height=\"217.44\" width=\"163.08\" x=\"33.2875\" y=\"10.863319\"/>\r\n  </clipPath>\r\n </defs>\r\n</svg>\r\n",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMsAAAD8CAYAAADZhFAmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOy9S4wtSXrf9/siIh/nnKq6r35Md88Mp4ccjkhTMh+mSMkELL9kwhsZBgzIC0ML29zIgA14IdkbwwsBWnnphSAZ1sKwQMA2LAiWZT1N0aZIkRJtejgacjiPnul59OP2vbdu1TknMyM+L76IzDynTj26+96eaqG/i7pVJ09mZGZEfPF93/97hKgqn9An9AldT+4H/QCf0Cf0caFPmOUT+oRuSJ8wyyf0Cd2QPmGWT+gTuiF9wiyf0Cd0Q/qEWT6hT+iG9NyYRUR+UUS+IiJfFZE//7zu8wl9Qh8VyfPws4iIB34P+DeBbwP/GPj3VfV3n/nNPqFP6COi5yVZ/ijwVVX9mqp2wF8D/tRzutcn9Al9JBSeU7uvAd+aff428HPzE0Tkl4Bfyh9/BjnQikI5LvnjIbrs0pue+6xJFeQZ3eiC4C8dsd++7n03/82B8+fX/IBoZ0xvUSCJqh7slefFLNfOX1X9S8BfAhAnGipHUQl3J9ohNpnNBlWcuHyDfD2Cjp/sGxEHJFQVhyD5JqqKiIz3RnR8Wpm1JeRz9t5MENLO8wkpKc4JIiAoAsRLGGjODF7srXQ2wVUhJXIruZED3Khq99TcgIK94/heh7lCRNCU7G/nrBd1/5zp3cr3F5uT3Jfzc7HzkyLO4QSSptyv83d0pJiI8eAj3hp6XmrYt4HPzD5/GvjO1ZfMprbOJ9HhJUeTjhM+pbTHGponf/mxgUwx/41NrsIg+3abzGbCyCiFe8rcy8Ots8kzXjdOep3Yeja5dt+vXAtpxotjUzJnHtn9nRsr9y6MgsjOO+w2snvPwoDippcr3+30gzL7fnzKC99ZX5dr8oJWzs/9IQApd+e0Nt16el7M8o+BL4jI6yJSA38a+OsfrkkZJ5nmCVGkwv4iJwhOXJYm0+B673BX6EeTtJnaudGT7Z1mj5cZ+aIwOnhtYTgF3N5E3Z+4+3QlRiMm4T6oXmiXSf778HQp54zMt3Ncd55fMOG9I10+JvRcmEVVB+A/Af4W8GXgl1X1S9ddt9Ops0EqksE5tzdxTDqIc6imrPIokOxHFYdDIP8/+1FB2GWm3OSoOpWBT3n1TWotK6ACmsrT2UGH4kQxrSZLHARVuSBJIKtXs+NFDiYgqUKRQHuTcKfP3C5TsdN/ud0scSZpko8na7z09bQYTU80Z/y5vJ2PzWGaSfqoSJp9FlA3yinri1uuggHPBzp+3w/hREO1yxgTs0xqlHNux8YQkdHESBpHqVHeaD7Q8+Oo4p03XV1220uabGXHVsDCHJNdI3bNaC+JTezy9AJDtNO8mz1fXmHn3e2c2Tf7Zsgk2cq7MS4DF/puzyw59HdptDDWKMWyLTHv43m78/FAFef9BZV16tmZjrrPQKomTRyw9xaal7K+uz3ccpmB/7Hz4M8Nc9VEKsv7IdJd28SJ2E9hOnfJ6+9JkUubT+wwymyRNxskXXU1xLg3cXSayM8KTfvwpKN6OC5QN3i4cp4BCHqja543HTL53g/dGmYRcaOhOL3M7kpXGGT3OjvZiYxqDOS1TcA5Zz/izM6ZXVtQoPFzRruKKrTfq4XJxnu7ya6ZJtT05HZsF7iYN+kcO1Jln0lEyLbXFfZKuqheHbqXuEnNOtTGZFscUOH20MOL0mXX1ivnpZRIKV1jb+mFcXheNAEPH+z6W8MsH1Qd1HEGGENM7UyvVtAyUVOtUDs2t1fHyZDVAoOXd7tnUgHzNVnfl6y2jWO+Nzf2UaUCK88lycFJrGXSaZ7Qz4CeT8TGQYYoNuY/L/S8/CwfgOaDKHvH99UVsxVG6FfK5HcYk8hoZxRkDAUlZgZQXNGfRTP8Oxn/Ka+mWbyM9x/vl/+WYhRnqWK8ZbBBSjryq5L9GKNZprhyXUaGXGlj/qJZMo32W7YzdqDYmW+l2B9zRpz6LDc5kzAjXHxwRs9tmPIMl0mU8n4T8DLZng51iQR4kXEBGM+Xi36d20q3iFnmBuLNyY3wsNrclOxEFDOeVSb35I0WOU17auBcFcwqV5YwFx/XpFLmsvx8u6cV949qtnHKvGfPRD7YHcYwI68ceKPLpNQHpV1UsjzpB6PD2sPHR/TcGjVsorKiXezYfcjYzQx0QRGxH0OzJvRsWsncePb8fvuTwYlNZMdhFWPfrih6/a5zLiNo+7eRYoscvvv4WWGueRUpMEepCqJVHsTedcbUwoVnn46zp9rtn3cRvTvwlHbmFfxTEMRdv9GuDXSgyVtJt0iyXEZz0T5JkoKCFSkieV2er15Z1mTjfmoD5oMk0zkIShpVo/EJ5irf/pd75wkO5SIMWm5vc2Km2nHzeXLIV3PwpFs+6eZ0E9TwttAtYpbLYMm8WirgijVc1JRESor3DkSZ1HkHKogkW5FTGv0dIgb3lpXdUSZhZj7JoR+j/8Ok3OiNkEn9GW0VzCGZVLN94sFlxi0+HMixUWT7iRFWzdrViKbJ7LO1rBcE7eiLuoxrZvdmPG134Sl+l90mZj4sESaV8nK23lVby+Jj/icR0zllzsM74hZz7l7HL6VD9tXTIiVzv34wZf5mdKvUsMtgyREfzwM59604JxmVkswI89V/z8q94TO832uKXeJkigrYeYM9tY3MPOU+wq7KtX97TYf65RKSLLtmjDAxymH19jIyw/39Tz/VXRBkftyeaaaD3oTK6S4zeFFnHVzmKnsedKuYZV+PLU5EyWpUCWqcjHpXlK9xNbQJe5jGoMfZvwv+iJmeXozwHX37QLtRTdoMSWeTXncXwNmF+wZ/UvC+rMjTuVIm/iEnylwt3DtWpPGuX0F3Lr9oc1wEMqZzLkqUudNxv535seK0LYtZfrpREuy3ab93f3ZefeZX2l/XnjdMfYvUsF0DEIpdstsDhWEKkzwrUvRgkKUCotfcKatm4gyijlpSAbC4e/KgzppPmRF9jpGKUS9OjKLGHLxnYfQ8YctEvEGXHIaBPwyVST4Z80VNtEebjo1XOKZxvO6h93l3/+sMHY5pFM+JbhGzzJGcXf24oErFJJa9ZcXUGMm2gMwMfqYVuFyyN0lGO6K0XTpcJNskpd08+HjLyRDJzk6ICSCNdkmZ9SpiFowLpDhgAMKE/qRRv5jbK270WyRsJU0jiFFsLsa/NZXcldITk2J/eKW9GANWrp0m9B5nHxqtC2FGMjpcVZO9RyrvZTF446uP0tv6z3uIcRqb/YVFZkO5g9gr+R5lZjw/RoFbxCwlOes6Mmf9vMem6+coUz66d87BFmfqwa7KZS04NK/uSRXVOEYVlzZ31Kb8CCnZJABnaI9Mg1miACa9HkpksqDEqKOzs7yOipqQmqs4afK02ESa1LDr6P36Y+aBrHa9m32353S94p77fwtCLCCHMDH+Ac3zB023hln0gMp1iEYRv3PuNIgFSra/59cxhdTvxLnMdXuLmVcgxfw7xXEgi9/Cie7MtoIn6MxmcQ7ioCSJaDK1w3tbveMwLQpptKF1nPDjxMjMkoMOiBHE2ffek8N7Unn4CaWbe/kPkSri/AHpcDntq1GH1J25H2t/2WL2eSfKuwSTFkVBpv7cGeLrhd1zp1sWoi8ZcpyjMHs2Sw5rGXV11QwFz6RNntRJo62GSTMT+RnilidlVmM0TYPlPHlCyozBTO2aU5qjqjsvtPcxM+plq/n8+JUr/oHJIm4W7Vwuzr8vhOQf4CERd3Di23czlSqPyX46dqGDbYwaYRqjFfbcW8QoxGFfTcg2zV5f7CwicH1Y+AekjzoH/wOS7oS8HyJxhaFGi+ZQMyPiYglWWa1Jw9i3Bdsvg1ZyS+YIa4o6McQBX8dlt58z7e5lJYDyEHd9sFHXhLlAZVLDCvMcYo4L11/a3/sxWxe98DsxXrPrLhUBOmeu/T92m9AI+Ese7aMJUr5At0iyXDa4e5JFrTCDqV5pgo9nPpqUZtDkbB5eQGTkInryPLrj0ISdv+v7uedVkmcHns7tOy+jgyClAhRMoSxjkYupldE+sfD66X4lvOiiVJnCrS86lUsG6yGkSuijonG0vOyou1zS7kvp92t73YRut2RRM3AvQ2+AmfhPqAoxlwLRFGcGdm6udHTu9KJKl1ioyUb5wS8UhW6iol13LkwTqJwTh1EEZ8NZUZn35+F2UjL4u0hWN6p0F+sejLbSQUmT/Ug3tTeyulZsFpkd1/hctK4b07VOSRH570TkLRH5/2bH7ovI3xaR38+/782++y/ESrZ+RUT+rZs+iOVsACo48VlkZ3sjKXGIDEMkDsrQJ7MxJtt2/JwioxpVVK0U7WffifUs6CaOsMuY4LI2DrU5Xwj2JfD+IrFjF+xJm5RKf2T9UGXvWh2vNTBjurjYbJpBkPJj58tM8qQdZpJZu4fe60IhjPIsMztyH//ZedfCYLPfc5TyWdFNPPj/PfCLe8f+PPB3VfULwN/NnxGRH8cqufwL+Zr/VqyU67WkyRxzw5Doh4EYEylGYlTioCNDXNUJ8w6c/3zUJHLx56O+50h64AdjmjhYfxtUPSWYjZIrc6X3bgRVSgNF7b1OOk8Jcoc7wbld39P++5RxH9+F3Xe8sNBMpz3zsb9WDVPVXxGRz+0d/lPAn8h//1XgHwB/Lh//a6q6Bb4uIl/FSrn+2rVPMkc94oVDO1LkttFlqM3OQO4b3XtS4LI296XF/j0Ofb6KOXfsmvxYmgtsZDYYVVfnxkV79EGluJthWjz1RY2e2lesOJhMAzlO8IwyiliQq+iOeakKLjs0HZBmjFHiw4KDSpTKZRsrgz5OHEmjOYRTdnYmZV2wm7k4ZPe5rtPxPqjN8rKqfhdAVb8rIi/l468B/2h23rfzsX+u6XkZmnB9u8/rvsWxiirO5Vhq7xHnpxPKX+P774oG85fktAVN04KRIOaqnWNoBbvNjkkO2cdUOag8VN6j3hIhgkBwkEgInjEzM7OdJkGDMU3QgSEpfW9tX+iyuQf4EnrWBv6hNe3gE8hureMfCB1EWvYm/j7CtH/suu/2fRxz+2Kuahy6Zr/dgt7tS7FL/REH6CaMNalh9jnlVX5IZmGb1JFs07iZCjdLyMugjZkamhlmJmLU1OukJQJ7d6I4b+9aV57aRyoRgvNU4hgkl6vKEkWdA405L8bEpDmCHRoTOPAYyhA9DOo46yJxVhXzEDK6Tx+UWb4vIq9kqfIK8FY+fuOyrTqvdXxptODHh+YT9v2s9JdBpIfPvXnDz03iZCa2Mk7TDbw3P1VKcbqvgriSuZrDWspXWgz73YcsCGbllEUdcB6CeJz4MZ07lOmSay54IojHewOKooLzmWm9nes0K3WaEEkcNcZQvcJme7Fq0CH6oCH6fx34M/nvPwP8r7Pjf1pEGhF5HfgC8Bsf8B7PlC7T45+FAf5RGPD79/uogINDtC8lUQMLDsRW5tpqjBJx1w7TfV5BFZoKVk2g9tA6j/febiICziHO412uNSoWulPABydC8Lk6D4IXK4WFeEpMngOCKpUoAWXRuBx3d/V7XytZROR/xIz5F0Tk28B/BfxF4JdF5D8E3gD+vfzyXxKRXwZ+FxiAP6uqH2mpwZs47W6ishxSp8a/977fgXLnajswplPOYmJHSHff2D6gel32jPvnHIKPL1Mrr1MxD/bJZXbZ/mQ/sECPUQaXNFp6pg5CXUMTArUIrppCjII3cME7y4r14ojDgHg/i+TwY0VRjQURKjssJJx3+OyW6OOAIlSS8Aqugi2OvrtcwtwOD/4zVMOucu4VumxiXLVS77QpswkPI6w0ojnTaTl+aarCb9eVKo3XPM/s3pcx71VMPX+vq+yt+bXXLTY3YeT3RbnfvMDRIlAFIWQGEFJWj3L1/WwjeW8SA00kZ8Z+oRKloGolemO0mgqatxsx1M4xxEhSNbRMxFwUUXmyTaRb7cF/n3TVgF428a5ancv5191zvK5cq6Y2q0x5MSNSqnNpcXE5vsAYJcRjKj28EwN13bPexKi/irHe7+R/VmusOHvlJphkCU4QMfRNslQWUVO7xI2RBGVhKkxTXsB7UE04tQRv8S5LNuvUOKSxgHvJUEYcohEviusuf9aPJbM8S7rclrmIPF3HUDuMWgYCxtWznCN7xyCrL9mCnMb/w2X+3cj/s/fdR02aYLkI1JXDS0JUc+dZZwTvganGgsOZquUExOcghJJ+LsSUzFaZGSEqxhwgY9xNEE+McUzW8yJEuSxhzuhjySw3Gdj3s0LuSw07XmZW/jWfeHlZc24yWNOewSvlmr37HXJU7h/XZG2nwllpl7EutDP7PFelrpO+8/e6GRp39ffXkky/yj1DgNprRrQCSQYc4DXivLe57Yq3xq7xOBJWI9llkey82St+hK4zCpaZLA4OHzyKMsQBNOEdVBIYBiV4T5+RssvoY8ksHwVd0M9lGuT53wbQzOqK3bDNK0kvTuhrG98/97ZT7tMqWCWaUdqqwb6qOmYilxz+sgiNUc8lr8lNCYFldwQ3C8BVUZvpap+99+A9KVoNbJNCDh8dckX8/62q7vIs6bKV9zK6MDn3zy9M4naPqTKmAaccuHlZaM5NV+bdguX7CNfVL3Kd2vi8mOn9tFtMMucE7/KelhrxYnvaOIHgHILivMwqj06rl/MZPhYhiCd4j0Pwzo3+GJFpP9BSaNFCY9yIsjlxOA/OKcE7Lg78RP/cMstN6dJB1ktqUu1AXYca/PDPBHtqlZtKJNnPx0V8XE5KsUcUX+yR8nvOMKM2PNvVwEmuFwdBjGHKHjCixgAxRVSVGCNJTYKkZPCxVff3tjkTZv+IM8a8avxurRp2rb8kL0/jKWodWlaPUa47tR3zJNsBaX7+YRp1eGDuZJ6BLnZob8Ebz3Hs2AHz3zd575Tv45ApBye/9HWlTi/1/zDZMVdB5of6/f3YM4fannv07WC2PbzDS8Q5j8zUJgAXfJbcOkqMqQxPGoc3oXgHRM32ion/Io2896Ro0WChquj7AfEBSFShJmlOckNyoMzldGuZ5Tp/wQUkXECxrSQk5Xmca4a6yq6NPVAYpjDcVffXPZXogKQRwXRmoJQBH9Uwpok4Z9Qdpik6SWH+YswrO4W7n6c/7CNDwmbvHYLgNNIEjziofDAkLEuQYoOUTXNTjHjvCc7l3EvFe0/lQ5YOJlniYKkd4yKXmVIxMKBpGmKM1HVNjCZ9LEIANMYrpfatY5brnIpze0KwyeWdoM4YxcNYBV9nE9A5WB01PDnfMqtkdKH9/b/HGzGTLHvfF0lWVu3dEPZdaTF9UW6kO5LrEL1f6XTwHWbHDkHI+4DGTRGyQ896FRXVtvJQB/vsBdBoQZlZHbMHKVclC2ERLKQ/+1rG1GdnEinGmFUrpdS5jjEizhG8n/nGbBBdcGiu/YYqobo69erWMQtcHNTx77JKywim5EA7g1F8nns+2HcRdpCl7WbLogk8PR+uEip2vyx9Lsy5SyarHPjuJhP7FgRQXKDn9kwZBLExgyr7PIQ0SXGxguIlqhlMDSs/pdRVqWEWfLD8Fc27WSNUwY0aW1VVTFVqYIgDwVekqBmVn8o2Pa+o42dPc7WoLCxlpQbE5xUh6egxF0zdcilRe0ep2K6U+sM26a3gnWSH10y14dK5PyJf+6v9qDHNVUJ2JZ/OnntuUzG7ZgoD+MHTTaTWVVLpxq/hrU8aD3VlKpVINrol7wwmLlfwcaOvCo3YDm2Cc56kOTZMYy58aKpUSglN9rfmvcJ93mFZnJVcKupXAQtGKYXjsgi2QreGWYqkCA5CcATv0DiMDFES64oe1JVaVGr2S5fFsU8wJNCZjeA9eFFkDIWAVByKMPOYM4EGyliXatdpKbkCA6MGdcGoztePNkpRy2bOxUOq1c6EnRnjOyroVX0oh6vVXKaSXaZq7Z8/b+OQ83O/vZEc2bi07T8UW+SWldB6h0cQ7wjO501yhZjRKVKyiY45GlVhGBKLRUUgMQx99pkIEFBVqqqybk5pZyMr84O5XCEURDzqzJx32d2Z0rR51WV0K5hFgNZDcGJzUBJpSKP9MXmxy+6MpnKNOqhMUiSSmSDlwtvlxDyoKSkjsDKrGFsm5XWLpEOImMOsxCml3P4kzslPmekHVOfqo6YLTFb6NveEF1i2gbp2eVwYd5O2rUSsPC4zwx41lavrepqmZui7jKT50UAvjsayM7KqMgxDliqJYciLpLNSut6Fqc503oPUOaXr45Wq2K1gFicmmlEd/QmukqxC6YgQqdq8i1m1co4ceGcTNmaIuMCuIjmDLzNUjLl6fZG4M7TrppqEwYzsFaRmx8AfC2vcoL1DC9m+RPkwdAhKfj/OyoNSb3b8ShBgtnpUDhaN0NSOIFbvDTGm8LMayi4zhy9rvjdpEYIxUt1UZpd6y3OZ1zIrv51zVFVtNsoQCcHTdTG3E+i7ISNoDud06hc+JpKl8cKQdZgUc8ZbnCa/YIbfkCwOq65ktGlKUT1l2sqhFC4o8XMA2Y4ELjLHKFnKpBBDZWK8IRt9EOjoiqYOVXzcX/UOqV3v59yPhmwBrINn0QQqp1TOoRrxVQMoSQ0WdlhylncOL242VuZDKajX2LLqDrOklMZ6Z95PRQLBmCuEis1mQ1XVpBTNcy8uF1h3oxp3Gd0KZlFguydBCrnR6NdRxfE+b0vHDJLNqprLDfbEnVU0JhjE5b1Tdu9dpIECHitWrQrpmijUQgK2rV5ucF+X33nXG67uk2N1mvj7kDR7aUDjdnrC5Bidybf9e5Z+k51jVzPVjeDrInU0V8RUpamEUJAs7xHCqAVXVTWqUCn1IBVRe+IQR+lRthFxYiOvOqlcJUglpkTI6hlJR+Zz4lBvRqj3PqtxdpWqaQveTY7My+hWMEtSxuIBpEk6CAWtsInjs22tCaJMmL2qnSeZs2I2jkuhhWIsa7aw3WyCjABZnmQ/6M1AD07WQ5NzMsM+wE0OG/jz6vYXJdNVz3z4OdUZAnm0rFnVgvcgzpkTMPtVfDDbxJVJLiWei3GlL05DKMb7LPQFJabJbgFTtYpxL86Z/yWYjdS2DSD0fU/Mjs66rgGXUbLL3/NWMAsYs/hcq2qUJnmmj4PoBac6MVcp0CYWzOicMcow5n2XyVDK8UQTQJfoYnIAgSp01Yp66LurbIAbq0Q68/zvo037n8vh3Qj1S+8zfT8/Nun98+OHbJWrnnlyGitHi5qFswIUeMs/iWmgCt4St0qDSalDRdQ47ohQwu3nyNaYBTmqWZKZf6rRXByUzIx/zaqeFdVI1HVFjH5835Qi1yXs3hpmKRKgYMg7ECo6IlXee2Jve6YkvVgkoYTBaKkDpQWNucw9/uGf/VkY4rvt7Yb8zwtl3/Se0/e7Ov78u8ug4/32xx0Grn3undshyTIgKw/OB8S7rJaZGiR5ISSDMEPX45tACYhUVUIIFgyZcXhzSAoxDqSUzOmYwzWc9xaMWaSJtyIVJR05xWjOTeczWhZG6WL9cHW4y01qHX9GRP6+iHxZRL4kIv9pPv5M6x2XFX8e+WlTXBgibBU2ncF789VzFBK5z3dyd4r6pbsr7P6quS9JShUQO88BAcSj4mewyXTuBSpKdPkp9kPW/2wLcPuuaICGSoCKWv6Fm8CNcu6hn1I5svxoiSXMk0Tz/cZ7lji28XoZ2y/Pt/tZuJFmmu2+VJBKEe4eCW3tCcHjvKPyHi9CEwISE5WvbFeJnPnonCcNA05LRPI0kFUVcE6oqpCRsGBxYSlLkwJBA33fW3GKzCzeOUQc3hfZYHFifddZ+AzkVOOrV6CbhOgPwH+uqj8G/DzwZ3NN42dW71jzTVSgT0qv0CXYRujyZ1NnZVSvoBiwM+HwDFb4OfMYXyS8DDginjRm691Ymuzo87rLnHmyW9DftOqXYtxzeLYc3zXGD9xPsw2Y6xfL/J6z+4ybg6mOz1JKsfq8YH0Q9KysJ3WFpQr7oibl91K1FV7cKD2qqiIOkVBV+FzWKGWn5KhqYczf9/2Icolz1FWVQSElDoN1gU5bZhSAwM8YKuQQmCoExJXclqKCXv5u1zKLqn5XVf9J/vsU+DJWkvVPYXWOyb//nfz3WO9YVb8OlHrHV5ODQaHHbI4IUxWhA5PTjzNqTypMDz4dOyA9Lr7n9HdROZwTkjNGxkESIeIvGMQX2phLrvIzkzYlkry8QnG8FmZQpvyVeRvzcdzTeHZormbpTLV1hTln9y7njcybJdE+Ax2+z2x7bzVGcUAlcGfRjIlcy7ahyjcMPhB8wLliUNvxuqlHz3sx1IdhoKqq3MemkpHVqPL2KW89MtkmSts0xhQhWGIZpZ/tWVO5b/mcEjGl/N4fQg3b65zPAT8F/Dp79Y6Beb3jb80uO1jvWER+SUR+U0R+E6aBv+lilooR+tzBK29+AgGfEqRhLCZxUyrnHpIK5be7eXM3ohEF3Wv30G1yEuEOfRDHaEEgj5aBIEoVTHVKcbCJ6absRbJtUQxyTXb+mM+SJztAXdc7DkjQEToe+za3Bzmigt0OLjFkZOStMKU5MDN07Q90xIxubOCLyBHwPwH/mao+uWKyXKIc7B2YlW91IlqqppddoN3elTv5K8qYPag6FY4o533osn6zZTzEyI+//jIv3lkR08CXv/YGW6l59LTLhuU1Tcm0Jfe83WJYy/gOspO/8mGp2CXzYRptlb3buAJK7fWbjP9pVuEOwdqT+uKwAhSLpqL2Zns5Z4Z1FcIo5Sw6uDiTcwajeGIaCMGP93DOmf2RGcp7qylW1zVd1432SJ/DXpwILoQcfrS3O1lKuBCIXUddVQxx8uGcn58b84jbkUT7dCNmEZEKY5T/QVX/53z4Q9c73rlHCWbEPPSaGcByGMrEUgp4Mqo2iV1ETIT/+Jf+o9FZucvTo/xinLn5VwmDEYXkgUGoRPnjf/h1XjpuWNaOfoic90oXI1/65vf55ltPCaHYU5MNlTKEJSiSk5Jmytr4HPte+rLtHzCqHmXz0/kmqLukB45haWLzZXwAACAASURBVLbXiqvS/lVMOvtuZBbreHtUGVU1VThuK+6tKoIozgdCFfBii0HfbWkXLRrTaMCnbFirQlVXkBJd15kBX1Vj7eTgPZqdh+IzmpWlQ5Eac1tHcx7LfMT/yl/+y9SVZQJWU1Qlq+USgC4z5mV0EzRMgL8CfFlV/5vZV8+83vFVQzvXqcu5F4Sb5Em3n2h14E4yLvW7lJwlINXB8cr9BXeXjpOjhiZ42lBz0rY8ODniJ19/mR9+oUF6JutZHJp1GpFEysXihhHzmk/K6zcCej80V0mAg1mdl537Qe83Mb0dcwJtbfCt9566CsS+G6OI20ULasjW1AZ5hZd
Download .txt
gitextract_ffogpws4/

├── Image Processor/
│   ├── .gitignore
│   ├── Dick_Pic_Mask-RCNN_Trainer.ipynb
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── README.md
│   ├── __init__.py
│   ├── align_images.py
│   ├── cv_tools.py
│   ├── download_utils.py
│   ├── mrcnn/
│   │   ├── __init__.py
│   │   ├── config.py
│   │   ├── model.py
│   │   ├── parallel_model.py
│   │   ├── utils.py
│   │   └── visualize.py
│   ├── requirements.txt
│   ├── scratch.py
│   ├── setup.cfg
│   └── setup.py
├── README.md
├── requirements.txt
└── stylegan2-tpu/
    ├── Dockerfile
    ├── LICENSE.txt
    ├── README.md
    ├── align_mammos.py
    ├── convert_ckpt_to_pkl.py
    ├── convert_pkl_to_ckpt.py
    ├── dataset_tool.py
    ├── dnnlib/
    │   ├── __init__.py
    │   ├── submission/
    │   │   ├── __init__.py
    │   │   ├── internal/
    │   │   │   ├── __init__.py
    │   │   │   └── local.py
    │   │   ├── run_context.py
    │   │   └── submit.py
    │   ├── tflib/
    │   │   ├── __init__.py
    │   │   ├── autosummary.py
    │   │   ├── custom_ops.py
    │   │   ├── network.py
    │   │   ├── ops/
    │   │   │   ├── __init__.py
    │   │   │   ├── fused_bias_act.cu
    │   │   │   ├── fused_bias_act.py
    │   │   │   ├── upfirdn_2d.cu
    │   │   │   └── upfirdn_2d.py
    │   │   ├── optimizer.py
    │   │   ├── tfutil.py
    │   │   └── tpu_summaries.py
    │   └── util.py
    ├── docs/
    │   ├── license.html
    │   └── versions.html
    ├── encoder/
    │   ├── __init__.py
    │   ├── generator_model.py
    │   └── perceptual_model.py
    ├── ext.l
    ├── generate_images_tpu.py
    ├── mammos.py
    ├── metrics/
    │   ├── __init__.py
    │   ├── frechet_inception_distance.py
    │   ├── inception_score.py
    │   ├── linear_separability.py
    │   ├── metric_base.py
    │   ├── metric_defaults.py
    │   ├── perceptual_path_length.py
    │   └── precision_recall.py
    ├── prepare_image.py
    ├── pretrained_networks.py
    ├── projector.py
    ├── random_crops.py
    ├── repl.l
    ├── requirements.txt
    ├── run_generator.py
    ├── run_metrics.py
    ├── run_projector.py
    ├── run_training.py
    ├── test_nvcc.cu
    ├── tflex.py
    ├── tflex_test.py
    ├── train_tpu.sh
    ├── training/
    │   ├── __init__.py
    │   ├── dataset.py
    │   ├── imagenet_input.py
    │   ├── loss.py
    │   ├── misc.py
    │   ├── networks_stylegan.py
    │   ├── networks_stylegan2.py
    │   ├── train_runner.py
    │   └── training_loop.py
    └── view.py
Download .txt
SYMBOL INDEX (790 symbols across 54 files)

FILE: Image Processor/align_images.py
  function multi_worker (line 19) | def multi_worker(queue):
  function vis (line 37) | def vis(image_path, r):
  function detect (line 45) | def detect(model, image_path):
  function align (line 54) | def align(image, mask_rcnn_res):
  function pad_image (line 74) | def pad_image(image, side_length=512):
  function get_largest_bbox (line 90) | def get_largest_bbox(mask):
  function rotate_image (line 103) | def rotate_image(image, angle, image_centre=None):
  function make_bb_mask (line 112) | def make_bb_mask(image, top_left, bottom_right):
  function angle_trunc (line 124) | def angle_trunc(a):
  function get_tilt (line 130) | def get_tilt(p1, p2, tilt_from='vertical', degrees=True):
  function get_best_bbox (line 150) | def get_best_bbox(result):
  class myMaskRCNNConfig (line 161) | class myMaskRCNNConfig(Config):

FILE: Image Processor/cv_tools.py
  function show (line 17) | def show(image: np.ndarray) -> None:
  function resize (line 28) | def resize(image: np.ndarray, resize_factor=None, resize_to=None) -> np....
  function crop (line 62) | def crop(image: np.ndarray, top_left: Tuple[int], bottom_right: Tuple[in...
  function compute_PCA (line 71) | def compute_PCA(image: np.ndarray, display=False) -> tuple:
  function threshold (line 98) | def threshold(image: np.ndarray, show_thresholded: bool = False, show_mo...
  function find_contours (line 126) | def find_contours(image: np.ndarray) -> List[np.ndarray]:
  function draw_contours (line 142) | def draw_contours(image: np.ndarray, contours: List[np.ndarray]) -> np.n...
  function draw_lines (line 154) | def draw_lines(image: np.ndarray, lines: List[np.ndarray]) -> np.ndarray:
  function hough_lines (line 183) | def hough_lines(image: np.ndarray) -> (np.ndarray, List[np.ndarray]):
  function filter_lines (line 203) | def filter_lines(lines: List[np.ndarray], angle_thresh: list = [(0, 45),...
  function segment_by_angle_kmeans (line 234) | def segment_by_angle_kmeans(lines: np.ndarray, k: int = 2, **kwargs) -> ...
  function segmented_intersections (line 268) | def segmented_intersections(lines: np.ndarray) -> List[List[int]]:
  function intersection (line 281) | def intersection(line1: np.ndarray, line2: np.ndarray) -> List[int]:
  function filter_intersects (line 303) | def filter_intersects(intersects: List[List[int]], pad_thickness: int, h...
  function draw_intersections (line 329) | def draw_intersections(image: np.ndarray, intersects: list, pad_thicknes...
  function pad_to_square (line 348) | def pad_to_square(img, pad_value=0):
  function find_bbox (line 395) | def find_bbox(contours):
  function crop_resize (line 411) | def crop_resize(img, resize_size=64, foreground='black', show_bbox=False):

FILE: Image Processor/download_utils.py
  function download_file_from_google_drive (line 3) | def download_file_from_google_drive(id, destination):

FILE: Image Processor/mrcnn/config.py
  class Config (line 17) | class Config(object):
    method __init__ (line 213) | def __init__(self):
    method display (line 230) | def display(self):

FILE: Image Processor/mrcnn/model.py
  function log (line 38) | def log(text, array=None):
  class BatchNorm (line 53) | class BatchNorm(KL.BatchNormalization):
    method call (line 61) | def call(self, inputs, training=None):
  function compute_backbone_shapes (line 71) | def compute_backbone_shapes(config, image_shape):
  function identity_block (line 95) | def identity_block(input_tensor, kernel_size, filters, stage, block,
  function conv_block (line 130) | def conv_block(input_tensor, kernel_size, filters, stage, block,
  function resnet_graph (line 171) | def resnet_graph(input_image, architecture, stage5=False, train_bn=True):
  function apply_box_deltas_graph (line 213) | def apply_box_deltas_graph(boxes, deltas):
  function clip_boxes_graph (line 237) | def clip_boxes_graph(boxes, window):
  class ProposalLayer (line 255) | class ProposalLayer(KE.Layer):
    method __init__ (line 270) | def __init__(self, proposal_count, nms_threshold, config=None, **kwargs):
    method call (line 276) | def call(self, inputs):
    method compute_output_shape (line 331) | def compute_output_shape(self, input_shape):
  function log2_graph (line 339) | def log2_graph(x):
  class PyramidROIAlign (line 344) | class PyramidROIAlign(KE.Layer):
    method __init__ (line 364) | def __init__(self, pool_shape, **kwargs):
    method call (line 368) | def call(self, inputs):
    method compute_output_shape (line 449) | def compute_output_shape(self, input_shape):
  function overlaps_graph (line 457) | def overlaps_graph(boxes1, boxes2):
  function detection_targets_graph (line 486) | def detection_targets_graph(proposals, gt_class_ids, gt_boxes, gt_masks,...
  class DetectionTargetLayer (line 622) | class DetectionTargetLayer(KE.Layer):
    method __init__ (line 647) | def __init__(self, config, **kwargs):
    method call (line 651) | def call(self, inputs):
    method compute_output_shape (line 667) | def compute_output_shape(self, input_shape):
    method compute_mask (line 676) | def compute_mask(self, inputs, mask=None):
  function refine_detections_graph (line 684) | def refine_detections_graph(rois, probs, deltas, window, config):
  class DetectionLayer (line 782) | class DetectionLayer(KE.Layer):
    method __init__ (line 791) | def __init__(self, config=None, **kwargs):
    method call (line 795) | def call(self, inputs):
    method compute_output_shape (line 822) | def compute_output_shape(self, input_shape):
  function rpn_graph (line 830) | def rpn_graph(feature_map, anchors_per_location, anchor_stride):
  function build_rpn_model (line 874) | def build_rpn_model(anchor_stride, anchors_per_location, depth):
  function fpn_classifier_graph (line 900) | def fpn_classifier_graph(rois, feature_maps, image_meta,
  function build_fpn_mask_graph (line 956) | def build_fpn_mask_graph(rois, feature_maps, image_meta,
  function smooth_l1_loss (line 1012) | def smooth_l1_loss(y_true, y_pred):
  function rpn_class_loss_graph (line 1022) | def rpn_class_loss_graph(rpn_match, rpn_class_logits):
  function rpn_bbox_loss_graph (line 1047) | def rpn_bbox_loss_graph(config, target_bbox, rpn_match, rpn_bbox):
  function mrcnn_class_loss_graph (line 1076) | def mrcnn_class_loss_graph(target_class_ids, pred_class_logits,
  function mrcnn_bbox_loss_graph (line 1112) | def mrcnn_bbox_loss_graph(target_bbox, target_class_ids, pred_bbox):
  function mrcnn_mask_loss_graph (line 1143) | def mrcnn_mask_loss_graph(target_masks, target_class_ids, pred_masks):
  function load_image_gt (line 1186) | def load_image_gt(dataset, config, image_id, augment=False, augmentation...
  function build_detection_targets (line 1289) | def build_detection_targets(rpn_rois, gt_class_ids, gt_boxes, gt_masks, ...
  function build_rpn_targets (line 1445) | def build_rpn_targets(image_shape, anchors, gt_class_ids, gt_boxes, conf...
  function generate_random_rois (line 1556) | def generate_random_rois(image_shape, count, gt_class_ids, gt_boxes):
  function data_generator (line 1630) | def data_generator(dataset, config, shuffle=True, augment=False, augment...
  class MaskRCNN (line 1820) | class MaskRCNN():
    method __init__ (line 1826) | def __init__(self, mode, config, model_dir):
    method build (line 1839) | def build(self, mode, config):
    method find_last (line 2066) | def find_last(self):
    method load_weights (line 2095) | def load_weights(self, filepath, by_name=False, exclude=None):
    method get_imagenet_weights (line 2139) | def get_imagenet_weights(self):
    method compile (line 2153) | def compile(self, learning_rate, momentum):
    method set_trainable (line 2201) | def set_trainable(self, layer_regex, keras_model=None, indent=0, verbo...
    method set_log_dir (line 2238) | def set_log_dir(self, model_path=None):
    method train (line 2276) | def train(self, train_dataset, val_dataset, learning_rate, epochs, lay...
    method mold_inputs (line 2378) | def mold_inputs(self, images):
    method unmold_detections (line 2417) | def unmold_detections(self, detections, mrcnn_mask, original_image_shape,
    method detect (line 2482) | def detect(self, images, verbose=0):
    method detect_molded (line 2540) | def detect_molded(self, molded_images, image_metas, verbose=0):
    method get_anchors (line 2598) | def get_anchors(self, image_shape):
    method ancestor (line 2620) | def ancestor(self, tensor, name, checked=None):
    method find_trainable_layer (line 2648) | def find_trainable_layer(self, layer):
    method get_trainable_layers (line 2657) | def get_trainable_layers(self):
    method run_graph (line 2669) | def run_graph(self, images, outputs, image_metas=None):
  function compose_image_meta (line 2725) | def compose_image_meta(image_id, original_image_shape, image_shape,
  function parse_image_meta (line 2750) | def parse_image_meta(meta):
  function parse_image_meta_graph (line 2774) | def parse_image_meta_graph(meta):
  function mold_image (line 2798) | def mold_image(images, config):
  function unmold_image (line 2806) | def unmold_image(normalized_images, config):
  function trim_zeros_graph (line 2815) | def trim_zeros_graph(boxes, name='trim_zeros'):
  function batch_pack_graph (line 2827) | def batch_pack_graph(x, counts, num_rows):
  function norm_boxes_graph (line 2837) | def norm_boxes_graph(boxes, shape):
  function denorm_boxes_graph (line 2854) | def denorm_boxes_graph(boxes, shape):

FILE: Image Processor/mrcnn/parallel_model.py
  class ParallelModel (line 22) | class ParallelModel(KM.Model):
    method __init__ (line 30) | def __init__(self, keras_model, gpu_count):
    method __getattribute__ (line 41) | def __getattribute__(self, attrname):
    method summary (line 48) | def summary(self, *args, **kwargs):
    method make_parallel (line 54) | def make_parallel(self):
  function build_model (line 128) | def build_model(x_train, num_classes):

FILE: Image Processor/mrcnn/utils.py
  function extract_bboxes (line 34) | def extract_bboxes(mask):
  function compute_iou (line 60) | def compute_iou(box, boxes, box_area, boxes_area):
  function compute_overlaps (line 81) | def compute_overlaps(boxes1, boxes2):
  function compute_overlaps_masks (line 100) | def compute_overlaps_masks(masks1, masks2):
  function non_max_suppression (line 122) | def non_max_suppression(boxes, scores, threshold):
  function apply_box_deltas (line 159) | def apply_box_deltas(boxes, deltas):
  function box_refinement_graph (line 183) | def box_refinement_graph(box, gt_box):
  function box_refinement (line 209) | def box_refinement(box, gt_box):
  class Dataset (line 239) | class Dataset(object):
    method __init__ (line 255) | def __init__(self, class_map=None):
    method add_class (line 262) | def add_class(self, source, class_id, class_name):
    method add_image (line 276) | def add_image(self, source, image_id, path, **kwargs):
    method image_reference (line 285) | def image_reference(self, image_id):
    method prepare (line 294) | def prepare(self, class_map=None):
    method map_source_class_id (line 330) | def map_source_class_id(self, source_class_id):
    method get_source_class_id (line 338) | def get_source_class_id(self, class_id, source):
    method image_ids (line 345) | def image_ids(self):
    method source_image_link (line 348) | def source_image_link(self, image_id):
    method load_image (line 355) | def load_image(self, image_id):
    method load_mask (line 368) | def load_mask(self, image_id):
  function resize_image (line 388) | def resize_image(image, min_dim=None, max_dim=None, min_scale=None, mode...
  function resize_mask (line 495) | def resize_mask(mask, scale, padding, crop=None):
  function minimize_mask (line 517) | def minimize_mask(bbox, mask, mini_shape):
  function expand_mask (line 537) | def expand_mask(bbox, mini_mask, image_shape):
  function mold_mask (line 556) | def mold_mask(mask, config):
  function unmold_mask (line 560) | def unmold_mask(mask, bbox, image_shape):
  function generate_anchors (line 583) | def generate_anchors(scales, ratios, shape, feature_stride, anchor_stride):
  function generate_pyramid_anchors (line 622) | def generate_pyramid_anchors(scales, ratios, feature_shapes, feature_str...
  function trim_zeros (line 646) | def trim_zeros(x):
  function compute_matches (line 656) | def compute_matches(gt_boxes, gt_class_ids, gt_masks,
  function compute_ap (line 715) | def compute_ap(gt_boxes, gt_class_ids, gt_masks,
  function compute_ap_range (line 754) | def compute_ap_range(gt_box, gt_class_id, gt_mask,
  function compute_recall (line 778) | def compute_recall(pred_boxes, gt_boxes, iou):
  function batch_slice (line 803) | def batch_slice(inputs, graph_fn, batch_size, names=None):
  function download_trained_weights (line 840) | def download_trained_weights(coco_model_path, verbose=1):
  function norm_boxes (line 853) | def norm_boxes(boxes, shape):
  function denorm_boxes (line 870) | def denorm_boxes(boxes, shape):
  function resize (line 887) | def resize(image, output_shape, order=1, mode='constant', cval=0, clip=T...

FILE: Image Processor/mrcnn/visualize.py
  function display_images (line 35) | def display_images(images, titles=None, cols=4, cmap=None, norm=None,
  function random_colors (line 59) | def random_colors(N, bright=True):
  function apply_mask (line 72) | def apply_mask(image, mask, color, alpha=0.5):
  function display_instances (line 83) | def display_instances(image, boxes, masks, class_ids, class_names,
  function display_differences (line 170) | def display_differences(image,
  function draw_rois (line 208) | def draw_rois(image, rois, refined_rois, mask, class_ids, class_names, l...
  function draw_box (line 270) | def draw_box(image, box, color):
  function display_top_masks (line 282) | def display_top_masks(image, mask, class_ids, class_names, limit=4):
  function plot_precision_recall (line 305) | def plot_precision_recall(AP, precisions, recalls):
  function plot_overlaps (line 320) | def plot_overlaps(gt_class_ids, pred_class_ids, pred_scores,
  function draw_boxes (line 359) | def draw_boxes(image, boxes=None, refined_boxes=None,
  function display_table (line 461) | def display_table(table):
  function display_weight_stats (line 475) | def display_weight_stats(model):

FILE: Image Processor/setup.py
  function _parse_requirements (line 16) | def _parse_requirements(file_path):

FILE: stylegan2-tpu/align_mammos.py
  function flipImage (line 12) | def flipImage(image):

FILE: stylegan2-tpu/convert_ckpt_to_pkl.py
  function main (line 17) | def main():

FILE: stylegan2-tpu/convert_pkl_to_ckpt.py
  function main (line 19) | def main():

FILE: stylegan2-tpu/dataset_tool.py
  function error (line 27) | def error(msg):
  class TFRecordExporter (line 33) | class TFRecordExporter:
    method __init__ (line 34) | def __init__(self, tfrecord_dir, expected_images, print_progress=True,...
    method close (line 51) | def close(self):
    method choose_shuffled_order (line 61) | def choose_shuffled_order(self): # Note: Images and labels must be add...
    method add_image (line 66) | def add_image(self, img):
    method add_labels (line 89) | def add_labels(self, labels):
    method __enter__ (line 96) | def __enter__(self):
    method __exit__ (line 99) | def __exit__(self, *args):
  class ExceptionInfo (line 104) | class ExceptionInfo(object):
    method __init__ (line 105) | def __init__(self):
  class WorkerThread (line 111) | class WorkerThread(threading.Thread):
    method __init__ (line 112) | def __init__(self, task_queue):
    method run (line 116) | def run(self):
  class ThreadPool (line 129) | class ThreadPool(object):
    method __init__ (line 130) | def __init__(self, num_threads):
    method add_task (line 140) | def add_task(self, func, args=()):
    method get_result (line 146) | def get_result(self, func): # returns (result, args)
    method finish (line 153) | def finish(self):
    method __enter__ (line 157) | def __enter__(self): # for 'with' statement
    method __exit__ (line 160) | def __exit__(self, *excinfo):
    method process_items_concurrently (line 163) | def process_items_concurrently(self, item_iterator, process_func=lambd...
  function display (line 191) | def display(tfrecord_dir):
  function extract (line 217) | def extract(tfrecord_dir, output_dir):
  function compare (line 244) | def compare(tfrecord_dir_a, tfrecord_dir_b, ignore_labels):
  function create_mnist (line 287) | def create_mnist(tfrecord_dir, mnist_dir):
  function create_mnistrgb (line 311) | def create_mnistrgb(tfrecord_dir, mnist_dir, num_images=1000000, random_...
  function create_cifar10 (line 328) | def create_cifar10(tfrecord_dir, cifar10_dir):
  function create_cifar100 (line 355) | def create_cifar100(tfrecord_dir, cifar100_dir):
  function create_svhn (line 377) | def create_svhn(tfrecord_dir, svhn_dir):
  function create_lsun (line 404) | def create_lsun(tfrecord_dir, lmdb_dir, resolution=256, max_images=None):
  function create_lsun_wide (line 437) | def create_lsun_wide(tfrecord_dir, lmdb_dir, width=512, height=384, max_...
  function create_celeba (line 482) | def create_celeba(tfrecord_dir, celeba_dir, cx=89, cy=121):
  function create_from_images (line 500) | def create_from_images(tfrecord_dir, image_dir, shuffle, res_log2=7, res...
  function create_from_hdf5 (line 539) | def create_from_hdf5(tfrecord_dir, hdf5_filename, shuffle):
  function execute_cmdline (line 554) | def execute_cmdline(argv):

FILE: stylegan2-tpu/dnnlib/submission/internal/local.py
  class TargetOptions (line 7) | class TargetOptions():
    method __init__ (line 8) | def __init__(self):
  class Target (line 11) | class Target():
    method __init__ (line 12) | def __init__(self):
    method finalize_submit_config (line 15) | def finalize_submit_config(self, submit_config, host_run_dir):
    method submit (line 19) | def submit(self, submit_config, host_run_dir):

FILE: stylegan2-tpu/dnnlib/submission/run_context.py
  class RunContext (line 23) | class RunContext(object):
    method __init__ (line 35) | def __init__(self, submit_config: submit.SubmitConfig, config_module: ...
    method __enter__ (line 57) | def __enter__(self) -> "RunContext":
    method __exit__ (line 60) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
    method update (line 63) | def update(self, loss: Any = 0, cur_epoch: Any = 0, max_epoch: Any = N...
    method should_stop (line 74) | def should_stop(self) -> bool:
    method get_time_since_start (line 78) | def get_time_since_start(self) -> float:
    method get_time_since_last_update (line 82) | def get_time_since_last_update(self) -> float:
    method get_last_update_interval (line 86) | def get_last_update_interval(self) -> float:
    method close (line 90) | def close(self) -> None:
    method get (line 106) | def get():

FILE: stylegan2-tpu/dnnlib/submission/submit.py
  class SubmitTarget (line 33) | class SubmitTarget(Enum):
  class PathType (line 41) | class PathType(Enum):
  class PlatformExtras (line 53) | class PlatformExtras:
    method __init__ (line 61) | def __init__(self):
  class SubmitConfig (line 68) | class SubmitConfig(util.EasyDict):
    method __init__ (line 91) | def __init__(self):
  function get_path_from_template (line 120) | def get_path_from_template(path_template: str, path_type: PathType = Pat...
  function get_template_from_path (line 142) | def get_template_from_path(path: str) -> str:
  function convert_path (line 148) | def convert_path(path: str, path_type: PathType = PathType.AUTO) -> str:
  function set_user_name_override (line 155) | def set_user_name_override(name: str) -> None:
  function get_user_name (line 161) | def get_user_name():
  function make_run_dir_path (line 174) | def make_run_dir_path(*paths):
  function _create_run_dir_local (line 193) | def _create_run_dir_local(submit_config: SubmitConfig) -> str:
  function _get_next_run_id_local (line 212) | def _get_next_run_id_local(run_dir_root: str) -> int:
  function _populate_run_dir (line 228) | def _populate_run_dir(submit_config: SubmitConfig, run_dir: str) -> None:
  function run_wrapper (line 257) | def run_wrapper(submit_config: SubmitConfig) -> None:
  function submit_run (line 350) | def submit_run(submit_config: SubmitConfig, run_func_name: str, **run_fu...

FILE: stylegan2-tpu/dnnlib/tflib/autosummary.py
  function _create_var (line 46) | def _create_var(name: str, value_expr: TfExpression) -> TfExpression:
  function get_tpu_summary (line 82) | def get_tpu_summary(model_dir=None):
  function image_grid (line 93) | def image_grid(input_tensor, grid_shape, image_shape=(32, 32), num_chann...
  function get_num_replicas (line 144) | def get_num_replicas():
  function set_num_replicas (line 148) | def set_num_replicas(n):
  function _i (line 152) | def _i(x): return tf.transpose(x, [0, 2, 3, 1])
  function _o (line 153) | def _o(x): return tf.transpose(x, [0, 3, 1, 2])
  function autoimages (line 155) | def autoimages(summary_name, images, grid_shape=None, res=None):
  function autosummary (line 208) | def autosummary(name: str, value: TfExpressionEx, passthru: TfExpression...
  function finalize_autosummaries (line 252) | def finalize_autosummaries() -> None:
  function save_summaries (line 311) | def save_summaries(file_writer, global_step=None):

FILE: stylegan2-tpu/dnnlib/tflib/custom_ops.py
  function _find_compiler_bindir (line 36) | def _find_compiler_bindir():
  function _get_compute_cap (line 42) | def _get_compute_cap(device):
  function _get_cuda_gpu_arch_string (line 49) | def _get_cuda_gpu_arch_string():
  function _run_cmd (line 56) | def _run_cmd(cmd):
  function _prepare_nvcc_cli (line 63) | def _prepare_nvcc_cli(opts):
  function get_plugin (line 87) | def get_plugin(cuda_file):

FILE: stylegan2-tpu/dnnlib/tflib/network.py
  function import_handler (line 32) | def import_handler(handler_func):
  class Network (line 38) | class Network:
    method __init__ (line 76) | def __init__(self, name: str = None, scope: str = None, func_name: Any...
    method ensure (line 105) | def ensure(self):
    method _init_fields (line 113) | def _init_fields(self) -> None:
    method _init_graph (line 139) | def _init_graph(self) -> None:
    method _init_graph_ (line 143) | def _init_graph_(self) -> None:
    method reset_own_vars (line 206) | def reset_own_vars(self) -> None:
    method reset_vars (line 210) | def reset_vars(self) -> None:
    method reset_trainables (line 214) | def reset_trainables(self) -> None:
    method get_output_for (line 218) | def get_output_for(self, *in_expr: TfExpression, return_as_list: bool ...
    method get_var_local_name (line 253) | def get_var_local_name(self, var_or_global_name: Union[TfExpression, s...
    method find_var (line 259) | def find_var(self, var_or_local_name: Union[TfExpression, str]) -> TfE...
    method get_var (line 264) | def get_var(self, var_or_local_name: Union[TfExpression, str]) -> np.n...
    method set_var (line 269) | def set_var(self, var_or_local_name: Union[TfExpression, str], new_val...
    method __getstate__ (line 274) | def __getstate__(self) -> dict:
    method __setstate__ (line 286) | def __setstate__(self, state: dict) -> None:
    method clone (line 320) | def clone(self, name: str = None, **new_static_kwargs) -> "Network":
    method clone2 (line 326) | def clone2(self, name: str = None, **new_static_kwargs) -> ("Network",...
    method copy_own_vars_from (line 345) | def copy_own_vars_from(self, src_net: "Network") -> None:
    method copy_vars_from (line 350) | def copy_vars_from(self, src_net: "Network") -> None:
    method copy_trainables_from (line 355) | def copy_trainables_from(self, src_net: "Network") -> None:
    method convert (line 360) | def convert(self, new_func_name: str, new_name: str = None, **new_stat...
    method setup_as_moving_average_of (line 370) | def setup_as_moving_average_of(self, src_net: "Network", beta: TfExpre...
    method run (line 382) | def run(self,
    method list_ops (line 484) | def list_ops(self) -> List[TfExpression]:
    method list_layers (line 492) | def list_layers(self) -> List[Tuple[str, TfExpression, List[TfExpressi...
    method print_layers (line 535) | def print_layers(self, title: str = None, hide_layers_with_no_params: ...
    method setup_weight_histograms (line 564) | def setup_weight_histograms(self, title: str = None) -> None:
  function _handle_legacy_output_transforms (line 584) | def _handle_legacy_output_transforms(output_transform, dynamic_kwargs):
  function _legacy_output_transform_func (line 604) | def _legacy_output_transform_func(*expr, out_mul=1.0, out_add=0.0, out_s...

FILE: stylegan2-tpu/dnnlib/tflib/ops/fused_bias_act.py
  function _get_plugin (line 15) | def _get_plugin():
  function fused_bias_act (line 34) | def fused_bias_act(x, b=None, axis=1, act='linear', alpha=None, gain=Non...
  function _fused_bias_act_ref (line 72) | def _fused_bias_act_ref(x, b, axis, act, alpha, gain):
  function _fused_bias_act_cuda (line 100) | def _fused_bias_act_cuda(x, b, axis, act, alpha, gain):

FILE: stylegan2-tpu/dnnlib/tflib/ops/upfirdn_2d.py
  function _get_plugin (line 14) | def _get_plugin():
  function upfirdn_2d (line 19) | def upfirdn_2d(x, k, upx=1, upy=1, downx=1, downy=1, padx0=0, padx1=0, p...
  function _upfirdn_2d_ref (line 66) | def _upfirdn_2d_ref(x, k, upx, upy, downx, downy, padx0, padx1, pady0, p...
  function _upfirdn_2d_cuda (line 105) | def _upfirdn_2d_cuda(x, k, upx, upy, downx, downy, padx0, padx1, pady0, ...
  function filter_2d (line 144) | def filter_2d(x, k, gain=1, data_format='NCHW', impl='cuda'):
  function upsample_2d (line 169) | def upsample_2d(x, k=None, factor=2, gain=1, data_format='NCHW', impl='c...
  function downsample_2d (line 202) | def downsample_2d(x, k=None, factor=2, gain=1, data_format='NCHW', impl=...
  function upsample_conv_2d (line 234) | def upsample_conv_2d(x, w, k=None, factor=2, gain=1, data_format='NCHW',...
  function conv_downsample_2d (line 296) | def conv_downsample_2d(x, w, k=None, factor=2, gain=1, data_format='NCHW...
  function _shape (line 337) | def _shape(tf_expr, dim_idx):
  function _setup_kernel (line 344) | def _setup_kernel(k):
  function _simple_upfirdn_2d (line 353) | def _simple_upfirdn_2d(x, k, up=1, down=1, pad0=0, pad1=0, data_format='...

FILE: stylegan2-tpu/dnnlib/tflib/optimizer.py
  function all_sum_plain (line 31) | def all_sum_plain(g, colocate=False, *args, **kws):
  function all_sum_gpu (line 48) | def all_sum_gpu(g, *args, **kws):
  function all_sum_tpu (line 57) | def all_sum_tpu(g, colocate=True, *args, **kws):
  function all_sum (line 66) | def all_sum(cores, g, colocate=True, *args, **kws):
  class Optimizer (line 75) | class Optimizer:
    method __init__ (line 87) | def __init__(self,
    method _get_device (line 133) | def _get_device(self, device_name: str):
    method register_gradients (line 166) | def register_gradients(self, loss: TfExpression, trainable_vars: Union...
    method apply_updates (line 208) | def apply_updates(self, allow_no_op: bool = False) -> tf.Operation:
    method reset_optimizer_state (line 319) | def reset_optimizer_state(self) -> None:
    method get_loss_scaling_var (line 324) | def get_loss_scaling_var(self, device: str) -> Union[tf.Variable, None]:
    method apply_loss_scaling (line 328) | def apply_loss_scaling(self, value: TfExpression) -> TfExpression:
    method undo_loss_scaling (line 335) | def undo_loss_scaling(self, value: TfExpression) -> TfExpression:
  class SimpleAdam (line 343) | class SimpleAdam:
    method __init__ (line 346) | def __init__(self, name="Adam", learning_rate=0.001, beta1=0.9, beta2=...
    method variables (line 354) | def variables(self):
    method compute_gradients (line 357) | def compute_gradients(self, loss, var_list, gate_gradients=tf.train.Op...
    method apply_gradients (line 361) | def apply_gradients(self, grads_and_vars):

FILE: stylegan2-tpu/dnnlib/tflib/tfutil.py
  function run (line 29) | def run(*args, **kwargs) -> Any:
  function is_tf_expression (line 35) | def is_tf_expression(x: Any) -> bool:
  function shape_to_list (line 40) | def shape_to_list(shape: Iterable[tf.Dimension]) -> List[Union[int, None]]:
  function flatten (line 45) | def flatten(x: TfExpressionEx) -> TfExpression:
  function log2 (line 51) | def log2(x: TfExpressionEx) -> TfExpression:
  function exp2 (line 57) | def exp2(x: TfExpressionEx) -> TfExpression:
  function lerp (line 63) | def lerp(a: TfExpressionEx, b: TfExpressionEx, t: TfExpressionEx) -> TfE...
  function lerp_clip (line 69) | def lerp_clip(a: TfExpressionEx, b: TfExpressionEx, t: TfExpressionEx) -...
  function absolute_name_scope (line 75) | def absolute_name_scope(scope: str) -> tf.name_scope:
  function absolute_variable_scope (line 80) | def absolute_variable_scope(scope: str, **kwargs) -> tf.variable_scope:
  function _sanitize_tf_config (line 85) | def _sanitize_tf_config(config_dict: dict = None) -> dict:
  function init_tf (line 108) | def init_tf(config_dict: dict = None) -> None:
  function assert_tf_initialized (line 136) | def assert_tf_initialized():
  function create_session (line 142) | def create_session(config_dict: dict = None, force_as_default: bool = Fa...
  function init_uninitialized_vars (line 166) | def init_uninitialized_vars(target_vars: List[tf.Variable] = None) -> None:
  function set_vars (line 197) | def set_vars(var_to_value_dict: dict) -> None:
  function create_var_with_large_initial_value (line 235) | def create_var_with_large_initial_value(initial_value: np.ndarray, *args...
  function create_var_with_large_initial_value2 (line 244) | def create_var_with_large_initial_value2(initial_value: np.ndarray, *arg...
  function convert_images_from_uint8 (line 254) | def convert_images_from_uint8(images, drange=[-1,1], nhwc_to_nchw=False):
  function convert_images_to_uint8 (line 264) | def convert_images_to_uint8(images, drange=[-1,1], nchw_to_nhwc=False, s...

FILE: stylegan2-tpu/dnnlib/tflib/tpu_summaries.py
  class TpuSummaries (line 57) | class TpuSummaries(object):
    method __init__ (line 66) | def __init__(self, log_dir, save_summary_steps=32):
    method image (line 74) | def image(self, name, tensor, reduce_fn):
    method scalar (line 81) | def scalar(self, name, tensor, reduce_fn=tf.math.reduce_mean):
    method get_host_call (line 91) | def get_host_call(self):
    method _host_call_fn (line 101) | def _host_call_fn(self, step, *args):

FILE: stylegan2-tpu/dnnlib/util.py
  class EasyDict (line 36) | class EasyDict(dict):
    method __getattr__ (line 39) | def __getattr__(self, name: str) -> Any:
    method __setattr__ (line 45) | def __setattr__(self, name: str, value: Any) -> None:
    method __delattr__ (line 48) | def __delattr__(self, name: str) -> None:
  class Logger (line 52) | class Logger(object):
    method __init__ (line 55) | def __init__(self, file_name: str = None, file_mode: str = "w", should...
    method __enter__ (line 68) | def __enter__(self) -> "Logger":
    method __exit__ (line 71) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
    method write (line 74) | def write(self, text: str) -> None:
    method flush (line 93) | def flush(self) -> None:
    method close (line 106) | def close(self) -> None:
  function format_time (line 130) | def format_time(seconds: Union[int, float]) -> str:
  function ask_yes_no (line 144) | def ask_yes_no(question: str) -> bool:
  function tuple_product (line 154) | def tuple_product(t: Tuple) -> Any:
  function get_dtype_and_ctype (line 178) | def get_dtype_and_ctype(type_obj: Any) -> Tuple[np.dtype, Any]:
  function is_pickleable (line 201) | def is_pickleable(obj: Any) -> bool:
  function get_module_from_obj_name (line 213) | def get_module_from_obj_name(obj_name: str) -> Tuple[types.ModuleType, s...
  function get_obj_from_module (line 254) | def get_obj_from_module(module: types.ModuleType, obj_name: str) -> Any:
  function get_obj_by_name (line 264) | def get_obj_by_name(name: str) -> Any:
  function call_func_by_name (line 270) | def call_func_by_name(*args, func_name: str = None, **kwargs) -> Any:
  function get_module_dir_by_obj_name (line 278) | def get_module_dir_by_obj_name(obj_name: str) -> str:
  function is_top_level_function (line 284) | def is_top_level_function(obj: Any) -> bool:
  function get_top_level_function_name (line 289) | def get_top_level_function_name(obj: Any) -> str:
  function list_dir_recursively_with_ignore (line 298) | def list_dir_recursively_with_ignore(dir_path: str, ignores: List[str] =...
  function copy_files_and_create_dirs (line 331) | def copy_files_and_create_dirs(files: List[Tuple[str, str]]) -> None:
  function is_url (line 347) | def is_url(obj: Any, allow_file_urls: bool = False) -> bool:
  function open_url (line 365) | def open_url(url: str, cache_dir: str = None, num_attempts: int = 10, ve...

FILE: stylegan2-tpu/encoder/generator_model.py
  function create_stub (line 8) | def create_stub(name, batch_size):
  function create_variable_for_generator (line 12) | def create_variable_for_generator(name, batch_size, tiled_dlatent, model...
  class Generator (line 26) | class Generator:
    method __init__ (line 27) | def __init__(self, model, batch_size, clipping_threshold=2, tiled_dlat...
    method reset_dlatents (line 87) | def reset_dlatents(self):
    method set_dlatents (line 90) | def set_dlatents(self, dlatents):
    method stochastic_clip_dlatents (line 105) | def stochastic_clip_dlatents(self):
    method get_dlatents (line 108) | def get_dlatents(self):
    method get_dlatent_avg (line 111) | def get_dlatent_avg(self):
    method set_dlatent_avg (line 114) | def set_dlatent_avg(self, dlatent_avg):
    method reset_dlatent_avg (line 117) | def reset_dlatent_avg(self):
    method generate_images (line 120) | def generate_images(self, dlatents=None):

FILE: stylegan2-tpu/encoder/perceptual_model.py
  function load_images (line 12) | def load_images(images_list, image_size=256):
  function tf_custom_l1_loss (line 22) | def tf_custom_l1_loss(img1,img2):
  function tf_custom_logcosh_loss (line 25) | def tf_custom_logcosh_loss(img1,img2):
  function unpack_bz2 (line 28) | def unpack_bz2(src_path):
  class PerceptualModel (line 35) | class PerceptualModel:
    method __init__ (line 36) | def __init__(self, args, batch_size=1, perc_model=None, sess=None, opt...
    method compare_images (line 85) | def compare_images(self,img1,img2):
    method add_placeholder (line 90) | def add_placeholder(self, var_name):
    method assign_placeholder (line 95) | def assign_placeholder(self, var_name, var_val):
    method build_perceptual_model (line 98) | def build_perceptual_model(self, generator):
    method generate_face_mask (line 158) | def generate_face_mask(self, im):
    method load_images (line 187) | def load_images(self, images_list):
    method set_reference_images (line 192) | def set_reference_images(self, images_list):
    method set_reference_image_data (line 195) | def set_reference_image_data(self, loaded_image, images_list=None):
    method optimize (line 258) | def optimize(self, iterations=200):

FILE: stylegan2-tpu/generate_images_tpu.py
  function rand_latent (line 24) | def rand_latent(n, seed=None):
  function tfinit (line 35) | def tfinit():
  function load_checkpoint (line 39) | def load_checkpoint(path, checkpoint_num=None):
  function get_checkpoint (line 50) | def get_checkpoint(path):
  function get_grid_size (line 55) | def get_grid_size(n):
  function gen_images (line 68) | def gen_images(latents, truncation_psi_val, outfile=None, display=False,...
  function grab (line 92) | def grab(save_dir, i, n=1, latents=None, **kwargs):

FILE: stylegan2-tpu/mammos.py
  function with_session (line 52) | def with_session(sess, f, *args, **kws):
  function with_session_async (line 56) | async def with_session_async(sess, f, *args, **kws):
  function init (line 60) | def init(session=None, num_channels=None, resolution=None, label_size=No...
  function load_checkpoint (line 80) | def load_checkpoint(path, session=None, var_list=None):
  function get_images (line 98) | def get_images(tags, seed = 0, mu = 0, sigma = 0, truncation=None):

FILE: stylegan2-tpu/metrics/frechet_inception_distance.py
  class FID (line 21) | class FID(metric_base.MetricBase):
    method __init__ (line 22) | def __init__(self, num_images, minibatch_per_gpu, **kwargs):
    method _evaluate (line 27) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/metrics/inception_score.py
  class IS (line 19) | class IS(metric_base.MetricBase):
    method __init__ (line 20) | def __init__(self, num_images, num_splits, minibatch_per_gpu, **kwargs):
    method _evaluate (line 26) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/metrics/linear_separability.py
  function prob_normalize (line 66) | def prob_normalize(p):
  function mutual_information (line 71) | def mutual_information(p):
  function entropy (line 85) | def entropy(p):
  function conditional_entropy (line 95) | def conditional_entropy(p):
  class LS (line 104) | class LS(metric_base.MetricBase):
    method __init__ (line 105) | def __init__(self, num_samples, num_keep, attrib_indices, minibatch_pe...
    method _evaluate (line 113) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/metrics/metric_base.py
  class MetricBase (line 23) | class MetricBase:
    method __init__ (line 24) | def __init__(self, name):
    method close (line 34) | def close(self):
    method _reset (line 37) | def _reset(self, network_pkl=None, run_dir=None, data_dir=None, datase...
    method configure_progress_reports (line 55) | def configure_progress_reports(self, plo, phi, pmax, psec=15):
    method run (line 61) | def run(self, network_pkl, run_dir=None, data_dir=None, dataset_args=N...
    method get_result_str (line 79) | def get_result_str(self):
    method update_autosummaries (line 90) | def update_autosummaries(self):
    method _evaluate (line 94) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):
    method _report_result (line 97) | def _report_result(self, value, suffix='', fmt='%-10.4f'):
    method _report_progress (line 100) | def _report_progress(self, pcur, pmax, status_str=''):
    method _get_cache_file_for_reals (line 110) | def _get_cache_file_for_reals(self, extension='pkl', **kwargs):
    method _get_dataset_obj (line 119) | def _get_dataset_obj(self):
    method _iterate_reals (line 124) | def _iterate_reals(self, minibatch_size):
    method _iterate_fakes (line 132) | def _iterate_fakes(self, Gs, minibatch_size, num_gpus):
    method _get_random_labels_tf (line 139) | def _get_random_labels_tf(self, minibatch_size):
  class MetricGroup (line 145) | class MetricGroup:
    method __init__ (line 146) | def __init__(self, metric_kwarg_list):
    method run (line 149) | def run(self, *args, **kwargs):
    method get_result_str (line 153) | def get_result_str(self):
    method update_autosummaries (line 156) | def update_autosummaries(self):
  class DummyMetric (line 163) | class DummyMetric(MetricBase):
    method _evaluate (line 164) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/metrics/perceptual_path_length.py
  function normalize (line 20) | def normalize(v):
  function slerp (line 24) | def slerp(a, b, t):
  class PPL (line 35) | class PPL(metric_base.MetricBase):
    method __init__ (line 36) | def __init__(self, num_samples, epsilon, space, sampling, crop, miniba...
    method _evaluate (line 48) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/metrics/precision_recall.py
  function batch_pairwise_distances (line 21) | def batch_pairwise_distances(U, V):
  class DistanceBlock (line 39) | class DistanceBlock():
    method __init__ (line 41) | def __init__(self, num_features, num_gpus):
    method pairwise_distances (line 56) | def pairwise_distances(self, U, V):
  class ManifoldEstimator (line 62) | class ManifoldEstimator():
    method __init__ (line 64) | def __init__(self, distance_block, features, row_batch_size, col_batch...
    method evaluate (line 97) | def evaluate(self, eval_features, return_realism=False, return_neighbo...
  function knn_precision_recall_features (line 139) | def knn_precision_recall_features(ref_features, eval_features, feature_n...
  class PR (line 172) | class PR(metric_base.MetricBase):
    method __init__ (line 173) | def __init__(self, num_images, nhood_size, minibatch_per_gpu, row_batc...
    method _evaluate (line 181) | def _evaluate(self, Gs, Gs_kwargs, num_gpus):

FILE: stylegan2-tpu/prepare_image.py
  class Namespace (line 23) | class Namespace():
  function _int64_feature (line 28) | def _int64_feature(value):
  function _bytes_feature (line 35) | def _bytes_feature(value):
  function _convert_to_example (line 40) | def _convert_to_example(filename, image_buffer, label_int, label_str, he...
  class ImageCoder (line 75) | class ImageCoder(object):
    method __init__ (line 78) | def __init__(self, session=None):
    method __del__ (line 97) | def __del__(self):
    method png_to_jpeg (line 100) | def png_to_jpeg(self, image_data):
    method cmyk_to_rgb (line 104) | def cmyk_to_rgb(self, image_data):
    method decode_jpeg (line 108) | def decode_jpeg(self, image_data):
  function parse_tfrecord_tf (line 117) | def parse_tfrecord_tf(record):
  function parse_tfrecord_file (line 122) | def parse_tfrecord_file(tfr_file, num_threads=8):
  function init_dataset (line 127) | def init_dataset(dset):
  function iterate_stylegan_records (line 134) | def iterate_stylegan_records(tfr_file, session=None):
  function _is_png (line 148) | def _is_png(filename):
  function _is_png_data (line 151) | def _is_png_data(image_data):
  function _is_cmyk (line 154) | def _is_cmyk(filename):
  function get_coder (line 157) | def get_coder(coder=None):
  function getfile (line 163) | def getfile(path):
  function _process_image (line 173) | def _process_image(filename, coder=None):
  function tf_randi (line 205) | def tf_randi(*args, **kws):
  function tf_rand (line 213) | def tf_rand(*args, **kws):
  function tf_biased_rand (line 222) | def tf_biased_rand(*args, bias=1, **kws):
  function tf_between (line 232) | def tf_between(*args, bias=1, **kws):
  function random_crop (line 238) | def random_crop(image_bytes, scope=None, resize=None, method=tf.image.Re...
  function distorted_bounding_box_crop (line 264) | def distorted_bounding_box_crop(image_bytes,
  function _at_least_x_are_equal (line 314) | def _at_least_x_are_equal(a, b, x):
  function _decode_and_random_crop (line 320) | def _decode_and_random_crop(image_bytes, image_size, resize=True, method...
  function _decode_and_center_crop (line 345) | def _decode_and_center_crop(image_bytes, image_size, resize=True, method...
  function get_target (line 366) | def get_target(target=None):
  function main (line 377) | def main():
  function convert_to_example (line 400) | def convert_to_example(csvline, categories):
  function main2 (line 419) | def main2():

FILE: stylegan2-tpu/pretrained_networks.py
  function get_path_or_url (line 57) | def get_path_or_url(path_or_gdrive_path):
  function load_networks (line 64) | def load_networks(path_or_gdrive_path):

FILE: stylegan2-tpu/projector.py
  class Projector (line 16) | class Projector:
    method __init__ (line 17) | def __init__(self):
    method _info (line 50) | def _info(self, *args):
    method set_network (line 54) | def set_network(self, Gs, minibatch_size=1):
    method run (line 134) | def run(self, target_images):
    method start (line 147) | def start(self, target_images):
    method step (line 167) | def step(self):
    method get_cur_step (line 194) | def get_cur_step(self):
    method get_dlatents (line 197) | def get_dlatents(self):
    method get_noises (line 200) | def get_noises(self):
    method get_images (line 203) | def get_images(self):

FILE: stylegan2-tpu/random_crops.py
  function random_crop (line 13) | def random_crop(image, target, samples, file):

FILE: stylegan2-tpu/run_generator.py
  function generate_images (line 19) | def generate_images(network_pkl, seeds, truncation_psi):
  function style_mixing_example (line 40) | def style_mixing_example(network_pkl, row_seeds, col_seeds, truncation_p...
  function _parse_num_range (line 90) | def _parse_num_range(s):
  function main (line 119) | def main():

FILE: stylegan2-tpu/run_metrics.py
  function run (line 20) | def run(network_pkl, metrics, dataset, data_dir, mirror_augment):
  function _str_to_bool (line 31) | def _str_to_bool(v):
  function main (line 52) | def main():

FILE: stylegan2-tpu/run_projector.py
  function project_image (line 21) | def project_image(proj, targets, png_prefix, num_snapshots):
  function project_generated_images (line 34) | def project_generated_images(network_pkl, seeds, num_snapshots, truncati...
  function project_real_images (line 55) | def project_real_images(network_pkl, dataset_name, data_dir, num_images,...
  function _parse_num_range (line 73) | def _parse_num_range(s):
  function main (line 97) | def main():

FILE: stylegan2-tpu/run_training.py
  function run (line 38) | def run(dataset, data_dir, result_dir, config_id, num_gpus, total_kimg, ...
  function _str_to_bool (line 144) | def _str_to_bool(v):
  function _parse_comma_sep (line 154) | def _parse_comma_sep(s):
  function main (line 176) | def main():

FILE: stylegan2-tpu/tflex.py
  class _DefaultState (line 21) | class _DefaultState(threading.local):
    method __init__ (line 22) | def __init__(self, **kws):
    method save (line 27) | def save(self):
    method restore (line 30) | def restore(self, state):
  function with_defaults (line 37) | def with_defaults(thunk):
  function get_default (line 55) | def get_default(name, required=True):
  function set_default (line 62) | def set_default(name, value):
  function ensure_default (line 66) | def ensure_default(name, value):
  function get_default_session (line 73) | def get_default_session(required=False):
  function get_default_graph (line 76) | def get_default_graph(required=False):
  class Future (line 79) | class Future(object):
    method __init__ (line 80) | def __init__(self, dependencies, thunk, *args, **kws):
    method run (line 94) | def run(self):
    method run_async (line 101) | def run_async(self):
    method join (line 108) | def join(self):
  function defer (line 115) | def defer(thunk, *args, **kws):
  function parallelize (line 123) | def parallelize(xs, thunk, *args, daemon=True):
  function parallelize_verbose (line 131) | def parallelize_verbose(label, xs, thunk, *args, daemon=True):
  function parallelize_verbose (line 142) | def parallelize_verbose(label, xs, thunk, *args, daemon=True, synchronou...
  function group (line 162) | def group(n, iterable, fillvalue=None):
  function tuples (line 167) | def tuples(*args, **kws):
  class Namespace (line 170) | class Namespace(object):
  function reroute (line 188) | def reroute(addr, host=None):
  class TPUClusterResolver (line 208) | class TPUClusterResolver(BaseTPUClusterResolver):
    method __init__ (line 209) | def __init__(self, *args, host=None, **kws):
    method master (line 216) | def master(self, *args, **kws):
    method cluster_spec (line 220) | def cluster_spec(self):
  function init_tpu (line 227) | def init_tpu(name, host=None, timeout_in_ms=600 * 60 * 1000):
  function get_session (line 242) | def get_session(session=None):
  function get_devices (line 247) | def get_devices(session=None):
  function has_gpu (line 255) | def has_gpu(session=None):
  function has_tpu (line 264) | def has_tpu(session=None):
  function get_cores_from_devices (line 273) | def get_cores_from_devices(devices):
  function get_cores (line 281) | def get_cores(session=None, devices=None):
  function get_cpus (line 286) | def get_cpus(session=None, devices=None):
  function get_tpu_resolver (line 292) | def get_tpu_resolver(tpu_name='auto'):
  function pretty (line 301) | def pretty(x, ellipsize=120):
  function print_backtrace (line 307) | def print_backtrace():
  class Session (line 314) | class Session(tf.Session):
    method __init__ (line 315) | def __init__(self, target='auto', graph=None, config=None, init_tpu=Fa...
    method _spec (line 342) | def _spec(self):
    method ensure (line 345) | def ensure(self):
    method run (line 352) | def run(self, *args, **kws):
  function split_by_params (line 371) | def split_by_params(vs, n=20e6, f=None):
  function latest_checkpoint (line 386) | def latest_checkpoint(checkpoint_dir, latest_filename=None):
  function truncate_value (line 395) | def truncate_value(variable, value, reshape=True):
  function initialize_tpu (line 412) | def initialize_tpu(session=None, timeout_in_ms=None):
  function load (line 421) | def load(variable, value, session=None, timeout_in_ms=None):
  function eval (line 432) | def eval(variable, session=None, timeout_in_ms=None):
  function grab_values (line 439) | def grab_values(variables, reader, reshape=False):
  function assign_values (line 446) | def assign_values(variables, values, session=None, timeout_in_ms=60000):
  function load_snapshot (line 459) | def load_snapshot(ckpt, session=None, var_list=None, reshape=False):
  function get_variable (line 467) | def get_variable(name, var_list=None):
  function load_weights (line 476) | def load_weights(ckpt, session=None, var_list=None, reshape=False):
  function load_variables (line 489) | def load_variables(ckpt, session=None, var_list=None, reshape=False):
  function maketree (line 497) | def maketree(path):
  function cast_variables (line 505) | def cast_variables(variables, graph=None, cache_ops=None):
  function variable_name (line 527) | def variable_name(variable):
  function save_variables (line 532) | def save_variables(ckpt, session=None, var_list=None):
  function fetch_variables (line 550) | def fetch_variables(session=None, var_list=None):
  function partition_variables (line 557) | def partition_variables(session=None, var_list=None):
  class Saver (line 563) | class Saver(object):
    method __init__ (line 564) | def __init__(
    method restore (line 598) | def restore(self, sess, save_path):
    method save (line 610) | def save(self,
    method fetch (line 638) | def fetch(self, sess, var_list=None):
    method variables (line 644) | def variables(self, sess, var_list=None):
    method assign (line 650) | def assign(self, sess, variables, values):
  class Commands (line 653) | class Commands(object):
    method __init__ (line 654) | def __init__(self, path='commands'):
    method has (line 661) | def has(self, name, **keys):
    method add (line 673) | def add(self, name, action=None):
    method full_path (line 679) | def full_path(self, name):
    method check (line 682) | def check(self, *args, **keys):
    method run (line 697) | def run(self, op):
    method run_with_args (line 711) | def run_with_args(self, op, *args, **keys):
  function commands (line 717) | def commands(**keys):
  class CommandArgs (line 736) | class CommandArgs(object):
    method __init__ (line 737) | def __init__(self, *args, **keys):
    method __enter__ (line 742) | def __enter__(self):
    method __exit__ (line 748) | def __exit__(self, *excinfo):
  function check_commands (line 752) | def check_commands():
  function check_commands_with_args (line 759) | def check_commands_with_args(*args, **keys):
  function add_command (line 767) | def add_command(name, action=None, **keys):
  function register_command (line 771) | def register_command(*args, **keys):
  function has_command (line 786) | def has_command(name):
  function run_command (line 790) | def run_command(command_name):
  function run_command_with_args (line 794) | def run_command_with_args(command_name, *args, **keys):
  function command_arg (line 798) | def command_arg(x, unset=None):
  function command_args (line 810) | def command_args():
  function attach_debugger (line 815) | def attach_debugger():
  function print_status (line 822) | def print_status():
  function utc (line 833) | def utc():
  function heartbeat (line 839) | def heartbeat():
  function freeze_forever (line 852) | def freeze_forever():
  function quit (line 875) | def quit():
  function should_quit (line 884) | def should_quit():
  function save_and_quit (line 888) | def save_and_quit():
  function throw_exception (line 896) | def throw_exception():
  function nullcontext (line 904) | def nullcontext(enter_result=None):
  function set_override_device (line 907) | def set_override_device(value, session=None):
  function has_override_device (line 912) | def has_override_device(session=None):
  function get_override_device (line 916) | def get_override_device(session=None):
  function set_override_cores (line 921) | def set_override_cores(value, session=None):
  function has_override_cores (line 926) | def has_override_cores(session=None):
  function get_override_cores (line 930) | def get_override_cores(session=None):
  function device_for_tpu_core (line 935) | def device_for_tpu_core(task=0, core=0, job_name="tpu_worker"):
  function device (line 938) | def device(name=''):
  function tuples (line 963) | def tuples(l, n=2):
  function sha256hex (line 971) | def sha256hex(x):
  function sha256label (line 976) | def sha256label(x):

FILE: stylegan2-tpu/tflex_test.py
  function make_future (line 5) | def make_future(label, delay=0.0, deps=[], thunk=None, args=[]):
  function warmup (line 18) | def warmup():
  function test1 (line 21) | def test1():
  function test2 (line 27) | def test2():
  function test3 (line 33) | def test3():
  function test4 (line 37) | def test4():
  function test5 (line 44) | def test5():
  function run_test (line 54) | def run_test(name, thunk, *args, **kws):
  function run_tests (line 63) | def run_tests():

FILE: stylegan2-tpu/training/dataset.py
  class TFRecordDataset (line 23) | class TFRecordDataset:
    method __init__ (line 24) | def __init__(self,
    method close (line 149) | def close(self):
    method configure (line 153) | def configure(self, minibatch_size, lod=0):
    method get_minibatch_tf (line 163) | def get_minibatch_tf(self): # => images, labels
    method get_minibatch_np (line 167) | def get_minibatch_np(self, minibatch_size, lod=0): # => images, labels
    method get_random_labels_tf (line 180) | def get_random_labels_tf(self, minibatch_size): # => labels
    method get_random_labels_np (line 188) | def get_random_labels_np(self, minibatch_size): # => labels
    method parse_tfrecord_tf (line 195) | def parse_tfrecord_tf(record):
    method parse_tfrecord_tf_float (line 204) | def parse_tfrecord_tf_float(record):
    method parse_tfrecord_np (line 210) | def parse_tfrecord_np(record):
  function load_dataset (line 220) | def load_dataset(class_name=None, data_dir=None, verbose=False, **kwargs):

FILE: stylegan2-tpu/training/imagenet_input.py
  class Namespace (line 21) | class Namespace:
  function distorted_bounding_box_crop (line 28) | def distorted_bounding_box_crop(image_bytes,
  function _at_least_x_are_equal (line 88) | def _at_least_x_are_equal(a, b, x):
  function _decode_and_random_crop (line 95) | def _decode_and_random_crop(image_bytes, image_size):
  function _decode_and_center_crop_image (line 109) | def _decode_and_center_crop_image(image_bytes, image_size, crop_padding=...
  function _decode_and_center_crop (line 133) | def _decode_and_center_crop(image_bytes, image_size, crop_padding=None):
  function _flip (line 145) | def _flip(image):
  function preprocess_for_train (line 151) | def preprocess_for_train(image_bytes, use_bfloat16, image_size):
  function preprocess_for_eval (line 170) | def preprocess_for_eval(image_bytes, use_bfloat16, image_size):
  function preprocess_image (line 188) | def preprocess_image(image_bytes,
  function image_serving_input_fn (line 238) | def image_serving_input_fn():
  function _int64_feature (line 257) | def _int64_feature(value):
  function _bytes_feature (line 264) | def _bytes_feature(value):
  function _convert_to_example (line 269) | def _convert_to_example(image_buffer, label):
  class ImageNetTFExampleInput (line 289) | class ImageNetTFExampleInput(object):
    method __init__ (line 300) | def __init__(self,
    method set_shapes (line 315) | def set_shapes(self, batch_size, images, labels):
    method dataset_parser (line 334) | def dataset_parser(self, value):
    method dataset_parser_static (line 374) | def dataset_parser_static(self, value):
    method dataset_parser_dynamic (line 407) | def dataset_parser_dynamic(self, image_bytes, label):
    method pad_dataset (line 414) | def pad_dataset(self, dataset, num_hosts):
    method make_source_dataset (line 430) | def make_source_dataset(self, index, num_hosts):
    method input_fn (line 447) | def input_fn(self, params):
  class ImageNetInput (line 533) | class ImageNetInput(ImageNetTFExampleInput):
    method __init__ (line 550) | def __init__(self,
    method _get_null_input (line 589) | def _get_null_input(self, data):
    method dataset_parser (line 603) | def dataset_parser(self, value):
    method make_source_dataset (line 609) | def make_source_dataset(self, index, num_hosts):
  class ImageNetBigtableInput (line 674) | class ImageNetBigtableInput(ImageNetTFExampleInput):
    method __init__ (line 678) | def __init__(self, is_training, use_bfloat16, transpose_input, selecti...
    method make_source_dataset (line 693) | def make_source_dataset(self, index, num_hosts):

FILE: stylegan2-tpu/training/loss.py
  function G_logistic (line 18) | def G_logistic(G, D, opt, training_set, minibatch_size):
  function G_logistic_ns (line 28) | def G_logistic_ns(G, D, opt, training_set, minibatch_size):
  function D_logistic (line 38) | def D_logistic(G, D, opt, training_set, minibatch_size, reals, labels):
  function D_logistic_r1 (line 57) | def D_logistic_r1(G, D, opt, training_set, minibatch_size, reals, labels...
  function D_logistic_r2 (line 78) | def D_logistic_r2(G, D, opt, training_set, minibatch_size, reals, labels...
  function G_wgan (line 103) | def G_wgan(G, D, opt, training_set, minibatch_size):
  function D_wgan (line 113) | def D_wgan(G, D, opt, training_set, minibatch_size, reals, labels, wgan_...
  function D_wgan_gp (line 135) | def D_wgan_gp(G, D, opt, training_set, minibatch_size, reals, labels, wg...
  function G_logistic_ns_pathreg (line 170) | def G_logistic_ns_pathreg(G, D, opt, training_set, minibatch_size, pl_mi...

FILE: stylegan2-tpu/training/misc.py
  function open_file_or_url (line 20) | def open_file_or_url(file_or_url):
  function load_pkl (line 25) | def load_pkl(file_or_url, filename=None):
  function save_pkl (line 30) | def save_pkl(obj, filename):
  function adjust_dynamic_range (line 37) | def adjust_dynamic_range(data, drange_in, drange_out):
  function create_image_grid (line 44) | def create_image_grid(images, grid_size=None):
  function convert_to_pil_image (line 61) | def convert_to_pil_image(image, drange=[0,1]):
  function save_image_grid (line 74) | def save_image_grid(images, filename, drange=[0,1], grid_size=None):
  function apply_mirror_augment (line 77) | def apply_mirror_augment(minibatch):
  function parse_config_for_previous_run (line 86) | def parse_config_for_previous_run(run_dir):
  function setup_snapshot_image_grid (line 96) | def setup_snapshot_image_grid(training_set,

FILE: stylegan2-tpu/training/networks_stylegan.py
  function _i (line 17) | def _i(x): return tf.transpose(x, [0,2,3,1])
  function _o (line 18) | def _o(x): return tf.transpose(x, [0,3,1,2])
  function _blur2d (line 24) | def _blur2d(x, f=[1,2,1], normalize=True, flip=False, stride=1):
  function _upscale2d (line 53) | def _upscale2d(x, factor=2, gain=1):
  function _downscale2d (line 72) | def _downscale2d(x, factor=2, gain=1):
  function blur2d (line 98) | def blur2d(x, f=[1,2,1], normalize=True):
  function upscale2d (line 110) | def upscale2d(x, factor=2):
  function downscale2d (line 122) | def downscale2d(x, factor=2):
  function get_weight (line 137) | def get_weight(shape, gain=np.sqrt(2), use_wscale=False, lrmul=1):
  function dense (line 156) | def dense(x, fmaps, **kwargs):
  function conv2d (line 166) | def conv2d(x, fmaps, kernel, **kwargs):
  function upscale2d_conv2d (line 176) | def upscale2d_conv2d(x, fmaps, kernel, fused_scale='auto', **kwargs):
  function conv2d_downscale2d (line 195) | def conv2d_downscale2d(x, fmaps, kernel, fused_scale='auto', **kwargs):
  function apply_bias (line 215) | def apply_bias(x, lrmul=1):
  function leaky_relu (line 225) | def leaky_relu(x, alpha=0.2):
  function pixel_norm (line 241) | def pixel_norm(x, epsilon=1e-8):
  function instance_norm (line 249) | def instance_norm(x, epsilon=1e-8):
  function style_mod (line 263) | def style_mod(x, dlatent, **kwargs):
  function apply_noise (line 272) | def apply_noise(x, noise_var=None, randomize_noise=True):
  function minibatch_stddev_layer (line 285) | def minibatch_stddev_layer(x, group_size=4, num_new_features=1):
  function G_style (line 304) | def G_style(
  function G_mapping (line 386) | def G_mapping(
  function G_synthesis (line 442) | def G_synthesis(
  function D_basic (line 566) | def D_basic(

FILE: stylegan2-tpu/training/networks_stylegan2.py
  function _i (line 22) | def _i(x): return tf.transpose(x, [0,2,3,1])
  function _o (line 23) | def _o(x): return tf.transpose(x, [0,3,1,2])
  function get_weight (line 28) | def get_weight(shape, gain=1, use_wscale=True, lrmul=1, weight_var='weig...
  function dense_layer (line 47) | def dense_layer(x, fmaps, gain=1, use_wscale=True, lrmul=1, weight_var='...
  function conv2d_layer (line 57) | def conv2d_layer(x, fmaps, kernel, up=False, down=False, resample_kernel...
  function apply_bias_act (line 72) | def apply_bias_act(x, act='linear', alpha=None, gain=None, lrmul=1, bias...
  function naive_upsample_2d (line 79) | def naive_upsample_2d(x, factor=2):
  function naive_downsample_2d (line 86) | def naive_downsample_2d(x, factor=2):
  function modulated_conv2d_layer (line 95) | def modulated_conv2d_layer(x, y, fmaps, kernel, up=False, down=False, de...
  function minibatch_stddev_layer (line 138) | def minibatch_stddev_layer(x, group_size=4, num_new_features=1):
  function G_main (line 157) | def G_main(
  function G_mapping (line 257) | def G_mapping(
  function G_synthesis_stylegan_revised (line 313) | def G_synthesis_stylegan_revised(
  function G_synthesis_stylegan2 (line 425) | def G_synthesis_stylegan2(
  function D_stylegan (line 525) | def D_stylegan(
  function D_stylegan2 (line 625) | def D_stylegan2(
  function weight_initializer (line 720) | def weight_initializer(initializer=NORMAL_INIT, stddev=0.02):
  function spectral_norm (line 739) | def spectral_norm(inputs, epsilon=1e-12, singular_value="left", return_n...
  function graph_name (line 820) | def graph_name(name):
  function graph_spectral_norm (line 831) | def graph_spectral_norm(w):
  function graph_images (line 846) | def graph_images(images, res):
  function conv2d (line 855) | def conv2d(inputs, output_dim, k_h, k_w, d_h, d_w, stddev=0.02, name="co...
  function non_local_block (line 874) | def non_local_block(x, name, use_sn):

FILE: stylegan2-tpu/training/train_runner.py
  function device_for_tpu_core (line 41) | def device_for_tpu_core(task=0, core=0):
  function wrap_computation_in_while_loop (line 47) | def wrap_computation_in_while_loop(op_fn, n, parallel_iterations=1):
  function tpu_ordinal_fn (line 63) | def tpu_ordinal_fn(shard_index_in_host):
  class TrainRunner (line 77) | class TrainRunner(object):
    method __init__ (line 80) | def __init__(self, iterations, train_steps):
    method device_for_host (line 114) | def device_for_host(self, task=0, cpu=0):
    method build_enqueue_ops (line 118) | def build_enqueue_ops(self, input_fn, params, host_id):
    method initialize (line 170) | def initialize(self, input_fn, model_fn, params):
    method train (line 264) | def train(self, num_threads=2):
    method shutdown (line 313) | def shutdown(self):

FILE: stylegan2-tpu/training/training_loop.py
  function process_reals (line 27) | def process_reals(x, labels, lod, mirror_augment, drange_data, drange_net):
  function training_schedule (line 54) | def training_schedule(
  function get_input_fn (line 109) | def get_input_fn(training_set, batch_size):
  function get_input_fn (line 121) | def get_input_fn(training_set):
  function set_shapes (line 133) | def set_shapes(batch_size, num_channels, resolution, label_size, images,...
  function tf_randi (line 157) | def tf_randi(*args, **kws):
  function tf_rand (line 166) | def tf_rand(*args, **kws):
  function tf_biased_rand (line 176) | def tf_biased_rand(*args, bias=1, **kws):
  function tf_between (line 187) | def tf_between(*args, bias=1, **kws):
  function random_crop (line 194) | def random_crop(image_bytes, scope=None, resize=None, method=tf.image.Re...
  function _decode_and_center_crop (line 215) | def _decode_and_center_crop(image_bytes, image_size, crop_padding=0):
  function parse_header (line 262) | def parse_header(x):
  function csv_dataset (line 268) | def csv_dataset(path, spec=None, **kws):
  function imagenet_dataset (line 274) | def imagenet_dataset(path, resize=None, seed=None):
  function get_input_fn (line 293) | def get_input_fn(load_training_set, num_cores, mirror_augment, drange_net):
  function training_loop (line 489) | def training_loop(

FILE: stylegan2-tpu/view.py
  function rand_latent (line 72) | def rand_latent(n, seed=None):
  function tfinit (line 88) | def tfinit():
  function load_checkpoint (line 95) | def load_checkpoint(path):
  function get_grid_size (line 113) | def get_grid_size(n):
  function gen_images (line 125) | def gen_images(latents, outfile=None, display=False, labels=None, random...
  function grab (line 148) | def grab(name, postfix, i, n=1, latents=None, **kwargs):
  function grab_grid (line 157) | def grab_grid(i, n=1, latents=None, outfile=None, **kwargs):
  function post_picture (line 167) | def post_picture(channel_name, image, text=None, name='test', kind='png'):
Condensed preview — 87 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,016K chars).
[
  {
    "path": "Image Processor/.gitignore",
    "chars": 569,
    "preview": "# Data files and directories common in repo root\ndatasets/\nlogs/\n*.h5\nresults/\ntemp/\ntest/\n\n# Byte-compiled / optimized "
  },
  {
    "path": "Image Processor/Dick_Pic_Mask-RCNN_Trainer.ipynb",
    "chars": 1091217,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"outputs\": "
  },
  {
    "path": "Image Processor/LICENSE",
    "chars": 1095,
    "preview": "Mask R-CNN\n\nThe MIT License (MIT)\n\nCopyright (c) 2017 Matterport, Inc.\n\nPermission is hereby granted, free of charge, to"
  },
  {
    "path": "Image Processor/MANIFEST.in",
    "chars": 58,
    "preview": "include README.md\ninclude LICENSE\ninclude requirements.txt"
  },
  {
    "path": "Image Processor/README.md",
    "chars": 13769,
    "preview": "# Mask R-CNN for Object Detection and Segmentation\n\nThis is an implementation of [Mask R-CNN](https://arxiv.org/abs/1703"
  },
  {
    "path": "Image Processor/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "Image Processor/align_images.py",
    "chars": 7432,
    "preview": "import math\r\nimport pickle\r\nfrom pathlib import Path\r\nfrom random import randint\r\nimport json\r\nfrom multiprocessing impo"
  },
  {
    "path": "Image Processor/cv_tools.py",
    "chars": 14393,
    "preview": "import os\r\nimport random\r\n\r\nimport cv2\r\nimport numpy as np\r\n\r\nimport math\r\nimport sys\r\nfrom collections import defaultdi"
  },
  {
    "path": "Image Processor/download_utils.py",
    "chars": 956,
    "preview": "import requests\r\n\r\ndef download_file_from_google_drive(id, destination):\r\n    def get_confirm_token(response):\r\n        "
  },
  {
    "path": "Image Processor/mrcnn/__init__.py",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "Image Processor/mrcnn/config.py",
    "chars": 9396,
    "preview": "\"\"\"\nMask R-CNN\nBase Configurations class.\n\nCopyright (c) 2017 Matterport, Inc.\nLicensed under the MIT License (see LICEN"
  },
  {
    "path": "Image Processor/mrcnn/model.py",
    "chars": 126958,
    "preview": "\"\"\"\nMask R-CNN\nThe main Mask R-CNN model implementation.\n\nCopyright (c) 2017 Matterport, Inc.\nLicensed under the MIT Lic"
  },
  {
    "path": "Image Processor/mrcnn/parallel_model.py",
    "chars": 7022,
    "preview": "\"\"\"\nMask R-CNN\nMulti-GPU Support for Keras.\n\nCopyright (c) 2017 Matterport, Inc.\nLicensed under the MIT License (see LIC"
  },
  {
    "path": "Image Processor/mrcnn/utils.py",
    "chars": 34261,
    "preview": "\"\"\"\nMask R-CNN\nCommon utility functions and classes.\n\nCopyright (c) 2017 Matterport, Inc.\nLicensed under the MIT License"
  },
  {
    "path": "Image Processor/mrcnn/visualize.py",
    "chars": 18951,
    "preview": "\"\"\"\nMask R-CNN\nDisplay and Visualization Functions.\n\nCopyright (c) 2017 Matterport, Inc.\nLicensed under the MIT License "
  },
  {
    "path": "Image Processor/requirements.txt",
    "chars": 119,
    "preview": "numpy\nscipy\nPillow\ncython\nmatplotlib\nscikit-image\ntensorflow>=1.3.0\nkeras>=2.0.8\nopencv-python\nh5py\nimgaug\nIPython[all]"
  },
  {
    "path": "Image Processor/scratch.py",
    "chars": 1266,
    "preview": "import math\r\nimport pickle\r\nfrom pathlib import Path\r\nfrom random import randint\r\nimport json\r\nfrom multiprocessing impo"
  },
  {
    "path": "Image Processor/setup.cfg",
    "chars": 99,
    "preview": "[metadata]\ndescription-file = README.md\nlicense-file = LICENSE\nrequirements-file = requirements.txt"
  },
  {
    "path": "Image Processor/setup.py",
    "chars": 2518,
    "preview": "\"\"\"\nThe build/compilations setup\n\n>> pip install -r requirements.txt\n>> python setup.py install\n\"\"\"\nimport pip\nimport lo"
  },
  {
    "path": "README.md",
    "chars": 3785,
    "preview": "# TDPDNE\nA StyleGAN2 model to make AI generated dicks\n\n#### Website\n\n[https://thisdickpicdoesnotexist.com/](https://this"
  },
  {
    "path": "stylegan2-tpu/Dockerfile",
    "chars": 362,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/LICENSE.txt",
    "chars": 4767,
    "preview": "Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\r\n\r\n\r\nNvidia Source Code License-NC\r\n\r\n====================="
  },
  {
    "path": "stylegan2-tpu/README.md",
    "chars": 14871,
    "preview": "## StyleGAN2 &mdash; Official TensorFlow Implementation\n\n![Teaser image](./docs/stylegan2-teaser-1024x256.png)\n\n**Analyz"
  },
  {
    "path": "stylegan2-tpu/align_mammos.py",
    "chars": 1419,
    "preview": "import argparse, os\nimport numpy as np\nfrom PIL import Image\nfrom tqdm import tqdm\n\nparser = argparse.ArgumentParser()\np"
  },
  {
    "path": "stylegan2-tpu/convert_ckpt_to_pkl.py",
    "chars": 1673,
    "preview": "#   ~~~ aydao ~~~~ 2020 ~~~\n#\n#   Convert a StyleGAN2 network stored in ckpt files to a .pkl\n#\nimport argparse\nimport pi"
  },
  {
    "path": "stylegan2-tpu/convert_pkl_to_ckpt.py",
    "chars": 1468,
    "preview": "#   ~~~ aydao ~~~~ 2020 ~~~\n#\n#   Convert a StyleGAN2 network stored in a .pkl file to ckpt files\n#\n#       Warning: it "
  },
  {
    "path": "stylegan2-tpu/dataset_tool.py",
    "chars": 31189,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/__init__.py",
    "chars": 774,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/submission/__init__.py",
    "chars": 274,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/submission/internal/__init__.py",
    "chars": 247,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/submission/internal/local.py",
    "chars": 769,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/submission/run_context.py",
    "chars": 4245,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/submission/submit.py",
    "chars": 15276,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/__init__.py",
    "chars": 467,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/autosummary.py",
    "chars": 14223,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/custom_ops.py",
    "chars": 7223,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/network.py",
    "chars": 30906,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/ops/__init__.py",
    "chars": 235,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/ops/fused_bias_act.cu",
    "chars": 7792,
    "preview": "// Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n//\n// This work is made available under the Nvidia Sourc"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/ops/fused_bias_act.py",
    "chars": 8619,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/ops/upfirdn_2d.cu",
    "chars": 15142,
    "preview": "// Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n//\n// This work is made available under the Nvidia Sourc"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/ops/upfirdn_2d.py",
    "chars": 16664,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/optimizer.py",
    "chars": 19825,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/tfutil.py",
    "chars": 10933,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/dnnlib/tflib/tpu_summaries.py",
    "chars": 4284,
    "preview": "# coding=utf-8\n# Copyright 2018 Google LLC & Hwalsuk Lee.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Licen"
  },
  {
    "path": "stylegan2-tpu/dnnlib/util.py",
    "chars": 14449,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source "
  },
  {
    "path": "stylegan2-tpu/docs/license.html",
    "chars": 5882,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"\" xml:lang=\"\">\n<head>\n  <meta charset=\"utf-8\"/>\n  <meta"
  },
  {
    "path": "stylegan2-tpu/docs/versions.html",
    "chars": 1806,
    "preview": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"\" xml:lang=\"\">\n<head>\n  <meta charset=\"utf-8\"/>\n  <meta"
  },
  {
    "path": "stylegan2-tpu/encoder/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "stylegan2-tpu/encoder/generator_model.py",
    "chars": 6087,
    "preview": "import math\nimport tensorflow as tf\nimport numpy as np\nimport dnnlib.tflib as tflib\nfrom functools import partial\n\n\ndef "
  },
  {
    "path": "stylegan2-tpu/encoder/perceptual_model.py",
    "chars": 13449,
    "preview": "import os\nimport bz2\nimport PIL.Image\nimport numpy as np\nimport tensorflow as tf\nfrom keras.models import Model\nfrom ker"
  },
  {
    "path": "stylegan2-tpu/ext.l",
    "chars": 8755,
    "preview": "\n(def image-to-discord-file (img name: name kind: kind)\n  (set kind (or kind \"jpg\"))\n  (set name (or name \"test\"))\n  (le"
  },
  {
    "path": "stylegan2-tpu/generate_images_tpu.py",
    "chars": 7048,
    "preview": "import argparse\r\nimport os\r\nimport pathlib\r\nfrom pathlib import Path\r\nfrom pprint import pprint as pp\r\n\r\nimport numpy as"
  },
  {
    "path": "stylegan2-tpu/mammos.py",
    "chars": 4745,
    "preview": "import sys\nimport os\n\nsys.path += [os.path.join(os.path.dirname(os.path.abspath(__file__)), '../pymen/bin')]\n\nif 'COLAB_"
  },
  {
    "path": "stylegan2-tpu/metrics/__init__.py",
    "chars": 235,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/frechet_inception_distance.py",
    "chars": 3355,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/inception_score.py",
    "chars": 2612,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/linear_separability.py",
    "chars": 10314,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/metric_base.py",
    "chars": 7055,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/metric_defaults.py",
    "chars": 2311,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/perceptual_path_length.py",
    "chars": 5630,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/metrics/precision_recall.py",
    "chars": 11468,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/prepare_image.py",
    "chars": 18842,
    "preview": "#!/usr/bin/env python3\n# Copyright 2018 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache Licen"
  },
  {
    "path": "stylegan2-tpu/pretrained_networks.py",
    "chars": 7665,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/projector.py",
    "chars": 8984,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/random_crops.py",
    "chars": 1402,
    "preview": "import argparse, os\nimport numpy as np\nfrom PIL import Image\nfrom random import randrange\nfrom tqdm import tqdm\n\nparser "
  },
  {
    "path": "stylegan2-tpu/repl.l",
    "chars": 18711,
    "preview": "(%block class Namespace (do))\n\n(defvar args (Namespace))\n\n(set args.batch_size 1 args.randomize_noise false args.tile_dl"
  },
  {
    "path": "stylegan2-tpu/requirements.txt",
    "chars": 484,
    "preview": "absl-py==0.7.0\nastor==0.7.1\ncertifi==2018.11.29\nchardet==3.0.4\nClick==7.0\nFlask==1.0.2\nFlask-Cors==3.0.7\ngast==0.2.2\ngev"
  },
  {
    "path": "stylegan2-tpu/run_generator.py",
    "chars": 8239,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/run_metrics.py",
    "chars": 3447,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/run_projector.py",
    "chars": 6957,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/run_training.py",
    "chars": 9717,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/test_nvcc.cu",
    "chars": 715,
    "preview": "// Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\r\n//\r\n// This work is made available under the Nvidia Sou"
  },
  {
    "path": "stylegan2-tpu/tflex.py",
    "chars": 28888,
    "preview": "import tensorflow as tf\nimport numpy as np\nfrom glob import glob\nimport os\nimport re\nfrom tensorflow.python import pywra"
  },
  {
    "path": "stylegan2-tpu/tflex_test.py",
    "chars": 1843,
    "preview": "import sys\nimport tflex\nimport time\n\ndef make_future(label, delay=0.0, deps=[], thunk=None, args=[]):\n  def toplevel():\n"
  },
  {
    "path": "stylegan2-tpu/train_tpu.sh",
    "chars": 727,
    "preview": "#!/bin/bash\nsource \"$HOME/bin/activate-tf1\"\n\nset -e\n\nexport NOISY=1\nexport DEBUG=1\n\nexport TPU_NAME=grpc://0.tcp.ngrok.i"
  },
  {
    "path": "stylegan2-tpu/training/__init__.py",
    "chars": 235,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/training/dataset.py",
    "chars": 11630,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/training/imagenet_input.py",
    "chars": 26353,
    "preview": "# Copyright 2018 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": "stylegan2-tpu/training/loss.py",
    "chars": 13017,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/training/misc.py",
    "chars": 5808,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/training/networks_stylegan.py",
    "chars": 33405,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/training/networks_stylegan2.py",
    "chars": 47064,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source "
  },
  {
    "path": "stylegan2-tpu/training/train_runner.py",
    "chars": 11375,
    "preview": "# Copyright 2018 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"L"
  },
  {
    "path": "stylegan2-tpu/training/training_loop.py",
    "chars": 52256,
    "preview": "# Copyright (c) 2019, NVIDIA Corporation. All rights reserved.\n#\n# This work is made available under the Nvidia Source C"
  },
  {
    "path": "stylegan2-tpu/view.py",
    "chars": 7338,
    "preview": "import os\n\nif 'COLAB_TPU_ADDR' in os.environ:\n  os.environ['TPU_NAME'] = 'grpc://' + os.environ['COLAB_TPU_ADDR']\n\nos.en"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the beezeetee/TDPDNE GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 87 files (1.9 MB), approximately 930.4k tokens, and a symbol index with 790 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!