{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":70203,"databundleVersionId":8068726,"sourceType":"competition"}],"dockerImageVersionId":30162,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Inference for 🦜BirdCLEF with Statistic data\n\n**Clarification about the submission format: https://www.kaggle.com/c/birdclef-2022/discussion/308009**","metadata":{}},{"cell_type":"code","source":"!ls -l /kaggle/input/birdclef-2024\n\nPATH_DATASET = \"/kaggle/input/birdclef-2024\"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-04-08T09:03:16.560114Z","iopub.execute_input":"2024-04-08T09:03:16.560511Z","iopub.status.idle":"2024-04-08T09:03:17.676138Z","shell.execute_reply.started":"2024-04-08T09:03:16.560471Z","shell.execute_reply":"2024-04-08T09:03:17.674689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\ndf_train = pd.read_csv(os.path.join(PATH_DATASET, \"train_metadata.csv\"))\ndisplay(df_train.head())\nlabel_counts = df_train['primary_label'].value_counts()\nprint(f\"labels: {len(label_counts)}\")\ndel df_train","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:17.679689Z","iopub.execute_input":"2024-04-08T09:03:17.680178Z","iopub.status.idle":"2024-04-08T09:03:17.942973Z","shell.execute_reply.started":"2024-04-08T09:03:17.680123Z","shell.execute_reply":"2024-04-08T09:03:17.941587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Compute freq.","metadata":{}},{"cell_type":"code","source":"label_ratio = label_counts / label_counts.sum()\ndisplay(label_ratio)","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:17.944672Z","iopub.execute_input":"2024-04-08T09:03:17.944975Z","iopub.status.idle":"2024-04-08T09:03:17.958294Z","shell.execute_reply.started":"2024-04-08T09:03:17.944939Z","shell.execute_reply":"2024-04-08T09:03:17.956970Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fake audio to dataset\n\nThe true conversion is in **https://www.kaggle.com/code/jirkaborovec/birdclef-convert-spectrograms-reduce-noise**","metadata":{}},{"cell_type":"code","source":"import os\nimport glob\nimport torch\nimport torchaudio\nfrom math import ceil\nfrom tqdm.auto import tqdm\nfrom functools import partial\nfrom joblib import Parallel, delayed\n\n\ndef convert_fake(fn, path_in, frame_length: int = 5) -> list:\n    path_audio = os.path.join(path_in, fn)\n    waveform, sample_rate = torchaudio.load(path_audio)\n    nb = int(frame_length * sample_rate)\n    counts = ceil(waveform.size()[-1] / nb)\n    records = [{\n        \"end_time\": (i + 1) * frame_length,\n        \"file_id\": os.path.splitext(fn)[0],\n    } for i in range(counts)]\n    return records\n\n_convert_fake = partial(convert_fake, path_in=os.path.join(PATH_DATASET, \"test_soundscapes\"))","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:17.960534Z","iopub.execute_input":"2024-04-08T09:03:17.960856Z","iopub.status.idle":"2024-04-08T09:03:20.008452Z","shell.execute_reply.started":"2024-04-08T09:03:17.960818Z","shell.execute_reply":"2024-04-08T09:03:20.006623Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"soundscapes = glob.glob(os.path.join(PATH_DATASET, \"test_soundscapes\", \"*.ogg\"))\nsoundscapes = list(map(os.path.basename, soundscapes))\nconverted = []\nfor batch in Parallel(n_jobs=3)(delayed(_convert_fake)(fn) for fn in tqdm(soundscapes)):\n    converted += batch\n# _= list(map(_convert_and_export, tqdm(train_meta[\"filename\"])))\n\ndf_converted = pd.DataFrame(converted)\ndisplay(df_converted.head())","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2024-04-08T09:03:20.013127Z","iopub.execute_input":"2024-04-08T09:03:20.013530Z","iopub.status.idle":"2024-04-08T09:03:20.115675Z","shell.execute_reply.started":"2024-04-08T09:03:20.013490Z","shell.execute_reply":"2024-04-08T09:03:20.114845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Format submission","metadata":{}},{"cell_type":"code","source":"! cat /kaggle/input/birdclef-2023/sample_submission.csv","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:20.117285Z","iopub.execute_input":"2024-04-08T09:03:20.118284Z","iopub.status.idle":"2024-04-08T09:03:21.265415Z","shell.execute_reply.started":"2024-04-08T09:03:20.118242Z","shell.execute_reply":"2024-04-08T09:03:21.264240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = []\nfor i, row in tqdm(df_converted.iterrows(), total=len(df_converted)):\n    pred = dict(label_ratio.round(5))\n    pred[\"row_id\"] = f\"{row['file_id']}_{row['end_time']}\"\n    submission.append(pred)","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:21.267298Z","iopub.execute_input":"2024-04-08T09:03:21.267605Z","iopub.status.idle":"2024-04-08T09:03:21.317954Z","shell.execute_reply.started":"2024-04-08T09:03:21.267570Z","shell.execute_reply":"2024-04-08T09:03:21.316474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_submission = pd.DataFrame(submission)\nif submission:  # for the dryrun\n    df_submission.set_index(\"row_id\", inplace=True)\ndf_submission.to_csv(\"submission.csv\")\n\n! head submission.csv","metadata":{"execution":{"iopub.status.busy":"2024-04-08T09:03:21.320145Z","iopub.execute_input":"2024-04-08T09:03:21.320513Z","iopub.status.idle":"2024-04-08T09:03:22.456975Z","shell.execute_reply.started":"2024-04-08T09:03:21.320459Z","shell.execute_reply":"2024-04-08T09:03:22.455424Z"},"trusted":true},"execution_count":null,"outputs":[]}]}