{"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":"markdown","source":"Import The Libraries📚","metadata":{}},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport torch\nimport json\n# import torchaudio\n# import numpy as np\n# import seaborn as sns\n# import matplotlib.pyplot as plt\n# %matplotlib inline\n# import plotly.express as px\n# import librosa\n# import librosa.display\n# import IPython.display as ipd\n# import sklearn\n# import warnings\n# import seaborn as sns\n# warnings.filterwarnings('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-04-29T08:33:11.198925Z","iopub.execute_input":"2022-04-29T08:33:11.199435Z","iopub.status.idle":"2022-04-29T08:33:11.206502Z","shell.execute_reply.started":"2022-04-29T08:33:11.199396Z","shell.execute_reply":"2022-04-29T08:33:11.205514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport ast\nimport json\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport soundfile as sf\nimport librosa\nimport librosa.display\nimport IPython.display as display","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:11.42247Z","iopub.execute_input":"2022-04-29T08:33:11.422873Z","iopub.status.idle":"2022-04-29T08:33:11.427047Z","shell.execute_reply.started":"2022-04-29T08:33:11.422845Z","shell.execute_reply":"2022-04-29T08:33:11.426307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.getcwd()","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:11.561297Z","iopub.execute_input":"2022-04-29T08:33:11.562021Z","iopub.status.idle":"2022-04-29T08:33:11.569081Z","shell.execute_reply.started":"2022-04-29T08:33:11.561982Z","shell.execute_reply":"2022-04-29T08:33:11.568323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"SEE THE DATA 🐔:","metadata":{}},{"cell_type":"code","source":"path = '/kaggle/input/birdclef-2022/'\nos.listdir(path)\n\ntrain_meta = pd.read_csv(path+'train_metadata.csv')\ntest_data = pd.read_csv(path+'test.csv')\nebird_data = pd.read_csv(path+'eBird_Taxonomy_v2021.csv')\nsamp_subm = pd.read_csv(path+'sample_submission.csv')\n\nwith open(path+'scored_birds.json') as f:\n    scored_birds = json.load(f)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:11.908959Z","iopub.execute_input":"2022-04-29T08:33:11.909265Z","iopub.status.idle":"2022-04-29T08:33:12.055313Z","shell.execute_reply.started":"2022-04-29T08:33:11.909227Z","shell.execute_reply":"2022-04-29T08:33:12.054392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:12.203605Z","iopub.execute_input":"2022-04-29T08:33:12.20388Z","iopub.status.idle":"2022-04-29T08:33:12.215421Z","shell.execute_reply.started":"2022-04-29T08:33:12.203853Z","shell.execute_reply":"2022-04-29T08:33:12.214598Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_meta.head()","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:12.331445Z","iopub.execute_input":"2022-04-29T08:33:12.331746Z","iopub.status.idle":"2022-04-29T08:33:12.349511Z","shell.execute_reply.started":"2022-04-29T08:33:12.331711Z","shell.execute_reply":"2022-04-29T08:33:12.348649Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_meta.shape","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:12.475614Z","iopub.execute_input":"2022-04-29T08:33:12.476058Z","iopub.status.idle":"2022-04-29T08:33:12.482324Z","shell.execute_reply.started":"2022-04-29T08:33:12.47601Z","shell.execute_reply":"2022-04-29T08:33:12.48167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"EXAMPLE ON ROW 0","metadata":{}},{"cell_type":"code","source":"row = 0\ntrain_meta.iloc[row]","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:12.802416Z","iopub.execute_input":"2022-04-29T08:33:12.803011Z","iopub.status.idle":"2022-04-29T08:33:12.810096Z","shell.execute_reply.started":"2022-04-29T08:33:12.802973Z","shell.execute_reply":"2022-04-29T08:33:12.809481Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label = train_meta.loc[row, 'primary_label']\nfilename = train_meta.loc[row, 'filename']\n\nprint(filename)\n# Check if the file is in the folder\nfilename.split('/')[1] in os.listdir(path+'train_audio/'+label)\n\ndata, samplerate = sf.read(path+'train_audio/'+filename)\nprint('snipe of data:', data[:4])\nprint('samplerate:', samplerate)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:12.959775Z","iopub.execute_input":"2022-04-29T08:33:12.960331Z","iopub.status.idle":"2022-04-29T08:33:12.987814Z","shell.execute_reply.started":"2022-04-29T08:33:12.960292Z","shell.execute_reply":"2022-04-29T08:33:12.986943Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_audio_file(data, samplerate):\n    \"\"\" Plot the audio data\"\"\"\n    \n    sr = samplerate\n    fig = plt.figure(figsize=(8, 4))\n    x = range(len(data))\n    y = data\n    plt.plot(x, y)\n    plt.plot(x, y, color='red')\n    plt.legend(loc='upper center')\n    plt.grid()\n    \n\nplot_audio_file(data, samplerate)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:13.163765Z","iopub.execute_input":"2022-04-29T08:33:13.164185Z","iopub.status.idle":"2022-04-29T08:33:13.725088Z","shell.execute_reply.started":"2022-04-29T08:33:13.164117Z","shell.execute_reply":"2022-04-29T08:33:13.724443Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plot_spectrogram(data, samplerate):\n    \"\"\" Plot spectrogram with mel scaling \"\"\"\n    \n    sr = samplerate\n    spectrogram = librosa.feature.melspectrogram(y=data, sr=sr)\n    log_spectrogram = librosa.power_to_db(spectrogram, ref=np.max)\n    librosa.display.specshow(log_spectrogram, sr=sr, x_axis='time', y_axis='mel')\n    \nplot_spectrogram(data, samplerate)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:13.726581Z","iopub.execute_input":"2022-04-29T08:33:13.72732Z","iopub.status.idle":"2022-04-29T08:33:14.109438Z","shell.execute_reply.started":"2022-04-29T08:33:13.727277Z","shell.execute_reply":"2022-04-29T08:33:14.108533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"display.Audio(path+'train_audio/'+filename)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:14.111219Z","iopub.execute_input":"2022-04-29T08:33:14.111687Z","iopub.status.idle":"2022-04-29T08:33:14.125494Z","shell.execute_reply.started":"2022-04-29T08:33:14.111644Z","shell.execute_reply":"2022-04-29T08:33:14.123252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Exploratory Data Analysis \nThere are 152 primary lables and 152 common names. Both are related. The labels are not evenly distributed.","metadata":{}},{"cell_type":"code","source":"# train_meta['primary_label'].value_counts()[0:10]\nlen(set(list(train_meta['primary_label'])))","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:14.620793Z","iopub.execute_input":"2022-04-29T08:33:14.621312Z","iopub.status.idle":"2022-04-29T08:33:14.628326Z","shell.execute_reply.started":"2022-04-29T08:33:14.621277Z","shell.execute_reply":"2022-04-29T08:33:14.627624Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_meta['common_name'].value_counts()[0:10]","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:14.875432Z","iopub.execute_input":"2022-04-29T08:33:14.876191Z","iopub.status.idle":"2022-04-29T08:33:14.885189Z","shell.execute_reply.started":"2022-04-29T08:33:14.876134Z","shell.execute_reply":"2022-04-29T08:33:14.884538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sf.read(path+'train_audio/'+filename)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:15.06496Z","iopub.execute_input":"2022-04-29T08:33:15.065537Z","iopub.status.idle":"2022-04-29T08:33:15.085989Z","shell.execute_reply.started":"2022-04-29T08:33:15.065485Z","shell.execute_reply":"2022-04-29T08:33:15.08504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**TEST MODEL**","metadata":{}},{"cell_type":"code","source":"import csv","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:15.431712Z","iopub.execute_input":"2022-04-29T08:33:15.431981Z","iopub.status.idle":"2022-04-29T08:33:15.435705Z","shell.execute_reply.started":"2022-04-29T08:33:15.431947Z","shell.execute_reply":"2022-04-29T08:33:15.434628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create empty csv file \nheader = \"length chroma_stft_mean chroma_stft_var rms_mean rms_var spectral_centroid_mean spectral_centroid_var spectral_bandwidth_mean spectral_bandwidth_var rolloff_mean rolloff_var zero_crossing_rate_mean zero_crossing_rate_var harmony_mean harmony_var perceptr_mean perceptr_var tempo mfcc1_mean mfcc1_var mfcc2_mean mfcc2_var mfcc3_mean mfcc3_var mfcc4_mean mfcc4_var label\".split()\n\nfile = open('data.csv', 'w', newline = '')\nwith file:\n    writer = csv.writer(file)\n    writer.writerow(header)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:15.646381Z","iopub.execute_input":"2022-04-29T08:33:15.64666Z","iopub.status.idle":"2022-04-29T08:33:15.65214Z","shell.execute_reply.started":"2022-04-29T08:33:15.646628Z","shell.execute_reply":"2022-04-29T08:33:15.651428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Transform each .wav file into a .csv row:\nfor line in train_meta.index:\n    sound_name = path+'train_audio/'+train_meta['filename'][line]\n    y, sr = librosa.load(sound_name, mono = True, duration = 30)\n    chroma_stft = librosa.feature.chroma_stft(y = y, sr = sr)\n    rmse = librosa.feature.rms(y = y)\n    spec_cent = librosa.feature.spectral_centroid(y = y, sr = sr)\n    spec_bw = librosa.feature.spectral_bandwidth(y = y, sr = sr)\n    rolloff = librosa.feature.spectral_rolloff(y = y, sr = sr)\n    zcr = librosa.feature.zero_crossing_rate(y)\n    mfcc = librosa.feature.mfcc(y = y, sr = sr)\n    to_append = f'{np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'\n\n    for e in mfcc:\n        to_append += f' {np.mean(e)}'\n        \n    to_append += str(\" \") + str(train_meta['primary_label'][line])\n    file = open('data.csv', 'a', newline = '')\n    \n    with file:\n        writer = csv.writer(file)\n        writer.writerow(to_append.split())","metadata":{"execution":{"iopub.status.busy":"2022-04-29T08:33:15.855759Z","iopub.execute_input":"2022-04-29T08:33:15.856508Z","iopub.status.idle":"2022-04-29T12:36:28.275809Z","shell.execute_reply.started":"2022-04-29T08:33:15.856455Z","shell.execute_reply":"2022-04-29T12:36:28.26737Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('data.csv')\n# df","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.281293Z","iopub.execute_input":"2022-04-29T12:36:28.283394Z","iopub.status.idle":"2022-04-29T12:36:28.450044Z","shell.execute_reply.started":"2022-04-29T12:36:28.283301Z","shell.execute_reply":"2022-04-29T12:36:28.449428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"2. Features extraction\nIn the preprocessing of the data, feature extraction is necessary before running the training. The purpose is to define the inputs and outputs of the neural network.\n\nOUTPUT (y): last column which is the label.\nYou cannot use text directly for training. You will encode these labels with the LabelEncoder() function of sklearn.preprocessing.\n\nBefore running a model, you need to convert this type of categorical text data into numerical data that the model can understand.","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nfrom sklearn.preprocessing import StandardScaler","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.451566Z","iopub.execute_input":"2022-04-29T12:36:28.452021Z","iopub.status.idle":"2022-04-29T12:36:28.457314Z","shell.execute_reply.started":"2022-04-29T12:36:28.451979Z","shell.execute_reply":"2022-04-29T12:36:28.456432Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_list = df.iloc[:,-1]\nconverter = LabelEncoder()\ny = converter.fit_transform(class_list)\nprint(\"y: \", y)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.459182Z","iopub.execute_input":"2022-04-29T12:36:28.459721Z","iopub.status.idle":"2022-04-29T12:36:28.478825Z","shell.execute_reply.started":"2022-04-29T12:36:28.45969Z","shell.execute_reply":"2022-04-29T12:36:28.477715Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"INPUTS (X): all other columns are input parameters to the neural network.\nRemove the first column which does not provide any information for the training (the filename) and the last one which corresponds to the output.","metadata":{}},{"cell_type":"code","source":"fit = StandardScaler()\nX = fit.fit_transform(np.array(df.iloc[:, 1:26], dtype=float))","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.480694Z","iopub.execute_input":"2022-04-29T12:36:28.481446Z","iopub.status.idle":"2022-04-29T12:36:28.504234Z","shell.execute_reply.started":"2022-04-29T12:36:28.481398Z","shell.execute_reply":"2022-04-29T12:36:28.501739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Split dataset for training","metadata":{}},{"cell_type":"code","source":"# from sklearn.model_selection import train_test_split\n\n# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.505742Z","iopub.execute_input":"2022-04-29T12:36:28.506077Z","iopub.status.idle":"2022-04-29T12:36:28.510948Z","shell.execute_reply.started":"2022-04-29T12:36:28.506032Z","shell.execute_reply":"2022-04-29T12:36:28.510006Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Building the model\nThe first step is to build the model and display the summary.\n\nFor the CNN model, all hidden layers use a ReLU activation function, the output layer a Softmax function and a Dropout is used to avoid overfitting.","metadata":{}},{"cell_type":"code","source":"import keras\nimport tensorflow as tf\nfrom tensorflow.keras.models import Sequential\n\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Dense(512, activation = 'relu', input_shape = (X.shape[1],)),\n    tf.keras.layers.Dropout(0.2),\n    \n    tf.keras.layers.Dense(256, activation = 'relu'),\n    keras.layers.Dropout(0.2),\n    \n    tf.keras.layers.Dense(128, activation = 'relu'),\n    tf.keras.layers.Dropout(0.2),\n    \n    tf.keras.layers.Dense(64, activation = 'relu'),\n    tf.keras.layers.Dropout(0.2),\n    \n    tf.keras.layers.Dense(152, activation = 'softmax'),\n])\n\nprint(model.summary())","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.512512Z","iopub.execute_input":"2022-04-29T12:36:28.512916Z","iopub.status.idle":"2022-04-29T12:36:28.662969Z","shell.execute_reply.started":"2022-04-29T12:36:28.512873Z","shell.execute_reply":"2022-04-29T12:36:28.662019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model.fit(X_train, y_train, epochs=100, verbose=False, shuffle=False)\n# y_pred = model.predict(X_train)\n# mse_krm=mean_squared_error(y_train, y_pred)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.664614Z","iopub.execute_input":"2022-04-29T12:36:28.664858Z","iopub.status.idle":"2022-04-29T12:36:28.66857Z","shell.execute_reply.started":"2022-04-29T12:36:28.664829Z","shell.execute_reply":"2022-04-29T12:36:28.667744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def trainModel(model,epochs, optimizer):\n#     batch_size = 128\n#     model.compile(optimizer = optimizer, loss = 'sparse_categorical_crossentropy', metrics = 'accuracy')\n#     return model.fit(X_train, y_train, validation_data = (X_test, y_test), epochs = epochs, batch_size = batch_size)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.66993Z","iopub.execute_input":"2022-04-29T12:36:28.670123Z","iopub.status.idle":"2022-04-29T12:36:28.683367Z","shell.execute_reply.started":"2022-04-29T12:36:28.6701Z","shell.execute_reply":"2022-04-29T12:36:28.682392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# model_history = trainModel(model = model, epochs = 100, optimizer = 'adam')","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.685976Z","iopub.execute_input":"2022-04-29T12:36:28.686815Z","iopub.status.idle":"2022-04-29T12:36:28.695955Z","shell.execute_reply.started":"2022-04-29T12:36:28.686768Z","shell.execute_reply":"2022-04-29T12:36:28.695019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# loss_train_curve = model_history.history[\"loss\"]\n# loss_val_curve = model_history.history[\"val_loss\"]\n# plt.plot(loss_train_curve, label = \"Train\")\n# plt.plot(loss_val_curve, label = \"Validation\")\n# plt.legend(loc = 'upper right')\n# plt.title(\"Loss\")\n# plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.697099Z","iopub.execute_input":"2022-04-29T12:36:28.697525Z","iopub.status.idle":"2022-04-29T12:36:28.708487Z","shell.execute_reply.started":"2022-04-29T12:36:28.697484Z","shell.execute_reply":"2022-04-29T12:36:28.707619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# test_loss, test_acc = model.evaluate(X_test, y_test, batch_size = 128)\n# print(\"The test loss is: \", test_loss)\n# print(\"The best accuracy is: \", test_acc*100)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.710604Z","iopub.execute_input":"2022-04-29T12:36:28.711359Z","iopub.status.idle":"2022-04-29T12:36:28.721482Z","shell.execute_reply.started":"2022-04-29T12:36:28.71131Z","shell.execute_reply":"2022-04-29T12:36:28.720549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error\nmodel.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = 'accuracy')\nmodel.fit(X, y,  epochs = 100, batch_size = 128)\ny_pred  = model.predict(X)\n# mse_krm=mean_squared_error(y_test, y_krm)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:36:28.722761Z","iopub.execute_input":"2022-04-29T12:36:28.723408Z","iopub.status.idle":"2022-04-29T12:37:53.978791Z","shell.execute_reply.started":"2022-04-29T12:36:28.723374Z","shell.execute_reply":"2022-04-29T12:37:53.977649Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# generate argmax for predictions\nclasses = np.argmax(y_pred, axis = 1)\n# print(classes)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:37:53.980634Z","iopub.execute_input":"2022-04-29T12:37:53.981372Z","iopub.status.idle":"2022-04-29T12:37:53.989264Z","shell.execute_reply.started":"2022-04-29T12:37:53.981316Z","shell.execute_reply":"2022-04-29T12:37:53.987957Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# transform classes number into classes name\nresult = converter.inverse_transform(classes)\nprint(result)","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:37:53.991098Z","iopub.execute_input":"2022-04-29T12:37:53.991561Z","iopub.status.idle":"2022-04-29T12:37:54.010897Z","shell.execute_reply.started":"2022-04-29T12:37:53.991522Z","shell.execute_reply":"2022-04-29T12:37:54.010014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.save(\"modelv1-birdclef.h5\")","metadata":{"execution":{"iopub.status.busy":"2022-04-29T12:37:54.012199Z","iopub.execute_input":"2022-04-29T12:37:54.012586Z","iopub.status.idle":"2022-04-29T12:37:54.082147Z","shell.execute_reply.started":"2022-04-29T12:37:54.012514Z","shell.execute_reply":"2022-04-29T12:37:54.081216Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Format submission : un fichier + 5 sec + un oiseau --> TRUE or FALSE**","metadata":{}},{"cell_type":"code","source":"# soundscapes = glob.glob(os.path.join(PATH_DATASET, \"test_soundscapes\", \"*.ogg\"))\n# soundscapes = list(map(os.path.basename, soundscapes))\n# converted = []\n# for batch in Parallel(n_jobs=3)(delayed(_convert_and_export)(fn) for fn in tqdm(soundscapes)):\n#     converted += batch\n# # _= list(map(_convert_and_export, tqdm(train_meta[\"filename\"])))\n# df_converted = pd.DataFrame(converted)\n# display(df_converted.head())","metadata":{"execution":{"iopub.status.busy":"2022-04-21T10:01:10.703436Z","iopub.execute_input":"2022-04-21T10:01:10.703781Z","iopub.status.idle":"2022-04-21T10:01:10.709669Z","shell.execute_reply.started":"2022-04-21T10:01:10.703749Z","shell.execute_reply":"2022-04-21T10:01:10.708431Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 453028782.ogg\ntest_data","metadata":{"execution":{"iopub.status.busy":"2022-04-21T09:21:00.567957Z","iopub.execute_input":"2022-04-21T09:21:00.568372Z","iopub.status.idle":"2022-04-21T09:21:00.58015Z","shell.execute_reply.started":"2022-04-21T09:21:00.568337Z","shell.execute_reply":"2022-04-21T09:21:00.579445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**PREPARE TEST DATA**","metadata":{}},{"cell_type":"code","source":"# # Create empty csv file \n# header = \"filename length chroma_stft_mean chroma_stft_var rms_mean rms_var spectral_centroid_mean spectral_centroid_var spectral_bandwidth_mean spectral_bandwidth_var rolloff_mean rolloff_var zero_crossing_rate_mean zero_crossing_rate_var harmony_mean harmony_var perceptr_mean perceptr_var tempo mfcc1_mean mfcc1_var mfcc2_mean mfcc2_var mfcc3_mean mfcc3_var mfcc4_mean mfcc4_var label\".split()\n\n# file = open('datatest.csv', 'w', newline = '')\n# with file:\n#     writer = csv.writer(file)\n#     writer.writerow(header)\n    \n# # Transform each .wav file into a .csv row:\n# for line in test_data.index:\n#     sound_name = path+'test_soundscapes/'+test_data['file_id'][line]\n#     y, sr = librosa.load(sound_name, mono = True, duration = 30)\n#     chroma_stft = librosa.feature.chroma_stft(y = y, sr = sr)\n#     rmse = librosa.feature.rms(y = y)\n#     spec_cent = librosa.feature.spectral_centroid(y = y, sr = sr)\n#     spec_bw = librosa.feature.spectral_bandwidth(y = y, sr = sr)\n#     rolloff = librosa.feature.spectral_rolloff(y = y, sr = sr)\n#     zcr = librosa.feature.zero_crossing_rate(y)\n#     mfcc = librosa.feature.mfcc(y = y, sr = sr)\n#     to_append = f'{filename} {np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'\n\n#     for e in mfcc:\n#         to_append += f' {np.mean(e)}'\n        \n#     to_append += str(\" \") + str(test_data['bird'][line])\n#     file = open('datatest.csv', 'a', newline = '')\n    \n#     with file:\n#         writer = csv.writer(file)\n#         writer.writerow(to_append.split())    \n    \n# df = pd.read_csv('datatest.csv')","metadata":{"execution":{"iopub.status.busy":"2022-04-15T14:50:13.85266Z","iopub.execute_input":"2022-04-15T14:50:13.853369Z","iopub.status.idle":"2022-04-15T14:50:14.705435Z","shell.execute_reply.started":"2022-04-15T14:50:13.853307Z","shell.execute_reply":"2022-04-15T14:50:14.704318Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create empty csv file \nheader = \"filename length chroma_stft_mean chroma_stft_var rms_mean rms_var spectral_centroid_mean spectral_centroid_var spectral_bandwidth_mean spectral_bandwidth_var rolloff_mean rolloff_var zero_crossing_rate_mean zero_crossing_rate_var harmony_mean harmony_var perceptr_mean perceptr_var tempo mfcc1_mean mfcc1_var mfcc2_mean mfcc2_var mfcc3_mean mfcc3_var mfcc4_mean mfcc4_var\".split()\n\nfile = open('datatest.csv', 'w', newline = '')\nwith file:\n    writer = csv.writer(file)\n    writer.writerow(header)\n\nfiles = sorted(os.listdir(path+'test_soundscapes/'))\n\nwith open('../input/birdclef-2022/scored_birds.json') as fp:\n    SCORED_BIRDS = json.load(fp)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:20.523394Z","iopub.execute_input":"2022-04-21T12:40:20.523702Z","iopub.status.idle":"2022-04-21T12:40:20.533027Z","shell.execute_reply.started":"2022-04-21T12:40:20.523667Z","shell.execute_reply":"2022-04-21T12:40:20.532411Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import math","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:21.772321Z","iopub.execute_input":"2022-04-21T12:40:21.774364Z","iopub.status.idle":"2022-04-21T12:40:21.779656Z","shell.execute_reply.started":"2022-04-21T12:40:21.774298Z","shell.execute_reply":"2022-04-21T12:40:21.778796Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_df_test_from_path():\n    files = sorted(os.listdir(path+'test_soundscapes/'))\n    data = []\n    for f in files:\n        wv, sr = librosa.load(path+'test_soundscapes/' + f)\n        n_chunks = math.ceil(len(wv) / sr / 5)\n        filename = f\n        row_prefix = f[:-4]\n#         bird = SCORED_BIRDS[0]\n        for chunk in range(1, n_chunks + 1):\n            for bird in SCORED_BIRDS:\n                row_id = f\"{f[:-4]}_{bird}_{chunk*5}\"\n            \n                ending_second = chunk*5\n                data.append((filename, row_prefix, ending_second, bird))\n            \n    return  pd.DataFrame(data, columns=['filename', 'row_prefix', 'ending_second', 'birds'])\n        \ntest_df = create_df_test_from_path()","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:23.069964Z","iopub.execute_input":"2022-04-21T12:40:23.070355Z","iopub.status.idle":"2022-04-21T12:40:25.000044Z","shell.execute_reply.started":"2022-04-21T12:40:23.07032Z","shell.execute_reply":"2022-04-21T12:40:24.998749Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:25.002664Z","iopub.execute_input":"2022-04-21T12:40:25.003022Z","iopub.status.idle":"2022-04-21T12:40:25.019598Z","shell.execute_reply.started":"2022-04-21T12:40:25.002977Z","shell.execute_reply":"2022-04-21T12:40:25.018767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"ICI UNE PREDICTION PAR FICHIER ET PAS PAR 5SEC --> IL FAUT INTEGRER LA POSSIBILIT2 QU4IL N4Y AI AUCUN OISEAU","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:00:16.179198Z","iopub.execute_input":"2022-04-21T12:00:16.179564Z","iopub.status.idle":"2022-04-21T12:00:16.185664Z","shell.execute_reply.started":"2022-04-21T12:00:16.179528Z","shell.execute_reply":"2022-04-21T12:00:16.18481Z"}}},{"cell_type":"code","source":"# Transform each .wav file into a .csv row:\n# for line in test_df.index:\n#     sound_name = path+'test_soundscapes/'+test_df['filename'][line]\nfor f in files:\n    sound_name = path+'test_soundscapes/'+f\n    print(sound_name)\n    y, sr = librosa.load(sound_name, mono = True, duration = 60)\n    chroma_stft = librosa.feature.chroma_stft(y = y, sr = sr)\n    rmse = librosa.feature.rms(y = y)\n    spec_cent = librosa.feature.spectral_centroid(y = y, sr = sr)\n    spec_bw = librosa.feature.spectral_bandwidth(y = y, sr = sr)\n    rolloff = librosa.feature.spectral_rolloff(y = y, sr = sr)\n    zcr = librosa.feature.zero_crossing_rate(y)\n    mfcc = librosa.feature.mfcc(y = y, sr = sr)\n    to_append = f'{f} {np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'\n\n    for e in mfcc:\n        to_append += f' {np.mean(e)}'\n        \n#     to_append += str(\" \") + str(test_data['bird'][line])\n    file = open('datatest.csv', 'a', newline = '')\n    \n    with file:\n        writer = csv.writer(file)\n        writer.writerow(to_append.split())    \n    \ndf = pd.read_csv('datatest.csv')","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:27.873251Z","iopub.execute_input":"2022-04-21T12:40:27.874049Z","iopub.status.idle":"2022-04-21T12:40:30.537405Z","shell.execute_reply.started":"2022-04-21T12:40:27.874011Z","shell.execute_reply":"2022-04-21T12:40:30.535418Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:30.540156Z","iopub.execute_input":"2022-04-21T12:40:30.540892Z","iopub.status.idle":"2022-04-21T12:40:30.588383Z","shell.execute_reply.started":"2022-04-21T12:40:30.540839Z","shell.execute_reply":"2022-04-21T12:40:30.587406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# class_list = df.iloc[:,-1]\n# converter = LabelEncoder()\n# y = converter.fit_transform(class_list)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:32.474324Z","iopub.execute_input":"2022-04-21T12:40:32.474676Z","iopub.status.idle":"2022-04-21T12:40:32.478835Z","shell.execute_reply.started":"2022-04-21T12:40:32.474639Z","shell.execute_reply":"2022-04-21T12:40:32.47797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\n\nfit = StandardScaler()\nX = fit.fit_transform(np.array(df.iloc[:, 1:26], dtype=float))\nX","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:34.547562Z","iopub.execute_input":"2022-04-21T12:40:34.548404Z","iopub.status.idle":"2022-04-21T12:40:34.556353Z","shell.execute_reply.started":"2022-04-21T12:40:34.548357Z","shell.execute_reply":"2022-04-21T12:40:34.555561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred  = model.predict(X)\nclasses = np.argmax(y_pred, axis = 1)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:37.806266Z","iopub.execute_input":"2022-04-21T12:40:37.806565Z","iopub.status.idle":"2022-04-21T12:40:37.870745Z","shell.execute_reply.started":"2022-04-21T12:40:37.806536Z","shell.execute_reply":"2022-04-21T12:40:37.86976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# transform classes number into classes name\nresult = converter.inverse_transform(classes)\nprint(result)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:40.146307Z","iopub.execute_input":"2022-04-21T12:40:40.146613Z","iopub.status.idle":"2022-04-21T12:40:40.151434Z","shell.execute_reply.started":"2022-04-21T12:40:40.14658Z","shell.execute_reply":"2022-04-21T12:40:40.150794Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# insert preditcion is the dataframe\ndf.insert(0, 'result', result)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:40:42.964254Z","iopub.execute_input":"2022-04-21T12:40:42.964844Z","iopub.status.idle":"2022-04-21T12:40:42.969231Z","shell.execute_reply.started":"2022-04-21T12:40:42.964807Z","shell.execute_reply":"2022-04-21T12:40:42.968502Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pd.merge(test_df, df[['filename','result']], how='left', left_on = 'filename', right_on = 'filename')","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:50:12.613188Z","iopub.execute_input":"2022-04-21T12:50:12.614056Z","iopub.status.idle":"2022-04-21T12:50:12.623227Z","shell.execute_reply.started":"2022-04-21T12:50:12.614011Z","shell.execute_reply":"2022-04-21T12:50:12.622382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm.auto import tqdm","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:08:29.207666Z","iopub.execute_input":"2022-04-21T12:08:29.208622Z","iopub.status.idle":"2022-04-21T12:08:29.212138Z","shell.execute_reply.started":"2022-04-21T12:08:29.208571Z","shell.execute_reply":"2022-04-21T12:08:29.211595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# for i, row in tqdm(test_df.iterrows(), total=len(test_df)):\n#     print(test_df['birds'][i])\n#     print(test_df['result'][i])\n#     preds = 1 if test_df['birds'][i] == test_df['result'][i] else 0\n#     print(preds)","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:28:31.881343Z","iopub.execute_input":"2022-04-21T12:28:31.881677Z","iopub.status.idle":"2022-04-21T12:28:32.078978Z","shell.execute_reply.started":"2022-04-21T12:28:31.881644Z","shell.execute_reply":"2022-04-21T12:28:32.077941Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# import json\n# from tqdm.auto import tqdm\n\n# #Liste des oiseaux a predire\n# with open(path+'scored_birds.json') as f:\n#     scored_birds = json.load(f)\n\n# print(scored_birds)\n\n# submission = []\n# for i, row in tqdm(test_data.iterrows(), total=len(test_data)):\n#     preds = True if test_data['bird'][i] == result[i] else False\n#     for bird in scored_birds:\n#         submission.append({\n#             \"row_id\": f\"{row['file_id']}_{bird}_{row['end_time']}\",\n#             \"target\": preds#[bird] > 1. / len(model.labels),\n#         })\n\n# df_submission = pd.DataFrame(submission).set_index(\"row_id\")\n# df_submission.to_csv(\"submission.csv\")\n","metadata":{"execution":{"iopub.status.busy":"2022-04-15T08:50:35.686661Z","iopub.execute_input":"2022-04-15T08:50:35.686956Z","iopub.status.idle":"2022-04-15T08:50:35.741161Z","shell.execute_reply.started":"2022-04-15T08:50:35.686926Z","shell.execute_reply":"2022-04-15T08:50:35.740258Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:50:29.770928Z","iopub.execute_input":"2022-04-21T12:50:29.771618Z","iopub.status.idle":"2022-04-21T12:50:29.787202Z","shell.execute_reply.started":"2022-04-21T12:50:29.771577Z","shell.execute_reply":"2022-04-21T12:50:29.786386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimport json\n\nsubmission = []\nfor i, row in tqdm(test_df.iterrows(), total=len(test_df)):\n    preds = True if test_df['birds'][i] == test_df['result'][i] else False\n    submission.append({\n        \"row_id\": f\"{row['row_prefix']}_{row['birds']}_{row['ending_second']}\",\n        \"target\": preds#[bird] > 1. / len(model.labels),\n    })\n\ndf_submission = pd.DataFrame(submission).set_index(\"row_id\")\ndf_submission.to_csv(\"submission.csv\")\n","metadata":{"execution":{"iopub.status.busy":"2022-04-21T12:52:19.870839Z","iopub.execute_input":"2022-04-21T12:52:19.871225Z","iopub.status.idle":"2022-04-21T12:52:19.931654Z","shell.execute_reply.started":"2022-04-21T12:52:19.871179Z","shell.execute_reply":"2022-04-21T12:52:19.931077Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train_csv=pd.read_csv('../input/birdclef-2022/train_metadata.csv')\n# train_csv.head()","metadata":{"execution":{"iopub.status.busy":"2022-04-08T11:55:38.415959Z","iopub.execute_input":"2022-04-08T11:55:38.416238Z","iopub.status.idle":"2022-04-08T11:55:38.419403Z","shell.execute_reply.started":"2022-04-08T11:55:38.416206Z","shell.execute_reply":"2022-04-08T11:55:38.418806Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Loading and Visualizing an audio file:\nlibrosa.load: loads an audio file as a floating point time series and gives it's native sampling rate.\nThe sampling frequency (or sample rate) is the number of samples (data points) per second in an audio.\nWe can check the audio length by dividing the total number of data points by the sampling frequency.","metadata":{}},{"cell_type":"code","source":"# y, sr = librosa.load(subfly)\n# print('y:', y, '\\n')\n# print('y shape:', np.shape(y), '\\n')\n# print('Sample Rate (KHz):', sr, '\\n')\n# print('Check Len of Audio:', np.shape(y)[0]/sr)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"SPECTROGRAM","metadata":{}},{"cell_type":"code","source":"# n_fft=2048\n# hop_length=512\n# # Short-time Fourier transform (STFT)\n# D_astfly = np.abs(librosa.stft(audio_astfly, n_fft = n_fft, hop_length = hop_length))\n# # Convert an amplitude spectrogram to Decibels-scaled spectrogram.\n# DB_astfly = librosa.amplitude_to_db(D_astfly, ref = np.max)\n# # === PLOT ===\n# fig, ax = plt.subplots(1, 1, figsize=(12, 6))\n# fig.suptitle('Log Frequency Spectrogram', fontsize=16)\n# # fig.delaxes(ax[1, 2])\n# img=librosa.display.specshow(DB_astfly, sr = sr_astfly, hop_length = hop_length, x_axis = 'time', \n#                          y_axis = 'log', cmap = 'cool', ax=ax)\n# ax.set_title('ASTFLY', fontsize=13) \n# plt.colorbar(img,ax=ax)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Mel-frequency cepstral coefficients (MFCCs)\nOne popular audio feature extraction method is the Mel-frequency cepstral coefficients (MFCC), which has 39 features. The feature count is small enough to force the model to learn the information of the audio. 12 parameters are related to the amplitude of frequencies. It models the characteristics of the human voice. The extraction flow of MFCC features is depicted below:","metadata":{}},{"cell_type":"code","source":"# mfcc=librosa.feature.mfcc(y=audio_astfly, sr=sr_astfly)\n# fig, ax = plt.subplots(1,figsize = (12, 6))\n# img = librosa.display.specshow(mfcc, x_axis='time', ax=ax)\n# print(mfcc.shape)\n# fig.colorbar(img, ax=ax)\n# ax.set(title='MFCC')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"SUBMISSION","metadata":{}},{"cell_type":"code","source":"# class CFG:\n#     ######################\n#     # Globals #\n#     ######################\n#     seed = 1213\n\n#     ######################\n#     # Data #\n#     ######################\n#     train_datadir = Path(\"../input/birdclef-2021/train_short_audio\")\n#     train_csv = \"../input/birdclef-2021/train_metadata.csv\"\n#     train_soundscape = \"../input/birdclef-2021/train_soundscape_labels.csv\"\n\n#     ######################\n#     # Dataset #\n#     ######################\n#     transforms = {\n#         \"train\": [{\"name\": \"Normalize\"}],\n#         \"valid\": [{\"name\": \"Normalize\"}],\n#         \"test\": [{\"name\": \"Normalize\"}]\n#     }\n#     period = 30\n#     n_mels = 128\n    \n#     sample_rate = 32000\n#     target_columns = [\n#         \"afrsil1\",\n#         \"akekee\",\n#         \"akepa1\",\n#         \"akiapo\",\n#         \"akikik\",\n#         \"amewig\",\n#         \"aniani\",\n#         \"apapan\",\n#         \"arcter\",\n#         \"barpet\",\n#         \"bcnher\",\n#         \"belkin1\",\n#         \"bkbplo\",\n#         \"bknsti\",\n#         \"bkwpet\",\n#         \"blkfra\",\n#         \"blknod\",\n#         \"bongul\",\n#         \"brant\",\n#         \"brnboo\",\n#         \"brnnod\",\n#         \"brnowl\",\n#         \"brtcur\",\n#         \"bubsan\",\n#         \"buffle\",\n#         \"bulpet\",\n#         \"burpar\",\n#         \"buwtea\",\n#         \"cacgoo1\",\n#         \"calqua\",\n#         \"cangoo\",\n#         \"canvas\",\n#         \"caster1\",\n#         \"categr\",\n#         \"chbsan\",\n#         \"chemun\",\n#         \"chukar\",\n#         \"cintea\",\n#         \"comgal1\",\n#         \"commyn\",\n#         \"compea\",\n#         \"comsan\",\n#         \"comwax\",\n#         \"coopet\",\n#         \"crehon\",\n#         \"dunlin\",\n#         \"elepai\",\n#         \"ercfra\",\n#         \"eurwig\",\n#         \"fragul\",\n#         \"gadwal\",\n#         \"gamqua\",\n#         \"glwgul\",\n#         \"gnwtea\",\n#         \"golphe\",\n#         \"grbher3\",\n#         \"grefri\",\n#         \"gresca\",\n#         \"gryfra\",\n#         \"gwfgoo\",\n#         \"hawama\",\n#         \"hawcoo\",\n#         \"hawcre\",\n#         \"hawgoo\",\n#         \"hawhaw\",\n#         \"hawpet1\",\n#         \"hoomer\",\n#         \"houfin\",\n#         \"houspa\",\n#         \"hudgod\",\n#         \"iiwi\",\n#         \"incter1\",\n#         \"jabwar\",\n#         \"japqua\",\n#         \"kalphe\",\n#         \"kauama\",\n#         \"laugul\",\n#         \"layalb\",\n#         \"lcspet\",\n#         \"leasan\",\n#         \"leater1\",\n#         \"lessca\",\n#         \"lesyel\",\n#         \"lobdow\",\n#         \"lotjae\",\n#         \"madpet\",\n#         \"magpet1\",\n#         \"mallar3\",\n#         \"masboo\",\n#         \"mauala\",\n#         \"maupar\",\n#         \"merlin\",\n#         \"mitpar\",\n#         \"moudov\",\n#         \"norcar\",\n#         \"norhar2\",\n#         \"normoc\",\n#         \"norpin\",\n#         \"norsho\",\n#         \"nutman\",\n#         \"oahama\",\n#         \"omao\",\n#         \"osprey\",\n#         \"pagplo\",\n#         \"palila\",\n#         \"parjae\",\n#         \"pecsan\",\n#         \"peflov\",\n#         \"perfal\",\n#         \"pibgre\",\n#         \"pomjae\",\n#         \"puaioh\",\n#         \"reccar\",\n#         \"redava\",\n#         \"redjun\",\n#         \"redpha1\",\n#         \"refboo\",\n#         \"rempar\",\n#         \"rettro\",\n#         \"ribgul\",\n#         \"rinduc\",\n#         \"rinphe\",\n#         \"rocpig\",\n#         \"rorpar\",\n#         \"rudtur\",\n#         \"ruff\",\n#         \"saffin\",\n#         \"sander\",\n#         \"semplo\",\n#         \"sheowl\",\n#         \"shtsan\",\n#         \"skylar\",\n#         \"snogoo\",\n#         \"sooshe\",\n#         \"sooter1\",\n#         \"sopsku1\",\n#         \"sora\",\n#         \"spodov\",\n#         \"sposan\",\n#         \"towsol\",\n#         \"wantat1\",\n#         \"warwhe1\",\n#         \"wesmea\",\n#         \"wessan\",\n#         \"wetshe\",\n#         \"whfibi\",\n#         \"whiter\",\n#         \"whttro\",\n#         \"wiltur\",\n#         \"yebcar\",\n#         \"yefcan\",\n#         \"zebdov\",\n#     ]\n#     bird2id = {b: i for i, b in enumerate(target_columns)}\n#     id2bird = {i: b for i, b in enumerate(target_columns)}\n#     scored_birds = [\"akiapo\", \"aniani\", \"apapan\", \"barpet\", \"crehon\", \"elepai\", \"ercfra\", \"hawama\", \"hawcre\", \"hawgoo\", \"hawhaw\", \"hawpet1\", \"houfin\", \"iiwi\", \"jabwar\", \"maupar\", \"omao\", \"puaioh\", \"skylar\", \"warwhe1\", \"yefcan\"]\n#     loader_params = {\n#         \"train\": {\n#             \"batch_size\": 64,\n#             \"num_workers\": 20,\n#             \"shuffle\": True\n#         },\n#         \"valid\": {\n#             \"batch_size\": 64,\n#             \"num_workers\": 20,\n#             \"shuffle\": False\n#         },\n#         \"test\": {\n#             \"batch_size\": 64,\n#             \"num_workers\": 20,\n#             \"shuffle\": False\n#         }\n#     }\n#     models_cfg = [{\"resnest26d\": \"../input/birdclef2022-weights/resnest26d/fold0/birdclef_2022/10p941rk/checkpoints/best_f1.ckpt\",}]\n#     num_classes = len(target_columns)\n# print(f\"model_num: {len(CFG.models_cfg)}\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# TARGET_SR = 32000\n# DATADIR = Path(\"../input/birdclef-2022/test_soundscapes/\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# all_audios = list(DATADIR.glob(\"*.ogg\"))\n# sample_submission = pd.read_csv('../input/birdclef-2022/sample_submission.csv')\n# sample_submission","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}