{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\nimport PIL\nimport PIL.Image\nimport tensorflow as tf\nimport tensorflow_datasets as tfds\nfrom keras.models import Model\nfrom keras.layers import Input\nfrom keras.layers import Conv2D\nfrom keras.layers import MaxPooling2D\nfrom keras.layers import Flatten\nfrom keras.layers import Dense\nfrom keras.layers.merge import concatenate\nfrom keras.layers import add\nfrom keras.layers import Activation\n\nfrom google.colab import drive\ndrive.mount('/content/drive')\npath = F\"/content/gdrive/My Drive/deep_14_layers.h5\"","metadata":{"id":"wn6HM0PW0hj6","outputId":"bdb0dba3-9691-4836-a27a-4a81fcc101c3","execution":{"iopub.status.busy":"2021-10-28T10:24:49.839467Z","iopub.execute_input":"2021-10-28T10:24:49.839882Z","iopub.status.idle":"2021-10-28T10:24:55.483267Z","shell.execute_reply.started":"2021-10-28T10:24:49.839802Z","shell.execute_reply":"2021-10-28T10:24:55.482472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# New Section","metadata":{"id":"qlPIjYapxxDw"}},{"cell_type":"code","source":"!mkdir ~/.kaggle\n!touch ~/.kaggle/kaggle.json\n\napi_token = {\"username\":\"rajathv5\",\"key\":\"aff1f37eab6106f5b8e8e4ab9c242f66\"}\n\nimport json\n\nwith open('/root/.kaggle/kaggle.json', 'w') as file:\n    json.dump(api_token, file)\n\n!chmod 600 ~/.kaggle/kaggle.json\n","metadata":{"id":"KJ0P3xtW1g4k"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip uninstall -y kaggle\n!pip install --upgrade pip\n!pip install kaggle==1.5.6\n!kaggle competitions download -c nnfl-2021-assignment-1","metadata":{"id":"_BgqafLc2UZY","outputId":"0cc267d3-ae2f-4fdd-db99-caaaaf7322d5"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!unzip /content/nnfl-2021-assignment-1.zip","metadata":{"id":"eMYkq1T-urWS","outputId":"d27b2569-6424-44bb-9e1a-606fe7cbfc3e"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir fire_videos/train/fire","metadata":{"id":"FbnnOizHwYGC","execution":{"iopub.status.busy":"2021-10-28T10:27:11.162624Z","iopub.execute_input":"2021-10-28T10:27:11.163114Z","iopub.status.idle":"2021-10-28T10:27:11.834702Z","shell.execute_reply.started":"2021-10-28T10:27:11.163074Z","shell.execute_reply":"2021-10-28T10:27:11.833886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir fire_videos/train/not_fire","metadata":{"id":"icdWlZoH-PPw"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_file = pd.read_csv('fire_videos/train.csv')\ntrain_file.head(5)","metadata":{"id":"zqZHETfr-Q5v","outputId":"dd6043ca-2d09-440c-c7d7-8ad8e346fde5"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"values = {}\nt_f = 0\nt_nf = 0\nfor i, j in train_file.iterrows():\n  values[j['File']] = j['True_Label']\n  if j['True_Label'] == 'fire': t_f +=1\n  else: t_nf +=1\n  \n\nprint(t_f, t_nf)","metadata":{"id":"VK26e0Gc-hy3","outputId":"34bc0017-100d-4c84-aa08-6bcad53480a3"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import glob\nimport shutil, os\n","metadata":{"id":"jDjDRuaC_N4b"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#made fire and non_fire folders in train\ncount = 0\nprev_first = 0\nfor i in sorted(glob.glob('fire_videos/train/*.jpg')):\n  name = i.split('/')[2]\n  val = values[name]\n  print(name)\n  if val == 'fire':\n    try : shutil.move(i, 'fire_videos/train/fire')\n    except : continue\n  else:\n    count +=1\n    if count%2 == 0:\n      try : shutil.move(i, 'fire_videos/train/not_fire')\n      except : continue\n    \n    \n    \n        \n     \n","metadata":{"id":"Hpljvbp4AJXN","outputId":"c9a36c17-8e68-4c88-ec93-da683ab02841"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#CHECK IF FOLDER SEPARATION HAS BEEN DONE CORRECTLY HERE1\nfire = 0\nnot_fire = 0\n\nfor i in glob.glob('fire_videos/train/fire/*.jpg'):\n  fire +=1\n\nfor i in glob.glob('fire_videos/train/not_fire/*.jpg'):\n  not_fire +=1\n\nprint(fire, not_fire)","metadata":{"id":"dD84e3-vuYQH","outputId":"13f0abc1-c86a-402f-fa0f-dc74be27074c"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def inception_module(layer_in, f1, f2, f3):\n\t# 1x1 conv\n\tconv1 = Conv2D(f1, (1,1), padding='same', activation='relu')(layer_in)\n\t# 3x3 conv\n\tconv3 = Conv2D(f2, (3,3), padding='same', activation='relu')(layer_in)\n\t# 5x5 conv\n\tconv5 = Conv2D(f3, (5,5), padding='same', activation='relu')(layer_in)\n\t# 3x3 max pooling\n\tpool = MaxPooling2D((3,3), strides=(1,1), padding='same')(layer_in)\n\t# concatenate filters, assumes filters/channels last\n\tlayer_out = concatenate([conv1, conv3, conv5, pool], axis=-1)\n\treturn layer_out","metadata":{"id":"Q883sFFa8oR_"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def residual_module(layer_in, n_filters):\n\tmerge_input = layer_in\n\t# check if the number of filters needs to be increase, assumes channels last format\n\tif layer_in.shape[-1] != n_filters:\n\t\tmerge_input = Conv2D(n_filters, (1,1), padding='same', activation='relu', kernel_initializer='he_normal')(layer_in)\n\t\n\t# conv1\n\tconv1 = Conv2D(n_filters, (3,3), padding='same', activation='relu', kernel_initializer='he_normal')(layer_in)\n\t# conv2\n\tconv2 = Conv2D(n_filters, (3,3), padding='same', activation='linear', kernel_initializer='he_normal')(conv1)\n\t# add filters, assumes filters/channels last\n\tlayer_out = add([conv2, merge_input])\n\t# activation function\n\tlayer_out = Activation('relu')(layer_out)\n \n\treturn layer_out","metadata":{"id":"xKERraXv8pKG"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#datagen for train \nbatch_size = 32\ndata_dir = 'fire_videos/train'\ntrain_ds = tf.keras.utils.image_dataset_from_directory(\n  data_dir,\n  validation_split=0.4,\n  subset=\"training\",\n  label_mode='categorical',\n  seed=123,\n  batch_size=batch_size,\n  )\n\nval_ds = tf.keras.utils.image_dataset_from_directory(\n  data_dir,\n  validation_split=0.4,\n  subset=\"validation\",\n  label_mode='categorical',\n  seed=123,\n  batch_size=batch_size)","metadata":{"id":"cJgM9MV3AQrF","outputId":"3606cc57-7ab5-48a9-8db2-758cf9cd266b"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Importing the required Keras modules containing model and layers\nfrom tensorflow.keras.models import Sequential\n# import tensorflow.keras.layers as layers\nfrom tensorflow.keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D, Rescaling\n# Creating a Sequential Model and adding the layers\n# model = Sequential([\n#   Rescaling(1./255, input_shape=(256, 256, 3)),\n#   Conv2D(32, 3, padding='same', activation='relu',kernel_initializer='he_normal'),\n#   MaxPooling2D(),\n#   Conv2D(64, 3, padding='same', activation='relu',kernel_initializer='he_normal'),\n#   MaxPooling2D(),\n#   Conv2D(32, 3, padding='same', activation='relu',kernel_initializer='he_normal'),\n#   MaxPooling2D(),\n#   Conv2D(16,3, padding='same', activation='relu',kernel_initializer='he_normal'),\n#   Flatten(),\n#   Dense(128, activation='relu', kernel_regularizer=tf.keras.regularizers.L2(0.01)),\n#   Dropout(0.2),\n#   Dense(64, activation='relu'),\n#   Dense(2, activation='sigmoid')\n# ])\n\n# model.compile(optimizer='adam', \n#               loss='categorical_crossentropy', \n#               metrics=['accuracy'])\n\nmodel = Sequential()\nmodel.add(Rescaling(1./255, input_shape=(256, 256, 3)))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=64,kernel_size=(3,3),padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=128, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=256, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(Conv2D(filters=512, kernel_size=(3,3), padding=\"same\", activation=\"relu\"))\nmodel.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))\nmodel.add(Flatten())\nmodel.add(Dense(1024,activation=\"relu\", kernel_regularizer=tf.keras.regularizers.L2(0.01)))\nmodel.add(Dense(512,activation=\"relu\", kernel_regularizer=tf.keras.regularizers.L2(0.01)))\nmodel.add(Dense(512, activation='relu', kernel_regularizer=tf.keras.regularizers.L2(0.01)))\nmodel.add(Dense(256, activation=\"relu\", kernel_regularizer=tf.keras.regularizers.L2(0.01)))\nmodel.add(Dense(128, activation='relu', kernel_regularizer=tf.keras.regularizers.L2(0.01)))\nmodel.add(Dense(2, activation=\"sigmoid\"))\nmodel.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])\n","metadata":{"id":"_IbzMD9LD-ex"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"checkpoint_path = \"training_1/cp.ckpt\"\ncheckpoint_dir = os.path.dirname(checkpoint_path)\n# es = EarlyStopping(monitor='val_loss', mode='min', verbose=1)\n# mc = ModelCheckpoint(path + 'best_model.h5', monitor='val_accuracy', mode='max', verbose=1, save_best_only=True)\n\n# Create a callback that saves the model's weights\ncp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,\n                                                 save_weights_only=True,\n                                                 verbose=1)\n\nhistory = model.fit(\n  train_ds,\n  validation_data=val_ds,\n  batch_size=20,\n  callbacks=[cp_callback],\n  epochs=2\n)","metadata":{"id":"8GuXAJ_BM80i","outputId":"1a0e677a-e23f-429e-e549-364b1bd59900"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import itertools\nresults = {}\nfor i in glob.glob('fire_videos/test/*.jpg'):\n  name = i\n  iname = i.split('/')[2]\n  img = tf.keras.utils.load_img(\n    name, target_size=(256, 256)\n  )\n  img_array = tf.keras.utils.img_to_array(img)\n  img_array = tf.expand_dims(img_array, 0) # Create a batch\n  predictions = model.predict(img_array)\n  # print(predictions)\n  # print(predictions[0][0] < predictions[0][1])\n  \n  results[iname] = 'fire' if predictions[0][0] > predictions[0][1] else 'not_fire'\n    \n\n","metadata":{"id":"ntEHcW5kFCiP"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.DataFrame(results.items(), columns = ['File', 'Label'])\n","metadata":{"id":"oh8Gjgp72EEa"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head(100)","metadata":{"id":"72FyF9iZ7MT5","outputId":"591c729d-9ab9-45f2-963b-1c887c08ff17"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.to_csv('Submission.csv', index=False)","metadata":{"id":"zHFl6YLu9ZoG"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = F\"/content/drive/MyDrive/deep_14_layers.h5\"\nmodel.save(path) ","metadata":{"id":"KZv140fw9d7E"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"ny6gF5SzxMMW"},"execution_count":null,"outputs":[]}]}