2020-02-06 10:21:56 -03:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Detector de Paneles"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cargar el modelo ssd7 \n",
"(https://github.com/pierluigiferrari/ssd_keras#how-to-fine-tune-one-of-the-trained-models-on-your-own-dataset)\n",
"\n",
"Training del SSD7 (modelo reducido de SSD). Parámetros en config_7.json y descargar VGG_ILSVRC_16_layers_fc_reduced.h5\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
2020-03-11 14:04:23 -03:00
"execution_count": 1,
2020-02-06 10:21:56 -03:00
"metadata": {},
"outputs": [
2020-03-11 14:04:23 -03:00
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n",
"WARNING: Logging before flag parsing goes to stderr.\n",
"W0309 16:47:10.941016 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:174: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n",
"\n",
"W0309 16:47:10.942156 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:181: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
"\n",
"W0309 16:47:10.942741 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:186: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
"\n",
"W0309 16:47:10.981798 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:190: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
"\n",
"W0309 16:47:10.984804 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:95: The name tf.reset_default_graph is deprecated. Please use tf.compat.v1.reset_default_graph instead.\n",
"\n",
"W0309 16:47:10.986444 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:98: The name tf.placeholder_with_default is deprecated. Please use tf.compat.v1.placeholder_with_default instead.\n",
"\n",
"W0309 16:47:10.994469 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:102: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.\n",
"\n",
"W0309 16:47:11.003161 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:517: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.\n",
"\n",
"W0309 16:47:11.017030 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:4185: The name tf.truncated_normal is deprecated. Please use tf.random.truncated_normal instead.\n",
"\n",
"W0309 16:47:11.062859 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:1834: The name tf.nn.fused_batch_norm is deprecated. Please use tf.compat.v1.nn.fused_batch_norm instead.\n",
"\n",
"W0309 16:47:11.134284 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:3976: The name tf.nn.max_pool is deprecated. Please use tf.nn.max_pool2d instead.\n",
"\n"
]
},
2020-02-06 10:21:56 -03:00
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Training on: \t{'panel': 1}\n",
"\n",
2020-03-11 14:04:23 -03:00
"\n",
"Loading pretrained weights.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"W0309 16:47:11.816283 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:199: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n",
"\n",
"W0309 16:47:12.014409 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:206: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n",
"\n",
"W0309 16:47:12.571218 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/optimizers.py:790: The name tf.train.Optimizer is deprecated. Please use tf.compat.v1.train.Optimizer instead.\n",
"\n",
"W0309 16:47:12.587135 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/Desktop/Rentadrone.cl-ai-test/model-definition/ssd_keras-master/keras_loss_function/keras_ssd_loss.py:95: The name tf.log is deprecated. Please use tf.math.log instead.\n",
"\n",
"W0309 16:47:12.594385 140565250733888 deprecation.py:323] From /home/dlsaavedra/Desktop/Rentadrone.cl-ai-test/model-definition/ssd_keras-master/keras_loss_function/keras_ssd_loss.py:133: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.cast` instead.\n",
"W0309 16:47:12.616868 140565250733888 deprecation.py:323] From /home/dlsaavedra/Desktop/Rentadrone.cl-ai-test/model-definition/ssd_keras-master/keras_loss_function/keras_ssd_loss.py:74: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.where in 2.0, which has the same broadcast rule as np.where\n",
"W0309 16:47:12.643085 140565250733888 deprecation.py:323] From /home/dlsaavedra/Desktop/Rentadrone.cl-ai-test/model-definition/ssd_keras-master/keras_loss_function/keras_ssd_loss.py:166: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.cast` instead.\n",
"W0309 16:47:13.514157 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:986: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n",
"\n",
"W0309 16:47:13.868388 140565250733888 module_wrapper.py:139] From /home/dlsaavedra/anaconda3/envs/model/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py:973: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n",
"\n"
2020-02-06 10:21:56 -03:00
]
}
],
"source": [
"from keras.optimizers import Adam, SGD\n",
"from keras.callbacks import ModelCheckpoint, LearningRateScheduler, TerminateOnNaN, CSVLogger\n",
"from keras import backend as K\n",
"from keras.models import load_model\n",
"from math import ceil\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"import os\n",
"import json\n",
"import xml.etree.cElementTree as ET\n",
"\n",
"import sys\n",
2020-02-06 16:47:03 -03:00
"sys.path += [os.path.abspath('../ssd_keras-master')]\n",
2020-02-06 10:21:56 -03:00
"\n",
"from keras_loss_function.keras_ssd_loss import SSDLoss\n",
"from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes\n",
"from keras_layers.keras_layer_DecodeDetections import DecodeDetections\n",
"from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast\n",
"from keras_layers.keras_layer_L2Normalization import L2Normalization\n",
"from ssd_encoder_decoder.ssd_input_encoder import SSDInputEncoder\n",
"from ssd_encoder_decoder.ssd_output_decoder import decode_detections, decode_detections_fast\n",
"from data_generator.object_detection_2d_data_generator import DataGenerator\n",
"from data_generator.object_detection_2d_geometric_ops import Resize\n",
"from data_generator.object_detection_2d_photometric_ops import ConvertTo3Channels\n",
"from data_generator.data_augmentation_chain_original_ssd import SSDDataAugmentation\n",
"from data_generator.object_detection_2d_misc_utils import apply_inverse_transforms\n",
"from eval_utils.average_precision_evaluator import Evaluator\n",
"from data_generator.data_augmentation_chain_variable_input_size import DataAugmentationVariableInputSize\n",
"from data_generator.data_augmentation_chain_constant_input_size import DataAugmentationConstantInputSize\n",
"\n",
"\n",
"def makedirs(path):\n",
" try:\n",
" os.makedirs(path)\n",
" except OSError:\n",
" if not os.path.isdir(path):\n",
" raise\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"K.tensorflow_backend._get_available_gpus()\n",
"\n",
"\n",
"def lr_schedule(epoch):\n",
" if epoch < 80:\n",
" return 0.001\n",
" elif epoch < 100:\n",
" return 0.0001\n",
" else:\n",
" return 0.00001\n",
"\n",
"config_path = 'config_7_panel.json'\n",
"\n",
"\n",
"with open(config_path) as config_buffer:\n",
" config = json.loads(config_buffer.read())\n",
"\n",
"###############################\n",
"# Parse the annotations\n",
"###############################\n",
"path_imgs_training = config['train']['train_image_folder']\n",
"path_anns_training = config['train']['train_annot_folder']\n",
"path_imgs_val = config['test']['test_image_folder']\n",
"path_anns_val = config['test']['test_annot_folder']\n",
"labels = config['model']['labels']\n",
"categories = {}\n",
"#categories = {\"Razor\": 1, \"Gun\": 2, \"Knife\": 3, \"Shuriken\": 4} #la categoría 0 es la background\n",
"for i in range(len(labels)): categories[labels[i]] = i+1\n",
"print('\\nTraining on: \\t' + str(categories) + '\\n')\n",
"\n",
"####################################\n",
"# Parameters\n",
"###################################\n",
" #%%\n",
"img_height = config['model']['input'] # Height of the model input images\n",
"img_width = config['model']['input'] # Width of the model input images\n",
"img_channels = 3 # Number of color channels of the model input images\n",
"mean_color = [123, 117, 104] # The per-channel mean of the images in the dataset. Do not change this value if you're using any of the pre-trained weights.\n",
"swap_channels = [2, 1, 0] # The color channel order in the original SSD is BGR, so we'll have the model reverse the color channel order of the input images.\n",
"n_classes = len(labels) # Number of positive classes, e.g. 20 for Pascal VOC, 80 for MS COCO\n",
"scales_pascal = [0.1, 0.2, 0.37, 0.54, 0.71, 0.88, 1.05] # The anchor box scaling factors used in the original SSD300 for the Pascal VOC datasets\n",
"#scales_coco = [0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05] # The anchor box scaling factors used in the original SSD300 for the MS COCO datasets\n",
"scales = scales_pascal\n",
"aspect_ratios = [[1.0, 2.0, 0.5],\n",
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
" [1.0, 2.0, 0.5, 3.0, 1.0/3.0],\n",
" [1.0, 2.0, 0.5],\n",
" [1.0, 2.0, 0.5]] # The anchor box aspect ratios used in the original SSD300; the order matters\n",
"two_boxes_for_ar1 = True\n",
"steps = [8, 16, 32, 64, 100, 300] # The space between two adjacent anchor box center points for each predictor layer.\n",
"offsets = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5] # The offsets of the first anchor box center points from the top and left borders of the image as a fraction of the step size for each predictor layer.\n",
"clip_boxes = False # Whether or not to clip the anchor boxes to lie entirely within the image boundaries\n",
"variances = [0.1, 0.1, 0.2, 0.2] # The variances by which the encoded target coordinates are divided as in the original implementation\n",
"normalize_coords = True\n",
"\n",
"K.clear_session() # Clear previous models from memory.\n",
"\n",
"\n",
"model_path = config['train']['saved_weights_name']\n",
"# 3: Instantiate an optimizer and the SSD loss function and compile the model.\n",
"# If you want to follow the original Caffe implementation, use the preset SGD\n",
"# optimizer, otherwise I'd recommend the commented-out Adam optimizer.\n",
"\n",
"\n",
"if config['model']['backend'] == 'ssd7':\n",
" #weights_path = 'VGG_ILSVRC_16_layers_fc_reduced.h5'\n",
" scales = [0.08, 0.16, 0.32, 0.64, 0.96] # An explicit list of anchor box scaling factors. If this is passed, it will override `min_scale` and `max_scale`.\n",
" aspect_ratios = [0.5 ,1.0, 2.0] # The list of aspect ratios for the anchor boxes\n",
" two_boxes_for_ar1 = True # Whether or not you want to generate two anchor boxes for aspect ratio 1\n",
" steps = None # In case you'd like to set the step sizes for the anchor box grids manually; not recommended\n",
" offsets = None\n",
"\n",
"if os.path.exists(model_path):\n",
" print(\"\\nLoading pretrained weights.\\n\")\n",
" # We need to create an SSDLoss object in order to pass that to the model loader.\n",
" ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)\n",
"\n",
" K.clear_session() # Clear previous models from memory.\n",
" model = load_model(model_path, custom_objects={'AnchorBoxes': AnchorBoxes,\n",
" 'L2Normalization': L2Normalization,\n",
" 'compute_loss': ssd_loss.compute_loss})\n",
"\n",
"\n",
"else:\n",
" ####################################\n",
" # Build the Keras model.\n",
" ###################################\n",
"\n",
" if config['model']['backend'] == 'ssd300':\n",
" #weights_path = 'VGG_VOC0712Plus_SSD_300x300_ft_iter_160000.h5'\n",
" from models.keras_ssd300 import ssd_300 as ssd\n",
"\n",
" model = ssd_300(image_size=(img_height, img_width, img_channels),\n",
" n_classes=n_classes,\n",
" mode='training',\n",
" l2_regularization=0.0005,\n",
" scales=scales,\n",
" aspect_ratios_per_layer=aspect_ratios,\n",
" two_boxes_for_ar1=two_boxes_for_ar1,\n",
" steps=steps,\n",
" offsets=offsets,\n",
" clip_boxes=clip_boxes,\n",
" variances=variances,\n",
" normalize_coords=normalize_coords,\n",
" subtract_mean=mean_color,\n",
" swap_channels=swap_channels)\n",
"\n",
"\n",
" elif config['model']['backend'] == 'ssd7':\n",
" #weights_path = 'VGG_ILSVRC_16_layers_fc_reduced.h5'\n",
" from models.keras_ssd7 import build_model as ssd\n",
" scales = [0.08, 0.16, 0.32, 0.64, 0.96] # An explicit list of anchor box scaling factors. If this is passed, it will override `min_scale` and `max_scale`.\n",
" aspect_ratios = [0.5 ,1.0, 2.0] # The list of aspect ratios for the anchor boxes\n",
" two_boxes_for_ar1 = True # Whether or not you want to generate two anchor boxes for aspect ratio 1\n",
" steps = None # In case you'd like to set the step sizes for the anchor box grids manually; not recommended\n",
" offsets = None\n",
" model = ssd(image_size=(img_height, img_width, img_channels),\n",
" n_classes=n_classes,\n",
" mode='training',\n",
" l2_regularization=0.0005,\n",
" scales=scales,\n",
" aspect_ratios_global=aspect_ratios,\n",
" aspect_ratios_per_layer=None,\n",
" two_boxes_for_ar1=two_boxes_for_ar1,\n",
" steps=steps,\n",
" offsets=offsets,\n",
" clip_boxes=clip_boxes,\n",
" variances=variances,\n",
" normalize_coords=normalize_coords,\n",
" subtract_mean=None,\n",
" divide_by_stddev=None)\n",
"\n",
" else :\n",
" print('Wrong Backend')\n",
"\n",
"\n",
"\n",
" print('OK create model')\n",
" #sgd = SGD(lr=config['train']['learning_rate'], momentum=0.9, decay=0.0, nesterov=False)\n",
"\n",
" # TODO: Set the path to the weights you want to load. only for ssd300 or ssd512\n",
"\n",
" weights_path = '../ssd_keras-master/VGG_ILSVRC_16_layers_fc_reduced.h5'\n",
" print(\"\\nLoading pretrained weights VGG.\\n\")\n",
" model.load_weights(weights_path, by_name=True)\n",
"\n",
" # 3: Instantiate an optimizer and the SSD loss function and compile the model.\n",
" # If you want to follow the original Caffe implementation, use the preset SGD\n",
" # optimizer, otherwise I'd recommend the commented-out Adam optimizer.\n",
"\n",
"\n",
" #adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
" #sgd = SGD(lr=0.001, momentum=0.9, decay=0.0, nesterov=False)\n",
" optimizer = Adam(lr=config['train']['learning_rate'], beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)\n",
" ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)\n",
" model.compile(optimizer=optimizer, loss=ssd_loss.compute_loss)\n",
"\n",
" model.summary()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Instanciar los generadores de datos y entrenamiento del modelo.\n",
"\n",
"*Cambio realizado para leer png y jpg. keras-ssd-master/data_generator/object_detection_2d_data_generator.py función parse_xml\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processing image set 'train.txt': 100%|██████████| 1/1 [00:00<00:00, 3.02it/s]\n",
"Processing image set 'test.txt': 100%|██████████| 1/1 [00:00<00:00, 2.48it/s]\n",
"panel : 69\n",
"cell : 423\n",
"Number of images in the training dataset:\t 1\n",
"Number of images in the validation dataset:\t 1\n",
"Epoch 1/100\n",
"\n",
"Epoch 00001: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 200s 4s/step - loss: 13.2409 - val_loss: 9.9807\n",
"\n",
"Epoch 00001: val_loss improved from inf to 9.98075, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 2/100\n",
"\n",
"Epoch 00002: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 238s 5s/step - loss: 9.8864 - val_loss: 11.1452\n",
"\n",
"Epoch 00002: val_loss did not improve from 9.98075\n",
"Epoch 3/100\n",
"\n",
"Epoch 00003: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 226s 5s/step - loss: 8.8060 - val_loss: 8.3006\n",
"\n",
"Epoch 00003: val_loss improved from 9.98075 to 8.30060, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 4/100\n",
"\n",
"Epoch 00004: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 199s 4s/step - loss: 7.4999 - val_loss: 8.9384\n",
"\n",
"Epoch 00004: val_loss did not improve from 8.30060\n",
"Epoch 5/100\n",
"\n",
"Epoch 00005: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 187s 4s/step - loss: 7.4727 - val_loss: 7.9512\n",
"\n",
"Epoch 00005: val_loss improved from 8.30060 to 7.95121, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 6/100\n",
"\n",
"Epoch 00006: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 213s 4s/step - loss: 6.8813 - val_loss: 11.2544\n",
"\n",
"Epoch 00006: val_loss did not improve from 7.95121\n",
"Epoch 7/100\n",
"\n",
"Epoch 00007: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 195s 4s/step - loss: 6.4775 - val_loss: 6.9093\n",
"\n",
"Epoch 00007: val_loss improved from 7.95121 to 6.90929, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 8/100\n",
"\n",
"Epoch 00008: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 212s 4s/step - loss: 6.9758 - val_loss: 8.6997\n",
"\n",
"Epoch 00008: val_loss did not improve from 6.90929\n",
"Epoch 9/100\n",
"\n",
"Epoch 00009: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 199s 4s/step - loss: 6.1539 - val_loss: 10.9586\n",
"\n",
"Epoch 00009: val_loss did not improve from 6.90929\n",
"Epoch 10/100\n",
"\n",
"Epoch 00010: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 206s 4s/step - loss: 5.9307 - val_loss: 8.4361\n",
"\n",
"Epoch 00010: val_loss did not improve from 6.90929\n",
"Epoch 11/100\n",
"\n",
"Epoch 00011: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 197s 4s/step - loss: 5.3895 - val_loss: 5.9796\n",
"\n",
"Epoch 00011: val_loss improved from 6.90929 to 5.97960, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 12/100\n",
"\n",
"Epoch 00012: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 184s 4s/step - loss: 5.0889 - val_loss: 5.9283\n",
"\n",
"Epoch 00012: val_loss improved from 5.97960 to 5.92832, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 13/100\n",
"\n",
"Epoch 00013: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 193s 4s/step - loss: 5.7916 - val_loss: 6.7706\n",
"\n",
"Epoch 00013: val_loss did not improve from 5.92832\n",
"Epoch 14/100\n",
"\n",
"Epoch 00014: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 222s 4s/step - loss: 5.3010 - val_loss: 7.8910\n",
"\n",
"Epoch 00014: val_loss did not improve from 5.92832\n",
"Epoch 15/100\n",
"\n",
"Epoch 00015: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 179s 4s/step - loss: 4.9873 - val_loss: 6.0389\n",
"\n",
"Epoch 00015: val_loss did not improve from 5.92832\n",
"Epoch 16/100\n",
"\n",
"Epoch 00016: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 182s 4s/step - loss: 5.4664 - val_loss: 6.4125\n",
"\n",
"Epoch 00016: val_loss did not improve from 5.92832\n",
"Epoch 17/100\n",
"\n",
"Epoch 00017: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 166s 3s/step - loss: 6.0094 - val_loss: 9.2918\n",
"\n",
"Epoch 00017: val_loss did not improve from 5.92832\n",
"Epoch 18/100\n",
"\n",
"Epoch 00018: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 181s 4s/step - loss: 5.1737 - val_loss: 7.6806\n",
"\n",
"Epoch 00018: val_loss did not improve from 5.92832\n",
"Epoch 19/100\n",
"\n",
"Epoch 00019: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 159s 3s/step - loss: 5.2708 - val_loss: 7.1096\n",
"\n",
"Epoch 00019: val_loss did not improve from 5.92832\n",
"Epoch 20/100\n",
"\n",
"Epoch 00020: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 173s 3s/step - loss: 5.4765 - val_loss: 5.4921\n",
"\n",
"Epoch 00020: val_loss improved from 5.92832 to 5.49211, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 21/100\n",
"\n",
"Epoch 00021: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 170s 3s/step - loss: 4.6517 - val_loss: 6.6033\n",
"\n",
"Epoch 00021: val_loss did not improve from 5.49211\n",
"Epoch 22/100\n",
"\n",
"Epoch 00022: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 191s 4s/step - loss: 5.1432 - val_loss: 5.6549\n",
"\n",
"Epoch 00022: val_loss did not improve from 5.49211\n",
"Epoch 23/100\n",
"\n",
"Epoch 00023: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 159s 3s/step - loss: 5.4830 - val_loss: 5.8758\n",
"\n",
"Epoch 00023: val_loss did not improve from 5.49211\n",
"Epoch 24/100\n",
"\n",
"Epoch 00024: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 150s 3s/step - loss: 5.3366 - val_loss: 5.3871\n",
"\n",
"Epoch 00024: val_loss improved from 5.49211 to 5.38706, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 25/100\n",
"\n",
"Epoch 00025: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 138s 3s/step - loss: 5.7189 - val_loss: 8.0760\n",
"\n",
"Epoch 00025: val_loss did not improve from 5.38706\n",
"Epoch 26/100\n",
"\n",
"Epoch 00026: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 144s 3s/step - loss: 6.0929 - val_loss: 12.6163\n",
"\n",
"Epoch 00026: val_loss did not improve from 5.38706\n",
"Epoch 27/100\n",
"\n",
"Epoch 00027: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 147s 3s/step - loss: 5.2239 - val_loss: 9.8536\n",
"\n",
"Epoch 00027: val_loss did not improve from 5.38706\n",
"Epoch 28/100\n",
"\n",
"Epoch 00028: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 158s 3s/step - loss: 5.4414 - val_loss: 6.4950\n",
"\n",
"Epoch 00028: val_loss did not improve from 5.38706\n",
"Epoch 29/100\n",
"\n",
"Epoch 00029: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 157s 3s/step - loss: 5.4436 - val_loss: 9.0002\n",
"\n",
"Epoch 00029: val_loss did not improve from 5.38706\n",
"Epoch 30/100\n",
"\n",
"Epoch 00030: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 162s 3s/step - loss: 4.9780 - val_loss: 4.9993\n",
"\n",
"Epoch 00030: val_loss improved from 5.38706 to 4.99925, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 31/100\n",
"\n",
"Epoch 00031: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 140s 3s/step - loss: 4.9645 - val_loss: 5.6612\n",
"\n",
"Epoch 00031: val_loss did not improve from 4.99925\n",
"Epoch 32/100\n",
"\n",
"Epoch 00032: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 141s 3s/step - loss: 4.5982 - val_loss: 5.2083\n",
"\n",
"Epoch 00032: val_loss did not improve from 4.99925\n",
"Epoch 33/100\n",
"\n",
"Epoch 00033: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 143s 3s/step - loss: 4.3101 - val_loss: 6.4808\n",
"\n",
"Epoch 00033: val_loss did not improve from 4.99925\n",
"Epoch 34/100\n",
"\n",
"Epoch 00034: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 145s 3s/step - loss: 4.4252 - val_loss: 10.9472\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Epoch 00034: val_loss did not improve from 4.99925\n",
"Epoch 35/100\n",
"\n",
"Epoch 00035: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 153s 3s/step - loss: 4.4998 - val_loss: 7.1254\n",
"\n",
"Epoch 00035: val_loss did not improve from 4.99925\n",
"Epoch 36/100\n",
"\n",
"Epoch 00036: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 153s 3s/step - loss: 4.8952 - val_loss: 7.0446\n",
"\n",
"Epoch 00036: val_loss did not improve from 4.99925\n",
"Epoch 37/100\n",
"\n",
"Epoch 00037: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 154s 3s/step - loss: 4.9868 - val_loss: 9.3251\n",
"\n",
"Epoch 00037: val_loss did not improve from 4.99925\n",
"Epoch 38/100\n",
"\n",
"Epoch 00038: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 148s 3s/step - loss: 4.8918 - val_loss: 5.1689\n",
"\n",
"Epoch 00038: val_loss did not improve from 4.99925\n",
"Epoch 39/100\n",
"\n",
"Epoch 00039: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 143s 3s/step - loss: 4.5572 - val_loss: 4.9839\n",
"\n",
"Epoch 00039: val_loss improved from 4.99925 to 4.98394, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 40/100\n",
"\n",
"Epoch 00040: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 150s 3s/step - loss: 4.4722 - val_loss: 5.7133\n",
"\n",
"Epoch 00040: val_loss did not improve from 4.98394\n",
"Epoch 41/100\n",
"\n",
"Epoch 00041: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 152s 3s/step - loss: 4.9414 - val_loss: 5.5843\n",
"\n",
"Epoch 00041: val_loss did not improve from 4.98394\n",
"Epoch 42/100\n",
"\n",
"Epoch 00042: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 148s 3s/step - loss: 4.5857 - val_loss: 5.1884\n",
"\n",
"Epoch 00042: val_loss did not improve from 4.98394\n",
"Epoch 43/100\n",
"\n",
"Epoch 00043: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 149s 3s/step - loss: 4.7094 - val_loss: 6.7545\n",
"\n",
"Epoch 00043: val_loss did not improve from 4.98394\n",
"Epoch 44/100\n",
"\n",
"Epoch 00044: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 151s 3s/step - loss: 5.0428 - val_loss: 5.2691\n",
"\n",
"Epoch 00044: val_loss did not improve from 4.98394\n",
"Epoch 45/100\n",
"\n",
"Epoch 00045: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 146s 3s/step - loss: 4.9842 - val_loss: 6.5112\n",
"\n",
"Epoch 00045: val_loss did not improve from 4.98394\n",
"Epoch 46/100\n",
"\n",
"Epoch 00046: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 147s 3s/step - loss: 4.9108 - val_loss: 6.0670\n",
"\n",
"Epoch 00046: val_loss did not improve from 4.98394\n",
"Epoch 47/100\n",
"\n",
"Epoch 00047: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 155s 3s/step - loss: 4.6837 - val_loss: 5.8351\n",
"\n",
"Epoch 00047: val_loss did not improve from 4.98394\n",
"Epoch 48/100\n",
"\n",
"Epoch 00048: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 149s 3s/step - loss: 5.1042 - val_loss: 5.1778\n",
"\n",
"Epoch 00048: val_loss did not improve from 4.98394\n",
"Epoch 49/100\n",
"\n",
"Epoch 00049: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 144s 3s/step - loss: 4.1312 - val_loss: 5.9606\n",
"\n",
"Epoch 00049: val_loss did not improve from 4.98394\n",
"Epoch 50/100\n",
"\n",
"Epoch 00050: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 122s 2s/step - loss: 4.5373 - val_loss: 5.4351\n",
"\n",
"Epoch 00050: val_loss did not improve from 4.98394\n",
"Epoch 51/100\n",
"\n",
"Epoch 00051: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 135s 3s/step - loss: 4.8955 - val_loss: 6.0315\n",
"\n",
"Epoch 00051: val_loss did not improve from 4.98394\n",
"Epoch 52/100\n",
"\n",
"Epoch 00052: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 150s 3s/step - loss: 4.9445 - val_loss: 5.7199\n",
"\n",
"Epoch 00052: val_loss did not improve from 4.98394\n",
"Epoch 53/100\n",
"\n",
"Epoch 00053: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 139s 3s/step - loss: 3.9748 - val_loss: 5.5974\n",
"\n",
"Epoch 00053: val_loss did not improve from 4.98394\n",
"Epoch 54/100\n",
"\n",
"Epoch 00054: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 153s 3s/step - loss: 4.8783 - val_loss: 8.6056\n",
"\n",
"Epoch 00054: val_loss did not improve from 4.98394\n",
"Epoch 55/100\n",
"\n",
"Epoch 00055: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 141s 3s/step - loss: 4.1649 - val_loss: 6.0042\n",
"\n",
"Epoch 00055: val_loss did not improve from 4.98394\n",
"Epoch 56/100\n",
"\n",
"Epoch 00056: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 149s 3s/step - loss: 4.8997 - val_loss: 9.1298\n",
"\n",
"Epoch 00056: val_loss did not improve from 4.98394\n",
"Epoch 57/100\n",
"\n",
"Epoch 00057: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 151s 3s/step - loss: 4.4433 - val_loss: 7.1151\n",
"\n",
"Epoch 00057: val_loss did not improve from 4.98394\n",
"Epoch 58/100\n",
"\n",
"Epoch 00058: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 147s 3s/step - loss: 4.5827 - val_loss: 5.4356\n",
"\n",
"Epoch 00058: val_loss did not improve from 4.98394\n",
"Epoch 59/100\n",
"\n",
"Epoch 00059: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 137s 3s/step - loss: 3.9437 - val_loss: 4.7926\n",
"\n",
"Epoch 00059: val_loss improved from 4.98394 to 4.79262, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 60/100\n",
"\n",
"Epoch 00060: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 125s 3s/step - loss: 4.0939 - val_loss: 5.7098\n",
"\n",
"Epoch 00060: val_loss did not improve from 4.79262\n",
"Epoch 61/100\n",
"\n",
"Epoch 00061: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 161s 3s/step - loss: 5.1152 - val_loss: 5.2079\n",
"\n",
"Epoch 00061: val_loss did not improve from 4.79262\n",
"Epoch 62/100\n",
"\n",
"Epoch 00062: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 144s 3s/step - loss: 4.2958 - val_loss: 4.9239\n",
"\n",
"Epoch 00062: val_loss did not improve from 4.79262\n",
"Epoch 63/100\n",
"\n",
"Epoch 00063: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 141s 3s/step - loss: 3.8241 - val_loss: 4.5443\n",
"\n",
"Epoch 00063: val_loss improved from 4.79262 to 4.54430, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 64/100\n",
"\n",
"Epoch 00064: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 134s 3s/step - loss: 4.7252 - val_loss: 5.9445\n",
"\n",
"Epoch 00064: val_loss did not improve from 4.54430\n",
"Epoch 65/100\n",
"\n",
"Epoch 00065: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 154s 3s/step - loss: 4.4455 - val_loss: 4.8326\n",
"\n",
"Epoch 00065: val_loss did not improve from 4.54430\n",
"Epoch 66/100\n",
"\n",
"Epoch 00066: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 145s 3s/step - loss: 4.4054 - val_loss: 5.6441\n",
"\n",
"Epoch 00066: val_loss did not improve from 4.54430\n",
"Epoch 67/100\n",
"\n",
"Epoch 00067: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 124s 2s/step - loss: 4.4165 - val_loss: 6.8159\n",
"\n",
"Epoch 00067: val_loss did not improve from 4.54430\n",
"Epoch 68/100\n",
"\n",
"Epoch 00068: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 162s 3s/step - loss: 5.0418 - val_loss: 4.8508\n",
"\n",
"Epoch 00068: val_loss did not improve from 4.54430\n",
"Epoch 69/100\n",
"\n",
"Epoch 00069: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 140s 3s/step - loss: 4.1512 - val_loss: 5.4053\n",
"\n",
"Epoch 00069: val_loss did not improve from 4.54430\n",
"Epoch 70/100\n",
"\n",
"Epoch 00070: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 148s 3s/step - loss: 4.6197 - val_loss: 5.2824\n",
"\n",
"Epoch 00070: val_loss did not improve from 4.54430\n",
"Epoch 71/100\n",
"\n",
"Epoch 00071: LearningRateScheduler setting learning rate to 0.001.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"50/50 [==============================] - 152s 3s/step - loss: 4.2807 - val_loss: 5.5992\n",
"\n",
"Epoch 00071: val_loss did not improve from 4.54430\n",
"Epoch 72/100\n",
"\n",
"Epoch 00072: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 143s 3s/step - loss: 4.5368 - val_loss: 6.5207\n",
"\n",
"Epoch 00072: val_loss did not improve from 4.54430\n",
"Epoch 73/100\n",
"\n",
"Epoch 00073: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 141s 3s/step - loss: 4.0598 - val_loss: 5.2421\n",
"\n",
"Epoch 00073: val_loss did not improve from 4.54430\n",
"Epoch 74/100\n",
"\n",
"Epoch 00074: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 150s 3s/step - loss: 4.4861 - val_loss: 5.4182\n",
"\n",
"Epoch 00074: val_loss did not improve from 4.54430\n",
"Epoch 75/100\n",
"\n",
"Epoch 00075: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 144s 3s/step - loss: 4.5263 - val_loss: 4.3774\n",
"\n",
"Epoch 00075: val_loss improved from 4.54430 to 4.37742, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 76/100\n",
"\n",
"Epoch 00076: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 148s 3s/step - loss: 3.8465 - val_loss: 4.5809\n",
"\n",
"Epoch 00076: val_loss did not improve from 4.37742\n",
"Epoch 77/100\n",
"\n",
"Epoch 00077: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 152s 3s/step - loss: 4.0495 - val_loss: 4.9745\n",
"\n",
"Epoch 00077: val_loss did not improve from 4.37742\n",
"Epoch 78/100\n",
"\n",
"Epoch 00078: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 152s 3s/step - loss: 4.6009 - val_loss: 13.4989\n",
"\n",
"Epoch 00078: val_loss did not improve from 4.37742\n",
"Epoch 79/100\n",
"\n",
"Epoch 00079: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 142s 3s/step - loss: 4.6687 - val_loss: 6.4490\n",
"\n",
"Epoch 00079: val_loss did not improve from 4.37742\n",
"Epoch 80/100\n",
"\n",
"Epoch 00080: LearningRateScheduler setting learning rate to 0.001.\n",
"50/50 [==============================] - 147s 3s/step - loss: 4.5297 - val_loss: 8.0478\n",
"\n",
"Epoch 00080: val_loss did not improve from 4.37742\n",
"Epoch 81/100\n",
"\n",
"Epoch 00081: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 141s 3s/step - loss: 4.2662 - val_loss: 5.7929\n",
"\n",
"Epoch 00081: val_loss did not improve from 4.37742\n",
"Epoch 82/100\n",
"\n",
"Epoch 00082: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 149s 3s/step - loss: 4.1048 - val_loss: 4.6117\n",
"\n",
"Epoch 00082: val_loss did not improve from 4.37742\n",
"Epoch 83/100\n",
"\n",
"Epoch 00083: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 156s 3s/step - loss: 3.9905 - val_loss: 4.5542\n",
"\n",
"Epoch 00083: val_loss did not improve from 4.37742\n",
"Epoch 84/100\n",
"\n",
"Epoch 00084: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 155s 3s/step - loss: 4.3129 - val_loss: 4.4676\n",
"\n",
"Epoch 00084: val_loss did not improve from 4.37742\n",
"Epoch 85/100\n",
"\n",
"Epoch 00085: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 156s 3s/step - loss: 3.7951 - val_loss: 4.4689\n",
"\n",
"Epoch 00085: val_loss did not improve from 4.37742\n",
"Epoch 86/100\n",
"\n",
"Epoch 00086: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 155s 3s/step - loss: 4.3618 - val_loss: 4.4048\n",
"\n",
"Epoch 00086: val_loss did not improve from 4.37742\n",
"Epoch 87/100\n",
"\n",
"Epoch 00087: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 156s 3s/step - loss: 4.3538 - val_loss: 4.6832\n",
"\n",
"Epoch 00087: val_loss did not improve from 4.37742\n",
"Epoch 88/100\n",
"\n",
"Epoch 00088: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 152s 3s/step - loss: 4.2076 - val_loss: 4.4796\n",
"\n",
"Epoch 00088: val_loss did not improve from 4.37742\n",
"Epoch 89/100\n",
"\n",
"Epoch 00089: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 146s 3s/step - loss: 4.1322 - val_loss: 4.5462\n",
"\n",
"Epoch 00089: val_loss did not improve from 4.37742\n",
"Epoch 90/100\n",
"\n",
"Epoch 00090: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 157s 3s/step - loss: 4.4995 - val_loss: 4.5660\n",
"\n",
"Epoch 00090: val_loss did not improve from 4.37742\n",
"Epoch 91/100\n",
"\n",
"Epoch 00091: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 158s 3s/step - loss: 4.2653 - val_loss: 4.5265\n",
"\n",
"Epoch 00091: val_loss did not improve from 4.37742\n",
"Epoch 92/100\n",
"\n",
"Epoch 00092: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 153s 3s/step - loss: 4.3702 - val_loss: 4.5276\n",
"\n",
"Epoch 00092: val_loss did not improve from 4.37742\n",
"Epoch 93/100\n",
"\n",
"Epoch 00093: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 153s 3s/step - loss: 3.7340 - val_loss: 4.5439\n",
"\n",
"Epoch 00093: val_loss did not improve from 4.37742\n",
"Epoch 94/100\n",
"\n",
"Epoch 00094: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 151s 3s/step - loss: 4.0253 - val_loss: 4.3250\n",
"\n",
"Epoch 00094: val_loss improved from 4.37742 to 4.32498, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 95/100\n",
"\n",
"Epoch 00095: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 143s 3s/step - loss: 4.0254 - val_loss: 4.6277\n",
"\n",
"Epoch 00095: val_loss did not improve from 4.32498\n",
"Epoch 96/100\n",
"\n",
"Epoch 00096: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 148s 3s/step - loss: 3.9857 - val_loss: 4.2953\n",
"\n",
"Epoch 00096: val_loss improved from 4.32498 to 4.29533, saving model to experimento_ssd7_panel_cell.h5\n",
"Epoch 97/100\n",
"\n",
"Epoch 00097: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 157s 3s/step - loss: 3.6750 - val_loss: 4.5637\n",
"\n",
"Epoch 00097: val_loss did not improve from 4.29533\n",
"Epoch 98/100\n",
"\n",
"Epoch 00098: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 154s 3s/step - loss: 3.7435 - val_loss: 4.3923\n",
"\n",
"Epoch 00098: val_loss did not improve from 4.29533\n",
"Epoch 99/100\n",
"\n",
"Epoch 00099: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 162s 3s/step - loss: 4.0930 - val_loss: 4.4010\n",
"\n",
"Epoch 00099: val_loss did not improve from 4.29533\n",
"Epoch 100/100\n",
"\n",
"Epoch 00100: LearningRateScheduler setting learning rate to 0.0001.\n",
"50/50 [==============================] - 134s 3s/step - loss: 3.8983 - val_loss: 4.4451\n",
"\n",
"Epoch 00100: val_loss did not improve from 4.29533\n"
]
}
],
"source": [
"#ENTRENAMIENTO DE MODELO\n",
"#####################################################################\n",
"# Instantiate two `DataGenerator` objects: One for training, one for validation.\n",
"######################################################################\n",
"# Optional: If you have enough memory, consider loading the images into memory for the reasons explained above.\n",
"\n",
"train_dataset = DataGenerator(load_images_into_memory=False, hdf5_dataset_path=None)\n",
"val_dataset = DataGenerator(load_images_into_memory=False, hdf5_dataset_path=None)\n",
"\n",
"# 2: Parse the image and label lists for the training and validation datasets. This can take a while.\n",
"\n",
"\n",
"\n",
"# The XML parser needs to now what object class names to look for and in which order to map them to integers.\n",
"classes = ['background' ] + labels\n",
"\n",
"train_dataset.parse_xml(images_dirs= [config['train']['train_image_folder']],\n",
" image_set_filenames=[config['train']['train_image_set_filename']],\n",
" annotations_dirs=[config['train']['train_annot_folder']],\n",
" classes=classes,\n",
" include_classes='all',\n",
" #classes = ['background', 'panel', 'cell'], \n",
" #include_classes=classes,\n",
" exclude_truncated=False,\n",
" exclude_difficult=False,\n",
" ret=False)\n",
"\n",
"val_dataset.parse_xml(images_dirs= [config['test']['test_image_folder']],\n",
" image_set_filenames=[config['test']['test_image_set_filename']],\n",
" annotations_dirs=[config['test']['test_annot_folder']],\n",
" classes=classes,\n",
" include_classes='all',\n",
" #classes = ['background', 'panel', 'cell'], \n",
" #include_classes=classes,\n",
" exclude_truncated=False,\n",
" exclude_difficult=False,\n",
" ret=False)\n",
"\n",
"#########################\n",
"# 3: Set the batch size.\n",
"#########################\n",
"batch_size = config['train']['batch_size'] # Change the batch size if you like, or if you run into GPU memory issues.\n",
"\n",
"##########################\n",
"# 4: Set the image transformations for pre-processing and data augmentation options.\n",
"##########################\n",
"# For the training generator:\n",
"\n",
"\n",
"# For the validation generator:\n",
"convert_to_3_channels = ConvertTo3Channels()\n",
"resize = Resize(height=img_height, width=img_width)\n",
"\n",
"######################################3\n",
"# 5: Instantiate an encoder that can encode ground truth labels into the format needed by the SSD loss function.\n",
"#########################################\n",
"# The encoder constructor needs the spatial dimensions of the model's predictor layers to create the anchor boxes.\n",
"if config['model']['backend'] == 'ssd300':\n",
" predictor_sizes = [model.get_layer('conv4_3_norm_mbox_conf').output_shape[1:3],\n",
" model.get_layer('fc7_mbox_conf').output_shape[1:3],\n",
" model.get_layer('conv6_2_mbox_conf').output_shape[1:3],\n",
" model.get_layer('conv7_2_mbox_conf').output_shape[1:3],\n",
" model.get_layer('conv8_2_mbox_conf').output_shape[1:3],\n",
" model.get_layer('conv9_2_mbox_conf').output_shape[1:3]]\n",
" ssd_input_encoder = SSDInputEncoder(img_height=img_height,\n",
" img_width=img_width,\n",
" n_classes=n_classes,\n",
" predictor_sizes=predictor_sizes,\n",
" scales=scales,\n",
" aspect_ratios_per_layer=aspect_ratios,\n",
" two_boxes_for_ar1=two_boxes_for_ar1,\n",
" steps=steps,\n",
" offsets=offsets,\n",
" clip_boxes=clip_boxes,\n",
" variances=variances,\n",
" matching_type='multi',\n",
" pos_iou_threshold=0.5,\n",
" neg_iou_limit=0.5,\n",
" normalize_coords=normalize_coords)\n",
"\n",
"elif config['model']['backend'] == 'ssd7':\n",
" predictor_sizes = [model.get_layer('classes4').output_shape[1:3],\n",
" model.get_layer('classes5').output_shape[1:3],\n",
" model.get_layer('classes6').output_shape[1:3],\n",
" model.get_layer('classes7').output_shape[1:3]]\n",
" ssd_input_encoder = SSDInputEncoder(img_height=img_height,\n",
" img_width=img_width,\n",
" n_classes=n_classes,\n",
" predictor_sizes=predictor_sizes,\n",
" scales=scales,\n",
" aspect_ratios_global=aspect_ratios,\n",
" two_boxes_for_ar1=two_boxes_for_ar1,\n",
" steps=steps,\n",
" offsets=offsets,\n",
" clip_boxes=clip_boxes,\n",
" variances=variances,\n",
" matching_type='multi',\n",
" pos_iou_threshold=0.5,\n",
" neg_iou_limit=0.3,\n",
" normalize_coords=normalize_coords)\n",
"\n",
"\n",
"\n",
" \n",
"data_augmentation_chain = DataAugmentationVariableInputSize(resize_height = img_height,\n",
" resize_width = img_width,\n",
" random_brightness=(-48, 48, 0.5),\n",
" random_contrast=(0.5, 1.8, 0.5),\n",
" random_saturation=(0.5, 1.8, 0.5),\n",
" random_hue=(18, 0.5),\n",
" random_flip=0.5,\n",
" n_trials_max=3,\n",
" clip_boxes=True,\n",
" overlap_criterion='area',\n",
" bounds_box_filter=(0.3, 1.0),\n",
" bounds_validator=(0.5, 1.0),\n",
" n_boxes_min=1,\n",
" background=(0,0,0))\n",
"#######################\n",
"# 6: Create the generator handles that will be passed to Keras' `fit_generator()` function.\n",
"#######################\n",
"\n",
"train_generator = train_dataset.generate(batch_size=batch_size,\n",
" shuffle=True,\n",
" transformations= [data_augmentation_chain],\n",
" label_encoder=ssd_input_encoder,\n",
" returns={'processed_images',\n",
" 'encoded_labels'},\n",
" keep_images_without_gt=False)\n",
"\n",
"val_generator = val_dataset.generate(batch_size=batch_size,\n",
" shuffle=False,\n",
" transformations=[convert_to_3_channels,\n",
" resize],\n",
" label_encoder=ssd_input_encoder,\n",
" returns={'processed_images',\n",
" 'encoded_labels'},\n",
" keep_images_without_gt=False)\n",
"\n",
"# Summary instance training\n",
"category_train_list = []\n",
"for image_label in train_dataset.labels:\n",
" category_train_list += [i[0] for i in train_dataset.labels[0]]\n",
"summary_category_training = {train_dataset.classes[i]: category_train_list.count(i) for i in list(set(category_train_list))}\n",
"for i in summary_category_training.keys():\n",
" print(i, ': {:.0f}'.format(summary_category_training[i]))\n",
"\n",
"\n",
"\n",
"# Get the number of samples in the training and validations datasets.\n",
"train_dataset_size = train_dataset.get_dataset_size()\n",
"val_dataset_size = val_dataset.get_dataset_size()\n",
"\n",
"print(\"Number of images in the training dataset:\\t{:>6}\".format(train_dataset_size))\n",
"print(\"Number of images in the validation dataset:\\t{:>6}\".format(val_dataset_size))\n",
"\n",
"\n",
"\n",
"##########################\n",
"# Define model callbacks.\n",
"#########################\n",
"\n",
"# TODO: Set the filepath under which you want to save the model.\n",
"model_checkpoint = ModelCheckpoint(filepath= config['train']['saved_weights_name'],\n",
" monitor='val_loss',\n",
" verbose=1,\n",
" save_best_only=True,\n",
" save_weights_only=False,\n",
" mode='auto',\n",
" period=1)\n",
"#model_checkpoint.best =\n",
"\n",
"csv_logger = CSVLogger(filename='log.csv',\n",
" separator=',',\n",
" append=True)\n",
"\n",
"learning_rate_scheduler = LearningRateScheduler(schedule=lr_schedule,\n",
" verbose=1)\n",
"\n",
"terminate_on_nan = TerminateOnNaN()\n",
"\n",
"callbacks = [model_checkpoint,\n",
" csv_logger,\n",
" learning_rate_scheduler,\n",
" terminate_on_nan]\n",
"\n",
"\n",
"\n",
"batch_images, batch_labels = next(train_generator)\n",
"\n",
"\n",
"initial_epoch = 0\n",
"final_epoch = 100 #config['train']['nb_epochs']\n",
"steps_per_epoch = 50\n",
"\n",
"history = model.fit_generator(generator=train_generator,\n",
" steps_per_epoch=steps_per_epoch,\n",
" epochs=final_epoch,\n",
" callbacks=callbacks,\n",
" validation_data=val_generator,\n",
" validation_steps=ceil(val_dataset_size/batch_size),\n",
" initial_epoch=initial_epoch,\n",
" verbose = 1 if config['train']['debug'] else 2)\n",
"\n",
"history_path = config['train']['saved_weights_name'].split('.')[0] + '_history'\n",
"\n",
"np.save(history_path, history.history)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
2020-02-06 16:47:03 -03:00
"execution_count": 2,
2020-02-06 10:21:56 -03:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_keys(['val_loss', 'loss', 'lr'])\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"experimento_ssd7_panel.h5\n"
]
}
],
"source": [
"#Graficar aprendizaje\n",
"\n",
"history_path =config['train']['saved_weights_name'].split('.')[0] + '_history'\n",
"\n",
"hist_load = np.load(history_path + '.npy',allow_pickle=True).item()\n",
"\n",
"print(hist_load.keys())\n",
"\n",
"# summarize history for loss\n",
"plt.plot(hist_load['loss'])\n",
"plt.plot(hist_load['val_loss'])\n",
"plt.title('model loss')\n",
"plt.ylabel('loss')\n",
"plt.xlabel('epoch')\n",
"plt.legend(['train', 'test'], loc='upper left')\n",
"plt.show()\n",
"\n",
"print(config['train']['saved_weights_name'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Evaluación del Modelo"
]
},
{
"cell_type": "code",
2020-03-11 14:04:23 -03:00
"execution_count": 2,
2020-02-06 10:21:56 -03:00
"metadata": {},
2020-02-06 16:47:03 -03:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2020-03-11 14:04:23 -03:00
"Processing image set 'train.txt': 100%|██████████| 1/1 [00:00<00:00, 18.71it/s]\n",
"Processing image set 'test.txt': 100%|██████████| 1/1 [00:00<00:00, 25.23it/s]\n",
2020-02-06 16:47:03 -03:00
"Number of images in the evaluation dataset: 1\n",
"\n",
2020-03-11 14:04:23 -03:00
"Producing predictions batch-wise: 100%|██████████| 1/1 [00:00<00:00, 1.82it/s]\n",
"Matching predictions to ground truth, class 1/1.: 100%|██████████| 200/200 [00:00<00:00, 6641.60it/s]\n",
2020-02-06 16:47:03 -03:00
"Computing precisions and recalls, class 1/1\n",
"Computing average precision, class 1/1\n",
"200 instances of class panel with average precision: 0.8982\n",
"mAP using the weighted average of precisions among classes: 0.8982\n",
"mAP: 0.8982\n",
"panel AP 0.898\n",
"\n",
" mAP 0.898\n"
]
}
],
2020-02-06 10:21:56 -03:00
"source": [
"\n",
"config_path = 'config_7_panel.json'\n",
"\n",
"with open(config_path) as config_buffer:\n",
" config = json.loads(config_buffer.read())\n",
"\n",
" \n",
"model_mode = 'training'\n",
"# TODO: Set the path to the `.h5` file of the model to be loaded.\n",
"model_path = config['train']['saved_weights_name']\n",
"\n",
"# We need to create an SSDLoss object in order to pass that to the model loader.\n",
"ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)\n",
"\n",
"K.clear_session() # Clear previous models from memory.\n",
"\n",
"model = load_model(model_path, custom_objects={'AnchorBoxes': AnchorBoxes,\n",
" 'L2Normalization': L2Normalization,\n",
" 'DecodeDetections': DecodeDetections,\n",
" 'compute_loss': ssd_loss.compute_loss})\n",
"\n",
"\n",
" \n",
"train_dataset = DataGenerator(load_images_into_memory=False, hdf5_dataset_path=None)\n",
"val_dataset = DataGenerator(load_images_into_memory=False, hdf5_dataset_path=None)\n",
"\n",
"# 2: Parse the image and label lists for the training and validation datasets. This can take a while.\n",
"\n",
"\n",
"\n",
"# The XML parser needs to now what object class names to look for and in which order to map them to integers.\n",
"classes = ['background' ] + labels\n",
"\n",
"train_dataset.parse_xml(images_dirs= [config['train']['train_image_folder']],\n",
" image_set_filenames=[config['train']['train_image_set_filename']],\n",
" annotations_dirs=[config['train']['train_annot_folder']],\n",
" classes=classes,\n",
" include_classes='all',\n",
" #classes = ['background', 'panel', 'cell'], \n",
" #include_classes=classes,\n",
" exclude_truncated=False,\n",
" exclude_difficult=False,\n",
" ret=False)\n",
"\n",
"val_dataset.parse_xml(images_dirs= [config['test']['test_image_folder']],\n",
" image_set_filenames=[config['test']['test_image_set_filename']],\n",
" annotations_dirs=[config['test']['test_annot_folder']],\n",
" classes=classes,\n",
" include_classes='all',\n",
" #classes = ['background', 'panel', 'cell'], \n",
" #include_classes=classes,\n",
" exclude_truncated=False,\n",
" exclude_difficult=False,\n",
" ret=False)\n",
"\n",
"#########################\n",
"# 3: Set the batch size.\n",
"#########################\n",
"batch_size = config['train']['batch_size'] # Change the batch size if you like, or if you run into GPU memory issues.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"evaluator = Evaluator(model=model,\n",
" n_classes=n_classes,\n",
" data_generator=val_dataset,\n",
" model_mode='training')\n",
"\n",
"results = evaluator(img_height=img_height,\n",
" img_width=img_width,\n",
" batch_size=4,\n",
" data_generator_mode='resize',\n",
" round_confidences=False,\n",
" matching_iou_threshold=0.5,\n",
" border_pixels='include',\n",
" sorting_algorithm='quicksort',\n",
" average_precision_mode='sample',\n",
" num_recall_points=11,\n",
" ignore_neutral_boxes=True,\n",
" return_precisions=True,\n",
" return_recalls=True,\n",
" return_average_precisions=True,\n",
" verbose=True)\n",
"\n",
"mean_average_precision, average_precisions, precisions, recalls = results\n",
"total_instances = []\n",
"precisions = []\n",
"\n",
"for i in range(1, len(average_precisions)):\n",
" \n",
" print('{:.0f} instances of class'.format(len(recalls[i])),\n",
" classes[i], 'with average precision: {:.4f}'.format(average_precisions[i]))\n",
" total_instances.append(len(recalls[i]))\n",
" precisions.append(average_precisions[i])\n",
"\n",
"if sum(total_instances) == 0:\n",
" \n",
" print('No test instances found.')\n",
"\n",
"else:\n",
"\n",
" print('mAP using the weighted average of precisions among classes: {:.4f}'.format(sum([a * b for a, b in zip(total_instances, precisions)]) / sum(total_instances)))\n",
" print('mAP: {:.4f}'.format(sum(precisions) / sum(x > 0 for x in total_instances)))\n",
"\n",
" for i in range(1, len(average_precisions)):\n",
" print(\"{:<14}{:<6}{}\".format(classes[i], 'AP', round(average_precisions[i], 3)))\n",
" print()\n",
" print(\"{:<14}{:<6}{}\".format('','mAP', round(mean_average_precision, 3)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cargar nuevamente el modelo desde los pesos.\n",
"Predicción"
]
},
{
"cell_type": "code",
2020-03-11 14:04:23 -03:00
"execution_count": 16,
2020-02-06 10:21:56 -03:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Training on: \t{'panel': 1}\n",
2020-03-08 23:54:47 -03:00
"\n"
2020-02-06 10:21:56 -03:00
]
}
],
"source": [
"#############################\n",
"####Prediction\n",
"#############################\n",
"\n",
"from imageio import imread\n",
"from keras.preprocessing import image\n",
"import time\n",
"\n",
"def makedirs(path):\n",
" try:\n",
" os.makedirs(path)\n",
" except OSError:\n",
" if not os.path.isdir(path):\n",
" raise\n",
"\n",
"\n",
"config_path = 'config_7_panel.json'\n",
2020-03-08 23:54:47 -03:00
"input_path = ['Prueba_1/']#input_path = ['../panel_jpg/Mision_1/', '../panel_jpg/Mision_2/']\n",
2020-02-06 10:21:56 -03:00
"output_path = 'result_ssd7_panel/'\n",
"\n",
"with open(config_path) as config_buffer:\n",
" config = json.loads(config_buffer.read())\n",
"\n",
"makedirs(output_path)\n",
"###############################\n",
"# Parse the annotations\n",
"###############################\n",
2020-03-08 23:54:47 -03:00
"score_threshold = 0.95\n",
"score_threshold_iou = 0.3\n",
2020-02-06 10:21:56 -03:00
"labels = config['model']['labels']\n",
"categories = {}\n",
"#categories = {\"Razor\": 1, \"Gun\": 2, \"Knife\": 3, \"Shuriken\": 4} #la categoría 0 es la background\n",
"for i in range(len(labels)): categories[labels[i]] = i+1\n",
"print('\\nTraining on: \\t' + str(categories) + '\\n')\n",
"\n",
"img_height = config['model']['input'] # Height of the model input images\n",
"img_width = config['model']['input'] # Width of the model input images\n",
"img_channels = 3 # Number of color channels of the model input images\n",
"n_classes = len(labels) # Number of positive classes, e.g. 20 for Pascal VOC, 80 for MS COCO\n",
"classes = ['background'] + labels\n",
"\n",
"model_mode = 'training'\n",
"# TODO: Set the path to the `.h5` file of the model to be loaded.\n",
"model_path = config['train']['saved_weights_name']\n",
"\n",
"# We need to create an SSDLoss object in order to pass that to the model loader.\n",
"ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)\n",
"\n",
"K.clear_session() # Clear previous models from memory.\n",
"\n",
"model = load_model(model_path, custom_objects={'AnchorBoxes': AnchorBoxes,\n",
" 'L2Normalization': L2Normalization,\n",
" 'DecodeDetections': DecodeDetections,\n",
" 'compute_loss': ssd_loss.compute_loss})\n",
"\n",
"\n",
"\n",
"\n",
"\n",
2020-03-08 23:54:47 -03:00
"#model.summary()\n"
2020-02-06 10:21:56 -03:00
]
},
{
"cell_type": "code",
2020-03-11 14:04:23 -03:00
"execution_count": 17,
2020-03-08 23:54:47 -03:00
"metadata": {
"scrolled": false
},
2020-02-06 10:21:56 -03:00
"outputs": [
2020-03-08 23:54:47 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-11 14:04:23 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-08 23:54:47 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAKvCAYAAACcSNW+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvUmOZEuWpneu9o01bubuLyNeRA5ywB0UyBUQ4IxTkguoERdA5FJywDFXUADXUGMSyMgCcxDJjJfxOrdOWzNVDgy/2Hd/PXLNPCocZSTvAQxqelXaI0dOL3Kb4/EYPfTQQw899NBDDz300EMPPfx1YfBfegA99NBDDz300EMPPfTQQw//X4Te2Oqhhx566KGHHnrooYceevgG0BtbPfTQQw899NBDDz300EMP3wB6Y6uHHnrooYceeuihhx566OEbQG9s9dBDDz300EMPPfTQQw89fAPoja0eeuihhx566KGHHnrooYdvAN/E2Gqa5r9rmuYfm6b5T03T/C/foo8eeuihhx566KGHHnrooYf3DM1f+z1bTdMMI+IPEfHfRsS/RMR/jIj/8Xg8/p9/1Y566KGHHnrooYceeuihhx7eMXyLyNZ/HRH/6Xg8/l/H43EXEf9bRPz336CfHnrooYceeuihhx566KGHdwujb9Dm7yLij/j+LxHx33RVODs7O378+LH6e9M0b3rmzxm10//H4/HkuerwczBo26Gs723XICvTNRdvu2mak/Lepv9eK+9tZnjKxpv1V8N9Ng6Vd5x7u1k/r+HP+6i19bVQa+twOLToheW7cJLN92v6zui4C1jPaesvGRvXgv/X9tFr/bCt8Xgck8kkIqLsucfHx3h8fCxlRqNnNnU4HMrv+s3n6+PJxqR2mqaJw+GQ0lQ2/gy+dt1fo1V9F61FPONFuCHuNA8+n0wmMR6PSxv7/b5VJ+tX43x6eirPxuNxJ+85HA7lbzgcRkSUdfLyx+OxjPXp6SkGg0GMRqNX14/jGY1GVZ7Mto/HYwwGgzImx1W2H9T28Xhs0ZaeOfwlfNq/+1xU5q0yI2uzq97X8hCOh3SouWqtxQ/2+321ba6JaFPr/5oseYus8bIZL8rWrAYZPXbJ2a/hyV8zn9fa7uJbvnZZW12y4TWd6y+RsV8z99f0ha42a3uvxo/FK7Qnszafnp7i6emp8BHy59qn+Bx5EfnmW8bsY/1Ly3WVr8Ffow0fF/93fZvPxP/fQsNvGc/X7ru31r25uYn1ev2mxr+FsZV1fIKNpmn+fUT8+4iI6+vr+Pu///vngmBKJH5nzFJAKJDfapQdDodSj0SvTTEej2M8Hp8IbApjKRCHw6ElOHe7XUocTljD4fBEGeGYXCHRJzcqiVQwnU5bwma/38fj42OpMxqNqgyA+NB4NCbNcTAYFIHJMTnjpgLWNE1rncS0uvA0GAxOFCQ9J759k6otF5Qcg9aSY9J6OL0cDofYbretcUux0O/T6TTOzs5iPp+X/g+HQ9ze3kZExGazaT1XPSkhmsfT01MMh8MThkMm//T0lDItPtN6u3JMWpEiybUXfbOchBHpwAU56URlfB1ET4+Pj+XZeDyOz58/x9/93d9FxDPtDgaDuLm5iX/913+NiIj5fB6fP3+O/X4f9/f3ERFxe3tbGLHa1jj4bDgctpR0jlffd7td67fj8RiTySRV1tnPZrOJx8fHmE6nERGxXC5b+4CCQvSyWq1it9vFx48fS72maeLx8bGFv91uF7e3t4Vu5vN5fPjwoTXOpmnK2CNe9vn3338f19fXEfEsCP70pz+VuXz8+LG1Z0Urx+MxNptN3N3dlT4+ffpUxsh+xf+2222sVqu4u7srY7u6uipjUx/aPxrrw8NDTKfTuL6+LuPS3Pm53+9js9mUcX748CEmk8kJTRO/m80mjsdjzGaz1tg5bpU/HA6xXC4jIuK3v/1tzGaz2O/38euvv5Zyg8GghWM3SsnrSC8ZvrgfRZechz69bfK74XDYklcqz2eSCW7MuXypGUXcs/qf7Y9Go5jNZiHn6GKxiMfHx3h4eCh1JpNJjEaj0o7WZzweF5wvFotW33K8zGazIl+EV5exwovPuUvpcl7XZcAKT+7UYV/kkZlx5m1RtuhzOBy25kFcs03yNT2jHNZY2Jb2kHDvdMJxZPKSBoiPu2vO/rvaYH1XtDlvrTd1rd1ulxonnDN5fLafIl6ceL4XZ7NZDAaDwjNms1mL1xwOh1iv17FareLnn3+OiIj1el34CHHMNRefE3+MeOabd3d3hbdTvrvzzPcp979+y/arO+LcQfqWva9nWTn/32knW3uNX5/a7xHPfEH6kxyvERFfvnyJh4eHQgdufImOvsYQ999cLyc91Xgp6/3DP/xDtQ+Hb5FG+C8R8bf4/vuI+FcvdDwe/+F4PP674/H4787Ozr7BMHrooYceeuihhx566KGHHv7LwbeIbP3HiPivmqb5u4j4vyPif4iI/6mrgns63EuTpRu4ZUrPFT1HAkatIqJlLau+e5w8ouJhziyy5d4HTz1TVCvzNqgdRi+y0HbNGj8ej2We9LBnUUGHzPvknhaNuTZuH5/6F644psyD5+NWGc6PtJF5a+jd8fGwz8Ph0IqyEH+iCUW75IVSmfV6Xb7LQz4ajQptRTzT12q1iohopdjQa+p0cTweW5EY0Q4jR46TzPNC3InONR951Ikv99CSpp0OiT+PKDld0rMoGmQ97SmNcTKZxOFwiPF4XLyM9NQpwshxaV6On/1+H9vtNobDYVxcXJzgX+MeDAbx+PhY1ni328X19XVZS3oryTP2+32s1+vS3mw2a/EbzZ840JjcQ0yaJm7Im3w9np6eWtGDpmlitVrFP/7jP4acV+r//Pw8Ip6jSufn5ycpML5n1F+2z4j/wWBQvMAas5fRn3CzWCxOUhSdxo7HY8ksUHuqk0UTVE9RfeIly2DIovWiQ43TccL1cZrOohxd+yeTLRlvc7x3RbWz6AP/V0aDA/dG5vV2z7oiusTBZDIp+1VprLPZrOzXX3/9NR4eHmK9XpcIWBapWiwWcXV1Veh1PB4XXuTyIcPBa175THb47/zMytaiQa+1mZXpSm31MWfRSJ9vpmeQ/ms48mgBZbVHoGqQyVxfs2wNswwML5dFKDL8Z2PmJyPp5OWSE4x2ebRaKbDcQ2pHdC5apQxar9cxmUwKLe33+9jtdiVirr2UZfr4s9ciVB71FnCvecTLgWuVRTJrqdz+P+lQ4+7SafU7o7Xz+Tyenp4KrsT/av04XjIbgfU8ksVIM793Rcg8o6EL/urG1vF4fGya5n+OiP89IoYR8b8ej8f/45U6J8SRhQuzxc8YUJbSVFPYmU7l7TgTeAvDeS2dIWPWDAmzP5bnc5ZzZVuKvZ4xdB7xoog7Y8xSYVyJyDY3leGsnso5I6gZW95+hgOnA8dlBlnapqdPKvXMGQvp6Xg8tlKLnp6eYjwetxSQLKWoZjTRKGIKhX5zQ9GfZzTDfpmewe9s1x0IXu5wOKTncbiG3Hf7/b6kj3oZjlfpR1++fImI53S5w+EQu92uCMPHx8fyXcar0i1dQSDuHh8fY71eR9M0RXlzpYV4Vn+r1SrOz89b6QyZU6NpmtZ6On/inJ3WHx8fW2deyI80TjdI3Knj/e33+2Kg/P73v4+I55SVX375paRszefzE14qfkUDt7a+6jfixWlFRTszhCKilQ6tMfoYnCfRiMqekR/XDBziiWMS7WjN9/t9TKfTYjhojZgurLqPj4+dPFFj8//dePL5ZYqV8JQ5wjTf4XAYk8mkjFt0yXFy/OpLcqDLuHO5tNvtYrPZtNJC5XhSO4vFIj5//lzGERFxf38fv/zyy8lZTM5NhtVyuWzRWg3HHGu29xy6jJ5a2UyWZ4ZdZsTUDAWWFX5rymdWX7914YR9ufPAy3lbzrOcN/kcvc1svBmPdJ6ocWb9+m+1FDqm4Ht/3ib1of1+H03TlP2+3+9b+lC2F+WgYxqh6w8Rz6nNTdMUHulOUKV/Z2memVHRhW/hw+nRneaql9FL7TvpuTYWtqsy4v1
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-11 14:04:23 -03:00
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEICAYAAABPgw/pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAEURJREFUeJzt3XuQnXV9x/H3B4IFhIKW9cIlrlqkWkalZgSkXgo4E0TFdnCEokKLzVTqdewoXlqwnSK2DqOtrTYClVaKWESlUhVquQwtUgOigkFhgEi4JUoRAioGvv3jPJFls5vNnnN2T/Lb92tmZ89zOc/v+3uS/ezv/J5znk1VIUna+m0z6gIkScNhoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAX4CSXJ/kZaOuY0uQ5H1JTt/E9uOSXDGfNQ3bTH1I8pUkx85nTZobBnpjktya5NBJ6x7zA11Vv1lVl85wnPEklWTRHJW6RaiqU6rqTTCcPnfnf3zQupKcnOQzs9z/5H7aqqrDquqsfp6rLYuBrpFo/ReFNAoG+gI0cRSf5IVJViS5L8ndSU7rdru8+35vknVJDkyyTZIPJFmVZE2Sf06yy4TjvrHb9uMkfzapnZOTnJfkM0nuA47r2r4yyb1J7kzy8SSPm3C8SnJCkhuT3J/kL5M8s3vOfUk+N3H/SX1cleQF3ePXd8d6Trf8piRfnFDXhpHwRn2ecLyPJPm/JLckOWwzz/PhSb7V1XrbxBF0kpclWT3Vv0uSpcD7gNd1dXy72757kguS3JPkpiR/tDl1PHr4/F2SnyS5IckhEzZcmmTDq5TjklwxXX+77Td3/x63JDlmFjVojhno+hjwsar6VeCZwOe69S/pvu9aVTtV1ZXAcd3X7wDPAHYCPg7QheU/AMcATwV2AfaY1NYRwHnArsDZwMPAO4HdgAOBQ4ATJj1nKfAC4ADg3cDyro29gH2Bo6fp12XAyyb05WbgpROWL5viOVP1GWB/4PtdnX8NnJEkUzVaVeNVdWu3+ADwxq6/hwNvTvKaaeqdeIyvAqcA53Z1PK/bdA6wGtgdOBI4ZUMwV9XJVXXyJg67P71zsBtwEnB+kiduYt+N+pvk8cDfAodV1c7Ai4BrZ+qP5o+B3qYvdqPee5PcSy9op/ML4NeT7FZV66rqG5vY9xjgtKq6uarWAe8FjuqmT44E/r2qrqiqh4A/BybfKOjKqvpiVT1SVT+tqqur6htVtb4LwX/k0dDd4MNVdV9VXQ9cB1zUtf8T4CvAftPUetmEY70Y+NCE5ZcydaBPZ1VVfaqqHgbOovcL68kzPamqLq2q73b9/Q69QJ7cv82SZC/gt4H3VNXPqupa4HTgDZt5iDXAR6vqF1V1Lr3APnyafTfV30eAfZPsUFV3dv8u2kIY6G16TVXtuuGLjUe9Ex0PPAu4Ick3k7xyE/vuDqyasLwKWETvh3134LYNG6rqQeDHk55/28SFJM9K8uUkd3XTMKfQGxVOdPeExz+dYnmnaWq9DHhxkqcA2wLnAgd1Fyx3YXYjy7s2POj6xSba/aUk+ye5JMnaJD8B/piN+7e5dgfuqar7J6xbxcavgqZzez32TnyrumNOZcr+VtUDwOvo9ePOJBcm+Y3NbF/zwEBf4Krqxqo6GngS8GHgvO6l9VS34bwDeNqE5cXAenoheyew54YNSXYAfm1yc5OWPwHcAOzdTfm8D5hyKmO2quom4EHgbcDlXRDeBSwDrqiqR6Z62jDanuBfgQuAvapqF+CTPNq/B4AdN+yYZFtgbBO13AE8McnOE9YtBm7fzFr2mDRNtLg75qxU1deq6uX0Ru03AJ+a7TE0dwz0Ba67YDjWBdy93eqHgbX0Xl4/Y8Lu5wDvTPL0JDvx6Dzvenpz469K8qLuQuUHmTmcdwbuA9Z1I703D61jPZcBb+HR6ZVLJy1PNlWfB7EzvVH1z5K8EPj9Cdt+AGzfXTjdDvgA8CsTtt8NjCfZBqCqbgP+B/hQku2TPJfeq6uzN7OWJwFvS7JdktcCzwb+YzadSfLkJK/ufuH/HFhH7/+KthAGupYC1ydZR+8C6VHdHO2DwF8B/93NxR8AnAn8C713g9wC/Ax4K0A3l/pW4LP0Ruv305u3/fkm2v5TeiF3P72R3rlD7ttl9EL18mmWH2OaPg/iBOAvktxP75rChgvOdNcATqA3D347vRH7xHe9/Fv3/cdJrukeHw2M0xtZfwE4qaou3sxargL2Bn5Er49HVtXkKbGZbAO8q2v/HnrXAzY1nad5Fv/AheZCN4K/l950yi2jrkdaCByha2iSvCrJjt1L8o8A3wVuHW1V0sJhoGuYjqD3cvwOei/vjypfAkrzxikXSWqEI3RJasS83iBpt912q/Hx8flsUpK2eldfffWPqmpspv3mNdDHx8dZsWLFfDYpSVu9JKtm3sspF0lqhoEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJasS8flJUwzd+4oVzevxbT53u7whL2tI4QpekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhoxY6AnOTPJmiTXTVj3N0luSPKdJF9IsuvclilJmsnmjNA/DSydtO5iYN+qei7wA+C9Q65LkjRLMwZ6VV0O3DNp3UVVtb5b/Aaw5xzUJkmahWHMof8h8JUhHEeSNICBAj3J+4H1wNmb2GdZkhVJVqxdu3aQ5iRJm9B3oCc5FnglcExV1XT7VdXyqlpSVUvGxsb6bU6SNIO+/mJRkqXAe4CXVtWDwy1JktSPzXnb4jnAlcA+SVYnOR74OLAzcHGSa5N8co7rlCTNYMYRelUdPcXqM+agFknSAPykqCQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNmDHQk5yZZE2S6yase2KSi5Pc2H1/wtyWKUmayeaM0D8NLJ207kTg61W1N/D1blmSNEIzBnpVXQ7cM2n1EcBZ3eOzgNcMuS5J0iz1O4f+5Kq6E6D7/qThlSRJ6secXxRNsizJiiQr1q5dO9fNSdKC1W+g353kqQDd9zXT7VhVy6tqSVUtGRsb67M5SdJM+g30C4Bju8fHAl8aTjmSpH5tztsWzwGuBPZJsjrJ8cCpwMuT3Ai8vFuWJI3Qopl2qKqjp9l0yJBrkSQNwE+KSlIjDHRJaoSBLkmNMNAlqREGuiQ1wkCXpEYY6JLUCANdkhphoEtSIwx0SWrEjB/9XyjGT7xwzo5966mHz9mxJWkDR+iS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJasRAgZ7knUmuT3JdknOSbD+swiRJs9N3oCfZA3gbsKSq9gW2BY4aVmGSpNkZdMplEbBDkkXAjsAdg5ckSepH3/dDr6rbk3wE+CHwU+Ciqrpo8n5JlgHLABYvXtxvc1u1ubzXuiRtMMiUyxOAI4CnA7sDj0/y+sn7VdXyqlpSVUvGxsb6r1SStEmDTLkcCtxSVWur6hfA+cCLhlOWJGm2Bgn0HwIHJNkxSYBDgJXDKUuSNFt9B3pVXQWcB1wDfLc71vIh1SVJmqWB/kh0VZ0EnDSkWiRJA/CTopLUCANdkhphoEtSIwx0SWqEgS5JjTDQJakRBrokNcJAl6RGGOiS1AgDXZIaYaBLUiMMdElqhIEuSY0w0CWpEQa6JDXCQJekRhjoktQIA12SGmGgS1IjDHRJaoSBLkmNMNAlqREGuiQ1YqBAT7JrkvOS3JBkZZIDh1WYJGl2Fg34/I8BX62qI5M8DthxCDVJkvrQd6An+VXgJcBxAFX1EPDQcMqSJM3WIFMuzwDWAv+U5FtJTk/y+Mk7JVmWZEWSFWvXrh2gOUnSpgwS6IuA3wI+UVX7AQ8AJ07eqaqWV9WSqloyNjY2QHOSpE0ZJNBXA6u
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-08 23:54:47 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAKvCAYAAACcSNW+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvUmObEuSpifWd95c9/teNBkkEDXgDgrkCghwxinJBdSIC2BuhQMih1xBAVxDjUmARIEIFLOJiHwvbuPu1jccOH717/wmeszuy7goZ/EI4DC3Y9qKikqvenqn0yk66KCDDjrooIMOOuiggw46+OtC/z/2ADrooIMOOuiggw466KCDDv5ThM7Y6qCDDjrooIMOOuiggw46+A7QGVsddNBBBx100EEHHXTQQQffATpjq4MOOuiggw466KCDDjro4DtAZ2x10EEHHXTQQQcddNBBBx18B+iMrQ466KCDDjrooIMOOuigg+8A38XY6vV6/02v1/s/e73ev+/1ev/T9+ijgw466KCDDjrooIMOOujgPUPvr/2erV6vN4iI/ysi/uuI+PuI+HcR8d+fTqf/46/aUQcddNBBBx100EEHHXTQwTuG7xHZ+i8j4t+fTqf/+3Q6bSPif42I//Y79NNBBx100EEHHXTQQQcddPBuYfgd2vxdRPw/+P73EfFftVW4ubk5ffz48Zs66fV68UuicqrT6/XOnl373Z/zk2X990ugMfV6vej3+9HvN23h4/EYx+Ox2i7r8//BYBCDwaAxLh+rjz8bs8ZT6/d7APu6ph/OgThgW/494hW3Xj6jMX0/Ho9nZdku62b4Hg6Hjfkcj8fo9/tVumRbpIHBYHBGJyzLMZ1OpwYdePnafGvt+7MMbxmuCbV9nD1TW+PxOAaDQWOeh8MhXfs2WuWatYHTRW3s3nY2p3/pXvkWnteGc9Hvfr+P3W4XvV4vRqNRo+5w+CoeLtFYjWfUeMyl8freqbWnPdvGc7+Vl38rZDQxHA7LPtPnfr+P/X4fERGHw+Gsb2+n9izr869BV38tuLQH+JtkU8QrPyRNRrzx2Gvmdw3P+V44+pfsScn6iDf56jI+o2XH3Wg0ugpH1zz7FvC919beX5N+2+SDl3P81uRcxkfa+rum/18CNTy1la19/9Z+2/htbTwqczgcGrRLoKzN9BzXkb5Vd/5WyHhETfeq6Y8REZ8/f47VanXVwn8PYyvr+AxjvV7v30TEv4mIeHx8jL/92799K2wIluGx3+8bG6fN2Ih4Y1ptStXpdCrMncYE64iICDR8JDyPx2Nst9vyfbfbxeFwaNRXnYxJSdmZzWaxWCxiOp2WctvtNl5eXuLl5SU2m01py4WbBP10Oo2IiJubm7i7u4v5fN6Yi5QstaPf9Gy/3zeY4GAwiPF4HMfjMVarVelPfbqh4XOjgqH1zDYc8atnZJK1deT6aOzj8bj0lzEBjmmz2ZR5aB2klLLe4XCI/X4fLy8vERExnU4LblRut9tFv99vtL9areLLly+x3W4jIuLu7i5ubm7K3A6HQ/zwww8NY2i/35f+tS6iA/X18ePHMk/SoehS/WnN5NQYj8eFFoi73W5XDD99v729bYyz1+vFfr8v/Wk99b3X68VkMon9ft/Yk6I79Sdl3o14GU7E5X6/j9vb24iI+M1vfhMPDw+xXC5Lvc+fP5f95mvrjJM0pLFzfzoMBoMGXdDQ1f8u0EVLg8GgzFN11R77zwz9NoeQAwUBlVQ6bWiUiod8/vw5/sN/+A9xc3MTv/nNbyLidS/sdrtCK4+PjzGZTBr4Ee0MBoPCP7XvuI5uBPN/V368jPPIjFYJ+p3l/LvoVn98Rtr0ehwT96jT8mw2i48fP8aPP/4YERHz+TxWq1X80z/9U/z0008Fv25wOW4EmeFJwzfjkSzLZ6xT+62NJ9eUWf5GWs4cO4LJZBKLxSIeHx8jIuLDhw/R6/Xi+fm54Onz58+F39QcYPrN90umUHs7WR3OSfLVZZXLXdKIPrO2qGsIhsNh3NzcRETE7e1t9Hq92Gw28fT0FBFvRrq3ORgM4u7uLiIi/uZv/iYeHh5iOp02nIBugGoe7jjJ8HCNYUYZoP2pNdd4OW7KB0FmINecW14nA69zPB6LfJxOpzEcDtP9s9vtqnwsMwKoYwpcjjmes/qcc0Y/NRywPHlW5nS85PgTbUo+sy3xWNEc+Z/GoHV9fn6O5XLZ4Mt0qkh+TqfTGI/HDbpYr9exXC6LvuK6TA13jtcMrqnXRvNt/f/d3/1dtV+H75FG+PcR8Z/j+38WEf/ohU6n0/98Op3+9el0+tdiNh100EEHHXTQQQcddNBBB/+pwPeIbP27iPgver3ev4qIf4iI/y4i/oe2CvTcZ0DPuVv/macq84LRGpfVrrbllax5d+i9dU8RLX1FBNS26rmH9nA4NCJz8kzIAzOfz2M2mzUiRmp7OByeecsI8qTLE71YLGIymTS8LsInPfXy4mod6JVWu/pfuKD3jO3Tcy8vizyUjmeuJ+dzyfuV1eeYal5Lzc1/H41GZx7MbBxad0UOuUZOd4yy7Pf7GA6HMZvNIuLVk3t3d1fKrFar1BvpHlr3ICrFy73bHh1w75m8s1xXrfdutyvtkwY4BvYn7+t6vY6I12iqPIgeGaBnVfUUdVUElOMmTYimtU/oJRa9MgLHeWkM9DYqdckjIe4ZZASEa6DyEW+RdtJAv98/S8FzWtZ+Fb5ZR3yJnlJG0Jw2a5EE4tIzAoST6XTaaHs4HDbSCIUTT+1y7zYh209Z9MbHqTHW6E7/ix78d4+AMdpHLy6jdNdEtjw6IU8wcT+dTmM2mxUalaxxD3iGS/Ikzt0zLmr48Ho1/Hpd4qnmSa/VYd1sjGyXdT27YrvdRq/Xi5eXlxKF53pk8qA25jYvdU0mZL9zXTwNP4tsZePL+B/LUeau1+sYDAZxOBwaOoWeOaif7XYb6/W6wVtr6eLkR7U9xk+PTrWBt5fJMy9T67+tP6elNmBZz7S4NBdvh8/bIiJZROvSGLMxZd/Zr2iDMsijrF6vrR/PgiA9ue4t4BGVxWIRw+GwofMyu4zyZTKZNCJbygrzyC/l1SW5wf9rfNLxkclmL9Omi16zLwR/dWPrdDrte73e/xgR/1tEDCLifzmdTv97W53j8VgUtbbJ83cPies7nwnJVCizMtnmcKNNwpNjdoVWxK/vo9GoYdSpPw+ns3zEq1Kp/5mWJKOJSjyZcK/3lkYoBVZpbpy/FDo3DmiEivipsK7X65Ji5EDmzlA9GS7nm6VTurHlG6KNUWcbsbZJnWGpD9IF+2M7mgdTFLM0U59Xv9+P2WwW9/f3ERFxf38ft7e3he455zZBIsHP1LRLuIyIQhd0LDgT1Hcaxp7mJuZOPO33+1itViWtT5Fq0iqVVz1bLpcNpZnpnhn+lPq22WxisVgUw3W1WjXaVR3Nic4BMm8ye4FoM1OmsnNLvu40PIbDYVHiBb7nNSb2p/3pglPP9T95FI00N/hEq+PxuHEuK+J17UajUUwmk+qYuA+cZ5CP+D4Qb72kHGUOhZrSdclgIH9lfd/D3B9uVNX68vaZSs79MZ/PC86Xy2UMBoO4ubkpdKA0QqYteT/ZPsjG4kYaeXk2D+LlkkLhv2UKpvOsNpnt+JRMiXilze12G8/Pz/H8/NwYK/djTQmuja9WNpuXxpql2dHoI941vgwyJS87O63UKfXP+Q6HwxiPxw3Dc7vdxvF4LPzwy5cvsdvtYjablf09Ho9jPB4Xfq/nbPuScd2GJ+3t2twdD7Xv3DvfA8jvKdfcGPV1ycaZ8YOMVvQso9tMSW/jjQQvJ97K1E2nHweuedteFTD9Wu36OHgcYDqdNowtOeNcF6GOqAAC10f/Z/oX8VFbl0v4zeg2o9MavgT/UY2tiIjT6fRvI+LffkP5osC7gNf/rgD4J5kk21AEh0oKvbY6HN6m5JLZtoEInxs6M6ykPLqhqDEqykJGNJvNitHk5w+IJ0VaGHnxTSW8+DkTKU/Encb/8vJShCE9wl6v1+udna3jGSh+UuFw3EvZ4Di
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-11 14:04:23 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
2020-03-08 23:54:47 -03:00
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1440x864 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
2020-03-11 14:04:23 -03:00
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tiempo Total: 0.602\n",
"Tiempo promedio por imagen: 0.151\n",
"OK\n"
]
2020-02-06 10:21:56 -03:00
}
],
"source": [
"image_paths = []\n",
"for inp in input_path:\n",
" if os.path.isdir(inp):\n",
" for inp_file in os.listdir(inp):\n",
" image_paths += [inp + inp_file]\n",
" else:\n",
" image_paths += [inp]\n",
"\n",
"image_paths = [inp_file for inp_file in image_paths if (inp_file[-4:] in ['.jpg', '.png', 'JPEG'])]\n",
"times = []\n",
"\n",
"\n",
2020-03-08 23:54:47 -03:00
"\n",
2020-02-06 10:21:56 -03:00
"for img_path in image_paths:\n",
2020-03-08 23:54:47 -03:00
" \n",
" boxes_area_score = {}\n",
2020-02-06 10:21:56 -03:00
" orig_images = [] # Store the images here.\n",
" input_images = [] # Store resized versions of the images here.\n",
" #print(img_path)\n",
"\n",
" # preprocess image for network\n",
" orig_images.append(imread(img_path))\n",
" img = image.load_img(img_path, target_size=(img_height, img_width))\n",
" img = image.img_to_array(img)\n",
" input_images.append(img)\n",
" input_images = np.array(input_images)\n",
" # process image\n",
" start = time.time()\n",
" y_pred = model.predict(input_images)\n",
" y_pred_decoded = decode_detections(y_pred,\n",
" confidence_thresh=score_threshold,\n",
" iou_threshold=score_threshold_iou,\n",
" top_k=200,\n",
" normalize_coords=True,\n",
" img_height=img_height,\n",
" img_width=img_width)\n",
"\n",
"\n",
" #print(\"processing time: \", time.time() - start)\n",
" times.append(time.time() - start)\n",
" # correct for image scale\n",
"\n",
" # visualize detections\n",
" # Set the colors for the bounding boxes\n",
" colors = plt.cm.brg(np.linspace(0, 1, 21)).tolist()\n",
"\n",
" plt.figure(figsize=(20,12))\n",
" plt.imshow(orig_images[0],cmap = 'gray')\n",
"\n",
" current_axis = plt.gca()\n",
" #print(y_pred)\n",
2020-03-08 23:54:47 -03:00
" for num,box in enumerate(y_pred_decoded[0]):\n",
2020-02-06 10:21:56 -03:00
" # Transform the predicted bounding boxes for the 300x300 image to the original image dimensions.\n",
"\n",
" xmin = box[2] * orig_images[0].shape[1] / img_width\n",
" ymin = box[3] * orig_images[0].shape[0] / img_height\n",
" xmax = box[4] * orig_images[0].shape[1] / img_width\n",
" ymax = box[5] * orig_images[0].shape[0] / img_height\n",
2020-03-08 23:54:47 -03:00
" \n",
2020-02-06 10:21:56 -03:00
" color = colors[int(box[0])]\n",
" label = '{}: {:.2f}'.format(classes[int(box[0])], box[1])\n",
" current_axis.add_patch(plt.Rectangle((xmin, ymin), xmax-xmin, ymax-ymin, color=color, fill=False, linewidth=2))\n",
" current_axis.text(xmin, ymin, label, size='x-large', color='white', bbox={'facecolor':color, 'alpha':1.0})\n",
2020-03-08 23:54:47 -03:00
" \n",
2020-03-17 14:20:58 -03:00
" I = orig_images[0].copy()\n",
2020-03-08 23:54:47 -03:00
" score = np.sum(I[np.int(ymin):np.int(ymax), np.int(xmin):np.int(xmax)]) / ((ymax-ymin)*(xmax-xmin))\n",
" \n",
" boxes_area_score[str(num)] = {'xmin': xmin, 'xmax': xmax, 'ymin': ymin, 'ymax': ymax, 'score' : score}\n",
" \n",
" \n",
" ### Detect panel disconnect\n",
" mean = np.mean([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
" sd = np.std([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
" normal = ([boxes_area_score[i]['score'] for i in boxes_area_score] - mean)/sd\n",
" \n",
" for key in boxes_area_score:\n",
" color = colors[2]\n",
" \n",
" #boxes_area_score[key]['score_norm'] = (boxes_area_score[key]['score'] - mean) / sd\n",
" z_score = (boxes_area_score[key]['score'] - mean) / sd \n",
" ### Escribe el z-score\n",
" current_axis.text((boxes_area_score[key]['xmin'] + boxes_area_score[key]['xmax'])/2,\n",
" (boxes_area_score[key]['ymin'] + boxes_area_score[key]['ymax'])/2,\n",
" '%.2f' % z_score, size='x-large',\n",
" color='white', bbox={'facecolor':color, 'alpha':1.0})\n",
" ### Escribe si es muy iluminado o no\n",
" #if (boxes_area_score[key]['score'] - mean) / sd < -2:\n",
" # current_axis.text((boxes_area_score[key]['xmin'] + boxes_area_score[key]['xmax'])/2, (boxes_area_score[key]['ymin'] + boxes_area_score[key]['ymax'])/2, 'muy oscuro', size='x-large', color='white', bbox={'facecolor':color, 'alpha':1.0})\n",
" #if (boxes_area_score[key]['score'] - mean) / sd > 2:\n",
" # current_axis.text((boxes_area_score[key]['xmin'] + boxes_area_score[key]['xmax'])/2, (boxes_area_score[key]['ymin'] + boxes_area_score[key]['ymax'])/2, 'muy iluminado', size='x-large', color='white', bbox={'facecolor':color, 'alpha':1.0})\n",
" \n",
" \n",
2020-02-06 10:21:56 -03:00
" #plt.figure(figsize=(15, 15))\n",
" #plt.axis('off')\n",
" save_path = output_path + img_path.split('/')[-1]\n",
2020-03-08 23:54:47 -03:00
" #plt.savefig(save_path)\n",
" #plt.close()\n",
" plt.figure(figsize=(20,12))\n",
" plt.imshow(orig_images[0],cmap = 'gray')\n",
2020-02-06 10:21:56 -03:00
" \n",
2020-03-11 14:04:23 -03:00
" plt.figure()\n",
" mean = np.mean([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
" sd = np.std([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
" normal = ([boxes_area_score[i]['score'] for i in boxes_area_score] - mean)/sd\n",
" _ = plt.hist(normal, bins='auto') # arguments are passed to np.histogram\n",
" plt.title(\"Histogram with 'auto' bins\")\n",
" plt.show()\n",
" \n",
2020-02-06 10:21:56 -03:00
"file = open(output_path + 'time.txt','w')\n",
"\n",
"file.write('Tiempo promedio:' + str(np.mean(times)))\n",
"\n",
"file.close()\n",
"print('Tiempo Total: {:.3f}'.format(np.sum(times)))\n",
"print('Tiempo promedio por imagen: {:.3f}'.format(np.mean(times)))\n",
2020-03-08 23:54:47 -03:00
"print('OK')\n"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'-0.28'"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#boxes_area_score['0']\n",
"\n",
"#a = 1.233333\n",
"#'%.2f' % a\n",
"#for i in boxes_area_score:\n",
" # print(boxes_area_score[i]['score'])"
]
},
{
"cell_type": "code",
2020-03-11 14:04:23 -03:00
"execution_count": 12,
2020-03-08 23:54:47 -03:00
"metadata": {},
"outputs": [
{
"data": {
2020-03-11 14:04:23 -03:00
"image/png": "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
2020-03-08 23:54:47 -03:00
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"\n",
"#boxes_area_score\n",
"mean = np.mean([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
"sd = np.std([boxes_area_score[i]['score'] for i in boxes_area_score])\n",
"normal = ([boxes_area_score[i]['score'] for i in boxes_area_score] - mean)/sd\n",
"_ = plt.hist(normal, bins='auto') # arguments are passed to np.histogram\n",
"plt.title(\"Histogram with 'auto' bins\")\n",
"\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for key in boxes_area_score:\n",
" boxes_area_score[key]['score_norm'] = (boxes_area_score[key]['score'] - mean) / sd \n",
" "
2020-02-06 10:21:56 -03:00
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"panel : 69\n",
"cell : 423\n"
]
}
],
"source": [
"\n",
"# Summary instance training\n",
"category_train_list = []\n",
"for image_label in train_dataset.labels:\n",
" category_train_list += [i[0] for i in train_dataset.labels[0]]\n",
"summary_category_training = {train_dataset.classes[i]: category_train_list.count(i) for i in list(set(category_train_list))}\n",
"for i in summary_category_training.keys():\n",
" print(i, ': {:.0f}'.format(summary_category_training[i]))\n"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"__________________________________________________________________________________________________\n",
"Layer (type) Output Shape Param # Connected to \n",
"==================================================================================================\n",
"input_1 (InputLayer) (None, 400, 400, 3) 0 \n",
"__________________________________________________________________________________________________\n",
"identity_layer (Lambda) (None, 400, 400, 3) 0 input_1[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv1 (Conv2D) (None, 400, 400, 32) 2432 identity_layer[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn1 (BatchNormalization) (None, 400, 400, 32) 128 conv1[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu1 (ELU) (None, 400, 400, 32) 0 bn1[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool1 (MaxPooling2D) (None, 200, 200, 32) 0 elu1[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv2 (Conv2D) (None, 200, 200, 48) 13872 pool1[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn2 (BatchNormalization) (None, 200, 200, 48) 192 conv2[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu2 (ELU) (None, 200, 200, 48) 0 bn2[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool2 (MaxPooling2D) (None, 100, 100, 48) 0 elu2[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv3 (Conv2D) (None, 100, 100, 64) 27712 pool2[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn3 (BatchNormalization) (None, 100, 100, 64) 256 conv3[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu3 (ELU) (None, 100, 100, 64) 0 bn3[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool3 (MaxPooling2D) (None, 50, 50, 64) 0 elu3[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv4 (Conv2D) (None, 50, 50, 64) 36928 pool3[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn4 (BatchNormalization) (None, 50, 50, 64) 256 conv4[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu4 (ELU) (None, 50, 50, 64) 0 bn4[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool4 (MaxPooling2D) (None, 25, 25, 64) 0 elu4[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv5 (Conv2D) (None, 25, 25, 48) 27696 pool4[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn5 (BatchNormalization) (None, 25, 25, 48) 192 conv5[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu5 (ELU) (None, 25, 25, 48) 0 bn5[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool5 (MaxPooling2D) (None, 12, 12, 48) 0 elu5[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv6 (Conv2D) (None, 12, 12, 48) 20784 pool5[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn6 (BatchNormalization) (None, 12, 12, 48) 192 conv6[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu6 (ELU) (None, 12, 12, 48) 0 bn6[0][0] \n",
"__________________________________________________________________________________________________\n",
"pool6 (MaxPooling2D) (None, 6, 6, 48) 0 elu6[0][0] \n",
"__________________________________________________________________________________________________\n",
"conv7 (Conv2D) (None, 6, 6, 32) 13856 pool6[0][0] \n",
"__________________________________________________________________________________________________\n",
"bn7 (BatchNormalization) (None, 6, 6, 32) 128 conv7[0][0] \n",
"__________________________________________________________________________________________________\n",
"elu7 (ELU) (None, 6, 6, 32) 0 bn7[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes4 (Conv2D) (None, 50, 50, 12) 6924 elu4[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes5 (Conv2D) (None, 25, 25, 12) 5196 elu5[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes6 (Conv2D) (None, 12, 12, 12) 5196 elu6[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes7 (Conv2D) (None, 6, 6, 12) 3468 elu7[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes4 (Conv2D) (None, 50, 50, 16) 9232 elu4[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes5 (Conv2D) (None, 25, 25, 16) 6928 elu5[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes6 (Conv2D) (None, 12, 12, 16) 6928 elu6[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes7 (Conv2D) (None, 6, 6, 16) 4624 elu7[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes4_reshape (Reshape) (None, 10000, 3) 0 classes4[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes5_reshape (Reshape) (None, 2500, 3) 0 classes5[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes6_reshape (Reshape) (None, 576, 3) 0 classes6[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes7_reshape (Reshape) (None, 144, 3) 0 classes7[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors4 (AnchorBoxes) (None, 50, 50, 4, 8) 0 boxes4[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors5 (AnchorBoxes) (None, 25, 25, 4, 8) 0 boxes5[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors6 (AnchorBoxes) (None, 12, 12, 4, 8) 0 boxes6[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors7 (AnchorBoxes) (None, 6, 6, 4, 8) 0 boxes7[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes_concat (Concatenate) (None, 13220, 3) 0 classes4_reshape[0][0] \n",
" classes5_reshape[0][0] \n",
" classes6_reshape[0][0] \n",
" classes7_reshape[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes4_reshape (Reshape) (None, 10000, 4) 0 boxes4[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes5_reshape (Reshape) (None, 2500, 4) 0 boxes5[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes6_reshape (Reshape) (None, 576, 4) 0 boxes6[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes7_reshape (Reshape) (None, 144, 4) 0 boxes7[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors4_reshape (Reshape) (None, 10000, 8) 0 anchors4[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors5_reshape (Reshape) (None, 2500, 8) 0 anchors5[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors6_reshape (Reshape) (None, 576, 8) 0 anchors6[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors7_reshape (Reshape) (None, 144, 8) 0 anchors7[0][0] \n",
"__________________________________________________________________________________________________\n",
"classes_softmax (Activation) (None, 13220, 3) 0 classes_concat[0][0] \n",
"__________________________________________________________________________________________________\n",
"boxes_concat (Concatenate) (None, 13220, 4) 0 boxes4_reshape[0][0] \n",
" boxes5_reshape[0][0] \n",
" boxes6_reshape[0][0] \n",
" boxes7_reshape[0][0] \n",
"__________________________________________________________________________________________________\n",
"anchors_concat (Concatenate) (None, 13220, 8) 0 anchors4_reshape[0][0] \n",
" anchors5_reshape[0][0] \n",
" anchors6_reshape[0][0] \n",
" anchors7_reshape[0][0] \n",
"__________________________________________________________________________________________________\n",
"predictions (Concatenate) (None, 13220, 15) 0 classes_softmax[0][0] \n",
" boxes_concat[0][0] \n",
" anchors_concat[0][0] \n",
"==================================================================================================\n",
"Total params: 193,120\n",
"Trainable params: 192,448\n",
"Non-trainable params: 672\n",
"__________________________________________________________________________________________________\n"
]
}
],
"source": [
2020-03-08 23:54:47 -03:00
"\n"
2020-02-06 10:21:56 -03:00
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
2020-03-17 14:20:58 -03:00
"version": "3.6.5"
2020-02-06 10:21:56 -03:00
}
},
"nbformat": 4,
"nbformat_minor": 2
}