{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import time\nimport tensorflow as tf\nimport pandas as pd\nimport numpy as np\nfrom tensorflow.keras.applications import VGG16, VGG19, ResNet50, EfficientNetB7, InceptionV3\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom sklearn import metrics\nfrom keras.applications.vgg16 import preprocess_input as preprocess_input_vgg16\nfrom keras.applications.vgg19 import preprocess_input as preprocess_input_vgg19\nfrom keras.applications.resnet import preprocess_input as preprocess_input_resnet50\nfrom keras.applications.inception_v3 import preprocess_input as preprocess_input_inceptionv3\n","metadata":{"execution":{"iopub.status.busy":"2023-06-21T07:43:43.859859Z","iopub.execute_input":"2023-06-21T07:43:43.860207Z","iopub.status.idle":"2023-06-21T07:43:52.358646Z","shell.execute_reply.started":"2023-06-21T07:43:43.860179Z","shell.execute_reply":"2023-06-21T07:43:52.35768Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mapping_path = '/kaggle/input/imagenet-object-localization-challenge/LOC_synset_mapping.txt' \nsrc_path_train = '/kaggle/input/imagenet-object-localization-challenge/ILSVRC/Data/CLS-LOC/train'","metadata":{"execution":{"iopub.status.busy":"2023-06-21T07:43:52.360323Z","iopub.execute_input":"2023-06-21T07:43:52.361613Z","iopub.status.idle":"2023-06-21T07:43:52.366293Z","shell.execute_reply.started":"2023-06-21T07:43:52.361578Z","shell.execute_reply":"2023-06-21T07:43:52.364977Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Creation of mapping dictionaries to obtain the image classes\n\nclass_mapping_dict = {}\nclass_mapping_dict_number = {}\nmapping_class_to_number = {}\nmapping_number_to_class = {}\ni = 0\nfor line in open(mapping_path):\n    class_mapping_dict[line[:9].strip()] = line[9:].strip()\n    class_mapping_dict_number[i] = line[9:].strip()\n    mapping_class_to_number[line[:9].strip()] = i\n    mapping_number_to_class[i] = line[:9].strip()\n    i+=1","metadata":{"execution":{"iopub.status.busy":"2023-06-21T07:43:52.367509Z","iopub.execute_input":"2023-06-21T07:43:52.368472Z","iopub.status.idle":"2023-06-21T07:43:52.387677Z","shell.execute_reply.started":"2023-06-21T07:43:52.36844Z","shell.execute_reply":"2023-06-21T07:43:52.3868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"val_split = 0.05\nbatch = 64","metadata":{"execution":{"iopub.status.busy":"2023-06-21T07:43:52.390082Z","iopub.execute_input":"2023-06-21T07:43:52.390529Z","iopub.status.idle":"2023-06-21T07:43:52.394744Z","shell.execute_reply.started":"2023-06-21T07:43:52.390498Z","shell.execute_reply":"2023-06-21T07:43:52.393704Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_gen_vgg16 = ImageDataGenerator(\n    preprocessing_function = preprocess_input_vgg16,\n    validation_split=val_split)\n\ntest_generator_vgg16 = image_gen_vgg16.flow_from_directory(\n    src_path_train,\n    target_size=(224,224),\n    shuffle=False,\n    batch_size=batch,\n    subset=\"validation\",\n    class_mode=\"sparse\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T07:43:52.396316Z","iopub.execute_input":"2023-06-21T07:43:52.397358Z","iopub.status.idle":"2023-06-21T08:00:36.760582Z","shell.execute_reply.started":"2023-06-21T07:43:52.3973Z","shell.execute_reply":"2023-06-21T08:00:36.759428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_gen_vgg19 = ImageDataGenerator(\n    preprocessing_function = preprocess_input_vgg19,\n    validation_split=val_split)\n\ntest_generator_vgg19 = image_gen_vgg19.flow_from_directory(\n  src_path_train,\n  target_size=(224,224),\n  shuffle=False,\n  batch_size=batch,\n  subset=\"validation\",\n  class_mode=\"sparse\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:00:37.408079Z","iopub.execute_input":"2023-06-21T08:00:37.408428Z","iopub.status.idle":"2023-06-21T08:09:01.155906Z","shell.execute_reply.started":"2023-06-21T08:00:37.408398Z","shell.execute_reply":"2023-06-21T08:09:01.154917Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_gen_resnet50 = ImageDataGenerator(\n    preprocessing_function = preprocess_input_resnet50,\n    validation_split=val_split)\n\ntest_generator_resnet50 = image_gen_resnet50.flow_from_directory(\n  src_path_train,\n  target_size=(224,224),\n  shuffle=False,\n  batch_size=batch,\n  subset=\"validation\",\n  class_mode=\"sparse\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:09:01.157567Z","iopub.execute_input":"2023-06-21T08:09:01.157929Z","iopub.status.idle":"2023-06-21T08:12:05.171973Z","shell.execute_reply.started":"2023-06-21T08:09:01.157898Z","shell.execute_reply":"2023-06-21T08:12:05.170959Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_gen_efficientb7 = ImageDataGenerator(\n    validation_split=val_split)\n\ntest_generator_efficientb7 = image_gen_efficientb7.flow_from_directory(\n  src_path_train,\n  target_size=(600,600),\n  shuffle=False,\n  batch_size=batch,\n  subset=\"validation\",\n  class_mode=\"sparse\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:12:05.173527Z","iopub.execute_input":"2023-06-21T08:12:05.173892Z","iopub.status.idle":"2023-06-21T08:14:47.79849Z","shell.execute_reply.started":"2023-06-21T08:12:05.17386Z","shell.execute_reply":"2023-06-21T08:14:47.797541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_gen_inceptionv3 = ImageDataGenerator(\n    preprocessing_function = preprocess_input_inceptionv3,\n    validation_split=val_split)\n\ntest_generator_inceptionv3 = image_gen_inceptionv3.flow_from_directory(\n  src_path_train,\n  target_size=(299,299),\n  shuffle=False,\n  batch_size=batch,\n  subset=\"validation\",\n  class_mode=\"sparse\"\n)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:14:47.802046Z","iopub.execute_input":"2023-06-21T08:14:47.802347Z","iopub.status.idle":"2023-06-21T08:17:27.628922Z","shell.execute_reply.started":"2023-06-21T08:14:47.802323Z","shell.execute_reply":"2023-06-21T08:17:27.627937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create a list of pretrained models\nmodels = [\n    (\"VGG16\", VGG16),\n    (\"VGG19\", VGG19),\n    (\"ResNet50\", ResNet50),\n    (\"EfficientB7\", EfficientNetB7),\n    (\"InceptionV3\", InceptionV3)\n]\n","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:17:27.630527Z","iopub.execute_input":"2023-06-21T08:17:27.630901Z","iopub.status.idle":"2023-06-21T08:17:27.638011Z","shell.execute_reply.started":"2023-06-21T08:17:27.630871Z","shell.execute_reply":"2023-06-21T08:17:27.635122Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Function to calculate accuracy\ndef calculate_accuracy(model, test_generator):\n    # Load the model with pretrained weights\n    pretrained_model = model(weights='imagenet')\n        \n    # Run a forward pass to get predictions\n    predictions = pretrained_model.predict(test_generator)\n    predictions = np.argmax(predictions, axis = 1)\n    y_test = test_generator.classes\n    accuracy = metrics.accuracy_score(y_test, predictions)\n\n        \n    return accuracy","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:17:27.639531Z","iopub.execute_input":"2023-06-21T08:17:27.64027Z","iopub.status.idle":"2023-06-21T08:17:27.647023Z","shell.execute_reply.started":"2023-06-21T08:17:27.640239Z","shell.execute_reply":"2023-06-21T08:17:27.646138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create empty lists to store the results\nnames = []\nparameters = []\naccuracies = []\nexecution_times = []\n\n# Compare the models and store the results\nfor name, model in models:\n    start_time = time.time()\n    \n    # Get the number of parameters in the model\n    param = model(weights='imagenet').count_params()\n    \n    # Calculate the accuracy\n    if model == VGG16:\n        preds = calculate_accuracy(model, test_generator = test_generator_vgg16)\n    elif model == VGG19:\n        preds = calculate_accuracy(model, test_generator = test_generator_vgg19)\n    elif model == ResNet50:\n        preds = calculate_accuracy(model, test_generator = test_generator_resnet50)\n    elif model == EfficientNetB7:\n        preds = calculate_accuracy(model, test_generator = test_generator_efficientb7)\n    else :\n        preds = calculate_accuracy(model, test_generator = test_generator_inceptionv3)\n        \n    # Measure the execution time\n    exec_time = time.time() - start_time\n    \n    # Store the results in lists\n    names.append(name)\n    parameters.append(param)\n    accuracies.append(preds)\n    execution_times.append(exec_time)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T08:17:27.648331Z","iopub.execute_input":"2023-06-21T08:17:27.648664Z","iopub.status.idle":"2023-06-21T09:42:59.850979Z","shell.execute_reply.started":"2023-06-21T08:17:27.648634Z","shell.execute_reply":"2023-06-21T09:42:59.849969Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create a pandas DataFrame with the results\ndata = {\n    \"Name\": names,\n    \"Parameters\": parameters,\n    \"Accuracy\": accuracies,\n    \"Time of Execution\": execution_times\n}\ndf = pd.DataFrame(data)\n\n# Print the DataFrame\nprint(df)","metadata":{"execution":{"iopub.status.busy":"2023-06-21T09:42:59.858984Z","iopub.execute_input":"2023-06-21T09:42:59.859394Z","iopub.status.idle":"2023-06-21T09:42:59.904693Z","shell.execute_reply.started":"2023-06-21T09:42:59.859353Z","shell.execute_reply":"2023-06-21T09:42:59.90346Z"},"trusted":true},"execution_count":null,"outputs":[]}]}