{"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":"# Inference for 🦜BirdCLEF with Random 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-2022\n\nPATH_DATASET = \"/kaggle/input/birdclef-2022\"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-02-28T18:36:53.319745Z","iopub.execute_input":"2022-02-28T18:36:53.320224Z","iopub.status.idle":"2022-02-28T18:36:54.145823Z","shell.execute_reply.started":"2022-02-28T18:36:53.320136Z","shell.execute_reply":"2022-02-28T18:36:54.144966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\n# df_test = pd.read_csv(os.path.join(PATH_DATASET, \"test.csv\")).set_index(\"row_id\")\n# display(df_test)","metadata":{"execution":{"iopub.status.busy":"2022-02-28T18:36:54.148076Z","iopub.execute_input":"2022-02-28T18:36:54.148396Z","iopub.status.idle":"2022-02-28T18:36:54.152826Z","shell.execute_reply.started":"2022-02-28T18:36:54.148359Z","shell.execute_reply":"2022-02-28T18:36:54.152245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Fake audio to dataset\n\nThe true conversion is in **https://www.kaggle.com/jirkaborovec/birdclef-convert-spectrograms-noise-reduce**","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":"2022-02-28T18:36:54.15401Z","iopub.execute_input":"2022-02-28T18:36:54.154386Z","iopub.status.idle":"2022-02-28T18:36:55.457228Z","shell.execute_reply.started":"2022-02-28T18:36:54.154357Z","shell.execute_reply":"2022-02-28T18:36:55.456212Z"},"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":"2022-02-28T18:36:55.459784Z","iopub.execute_input":"2022-02-28T18:36:55.460108Z","iopub.status.idle":"2022-02-28T18:36:56.473564Z","shell.execute_reply.started":"2022-02-28T18:36:55.460067Z","shell.execute_reply":"2022-02-28T18:36:56.472667Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# fake Inference with magic","metadata":{}},{"cell_type":"code","source":"import json\n\nwith open(os.path.join(PATH_DATASET, \"scored_birds.json\")) as fp:\n    scored_birds = json.load(fp)\n\nprint(scored_birds)","metadata":{"execution":{"iopub.status.busy":"2022-02-28T18:36:56.475381Z","iopub.execute_input":"2022-02-28T18:36:56.475872Z","iopub.status.idle":"2022-02-28T18:36:56.485116Z","shell.execute_reply.started":"2022-02-28T18:36:56.475824Z","shell.execute_reply":"2022-02-28T18:36:56.484257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom pprint import pprint\n\npredictions = []\nfor _ in tqdm(range(len(df_converted))):\n    # lbs = [torch.argmax(p[\"preds\"].float()).item() for p in preds]\n    predictions += [np.random.random(len(scored_birds))]\n\npprint(predictions[:2])","metadata":{"execution":{"iopub.status.busy":"2022-02-28T18:36:56.486511Z","iopub.execute_input":"2022-02-28T18:36:56.487095Z","iopub.status.idle":"2022-02-28T18:36:56.527494Z","shell.execute_reply.started":"2022-02-28T18:36:56.487049Z","shell.execute_reply":"2022-02-28T18:36:56.526692Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Format submission\n\nUntill this is resolved https://www.kaggle.com/c/birdclef-2022/discussion/309001","metadata":{}},{"cell_type":"code","source":"submission = []\nfor i, row in tqdm(df_converted.iterrows(), total=len(df_converted)):\n    preds = dict(zip(scored_birds, predictions[i]))\n    for bird in scored_birds:\n        submission.append({\n            \"row_id\": f\"{row['file_id']}_{bird}_{row['end_time']}\",\n            \"target\": preds[bird] > 0.3,\n            # \"target\": True,\n            # \"target\": False,\n        })","metadata":{"execution":{"iopub.status.busy":"2022-02-28T18:42:12.701465Z","iopub.execute_input":"2022-02-28T18:42:12.702162Z","iopub.status.idle":"2022-02-28T18:42:12.741541Z","shell.execute_reply.started":"2022-02-28T18:42:12.702121Z","shell.execute_reply":"2022-02-28T18:42:12.740955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_submission = pd.DataFrame(submission).set_index(\"row_id\")\ndf_submission.to_csv(\"submission.csv\")\n\n! head submission.csv","metadata":{"execution":{"iopub.status.busy":"2022-02-28T18:42:14.76731Z","iopub.execute_input":"2022-02-28T18:42:14.767795Z","iopub.status.idle":"2022-02-28T18:42:15.563788Z","shell.execute_reply.started":"2022-02-28T18:42:14.767746Z","shell.execute_reply":"2022-02-28T18:42:15.562915Z"},"trusted":true},"execution_count":null,"outputs":[]}]}