{"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 librosa\nimport librosa.display\nimport matplotlib.pyplot as plt\nfrom pydub import AudioSegment\nimport pandas as pd\nfrom tqdm import tqdm\nimport numpy  as np\nimport scipy.signal\nimport os\nimport tensorflow as tf\nimport tensorflow_io as tfio\nfrom tensorflow.keras.utils import Sequence","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:45:58.114565Z","iopub.execute_input":"2023-05-20T08:45:58.115312Z","iopub.status.idle":"2023-05-20T08:46:13.191277Z","shell.execute_reply.started":"2023-05-20T08:45:58.115275Z","shell.execute_reply":"2023-05-20T08:46:13.189994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metadata = pd.read_csv(\"/kaggle/input/birdclef-2023/train_metadata.csv\")\nmetadata.head(10)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:13.193652Z","iopub.execute_input":"2023-05-20T08:46:13.195162Z","iopub.status.idle":"2023-05-20T08:46:13.347887Z","shell.execute_reply.started":"2023-05-20T08:46:13.195119Z","shell.execute_reply":"2023-05-20T08:46:13.346776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"AUD_DIR = \"/kaggle/input/birdclef-2023/train_audio/\"\nfile_paths = []\nfor i in tqdm(range(0, len(metadata))):\n    file_path = AUD_DIR + metadata[\"filename\"][i]\n    file_paths.append(file_path)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:13.350512Z","iopub.execute_input":"2023-05-20T08:46:13.351302Z","iopub.status.idle":"2023-05-20T08:46:13.535592Z","shell.execute_reply.started":"2023-05-20T08:46:13.351256Z","shell.execute_reply":"2023-05-20T08:46:13.534196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n = int(len(file_paths)*0.8)\ntrain_file_paths = file_paths[:n]\nval_file_paths = file_paths[n:]\n\nlabels = pd.get_dummies(metadata[\"primary_label\"])\ntrain_labels = labels[:n]\nval_labels = labels[n:]","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:13.538479Z","iopub.execute_input":"2023-05-20T08:46:13.539343Z","iopub.status.idle":"2023-05-20T08:46:13.564143Z","shell.execute_reply.started":"2023-05-20T08:46:13.539304Z","shell.execute_reply":"2023-05-20T08:46:13.563046Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def convert_to_spectro(address):\n    audio_file, sr = librosa.load(address, sr = 32000)\n    resampled_audio_file = scipy.signal.resample(audio_file, 160000)\n    melspec = librosa.feature.melspectrogram(y = resampled_audio_file, sr=32000, n_mels = 128)\n    melspec = librosa.power_to_db(melspec).astype(np.float32)\n    return np.array(melspec) \n\ndef load_file(file_path):\n    melspec = convert_to_spectro(file_path)\n    melspec_tensor = tf.convert_to_tensor(melspec)\n    return melspec_tensor","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:13.565695Z","iopub.execute_input":"2023-05-20T08:46:13.566028Z","iopub.status.idle":"2023-05-20T08:46:13.573369Z","shell.execute_reply.started":"2023-05-20T08:46:13.565982Z","shell.execute_reply":"2023-05-20T08:46:13.572117Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# batch_size = 32\n# unique_labels = metadata[\"primary_label\"].unique()\n\n# def get_batch(paths, batch_size):\n#     while True:\n#         # randomly select batch_size number of paths\n#         batch_paths = np.random.choice(paths, size=batch_size)\n#         batch_paths_df = pd.DataFrame(batch_paths)\n#         batch_paths_df = batch_paths_df[0].str.split(pat = \"/\", expand = True)\n#         labels = batch_paths_df[5]\n#         boolean_labels = [label == unique_labels for label in labels]\n        \n#         batch_labels = []\n#         batch_images = []\n#         # load each image and label in the batch\n#         for i, path in enumerate(batch_paths):\n#             spectro = convert_to_spectro(path)\n#             spectro = np.array(spectro, dtype = np.float32)\n#             spectro = spectro/(np.max(spectro))\n#             batch_images.append(spectro)\n            \n#             label1 = boolean_labels[i].astype(int)\n#             batch_labels.append(label1)\n            \n#         batch_labels = np.array(batch_labels, dtype = np.float32)\n#         batch_images = np.array(batch_images, dtype = np.float32)\n#         yield batch_images, batch_labels\n\n# train_generator = get_batch(train_file_paths, batch_size)\n# val_generator = get_batch(val_file_paths, batch_size)\n","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:54:25.581378Z","iopub.execute_input":"2023-05-14T21:54:25.582163Z","iopub.status.idle":"2023-05-14T21:54:25.597467Z","shell.execute_reply.started":"2023-05-14T21:54:25.582119Z","shell.execute_reply":"2023-05-14T21:54:25.596015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# melspecs = []\n# for i in tqdm(range(0, len(metadata))):\n#     file_path = AUD_DIR + metadata[\"filename\"][i]\n#     melspec = convert_to_spectro(file_path)\n#     melspecs.append(melspec)\n\n# melspecs = np.array(melspecs)\n# melspecs.shape","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:51:22.323814Z","iopub.execute_input":"2023-05-14T21:51:22.324216Z","iopub.status.idle":"2023-05-14T21:52:42.641270Z","shell.execute_reply.started":"2023-05-14T21:51:22.324179Z","shell.execute_reply":"2023-05-14T21:52:42.639436Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# melspecs = np.array(melspecs)\n# np.max(melspecs)","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:52:46.054222Z","iopub.execute_input":"2023-05-14T21:52:46.054720Z","iopub.status.idle":"2023-05-14T21:52:46.083548Z","shell.execute_reply.started":"2023-05-14T21:52:46.054680Z","shell.execute_reply":"2023-05-14T21:52:46.082317Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# librosa.display.specshow(melspecs[100],\n#                          y_axis='mel', fmax=16000, x_axis='time')","metadata":{"execution":{"iopub.status.busy":"2023-05-14T19:00:42.476553Z","iopub.execute_input":"2023-05-14T19:00:42.477059Z","iopub.status.idle":"2023-05-14T19:00:42.486989Z","shell.execute_reply.started":"2023-05-14T19:00:42.477020Z","shell.execute_reply":"2023-05-14T19:00:42.485961Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels = pd.get_dummies(metadata[\"primary_label\"])\nlabels","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:24.709345Z","iopub.execute_input":"2023-05-20T08:46:24.710329Z","iopub.status.idle":"2023-05-20T08:46:24.747624Z","shell.execute_reply.started":"2023-05-20T08:46:24.710274Z","shell.execute_reply":"2023-05-20T08:46:24.746443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from sklearn.model_selection import train_test_split\n# xtrain, xtest, ytrain, ytest = train_test_split(melspecs, labels, test_size = 0.2)","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:48:31.406648Z","iopub.execute_input":"2023-05-14T21:48:31.407463Z","iopub.status.idle":"2023-05-14T21:48:31.412380Z","shell.execute_reply.started":"2023-05-14T21:48:31.407422Z","shell.execute_reply":"2023-05-14T21:48:31.411050Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import tensorflow as tf\n# from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout,BatchNormalization\n\n# input_shape = (128, 313, 1)\n\n# model = tf.keras.models.Sequential([\n#     Conv2D(filters=32, kernel_size=(3,3),strides=2, input_shape=input_shape,padding='same'),\n#     MaxPooling2D(pool_size=(2,2)),\n#     Conv2D(filters= 32, kernel_size=(3,3),strides=2,padding='same'),\n#     MaxPooling2D(pool_size=(2,2)),\n#     Dropout(rate=0.20),\n#     Conv2D(filters= 256, kernel_size=(3,3),strides=2,padding='same'),\n# #     Conv2D(filters= 256, kernel_size=(3,3),strides=2,activation='relu',padding='same'),    \n#     Dropout(rate=0.20),\n#     Flatten(),\n# #     Dense(units=1024, activation='relu'),\n    \n#     Dense(units=512),\n#     Dropout(rate=0.20),\n#     Dense(units=256),\n#     Dense(units=264, activation='softmax'),\n    \n# ])\n# model.compile(optimizer=tf.keras.optimizers.Adam(),\n#               loss=tf.keras.losses.CategoricalCrossentropy(),\n#               metrics=['accuracy'])\n\n# model.summary()","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:54:34.239311Z","iopub.execute_input":"2023-05-14T21:54:34.239814Z","iopub.status.idle":"2023-05-14T21:54:34.420431Z","shell.execute_reply.started":"2023-05-14T21:54:34.239766Z","shell.execute_reply":"2023-05-14T21:54:34.419576Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# checkpointer = tf.keras.callbacks.ModelCheckpoint('/kaggle/working/Birds_2.h5', verbose=1, save_best_only=True)\n\n# model.fit(\n#     train_generator,\n#     steps_per_epoch=len(train_file_paths) // batch_size,\n#     epochs=10,\n#     validation_data = val_generator,\n#     validation_steps=len(val_file_paths) // batch_size,\n#     callbacks= checkpointer\n# )","metadata":{"execution":{"iopub.status.busy":"2023-05-14T21:54:37.312536Z","iopub.execute_input":"2023-05-14T21:54:37.312957Z","iopub.status.idle":"2023-05-14T21:55:11.232838Z","shell.execute_reply.started":"2023-05-14T21:54:37.312921Z","shell.execute_reply":"2023-05-14T21:55:11.228440Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model.save_weights(\"/kaggle/working/BirdWeights.h5\")","metadata":{"execution":{"iopub.status.busy":"2023-05-14T19:00:55.267190Z","iopub.execute_input":"2023-05-14T19:00:55.267567Z","iopub.status.idle":"2023-05-14T19:00:55.272721Z","shell.execute_reply.started":"2023-05-14T19:00:55.267529Z","shell.execute_reply":"2023-05-14T19:00:55.271306Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout,BatchNormalization\n\ninput_shape = (128, 313, 1)\n\nloaded_model = tf.keras.models.Sequential([\n    Conv2D(filters=32, kernel_size=(3,3),strides=2, input_shape=input_shape,padding='same'),\n    MaxPooling2D(pool_size=(2,2)),\n    Conv2D(filters= 32, kernel_size=(3,3),strides=2,padding='same'),\n    MaxPooling2D(pool_size=(2,2)),\n    Dropout(rate=0.20),\n    Conv2D(filters= 256, kernel_size=(3,3),strides=2,padding='same'),\n#     Conv2D(filters= 256, kernel_size=(3,3),strides=2,activation='relu',padding='same'),    \n    Dropout(rate=0.20),\n    Flatten(),\n#     Dense(units=1024, activation='relu'),\n    \n    Dense(units=512),\n    Dropout(rate=0.20),\n    Dense(units=256),\n    Dense(units=264, activation='softmax'),\n    \n])\nloaded_model.compile(optimizer=tf.keras.optimizers.Adam(),\n              loss=tf.keras.losses.CategoricalCrossentropy(),\n              metrics=['accuracy'])\n\nloaded_model.load_weights(\"/kaggle/input/birdweights/BirdWeights.h5\")","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:32.709922Z","iopub.execute_input":"2023-05-20T08:46:32.710616Z","iopub.status.idle":"2023-05-20T08:46:38.755152Z","shell.execute_reply.started":"2023-05-20T08:46:32.710541Z","shell.execute_reply":"2023-05-20T08:46:38.753980Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"address = \"/kaggle/input/birdclef-2023/test_soundscapes/soundscape_29201.ogg\"\naudio_file, sr = librosa.load(address, sr = 32000)\ntest_melspec = librosa.feature.melspectrogram(y = audio_file, sr=32000, n_mels = 128)\ntest_melspec = librosa.power_to_db(test_melspec).astype(np.float32)\n# librosa.display.specshow(test_melspec,\n#                          y_axis='mel', fmax=16000, x_axis='time')","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:38.758504Z","iopub.execute_input":"2023-05-20T08:46:38.758977Z","iopub.status.idle":"2023-05-20T08:46:52.498562Z","shell.execute_reply.started":"2023-05-20T08:46:38.758936Z","shell.execute_reply":"2023-05-20T08:46:52.497327Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"audio_data = np.array(audio_file)\nsliced_audio_data = audio_data[595*32000:600*32000]\nresampled_audio_data = scipy.signal.resample(sliced_audio_data, 160000)\nsliced_melspec = librosa.feature.melspectrogram(y = resampled_audio_data, sr=32000, n_mels = 128)\nsliced_melspec = librosa.power_to_db(sliced_melspec).astype(np.float32)\nlibrosa.display.specshow(sliced_melspec,\n                         y_axis='mel', fmax=16000, x_axis='time')","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:52.500020Z","iopub.execute_input":"2023-05-20T08:46:52.501182Z","iopub.status.idle":"2023-05-20T08:46:52.954918Z","shell.execute_reply.started":"2023-05-20T08:46:52.501147Z","shell.execute_reply":"2023-05-20T08:46:52.953860Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predictions = []\nfor i in tqdm(range(0, 120)):\n    sliced_audio_data = audio_data[5*i*32000:(5*(i+1))*32000]\n    resampled_audio_data = scipy.signal.resample(sliced_audio_data, 160000)\n    sliced_melspec = librosa.feature.melspectrogram(y = resampled_audio_data, sr=32000, n_mels = 128)\n    sliced_melspec = librosa.power_to_db(sliced_melspec).astype(np.float32)\n    pred = loaded_model.predict(np.expand_dims(sliced_melspec, axis = 0), verbose=0)\n    predictions.append(np.squeeze(pred))\npredictions = np.array(predictions)\npredictions.shape","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:46:52.957435Z","iopub.execute_input":"2023-05-20T08:46:52.958984Z","iopub.status.idle":"2023-05-20T08:47:19.416160Z","shell.execute_reply.started":"2023-05-20T08:46:52.958938Z","shell.execute_reply":"2023-05-20T08:47:19.414749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds2 = np.zeros(predictions.shape)\nfor i in range(0, len(predictions)):\n    for j in range(0, len(predictions[i])):\n        a = (\"{:.4f}\".format(float(f\"{predictions[i][j]}\")))\n        preds2[i][j] = float(a)\npreds2, preds2.shape\n","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:19.417688Z","iopub.execute_input":"2023-05-20T08:47:19.418056Z","iopub.status.idle":"2023-05-20T08:47:19.571721Z","shell.execute_reply.started":"2023-05-20T08:47:19.418016Z","shell.execute_reply":"2023-05-20T08:47:19.570459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df1 = pd.DataFrame({\"row_id\":[]})\ndf2 = pd.DataFrame([], columns = labels.columns)\nsubmission_df = pd.concat([df1,df2], axis = 1)\nsubmission_df","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:19.573276Z","iopub.execute_input":"2023-05-20T08:47:19.573789Z","iopub.status.idle":"2023-05-20T08:47:19.604008Z","shell.execute_reply.started":"2023-05-20T08:47:19.573745Z","shell.execute_reply":"2023-05-20T08:47:19.602773Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in tqdm(range(0, len(preds2))):\n    dff1 = pd.DataFrame({\"row_id\":f\"soundscape_29201_{5*(i+1)}\"}, index = [i])\n    dff2 = pd.DataFrame(preds2[i]).T\n    dff2.columns = labels.columns\n    dff2.index = [i]\n    sub = pd.concat([dff1, dff2], axis = 1)\n    submission_df = pd.concat([submission_df, sub])\n    \n# submission.set_index(\"row_id\", inplace=True)\nsubmission_df","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:19.605807Z","iopub.execute_input":"2023-05-20T08:47:19.607070Z","iopub.status.idle":"2023-05-20T08:47:19.882338Z","shell.execute_reply.started":"2023-05-20T08:47:19.607022Z","shell.execute_reply":"2023-05-20T08:47:19.881102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = pd.read_csv(\"/kaggle/input/birdclef-2023/sample_submission.csv\")\nsample","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:46.964998Z","iopub.execute_input":"2023-05-20T08:47:46.965780Z","iopub.status.idle":"2023-05-20T08:47:46.999015Z","shell.execute_reply.started":"2023-05-20T08:47:46.965743Z","shell.execute_reply":"2023-05-20T08:47:46.997792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(3):\n    for j in tqdm(range(len(sample.columns))):\n        sample.iloc[i:i+1,j+1:j+2] = submission_df.iloc[i:i+1,j+1:j+2]","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:47.823838Z","iopub.execute_input":"2023-05-20T08:47:47.824220Z","iopub.status.idle":"2023-05-20T08:47:48.378354Z","shell.execute_reply.started":"2023-05-20T08:47:47.824185Z","shell.execute_reply":"2023-05-20T08:47:48.377224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:50.133894Z","iopub.execute_input":"2023-05-20T08:47:50.134938Z","iopub.status.idle":"2023-05-20T08:47:50.168852Z","shell.execute_reply.started":"2023-05-20T08:47:50.134886Z","shell.execute_reply":"2023-05-20T08:47:50.167699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample.to_csv(\"submission.csv\", index = False)","metadata":{"execution":{"iopub.status.busy":"2023-05-20T08:47:53.419212Z","iopub.execute_input":"2023-05-20T08:47:53.419714Z","iopub.status.idle":"2023-05-20T08:47:53.446087Z","shell.execute_reply.started":"2023-05-20T08:47:53.419667Z","shell.execute_reply":"2023-05-20T08:47:53.445009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}