From d5dedcaff1f0221894580201d8dc0fa646be1081 Mon Sep 17 00:00:00 2001 From: dl-desktop Date: Tue, 4 Feb 2020 18:34:05 -0300 Subject: [PATCH] Falla 1 --- .gitignore | 2 + .../Panel_Detector_Fault_1-checkpoint.ipynb | 1601 +++++++++++++++++ Panel_Detector_Fault_1.ipynb | 916 +++------- config_7_fault_1.json | 12 +- log.csv | 113 ++ 5 files changed, 1933 insertions(+), 711 deletions(-) create mode 100644 .ipynb_checkpoints/Panel_Detector_Fault_1-checkpoint.ipynb diff --git a/.gitignore b/.gitignore index d0d6e80..e3317ac 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,11 @@ result_ssd7_panel_2/ Train&Test_A/ Train&Test_1/ Train&Test_C/ +Train&Test_S/ result_ssd7_panel/ result_ssd7_panel_cell/ Thermal/ fault_jpg/ fault_jpg_1/ + diff --git a/.ipynb_checkpoints/Panel_Detector_Fault_1-checkpoint.ipynb b/.ipynb_checkpoints/Panel_Detector_Fault_1-checkpoint.ipynb new file mode 100644 index 0000000..3dbf0a7 --- /dev/null +++ b/.ipynb_checkpoints/Panel_Detector_Fault_1-checkpoint.ipynb @@ -0,0 +1,1601 @@ +{ + "cells": [ + { + "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", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using TensorFlow backend.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training on: \t{'1': 1}\n", + "\n", + "\n", + "Loading pretrained weights.\n", + "\n", + "WARNING:tensorflow:From /home/dl-desktop/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Colocations handled automatically by placer.\n", + "WARNING:tensorflow:From /home/dl-desktop/Desktop/Rentadrone/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", + "WARNING:tensorflow:From /home/dl-desktop/Desktop/Rentadrone/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", + "WARNING:tensorflow:From /home/dl-desktop/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/ops/math_grad.py:102: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Deprecated in favor of operator or tf.math.divide.\n" + ] + } + ], + "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", + "sys.path += [os.path.abspath('../ssd_keras-master')]\n", + "\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_fault_1.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.01, 0.05, 0.1, 0.2, 0.37, 0.54, 0.71] # 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(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": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing image set 'train.txt': 100%|██████████| 783/783 [00:01<00:00, 511.30it/s]\n", + "Processing image set 'test.txt': 100%|██████████| 117/117 [00:00<00:00, 449.85it/s]\n", + "1 : 2246\n", + "Number of images in the training dataset:\t 783\n", + "Number of images in the validation dataset:\t 117\n", + "Epoch 1/100\n", + "\n", + "Epoch 00001: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 471s 942ms/step - loss: 3.8465 - val_loss: 3.9360\n", + "\n", + "Epoch 00001: val_loss improved from inf to 3.93599, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 2/100\n", + "\n", + "Epoch 00002: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 465s 931ms/step - loss: 3.8139 - val_loss: 3.8815\n", + "\n", + "Epoch 00002: val_loss improved from 3.93599 to 3.88150, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 3/100\n", + "\n", + "Epoch 00003: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 460s 920ms/step - loss: 3.8367 - val_loss: 3.9229\n", + "\n", + "Epoch 00003: val_loss did not improve from 3.88150\n", + "Epoch 4/100\n", + "\n", + "Epoch 00004: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 458s 917ms/step - loss: 3.8556 - val_loss: 3.8905\n", + "\n", + "Epoch 00004: val_loss did not improve from 3.88150\n", + "Epoch 5/100\n", + "\n", + "Epoch 00005: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 453s 907ms/step - loss: 3.8205 - val_loss: 3.8369\n", + "\n", + "Epoch 00005: val_loss improved from 3.88150 to 3.83686, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 6/100\n", + "\n", + "Epoch 00006: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 900ms/step - loss: 3.8164 - val_loss: 3.9733\n", + "\n", + "Epoch 00006: val_loss did not improve from 3.83686\n", + "Epoch 7/100\n", + "\n", + "Epoch 00007: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 453s 905ms/step - loss: 3.7874 - val_loss: 3.8792\n", + "\n", + "Epoch 00007: val_loss did not improve from 3.83686\n", + "Epoch 8/100\n", + "\n", + "Epoch 00008: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.7895 - val_loss: 3.8497\n", + "\n", + "Epoch 00008: val_loss did not improve from 3.83686\n", + "Epoch 9/100\n", + "\n", + "Epoch 00009: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 454s 908ms/step - loss: 3.8056 - val_loss: 3.8965\n", + "\n", + "Epoch 00009: val_loss did not improve from 3.83686\n", + "Epoch 10/100\n", + "\n", + "Epoch 00010: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 457s 914ms/step - loss: 3.7874 - val_loss: 3.8854\n", + "\n", + "Epoch 00010: val_loss did not improve from 3.83686\n", + "Epoch 11/100\n", + "\n", + "Epoch 00011: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 458s 917ms/step - loss: 3.7937 - val_loss: 3.9264\n", + "\n", + "Epoch 00011: val_loss did not improve from 3.83686\n", + "Epoch 12/100\n", + "\n", + "Epoch 00012: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 456s 913ms/step - loss: 3.8105 - val_loss: 3.8769\n", + "\n", + "Epoch 00012: val_loss did not improve from 3.83686\n", + "Epoch 13/100\n", + "\n", + "Epoch 00013: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 460s 921ms/step - loss: 3.8102 - val_loss: 3.9104\n", + "\n", + "Epoch 00013: val_loss did not improve from 3.83686\n", + "Epoch 14/100\n", + "\n", + "Epoch 00014: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 456s 912ms/step - loss: 3.8034 - val_loss: 3.8571\n", + "\n", + "Epoch 00014: val_loss did not improve from 3.83686\n", + "Epoch 15/100\n", + "\n", + "Epoch 00015: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 458s 917ms/step - loss: 3.7412 - val_loss: 3.8471\n", + "\n", + "Epoch 00015: val_loss did not improve from 3.83686\n", + "Epoch 16/100\n", + "\n", + "Epoch 00016: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7816 - val_loss: 3.8868\n", + "\n", + "Epoch 00016: val_loss did not improve from 3.83686\n", + "Epoch 17/100\n", + "\n", + "Epoch 00017: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.7849 - val_loss: 3.9379\n", + "\n", + "Epoch 00017: val_loss did not improve from 3.83686\n", + "Epoch 18/100\n", + "\n", + "Epoch 00018: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7739 - val_loss: 3.8811\n", + "\n", + "Epoch 00018: val_loss did not improve from 3.83686\n", + "Epoch 19/100\n", + "\n", + "Epoch 00019: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.7704 - val_loss: 3.8714\n", + "\n", + "Epoch 00019: val_loss did not improve from 3.83686\n", + "Epoch 20/100\n", + "\n", + "Epoch 00020: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7367 - val_loss: 3.9438\n", + "\n", + "Epoch 00020: val_loss did not improve from 3.83686\n", + "Epoch 21/100\n", + "\n", + "Epoch 00021: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7554 - val_loss: 3.9248\n", + "\n", + "Epoch 00021: val_loss did not improve from 3.83686\n", + "Epoch 22/100\n", + "\n", + "Epoch 00022: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.7682 - val_loss: 3.9140\n", + "\n", + "Epoch 00022: val_loss did not improve from 3.83686\n", + "Epoch 23/100\n", + "\n", + "Epoch 00023: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7867 - val_loss: 3.8202\n", + "\n", + "Epoch 00023: val_loss improved from 3.83686 to 3.82025, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 24/100\n", + "\n", + "Epoch 00024: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.7498 - val_loss: 3.8610\n", + "\n", + "Epoch 00024: val_loss did not improve from 3.82025\n", + "Epoch 25/100\n", + "\n", + "Epoch 00025: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.7391 - val_loss: 3.8886\n", + "\n", + "Epoch 00025: val_loss did not improve from 3.82025\n", + "Epoch 26/100\n", + "\n", + "Epoch 00026: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.7487 - val_loss: 3.8860\n", + "\n", + "Epoch 00026: val_loss did not improve from 3.82025\n", + "Epoch 27/100\n", + "\n", + "Epoch 00027: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.6680 - val_loss: 3.3866\n", + "\n", + "Epoch 00027: val_loss improved from 3.82025 to 3.38664, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 28/100\n", + "\n", + "Epoch 00028: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.6011 - val_loss: 3.3802\n", + "\n", + "Epoch 00028: val_loss improved from 3.38664 to 3.38020, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 29/100\n", + "\n", + "Epoch 00029: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.5266 - val_loss: 3.3741\n", + "\n", + "Epoch 00029: val_loss improved from 3.38020 to 3.37413, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 30/100\n", + "\n", + "Epoch 00030: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.5440 - val_loss: 3.3658\n", + "\n", + "Epoch 00030: val_loss improved from 3.37413 to 3.36583, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 31/100\n", + "\n", + "Epoch 00031: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.5227 - val_loss: 3.2712\n", + "\n", + "Epoch 00031: val_loss improved from 3.36583 to 3.27118, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 32/100\n", + "\n", + "Epoch 00032: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.5003 - val_loss: 3.2636\n", + "\n", + "Epoch 00032: val_loss improved from 3.27118 to 3.26357, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 33/100\n", + "\n", + "Epoch 00033: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.5573 - val_loss: 3.2981\n", + "\n", + "Epoch 00033: val_loss did not improve from 3.26357\n", + "Epoch 34/100\n", + "\n", + "Epoch 00034: LearningRateScheduler setting learning rate to 0.001.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "500/500 [==============================] - 451s 902ms/step - loss: 3.5104 - val_loss: 3.3216\n", + "\n", + "Epoch 00034: val_loss did not improve from 3.26357\n", + "Epoch 35/100\n", + "\n", + "Epoch 00035: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4535 - val_loss: 3.2405\n", + "\n", + "Epoch 00035: val_loss improved from 3.26357 to 3.24054, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 36/100\n", + "\n", + "Epoch 00036: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4667 - val_loss: 3.2127\n", + "\n", + "Epoch 00036: val_loss improved from 3.24054 to 3.21267, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 37/100\n", + "\n", + "Epoch 00037: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4625 - val_loss: 3.2967\n", + "\n", + "Epoch 00037: val_loss did not improve from 3.21267\n", + "Epoch 38/100\n", + "\n", + "Epoch 00038: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4349 - val_loss: 3.2318\n", + "\n", + "Epoch 00038: val_loss did not improve from 3.21267\n", + "Epoch 39/100\n", + "\n", + "Epoch 00039: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4616 - val_loss: 3.2234\n", + "\n", + "Epoch 00039: val_loss did not improve from 3.21267\n", + "Epoch 40/100\n", + "\n", + "Epoch 00040: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4579 - val_loss: 3.2443\n", + "\n", + "Epoch 00040: val_loss did not improve from 3.21267\n", + "Epoch 41/100\n", + "\n", + "Epoch 00041: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4741 - val_loss: 3.1831\n", + "\n", + "Epoch 00041: val_loss improved from 3.21267 to 3.18308, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 42/100\n", + "\n", + "Epoch 00042: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4098 - val_loss: 3.1778\n", + "\n", + "Epoch 00042: val_loss improved from 3.18308 to 3.17781, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 43/100\n", + "\n", + "Epoch 00043: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4194 - val_loss: 3.3141\n", + "\n", + "Epoch 00043: val_loss did not improve from 3.17781\n", + "Epoch 44/100\n", + "\n", + "Epoch 00044: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4294 - val_loss: 3.1888\n", + "\n", + "Epoch 00044: val_loss did not improve from 3.17781\n", + "Epoch 45/100\n", + "\n", + "Epoch 00045: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4157 - val_loss: 3.2060\n", + "\n", + "Epoch 00045: val_loss did not improve from 3.17781\n", + "Epoch 46/100\n", + "\n", + "Epoch 00046: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.4147 - val_loss: 3.1829\n", + "\n", + "Epoch 00046: val_loss did not improve from 3.17781\n", + "Epoch 47/100\n", + "\n", + "Epoch 00047: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4061 - val_loss: 3.2214\n", + "\n", + "Epoch 00047: val_loss did not improve from 3.17781\n", + "Epoch 48/100\n", + "\n", + "Epoch 00048: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.4013 - val_loss: 3.1010\n", + "\n", + "Epoch 00048: val_loss improved from 3.17781 to 3.10097, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 49/100\n", + "\n", + "Epoch 00049: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4092 - val_loss: 3.1462\n", + "\n", + "Epoch 00049: val_loss did not improve from 3.10097\n", + "Epoch 50/100\n", + "\n", + "Epoch 00050: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3759 - val_loss: 3.1760\n", + "\n", + "Epoch 00050: val_loss did not improve from 3.10097\n", + "Epoch 51/100\n", + "\n", + "Epoch 00051: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.4261 - val_loss: 3.1638\n", + "\n", + "Epoch 00051: val_loss did not improve from 3.10097\n", + "Epoch 52/100\n", + "\n", + "Epoch 00052: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3900 - val_loss: 3.2724\n", + "\n", + "Epoch 00052: val_loss did not improve from 3.10097\n", + "Epoch 53/100\n", + "\n", + "Epoch 00053: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3771 - val_loss: 3.1456\n", + "\n", + "Epoch 00053: val_loss did not improve from 3.10097\n", + "Epoch 54/100\n", + "\n", + "Epoch 00054: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3997 - val_loss: 3.2297\n", + "\n", + "Epoch 00054: val_loss did not improve from 3.10097\n", + "Epoch 55/100\n", + "\n", + "Epoch 00055: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3632 - val_loss: 3.1960\n", + "\n", + "Epoch 00055: val_loss did not improve from 3.10097\n", + "Epoch 56/100\n", + "\n", + "Epoch 00056: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3829 - val_loss: 3.1371\n", + "\n", + "Epoch 00056: val_loss did not improve from 3.10097\n", + "Epoch 57/100\n", + "\n", + "Epoch 00057: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3724 - val_loss: 3.1169\n", + "\n", + "Epoch 00057: val_loss did not improve from 3.10097\n", + "Epoch 58/100\n", + "\n", + "Epoch 00058: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3625 - val_loss: 3.2694\n", + "\n", + "Epoch 00058: val_loss did not improve from 3.10097\n", + "Epoch 59/100\n", + "\n", + "Epoch 00059: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3691 - val_loss: 3.1037\n", + "\n", + "Epoch 00059: val_loss did not improve from 3.10097\n", + "Epoch 60/100\n", + "\n", + "Epoch 00060: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3976 - val_loss: 3.1110\n", + "\n", + "Epoch 00060: val_loss did not improve from 3.10097\n", + "Epoch 61/100\n", + "\n", + "Epoch 00061: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.3747 - val_loss: 3.1192\n", + "\n", + "Epoch 00061: val_loss did not improve from 3.10097\n", + "Epoch 62/100\n", + "\n", + "Epoch 00062: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 452s 903ms/step - loss: 3.3526 - val_loss: 3.1612\n", + "\n", + "Epoch 00062: val_loss did not improve from 3.10097\n", + "Epoch 63/100\n", + "\n", + "Epoch 00063: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 452s 903ms/step - loss: 3.4435 - val_loss: 3.1396\n", + "\n", + "Epoch 00063: val_loss did not improve from 3.10097\n", + "Epoch 64/100\n", + "\n", + "Epoch 00064: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 452s 903ms/step - loss: 3.3811 - val_loss: 3.1575\n", + "\n", + "Epoch 00064: val_loss did not improve from 3.10097\n", + "Epoch 65/100\n", + "\n", + "Epoch 00065: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3493 - val_loss: 3.2337\n", + "\n", + "Epoch 00065: val_loss did not improve from 3.10097\n", + "Epoch 66/100\n", + "\n", + "Epoch 00066: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 903ms/step - loss: 3.3510 - val_loss: 3.1230\n", + "\n", + "Epoch 00066: val_loss did not improve from 3.10097\n", + "Epoch 67/100\n", + "\n", + "Epoch 00067: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3569 - val_loss: 3.1419\n", + "\n", + "Epoch 00067: val_loss did not improve from 3.10097\n", + "Epoch 68/100\n", + "\n", + "Epoch 00068: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.3372 - val_loss: 3.0772\n", + "\n", + "Epoch 00068: val_loss improved from 3.10097 to 3.07717, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 69/100\n", + "\n", + "Epoch 00069: LearningRateScheduler setting learning rate to 0.001.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "500/500 [==============================] - 449s 898ms/step - loss: 3.3732 - val_loss: 3.1180\n", + "\n", + "Epoch 00069: val_loss did not improve from 3.07717\n", + "Epoch 70/100\n", + "\n", + "Epoch 00070: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.3438 - val_loss: 3.1318\n", + "\n", + "Epoch 00070: val_loss did not improve from 3.07717\n", + "Epoch 71/100\n", + "\n", + "Epoch 00071: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3451 - val_loss: 3.1492\n", + "\n", + "Epoch 00071: val_loss did not improve from 3.07717\n", + "Epoch 72/100\n", + "\n", + "Epoch 00072: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.3055 - val_loss: 3.1092\n", + "\n", + "Epoch 00072: val_loss did not improve from 3.07717\n", + "Epoch 73/100\n", + "\n", + "Epoch 00073: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3299 - val_loss: 3.2583\n", + "\n", + "Epoch 00073: val_loss did not improve from 3.07717\n", + "Epoch 74/100\n", + "\n", + "Epoch 00074: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3542 - val_loss: 3.1427\n", + "\n", + "Epoch 00074: val_loss did not improve from 3.07717\n", + "Epoch 75/100\n", + "\n", + "Epoch 00075: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3353 - val_loss: 3.1750\n", + "\n", + "Epoch 00075: val_loss did not improve from 3.07717\n", + "Epoch 76/100\n", + "\n", + "Epoch 00076: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3239 - val_loss: 3.1659\n", + "\n", + "Epoch 00076: val_loss did not improve from 3.07717\n", + "Epoch 77/100\n", + "\n", + "Epoch 00077: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3305 - val_loss: 3.0835\n", + "\n", + "Epoch 00077: val_loss did not improve from 3.07717\n", + "Epoch 78/100\n", + "\n", + "Epoch 00078: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.3211 - val_loss: 3.1030\n", + "\n", + "Epoch 00078: val_loss did not improve from 3.07717\n", + "Epoch 79/100\n", + "\n", + "Epoch 00079: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3223 - val_loss: 3.1195\n", + "\n", + "Epoch 00079: val_loss did not improve from 3.07717\n", + "Epoch 80/100\n", + "\n", + "Epoch 00080: LearningRateScheduler setting learning rate to 0.001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.3430 - val_loss: 3.2754\n", + "\n", + "Epoch 00080: val_loss did not improve from 3.07717\n", + "Epoch 81/100\n", + "\n", + "Epoch 00081: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.1907 - val_loss: 2.9731\n", + "\n", + "Epoch 00081: val_loss improved from 3.07717 to 2.97306, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 82/100\n", + "\n", + "Epoch 00082: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.1456 - val_loss: 2.9711\n", + "\n", + "Epoch 00082: val_loss improved from 2.97306 to 2.97114, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 83/100\n", + "\n", + "Epoch 00083: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.1248 - val_loss: 2.9670\n", + "\n", + "Epoch 00083: val_loss improved from 2.97114 to 2.96699, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 84/100\n", + "\n", + "Epoch 00084: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.1167 - val_loss: 2.9557\n", + "\n", + "Epoch 00084: val_loss improved from 2.96699 to 2.95567, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 85/100\n", + "\n", + "Epoch 00085: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.1287 - val_loss: 2.9472\n", + "\n", + "Epoch 00085: val_loss improved from 2.95567 to 2.94721, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 86/100\n", + "\n", + "Epoch 00086: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.1195 - val_loss: 2.9572\n", + "\n", + "Epoch 00086: val_loss did not improve from 2.94721\n", + "Epoch 87/100\n", + "\n", + "Epoch 00087: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.0942 - val_loss: 2.9739\n", + "\n", + "Epoch 00087: val_loss did not improve from 2.94721\n", + "Epoch 88/100\n", + "\n", + "Epoch 00088: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0693 - val_loss: 2.9428\n", + "\n", + "Epoch 00088: val_loss improved from 2.94721 to 2.94277, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 89/100\n", + "\n", + "Epoch 00089: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0901 - val_loss: 2.9392\n", + "\n", + "Epoch 00089: val_loss improved from 2.94277 to 2.93917, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 90/100\n", + "\n", + "Epoch 00090: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0916 - val_loss: 2.9386\n", + "\n", + "Epoch 00090: val_loss improved from 2.93917 to 2.93864, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 91/100\n", + "\n", + "Epoch 00091: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0853 - val_loss: 2.9484\n", + "\n", + "Epoch 00091: val_loss did not improve from 2.93864\n", + "Epoch 92/100\n", + "\n", + "Epoch 00092: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0696 - val_loss: 2.9277\n", + "\n", + "Epoch 00092: val_loss improved from 2.93864 to 2.92770, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 93/100\n", + "\n", + "Epoch 00093: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 901ms/step - loss: 3.0827 - val_loss: 2.9312\n", + "\n", + "Epoch 00093: val_loss did not improve from 2.92770\n", + "Epoch 94/100\n", + "\n", + "Epoch 00094: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0772 - val_loss: 2.9390\n", + "\n", + "Epoch 00094: val_loss did not improve from 2.92770\n", + "Epoch 95/100\n", + "\n", + "Epoch 00095: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0609 - val_loss: 2.9373\n", + "\n", + "Epoch 00095: val_loss did not improve from 2.92770\n", + "Epoch 96/100\n", + "\n", + "Epoch 00096: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0587 - val_loss: 2.9377\n", + "\n", + "Epoch 00096: val_loss did not improve from 2.92770\n", + "Epoch 97/100\n", + "\n", + "Epoch 00097: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0529 - val_loss: 2.9221\n", + "\n", + "Epoch 00097: val_loss improved from 2.92770 to 2.92209, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 98/100\n", + "\n", + "Epoch 00098: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0698 - val_loss: 2.9095\n", + "\n", + "Epoch 00098: val_loss improved from 2.92209 to 2.90946, saving model to experimento_ssd300_fault_1.h5\n", + "Epoch 99/100\n", + "\n", + "Epoch 00099: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 450s 901ms/step - loss: 3.0672 - val_loss: 2.9138\n", + "\n", + "Epoch 00099: val_loss did not improve from 2.90946\n", + "Epoch 100/100\n", + "\n", + "Epoch 00100: LearningRateScheduler setting learning rate to 0.0001.\n", + "500/500 [==============================] - 451s 902ms/step - loss: 3.0530 - val_loss: 2.9209\n", + "\n", + "Epoch 00100: val_loss did not improve from 2.90946\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 = classes, \n", + " #include_classes= [1],\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 = classes, \n", + " #include_classes=[1],\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 image_label]\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 = 500\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*10),\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": [ + "classes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dict_keys(['val_loss', 'loss', 'lr'])\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "experimento_ssd300_fault_1.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.ylim((0, 10)) \n", + "plt.show()\n", + "\n", + "print(config['train']['saved_weights_name'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Evaluación del Modelo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'json' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfig_path\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mconfig_buffer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mconfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfig_buffer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'json' is not defined" + ] + } + ], + "source": [ + "\n", + "config_path = 'config_300_fault_1.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": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "24" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ceil(val_dataset_size/batch_size)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Cargar nuevamente el modelo desde los pesos.\n", + "Predicción" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training on: \t{'1': 1}\n", + "\n" + ] + } + ], + "source": [ + "from imageio import imread\n", + "from keras.preprocessing import image\n", + "import time\n", + "\n", + "config_path = 'config_300_fault_1.json'\n", + "input_path = ['fault_jpg_1/']\n", + "output_path = 'result_ssd300_fault_1/'\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", + "score_threshold = 0.25\n", + "score_threshold_iou = 0.5\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", + "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", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tiempo Total: 27.768\n", + "Tiempo promedio por imagen: 1.111\n", + "OK\n" + ] + } + ], + "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", + "for img_path in image_paths:\n", + " 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", + " for box in y_pred_decoded[0]:\n", + " # 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", + "\n", + " 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", + "\n", + " #plt.figure(figsize=(15, 15))\n", + " #plt.axis('off')\n", + " save_path = output_path + img_path.split('/')[-1]\n", + " plt.savefig(save_path)\n", + " plt.close()\n", + " \n", + "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", + "print('OK')" + ] + }, + { + "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": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 : 6030\n" + ] + } + ], + "source": [ + "for i in summary_category_training.keys():\n", + " print(i, ': {:.0f}'.format(summary_category_training[i]))" + ] + }, + { + "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", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Panel_Detector_Fault_1.ipynb b/Panel_Detector_Fault_1.ipynb index 84649d6..5f5786d 100644 --- a/Panel_Detector_Fault_1.ipynb +++ b/Panel_Detector_Fault_1.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -31,21 +31,153 @@ "\n", "Training on: \t{'1': 1}\n", "\n", - "\n", - "Loading pretrained weights.\n", - "\n", "WARNING:tensorflow:From /home/dl-desktop/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Colocations handled automatically by placer.\n", + "OK create model\n", + "\n", + "Loading pretrained weights VGG.\n", + "\n", "WARNING:tensorflow:From /home/dl-desktop/Desktop/Rentadrone/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", "WARNING:tensorflow:From /home/dl-desktop/Desktop/Rentadrone/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", - "WARNING:tensorflow:From /home/dl-desktop/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/ops/math_grad.py:102: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", - "Instructions for updating:\n", - "Deprecated in favor of operator or tf.math.divide.\n" + "__________________________________________________________________________________________________\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, 8) 4616 elu4[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes5 (Conv2D) (None, 25, 25, 8) 3464 elu5[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes6 (Conv2D) (None, 12, 12, 8) 3464 elu6[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes7 (Conv2D) (None, 6, 6, 8) 2312 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, 2) 0 classes4[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes5_reshape (Reshape) (None, 2500, 2) 0 classes5[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes6_reshape (Reshape) (None, 576, 2) 0 classes6[0][0] \n", + "__________________________________________________________________________________________________\n", + "classes7_reshape (Reshape) (None, 144, 2) 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, 2) 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, 2) 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, 14) 0 classes_softmax[0][0] \n", + " boxes_concat[0][0] \n", + " anchors_concat[0][0] \n", + "==================================================================================================\n", + "Total params: 186,192\n", + "Trainable params: 185,520\n", + "Non-trainable params: 672\n", + "__________________________________________________________________________________________________\n" ] } ], @@ -103,7 +235,7 @@ " else:\n", " return 0.00001\n", "\n", - "config_path = 'config_300_fault_1.json'\n", + "config_path = 'config_7_fault_1.json'\n", "\n", "\n", "with open(config_path) as config_buffer:\n", @@ -264,630 +396,91 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Processing image set 'train.txt': 100%|██████████| 783/783 [00:01<00:00, 511.30it/s]\n", - "Processing image set 'test.txt': 100%|██████████| 117/117 [00:00<00:00, 449.85it/s]\n", - "1 : 2246\n", - "Number of images in the training dataset:\t 783\n", - "Number of images in the validation dataset:\t 117\n", - "Epoch 1/100\n", + "Processing image set 'train.txt': 100%|██████████| 33/33 [00:00<00:00, 101.41it/s]\n", + "Processing image set 'test.txt': 100%|██████████| 2/2 [00:00<00:00, 61.30it/s]\n", + "1 : 444\n", + "Number of images in the training dataset:\t 33\n", + "Number of images in the validation dataset:\t 2\n", + "WARNING:tensorflow:From /home/dl-desktop/anaconda3/envs/tf_gpu/lib/python3.6/site-packages/tensorflow/python/ops/math_grad.py:102: div (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Deprecated in favor of operator or tf.math.divide.\n", + "Epoch 1/500\n", "\n", "Epoch 00001: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 471s 942ms/step - loss: 3.8465 - val_loss: 3.9360\n", + "100/100 [==============================] - 25s 246ms/step - loss: 11.5508 - val_loss: 6.3620\n", "\n", - "Epoch 00001: val_loss improved from inf to 3.93599, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 2/100\n", + "Epoch 00001: val_loss improved from inf to 6.36203, saving model to experimento_ssd7_fault_1.h5\n", + "Epoch 2/500\n", "\n", "Epoch 00002: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 465s 931ms/step - loss: 3.8139 - val_loss: 3.8815\n", + "100/100 [==============================] - 22s 225ms/step - loss: 7.4845 - val_loss: 12.4694\n", "\n", - "Epoch 00002: val_loss improved from 3.93599 to 3.88150, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 3/100\n", + "Epoch 00002: val_loss did not improve from 6.36203\n", + "Epoch 3/500\n", "\n", "Epoch 00003: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 460s 920ms/step - loss: 3.8367 - val_loss: 3.9229\n", + "100/100 [==============================] - 24s 237ms/step - loss: 7.0083 - val_loss: 5.9608\n", "\n", - "Epoch 00003: val_loss did not improve from 3.88150\n", - "Epoch 4/100\n", + "Epoch 00003: val_loss improved from 6.36203 to 5.96082, saving model to experimento_ssd7_fault_1.h5\n", + "Epoch 4/500\n", "\n", "Epoch 00004: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 458s 917ms/step - loss: 3.8556 - val_loss: 3.8905\n", + "100/100 [==============================] - 23s 232ms/step - loss: 6.3241 - val_loss: 7.0951\n", "\n", - "Epoch 00004: val_loss did not improve from 3.88150\n", - "Epoch 5/100\n", + "Epoch 00004: val_loss did not improve from 5.96082\n", + "Epoch 5/500\n", "\n", "Epoch 00005: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 453s 907ms/step - loss: 3.8205 - val_loss: 3.8369\n", + "100/100 [==============================] - 24s 239ms/step - loss: 5.9832 - val_loss: 5.5583\n", "\n", - "Epoch 00005: val_loss improved from 3.88150 to 3.83686, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 6/100\n", + "Epoch 00005: val_loss improved from 5.96082 to 5.55828, saving model to experimento_ssd7_fault_1.h5\n", + "Epoch 6/500\n", "\n", "Epoch 00006: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 900ms/step - loss: 3.8164 - val_loss: 3.9733\n", + "100/100 [==============================] - 25s 248ms/step - loss: 6.0359 - val_loss: 10.5573\n", "\n", - "Epoch 00006: val_loss did not improve from 3.83686\n", - "Epoch 7/100\n", + "Epoch 00006: val_loss did not improve from 5.55828\n", + "Epoch 7/500\n", "\n", "Epoch 00007: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 453s 905ms/step - loss: 3.7874 - val_loss: 3.8792\n", + "100/100 [==============================] - 23s 232ms/step - loss: 5.9338 - val_loss: 12.5439\n", "\n", - "Epoch 00007: val_loss did not improve from 3.83686\n", - "Epoch 8/100\n", + "Epoch 00007: val_loss did not improve from 5.55828\n", + "Epoch 8/500\n", "\n", "Epoch 00008: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.7895 - val_loss: 3.8497\n", + "100/100 [==============================] - 23s 228ms/step - loss: 6.3084 - val_loss: 8.1511\n", "\n", - "Epoch 00008: val_loss did not improve from 3.83686\n", - "Epoch 9/100\n", + "Epoch 00008: val_loss did not improve from 5.55828\n", + "Epoch 9/500\n", "\n", "Epoch 00009: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 454s 908ms/step - loss: 3.8056 - val_loss: 3.8965\n", + "100/100 [==============================] - 22s 222ms/step - loss: 5.8168 - val_loss: 10.5703\n", "\n", - "Epoch 00009: val_loss did not improve from 3.83686\n", - "Epoch 10/100\n", + "Epoch 00009: val_loss did not improve from 5.55828\n", + "Epoch 10/500\n", "\n", "Epoch 00010: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 457s 914ms/step - loss: 3.7874 - val_loss: 3.8854\n", + "100/100 [==============================] - 23s 235ms/step - loss: 5.4740 - val_loss: 5.8349\n", "\n", - "Epoch 00010: val_loss did not improve from 3.83686\n", - "Epoch 11/100\n", + "Epoch 00010: val_loss did not improve from 5.55828\n", + "Epoch 11/500\n", "\n", "Epoch 00011: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 458s 917ms/step - loss: 3.7937 - val_loss: 3.9264\n", + "100/100 [==============================] - 23s 227ms/step - loss: 5.4750 - val_loss: 4.4782\n", "\n", - "Epoch 00011: val_loss did not improve from 3.83686\n", - "Epoch 12/100\n", + "Epoch 00011: val_loss improved from 5.55828 to 4.47816, saving model to experimento_ssd7_fault_1.h5\n", + "Epoch 12/500\n", "\n", "Epoch 00012: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 456s 913ms/step - loss: 3.8105 - val_loss: 3.8769\n", - "\n", - "Epoch 00012: val_loss did not improve from 3.83686\n", - "Epoch 13/100\n", - "\n", - "Epoch 00013: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 460s 921ms/step - loss: 3.8102 - val_loss: 3.9104\n", - "\n", - "Epoch 00013: val_loss did not improve from 3.83686\n", - "Epoch 14/100\n", - "\n", - "Epoch 00014: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 456s 912ms/step - loss: 3.8034 - val_loss: 3.8571\n", - "\n", - "Epoch 00014: val_loss did not improve from 3.83686\n", - "Epoch 15/100\n", - "\n", - "Epoch 00015: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 458s 917ms/step - loss: 3.7412 - val_loss: 3.8471\n", - "\n", - "Epoch 00015: val_loss did not improve from 3.83686\n", - "Epoch 16/100\n", - "\n", - "Epoch 00016: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7816 - val_loss: 3.8868\n", - "\n", - "Epoch 00016: val_loss did not improve from 3.83686\n", - "Epoch 17/100\n", - "\n", - "Epoch 00017: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.7849 - val_loss: 3.9379\n", - "\n", - "Epoch 00017: val_loss did not improve from 3.83686\n", - "Epoch 18/100\n", - "\n", - "Epoch 00018: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7739 - val_loss: 3.8811\n", - "\n", - "Epoch 00018: val_loss did not improve from 3.83686\n", - "Epoch 19/100\n", - "\n", - "Epoch 00019: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.7704 - val_loss: 3.8714\n", - "\n", - "Epoch 00019: val_loss did not improve from 3.83686\n", - "Epoch 20/100\n", - "\n", - "Epoch 00020: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7367 - val_loss: 3.9438\n", - "\n", - "Epoch 00020: val_loss did not improve from 3.83686\n", - "Epoch 21/100\n", - "\n", - "Epoch 00021: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7554 - val_loss: 3.9248\n", - "\n", - "Epoch 00021: val_loss did not improve from 3.83686\n", - "Epoch 22/100\n", - "\n", - "Epoch 00022: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.7682 - val_loss: 3.9140\n", - "\n", - "Epoch 00022: val_loss did not improve from 3.83686\n", - "Epoch 23/100\n", - "\n", - "Epoch 00023: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7867 - val_loss: 3.8202\n", - "\n", - "Epoch 00023: val_loss improved from 3.83686 to 3.82025, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 24/100\n", - "\n", - "Epoch 00024: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.7498 - val_loss: 3.8610\n", - "\n", - "Epoch 00024: val_loss did not improve from 3.82025\n", - "Epoch 25/100\n", - "\n", - "Epoch 00025: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.7391 - val_loss: 3.8886\n", - "\n", - "Epoch 00025: val_loss did not improve from 3.82025\n", - "Epoch 26/100\n", - "\n", - "Epoch 00026: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.7487 - val_loss: 3.8860\n", - "\n", - "Epoch 00026: val_loss did not improve from 3.82025\n", - "Epoch 27/100\n", - "\n", - "Epoch 00027: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.6680 - val_loss: 3.3866\n", - "\n", - "Epoch 00027: val_loss improved from 3.82025 to 3.38664, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 28/100\n", - "\n", - "Epoch 00028: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.6011 - val_loss: 3.3802\n", - "\n", - "Epoch 00028: val_loss improved from 3.38664 to 3.38020, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 29/100\n", - "\n", - "Epoch 00029: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.5266 - val_loss: 3.3741\n", - "\n", - "Epoch 00029: val_loss improved from 3.38020 to 3.37413, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 30/100\n", - "\n", - "Epoch 00030: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.5440 - val_loss: 3.3658\n", - "\n", - "Epoch 00030: val_loss improved from 3.37413 to 3.36583, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 31/100\n", - "\n", - "Epoch 00031: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.5227 - val_loss: 3.2712\n", - "\n", - "Epoch 00031: val_loss improved from 3.36583 to 3.27118, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 32/100\n", - "\n", - "Epoch 00032: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.5003 - val_loss: 3.2636\n", - "\n", - "Epoch 00032: val_loss improved from 3.27118 to 3.26357, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 33/100\n", - "\n", - "Epoch 00033: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.5573 - val_loss: 3.2981\n", - "\n", - "Epoch 00033: val_loss did not improve from 3.26357\n", - "Epoch 34/100\n", - "\n", - "Epoch 00034: LearningRateScheduler setting learning rate to 0.001.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "500/500 [==============================] - 451s 902ms/step - loss: 3.5104 - val_loss: 3.3216\n", - "\n", - "Epoch 00034: val_loss did not improve from 3.26357\n", - "Epoch 35/100\n", - "\n", - "Epoch 00035: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4535 - val_loss: 3.2405\n", - "\n", - "Epoch 00035: val_loss improved from 3.26357 to 3.24054, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 36/100\n", - "\n", - "Epoch 00036: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4667 - val_loss: 3.2127\n", - "\n", - "Epoch 00036: val_loss improved from 3.24054 to 3.21267, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 37/100\n", - "\n", - "Epoch 00037: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4625 - val_loss: 3.2967\n", - "\n", - "Epoch 00037: val_loss did not improve from 3.21267\n", - "Epoch 38/100\n", - "\n", - "Epoch 00038: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4349 - val_loss: 3.2318\n", - "\n", - "Epoch 00038: val_loss did not improve from 3.21267\n", - "Epoch 39/100\n", - "\n", - "Epoch 00039: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4616 - val_loss: 3.2234\n", - "\n", - "Epoch 00039: val_loss did not improve from 3.21267\n", - "Epoch 40/100\n", - "\n", - "Epoch 00040: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4579 - val_loss: 3.2443\n", - "\n", - "Epoch 00040: val_loss did not improve from 3.21267\n", - "Epoch 41/100\n", - "\n", - "Epoch 00041: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4741 - val_loss: 3.1831\n", - "\n", - "Epoch 00041: val_loss improved from 3.21267 to 3.18308, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 42/100\n", - "\n", - "Epoch 00042: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4098 - val_loss: 3.1778\n", - "\n", - "Epoch 00042: val_loss improved from 3.18308 to 3.17781, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 43/100\n", - "\n", - "Epoch 00043: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4194 - val_loss: 3.3141\n", - "\n", - "Epoch 00043: val_loss did not improve from 3.17781\n", - "Epoch 44/100\n", - "\n", - "Epoch 00044: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4294 - val_loss: 3.1888\n", - "\n", - "Epoch 00044: val_loss did not improve from 3.17781\n", - "Epoch 45/100\n", - "\n", - "Epoch 00045: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4157 - val_loss: 3.2060\n", - "\n", - "Epoch 00045: val_loss did not improve from 3.17781\n", - "Epoch 46/100\n", - "\n", - "Epoch 00046: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.4147 - val_loss: 3.1829\n", - "\n", - "Epoch 00046: val_loss did not improve from 3.17781\n", - "Epoch 47/100\n", - "\n", - "Epoch 00047: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4061 - val_loss: 3.2214\n", - "\n", - "Epoch 00047: val_loss did not improve from 3.17781\n", - "Epoch 48/100\n", - "\n", - "Epoch 00048: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.4013 - val_loss: 3.1010\n", - "\n", - "Epoch 00048: val_loss improved from 3.17781 to 3.10097, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 49/100\n", - "\n", - "Epoch 00049: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4092 - val_loss: 3.1462\n", - "\n", - "Epoch 00049: val_loss did not improve from 3.10097\n", - "Epoch 50/100\n", - "\n", - "Epoch 00050: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3759 - val_loss: 3.1760\n", - "\n", - "Epoch 00050: val_loss did not improve from 3.10097\n", - "Epoch 51/100\n", - "\n", - "Epoch 00051: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.4261 - val_loss: 3.1638\n", - "\n", - "Epoch 00051: val_loss did not improve from 3.10097\n", - "Epoch 52/100\n", - "\n", - "Epoch 00052: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3900 - val_loss: 3.2724\n", - "\n", - "Epoch 00052: val_loss did not improve from 3.10097\n", - "Epoch 53/100\n", - "\n", - "Epoch 00053: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3771 - val_loss: 3.1456\n", - "\n", - "Epoch 00053: val_loss did not improve from 3.10097\n", - "Epoch 54/100\n", - "\n", - "Epoch 00054: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3997 - val_loss: 3.2297\n", - "\n", - "Epoch 00054: val_loss did not improve from 3.10097\n", - "Epoch 55/100\n", - "\n", - "Epoch 00055: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3632 - val_loss: 3.1960\n", - "\n", - "Epoch 00055: val_loss did not improve from 3.10097\n", - "Epoch 56/100\n", - "\n", - "Epoch 00056: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3829 - val_loss: 3.1371\n", - "\n", - "Epoch 00056: val_loss did not improve from 3.10097\n", - "Epoch 57/100\n", - "\n", - "Epoch 00057: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3724 - val_loss: 3.1169\n", - "\n", - "Epoch 00057: val_loss did not improve from 3.10097\n", - "Epoch 58/100\n", - "\n", - "Epoch 00058: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3625 - val_loss: 3.2694\n", - "\n", - "Epoch 00058: val_loss did not improve from 3.10097\n", - "Epoch 59/100\n", - "\n", - "Epoch 00059: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3691 - val_loss: 3.1037\n", - "\n", - "Epoch 00059: val_loss did not improve from 3.10097\n", - "Epoch 60/100\n", - "\n", - "Epoch 00060: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3976 - val_loss: 3.1110\n", - "\n", - "Epoch 00060: val_loss did not improve from 3.10097\n", - "Epoch 61/100\n", - "\n", - "Epoch 00061: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.3747 - val_loss: 3.1192\n", - "\n", - "Epoch 00061: val_loss did not improve from 3.10097\n", - "Epoch 62/100\n", - "\n", - "Epoch 00062: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 452s 903ms/step - loss: 3.3526 - val_loss: 3.1612\n", - "\n", - "Epoch 00062: val_loss did not improve from 3.10097\n", - "Epoch 63/100\n", - "\n", - "Epoch 00063: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 452s 903ms/step - loss: 3.4435 - val_loss: 3.1396\n", - "\n", - "Epoch 00063: val_loss did not improve from 3.10097\n", - "Epoch 64/100\n", - "\n", - "Epoch 00064: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 452s 903ms/step - loss: 3.3811 - val_loss: 3.1575\n", - "\n", - "Epoch 00064: val_loss did not improve from 3.10097\n", - "Epoch 65/100\n", - "\n", - "Epoch 00065: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3493 - val_loss: 3.2337\n", - "\n", - "Epoch 00065: val_loss did not improve from 3.10097\n", - "Epoch 66/100\n", - "\n", - "Epoch 00066: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 903ms/step - loss: 3.3510 - val_loss: 3.1230\n", - "\n", - "Epoch 00066: val_loss did not improve from 3.10097\n", - "Epoch 67/100\n", - "\n", - "Epoch 00067: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3569 - val_loss: 3.1419\n", - "\n", - "Epoch 00067: val_loss did not improve from 3.10097\n", - "Epoch 68/100\n", - "\n", - "Epoch 00068: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.3372 - val_loss: 3.0772\n", - "\n", - "Epoch 00068: val_loss improved from 3.10097 to 3.07717, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 69/100\n", - "\n", - "Epoch 00069: LearningRateScheduler setting learning rate to 0.001.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "500/500 [==============================] - 449s 898ms/step - loss: 3.3732 - val_loss: 3.1180\n", - "\n", - "Epoch 00069: val_loss did not improve from 3.07717\n", - "Epoch 70/100\n", - "\n", - "Epoch 00070: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.3438 - val_loss: 3.1318\n", - "\n", - "Epoch 00070: val_loss did not improve from 3.07717\n", - "Epoch 71/100\n", - "\n", - "Epoch 00071: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3451 - val_loss: 3.1492\n", - "\n", - "Epoch 00071: val_loss did not improve from 3.07717\n", - "Epoch 72/100\n", - "\n", - "Epoch 00072: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.3055 - val_loss: 3.1092\n", - "\n", - "Epoch 00072: val_loss did not improve from 3.07717\n", - "Epoch 73/100\n", - "\n", - "Epoch 00073: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3299 - val_loss: 3.2583\n", - "\n", - "Epoch 00073: val_loss did not improve from 3.07717\n", - "Epoch 74/100\n", - "\n", - "Epoch 00074: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3542 - val_loss: 3.1427\n", - "\n", - "Epoch 00074: val_loss did not improve from 3.07717\n", - "Epoch 75/100\n", - "\n", - "Epoch 00075: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3353 - val_loss: 3.1750\n", - "\n", - "Epoch 00075: val_loss did not improve from 3.07717\n", - "Epoch 76/100\n", - "\n", - "Epoch 00076: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3239 - val_loss: 3.1659\n", - "\n", - "Epoch 00076: val_loss did not improve from 3.07717\n", - "Epoch 77/100\n", - "\n", - "Epoch 00077: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3305 - val_loss: 3.0835\n", - "\n", - "Epoch 00077: val_loss did not improve from 3.07717\n", - "Epoch 78/100\n", - "\n", - "Epoch 00078: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.3211 - val_loss: 3.1030\n", - "\n", - "Epoch 00078: val_loss did not improve from 3.07717\n", - "Epoch 79/100\n", - "\n", - "Epoch 00079: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3223 - val_loss: 3.1195\n", - "\n", - "Epoch 00079: val_loss did not improve from 3.07717\n", - "Epoch 80/100\n", - "\n", - "Epoch 00080: LearningRateScheduler setting learning rate to 0.001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.3430 - val_loss: 3.2754\n", - "\n", - "Epoch 00080: val_loss did not improve from 3.07717\n", - "Epoch 81/100\n", - "\n", - "Epoch 00081: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.1907 - val_loss: 2.9731\n", - "\n", - "Epoch 00081: val_loss improved from 3.07717 to 2.97306, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 82/100\n", - "\n", - "Epoch 00082: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.1456 - val_loss: 2.9711\n", - "\n", - "Epoch 00082: val_loss improved from 2.97306 to 2.97114, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 83/100\n", - "\n", - "Epoch 00083: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.1248 - val_loss: 2.9670\n", - "\n", - "Epoch 00083: val_loss improved from 2.97114 to 2.96699, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 84/100\n", - "\n", - "Epoch 00084: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.1167 - val_loss: 2.9557\n", - "\n", - "Epoch 00084: val_loss improved from 2.96699 to 2.95567, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 85/100\n", - "\n", - "Epoch 00085: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.1287 - val_loss: 2.9472\n", - "\n", - "Epoch 00085: val_loss improved from 2.95567 to 2.94721, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 86/100\n", - "\n", - "Epoch 00086: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.1195 - val_loss: 2.9572\n", - "\n", - "Epoch 00086: val_loss did not improve from 2.94721\n", - "Epoch 87/100\n", - "\n", - "Epoch 00087: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.0942 - val_loss: 2.9739\n", - "\n", - "Epoch 00087: val_loss did not improve from 2.94721\n", - "Epoch 88/100\n", - "\n", - "Epoch 00088: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0693 - val_loss: 2.9428\n", - "\n", - "Epoch 00088: val_loss improved from 2.94721 to 2.94277, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 89/100\n", - "\n", - "Epoch 00089: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0901 - val_loss: 2.9392\n", - "\n", - "Epoch 00089: val_loss improved from 2.94277 to 2.93917, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 90/100\n", - "\n", - "Epoch 00090: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0916 - val_loss: 2.9386\n", - "\n", - "Epoch 00090: val_loss improved from 2.93917 to 2.93864, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 91/100\n", - "\n", - "Epoch 00091: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0853 - val_loss: 2.9484\n", - "\n", - "Epoch 00091: val_loss did not improve from 2.93864\n", - "Epoch 92/100\n", - "\n", - "Epoch 00092: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0696 - val_loss: 2.9277\n", - "\n", - "Epoch 00092: val_loss improved from 2.93864 to 2.92770, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 93/100\n", - "\n", - "Epoch 00093: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 901ms/step - loss: 3.0827 - val_loss: 2.9312\n", - "\n", - "Epoch 00093: val_loss did not improve from 2.92770\n", - "Epoch 94/100\n", - "\n", - "Epoch 00094: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0772 - val_loss: 2.9390\n", - "\n", - "Epoch 00094: val_loss did not improve from 2.92770\n", - "Epoch 95/100\n", - "\n", - "Epoch 00095: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0609 - val_loss: 2.9373\n", - "\n", - "Epoch 00095: val_loss did not improve from 2.92770\n", - "Epoch 96/100\n", - "\n", - "Epoch 00096: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0587 - val_loss: 2.9377\n", - "\n", - "Epoch 00096: val_loss did not improve from 2.92770\n", - "Epoch 97/100\n", - "\n", - "Epoch 00097: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0529 - val_loss: 2.9221\n", - "\n", - "Epoch 00097: val_loss improved from 2.92770 to 2.92209, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 98/100\n", - "\n", - "Epoch 00098: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0698 - val_loss: 2.9095\n", - "\n", - "Epoch 00098: val_loss improved from 2.92209 to 2.90946, saving model to experimento_ssd300_fault_1.h5\n", - "Epoch 99/100\n", - "\n", - "Epoch 00099: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 450s 901ms/step - loss: 3.0672 - val_loss: 2.9138\n", - "\n", - "Epoch 00099: val_loss did not improve from 2.90946\n", - "Epoch 100/100\n", - "\n", - "Epoch 00100: LearningRateScheduler setting learning rate to 0.0001.\n", - "500/500 [==============================] - 451s 902ms/step - loss: 3.0530 - val_loss: 2.9209\n", - "\n", - "Epoch 00100: val_loss did not improve from 2.90946\n" + " 88/100 [=========================>....] - ETA: 2s - loss: 5.5271" ] } ], @@ -911,10 +504,10 @@ "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 = classes, \n", - " include_classes= [1],\n", + " classes=classes,\n", + " include_classes='all',\n", + " #classes = classes, \n", + " #include_classes= [1],\n", " exclude_truncated=False,\n", " exclude_difficult=False,\n", " ret=False)\n", @@ -922,10 +515,10 @@ "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 = classes, \n", - " include_classes=[1],\n", + " classes=classes,\n", + " include_classes='all',\n", + " #classes = classes, \n", + " #include_classes=[1],\n", " exclude_truncated=False,\n", " exclude_difficult=False,\n", " ret=False)\n", @@ -1084,8 +677,8 @@ "\n", "\n", "initial_epoch = 0\n", - "final_epoch = 100 #config['train']['nb_epochs']\n", - "steps_per_epoch = 500\n", + "final_epoch = 500 #config['train']['nb_epochs']\n", + "steps_per_epoch = 100\n", "\n", "history = model.fit_generator(generator=train_generator,\n", " steps_per_epoch=steps_per_epoch,\n", @@ -1119,36 +712,9 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dict_keys(['val_loss', 'loss', 'lr'])\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "experimento_ssd300_fault_1.h5\n" - ] - } - ], + "outputs": [], "source": [ "#Graficar aprendizaje\n", "\n", @@ -1180,24 +746,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'json' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfig_path\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mconfig_buffer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mconfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjson\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloads\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfig_buffer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mNameError\u001b[0m: name 'json' is not defined" - ] - } - ], + "outputs": [], "source": [ "\n", - "config_path = 'config_300_fault_1.json'\n", + "config_path = 'config_7_fault_1.json'\n", "\n", "with open(config_path) as config_buffer:\n", " config = json.loads(config_buffer.read())\n", @@ -1311,20 +865,9 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "24" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ceil(val_dataset_size/batch_size)" ] @@ -1339,27 +882,17 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Training on: \t{'1': 1}\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "from imageio import imread\n", "from keras.preprocessing import image\n", "import time\n", "\n", - "config_path = 'config_300_fault_1.json'\n", + "config_path = 'config_7_fault_1.json'\n", "input_path = ['fault_jpg_1/']\n", - "output_path = 'result_ssd300_fault_1/'\n", + "output_path = 'result_ssd7_fault_1/'\n", "\n", "with open(config_path) as config_buffer:\n", " config = json.loads(config_buffer.read())\n", @@ -1412,19 +945,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Tiempo Total: 27.768\n", - "Tiempo promedio por imagen: 1.111\n", - "OK\n" - ] - } - ], + "outputs": [], "source": [ "image_paths = []\n", "for inp in input_path:\n", @@ -1505,18 +1028,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "panel : 69\n", - "cell : 423\n" - ] - } - ], + "outputs": [], "source": [ "\n", "# Summary instance training\n", @@ -1530,17 +1044,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 : 6030\n" - ] - } - ], + "outputs": [], "source": [ "for i in summary_category_training.keys():\n", " print(i, ': {:.0f}'.format(summary_category_training[i]))" diff --git a/config_7_fault_1.json b/config_7_fault_1.json index 2c6b8f4..c692688 100644 --- a/config_7_fault_1.json +++ b/config_7_fault_1.json @@ -6,9 +6,9 @@ }, "train": { - "train_image_folder": "Train&Test_1/images", - "train_annot_folder": "Train&Test_1/anns", - "train_image_set_filename": "Train&Test_1/train.txt", + "train_image_folder": "Train&Test_S/images", + "train_annot_folder": "Train&Test_S/anns", + "train_image_set_filename": "Train&Test_S/train.txt", "train_times": 1, "batch_size": 8, @@ -21,8 +21,8 @@ "test": { - "test_image_folder": "Train&Test_1/images", - "test_annot_folder": "Train&Test_1/anns", - "test_image_set_filename": "Train&Test_1/test.txt" + "test_image_folder": "Train&Test_S/images", + "test_annot_folder": "Train&Test_S/anns", + "test_image_set_filename": "Train&Test_S/test.txt" } } diff --git a/log.csv b/log.csv index 6789a23..22e8d99 100644 --- a/log.csv +++ b/log.csv @@ -445,3 +445,116 @@ epoch,loss,val_loss 23,5.98993371963501,9.678441431984973 24,6.50997715479211,7.558368946189311 25,6.291930182936228,4.799717326662433 +0,7.973862826169192,15.259298324584961 +1,6.938609604029774,21.302433013916016 +2,6.484276884204739,10.38413143157959 +3,6.276663233368681,14.123126029968262 +4,6.0733488614742575,6.53306245803833 +5,5.851887358192592,4.833110809326172 +6,5.8068152495792935,8.18958854675293 +7,5.7153588398011435,8.712896347045898 +8,5.472064780664968,9.076906204223633 +9,5.735800937272175,7.608792304992676 +10,5.366505203666268,7.72076940536499 +11,5.487185536329106,8.000381469726562 +12,5.410240396038517,5.3120598793029785 +13,5.149879344612608,4.975514888763428 +14,5.0995053472099725,4.513765335083008 +15,4.988152967595658,5.3012309074401855 +16,4.876671654837472,4.925055503845215 +17,5.103663201477389,5.011470794677734 +18,5.07386329802838,4.599146842956543 +19,4.9232402336564425,4.370230197906494 +20,4.9136308785323255,12.101633071899414 +21,4.991253912283773,5.603884696960449 +22,4.793732961455544,4.370993137359619 +23,4.9820091770626505,4.284317493438721 +24,5.076208100869105,5.341156482696533 +25,4.782644495739501,6.135577201843262 +26,4.698268840601156,7.34823751449585 +27,4.833031757386437,5.643138408660889 +28,4.900312094243018,5.404371738433838 +29,4.6962054205072885,6.693106174468994 +30,4.7917523095895955,5.376558303833008 +31,4.697283748774647,4.753889560699463 +32,4.841714300952115,7.0596442222595215 +33,4.732740326271163,8.103597640991211 +34,4.772678568467989,7.260011196136475 +35,4.704077057561055,4.494091987609863 +36,4.72994312283757,8.939574241638184 +37,4.614209944521622,6.865695953369141 +38,4.50847382073874,4.307891845703125 +39,4.442559424529776,5.49229097366333 +40,4.636491268545717,4.914579391479492 +41,4.554967951576465,4.138899803161621 +42,4.584889070673303,6.302365779876709 +43,4.60375291158618,5.189576148986816 +44,4.500438081694173,4.704959392547607 +45,4.510098532626503,7.994850158691406 +46,4.635972533907209,4.0616960525512695 +47,4.443238871909905,4.539795398712158 +48,4.374959782584683,5.823929786682129 +49,4.5681130820033955,5.749515533447266 +50,4.535971640230535,9.848762512207031 +51,4.603604928938636,6.908816337585449 +52,4.487594409303351,6.24993896484375 +53,4.4395546391399945,4.224571704864502 +54,4.49023666879633,4.341248989105225 +55,4.444760061036847,4.570250988006592 +56,4.472602662149367,5.458218097686768 +57,4.438342443133325,6.682774543762207 +58,4.339358455532199,4.864607334136963 +59,4.306590621160999,7.158379554748535 +60,4.3027781542840895,6.950503349304199 +61,4.358962325178025,4.723064422607422 +62,4.663398350988116,7.188640117645264 +63,4.432848420499765,6.108102798461914 +64,4.322951598481818,4.0363569259643555 +65,4.414543367819112,4.963410377502441 +66,4.442672677092499,6.636918067932129 +67,4.239999670731394,4.057308197021484 +68,4.33915251493454,6.3665690422058105 +69,4.253900223491595,3.7562568187713623 +70,4.300358089771899,4.466858863830566 +71,4.1269395074025415,4.697149753570557 +72,4.268223748757289,10.930615425109863 +73,4.615337735728214,7.849076271057129 +74,4.4084716236198345,4.53993558883667 +75,4.310147655307421,5.064493179321289 +76,4.168884132589612,3.9855284690856934 +77,4.259093998541792,6.002911567687988 +78,4.334231833180229,4.9638872146606445 +79,4.2766266985283,4.24093770980835 +80,4.0749239561321975,3.6843338012695312 +81,4.010318522968451,3.73720383644104 +82,4.00676853119672,4.161366939544678 +83,3.9495428685006013,3.7357115745544434 +84,3.9702968905260274,3.743980884552002 +85,3.8961962042092617,3.6619226932525635 +86,3.987741558106391,3.7644197940826416 +87,3.9462282380238793,3.633516311645508 +88,3.8772872319588294,3.8913538455963135 +89,4.02024297304761,3.706259250640869 +90,4.061259812706119,3.776811361312866 +91,3.9317529954408346,4.404216289520264 +92,3.9354638928895467,3.62033748626709 +93,3.9645815021113346,3.751218795776367 +94,3.914402025086539,3.8807034492492676 +95,3.9585177548374166,3.9658148288726807 +96,3.956007499616225,3.586838960647583 +97,3.906352294118781,3.735697031021118 +98,3.8935037969232917,3.635385513305664 +99,3.9164198772398717,3.593764066696167 +0,11.537110236919288,6.362030506134033 +1,7.416970851204612,12.469446182250977 +2,6.853848360524033,5.960817337036133 +3,6.297627481547269,7.095097541809082 +4,5.968446858001478,5.558282375335693 +5,5.949372747450164,10.557303428649902 +6,5.894821217114275,12.543929100036621 +7,6.214342418583956,8.151058197021484 +8,5.728240916945717,10.570259094238281 +9,5.422317249847181,5.8348798751831055 +10,5.376049788070447,4.478155612945557 +11,5.385305519176252,7.463174819946289 +12,5.432557795986985,4.685098171234131