{"metadata":{"kaggle":{"accelerator":"none","dataSources":[{"sourceId":70203,"databundleVersionId":8068726,"sourceType":"competition"},{"sourceId":8074823,"sourceType":"datasetVersion","datasetId":4765169},{"sourceId":171345829,"sourceType":"kernelVersion"},{"sourceId":174720279,"sourceType":"kernelVersion"}],"dockerImageVersionId":30683,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.13"},"papermill":{"default_parameters":{},"duration":24.164405,"end_time":"2024-04-09T16:35:34.302767","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-04-09T16:35:10.138362","version":"2.5.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Fork of : https://www.kaggle.com/code/nischaydnk/birdclef-2023-pytorch-lightning-inference","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport torch\nimport os\nimport pytorch_lightning as pl\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn import model_selection\nimport torchvision.transforms as transforms\nimport torchvision.io \nimport librosa\nfrom PIL import Image\nimport albumentations as alb\nimport torch.multiprocessing as mp\nimport warnings\n\nwarnings.filterwarnings('ignore')\nfrom pytorch_lightning.callbacks import ModelCheckpoint, BackboneFinetuning, EarlyStopping\nimport torch.nn as nn\nfrom torch.nn.functional import cross_entropy\nimport torchmetrics\nimport timm\nfrom pathlib import Path","metadata":{"papermill":{"duration":15.582121,"end_time":"2024-04-09T16:35:28.878030","exception":false,"start_time":"2024-04-09T16:35:13.295909","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:09.809878Z","iopub.execute_input":"2024-04-30T04:26:09.810684Z","iopub.status.idle":"2024-04-30T04:26:09.818556Z","shell.execute_reply.started":"2024-04-30T04:26:09.810648Z","shell.execute_reply":"2024-04-30T04:26:09.817207Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Config:\n    num_classes = 264\n    batch_size = 12\n    PRECISION = 16    \n    seed = 2023\n    model = \"resnet34\"\n    pretrained = False\n    use_mixup = False\n    mixup_alpha = 0.2   \n    DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')    \n\n    data_root = \"/kaggle/input/birdclef-2024\"\n    train_images = \"/kaggle/input/birdclef-2024-split-and-creating-melspecrogram/specs/train/\"\n    valid_images = \"/kaggle/input/birdclef-2024-split-and-creating-melspecrogram/specs/valid/\"\n    train_path = \"/kaggle/input/birdclif/train.csv\"\n    valid_path = \"/kaggle/input/birdclif/valid.csv\"\n    \n    test_path = '/kaggle/input/birdclef-2024/test_soundscapes'\n    SR = 32000\n    DURATION = 5\n    LR = 5e-4\n    \n    model_ckpt = '/kaggle/input/birdclef-2024-training/exp1/last.ckpt'","metadata":{"papermill":{"duration":0.021309,"end_time":"2024-04-09T16:35:28.908640","exception":false,"start_time":"2024-04-09T16:35:28.887331","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:10.982982Z","iopub.execute_input":"2024-04-30T04:26:10.983389Z","iopub.status.idle":"2024-04-30T04:26:10.991198Z","shell.execute_reply.started":"2024-04-30T04:26:10.983357Z","shell.execute_reply":"2024-04-30T04:26:10.989958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pl.seed_everything(Config.seed, workers=True)","metadata":{"papermill":{"duration":0.02536,"end_time":"2024-04-09T16:35:28.943067","exception":false,"start_time":"2024-04-09T16:35:28.917707","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:11.881440Z","iopub.execute_input":"2024-04-30T04:26:11.881871Z","iopub.status.idle":"2024-04-30T04:26:11.890328Z","shell.execute_reply.started":"2024-04-30T04:26:11.881839Z","shell.execute_reply":"2024-04-30T04:26:11.889171Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def config_to_dict(cfg):\n    return dict((name, getattr(cfg, name)) for name in dir(cfg) if not name.startswith('__'))","metadata":{"papermill":{"duration":0.017798,"end_time":"2024-04-09T16:35:28.970005","exception":false,"start_time":"2024-04-09T16:35:28.952207","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:12.419107Z","iopub.execute_input":"2024-04-30T04:26:12.419508Z","iopub.status.idle":"2024-04-30T04:26:12.425370Z","shell.execute_reply.started":"2024-04-30T04:26:12.419477Z","shell.execute_reply":"2024-04-30T04:26:12.424110Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def compute_melspec(y, sr, n_mels, fmin, fmax):\n    \"\"\"\n    Computes a mel-spectrogram and puts it at decibel scale\n    Arguments:\n        y {np array} -- signal\n        params {AudioParams} -- Parameters to use for the spectrogram. Expected to have the attributes sr, n_mels, f_min, f_max\n    Returns:\n        np array -- Mel-spectrogram\n    \"\"\"\n    melspec = lb.feature.melspectrogram(\n        y=y, sr=sr, n_mels=n_mels, fmin=fmin, fmax=fmax,\n    )\n\n    melspec = lb.power_to_db(melspec).astype(np.float32)\n    return melspec\n\ndef mono_to_color(X, eps=1e-6, mean=None, std=None):\n    mean = mean or X.mean()\n    std = std or X.std()\n    X = (X - mean) / (std + eps)\n    \n    _min, _max = X.min(), X.max()\n\n    if (_max - _min) > eps:\n        V = np.clip(X, _min, _max)\n        V = 255 * (V - _min) / (_max - _min)\n        V = V.astype(np.uint8)\n    else:\n        V = np.zeros_like(X, dtype=np.uint8)\n\n    return V\n\ndef crop_or_pad(y, length, is_train=True, start=None):\n    if len(y) < length:\n        y = np.concatenate([y, np.zeros(length - len(y))])\n        \n        n_repeats = length // len(y)\n        epsilon = length % len(y)\n        \n        y = np.concatenate([y]*n_repeats + [y[:epsilon]])\n        \n    elif len(y) > length:\n        if not is_train:\n            start = start or 0\n        else:\n            start = start or np.random.randint(len(y) - length)\n\n        y = y[start:start + length]\n\n    return y","metadata":{"papermill":{"duration":0.026623,"end_time":"2024-04-09T16:35:29.005445","exception":false,"start_time":"2024-04-09T16:35:28.978822","status":"completed"},"tags":[],"jupyter":{"source_hidden":true},"execution":{"iopub.status.busy":"2024-04-30T04:26:12.927548Z","iopub.execute_input":"2024-04-30T04:26:12.928333Z","iopub.status.idle":"2024-04-30T04:26:12.942178Z","shell.execute_reply.started":"2024-04-30T04:26:12.928292Z","shell.execute_reply":"2024-04-30T04:26:12.941003Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = pd.read_csv(Config.train_path)\nConfig.num_classes = len(df_train.primary_label.unique())","metadata":{"papermill":{"duration":0.253504,"end_time":"2024-04-09T16:35:29.267820","exception":false,"start_time":"2024-04-09T16:35:29.014316","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:13.366488Z","iopub.execute_input":"2024-04-30T04:26:13.366920Z","iopub.status.idle":"2024-04-30T04:26:13.627709Z","shell.execute_reply.started":"2024-04-30T04:26:13.366886Z","shell.execute_reply":"2024-04-30T04:26:13.626323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = pd.DataFrame(\n     [(path.stem, *path.stem.split(\"_\"), path) for path in Path(Config.test_path).glob(\"*.ogg\")],\n    columns = [\"filename\", \"name\" ,\"id\", \"path\"]\n)\nprint(df_test.shape)\ndf_test.head()","metadata":{"papermill":{"duration":0.043125,"end_time":"2024-04-09T16:35:29.320026","exception":false,"start_time":"2024-04-09T16:35:29.276901","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:13.902819Z","iopub.execute_input":"2024-04-30T04:26:13.903276Z","iopub.status.idle":"2024-04-30T04:26:13.927808Z","shell.execute_reply.started":"2024-04-30T04:26:13.903240Z","shell.execute_reply":"2024-04-30T04:26:13.926723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import albumentations as A\ndef get_train_transform():\n    return A.Compose([\n        A.HorizontalFlip(p=0.5),\n        A.OneOf([\n                A.Cutout(max_h_size=5, max_w_size=16),\n                A.CoarseDropout(max_holes=4),\n            ], p=0.5),\n    ])","metadata":{"papermill":{"duration":0.019929,"end_time":"2024-04-09T16:35:29.349247","exception":false,"start_time":"2024-04-09T16:35:29.329318","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:14.408139Z","iopub.execute_input":"2024-04-30T04:26:14.408844Z","iopub.status.idle":"2024-04-30T04:26:14.414943Z","shell.execute_reply.started":"2024-04-30T04:26:14.408807Z","shell.execute_reply":"2024-04-30T04:26:14.413650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import librosa as lb\nimport librosa.display as lbd\nimport soundfile as sf\nfrom  soundfile import SoundFile \n\nclass BirdDataset(Dataset):\n    def __init__(self, data, sr=Config.SR, n_mels=128, fmin=0, fmax=None, duration=Config.DURATION, step=None, res_type=\"kaiser_fast\", resample=True):\n        \n        self.data = data\n        \n        self.sr = sr\n        self.n_mels = n_mels\n        self.fmin = fmin\n        self.fmax = fmax or self.sr//2\n\n        self.duration = duration\n        self.audio_length = self.duration*self.sr\n        self.step = step or self.audio_length\n        \n        self.res_type = res_type\n        self.resample = resample\n\n    def __len__(self):\n        return len(self.data)\n    \n    @staticmethod\n    def normalize(image):\n        image = image.astype(\"float32\", copy=False) / 255.0\n        image = np.stack([image, image, image])\n        return image\n    \n    \n    def audio_to_image(self, audio):\n        melspec = compute_melspec(audio, self.sr, self.n_mels, self.fmin, self.fmax) \n        image = mono_to_color(melspec)\n        image = self.normalize(image)\n        return image\n\n    def read_file(self, filepath):\n        audio, orig_sr = sf.read(filepath, dtype=\"float32\")\n\n        if self.resample and orig_sr != self.sr:\n            audio = lb.resample(audio, orig_sr, self.sr, res_type=self.res_type)\n          \n        audios = []\n        for i in range(self.audio_length, len(audio) + self.step, self.step):\n            start = max(0, i - self.audio_length)\n            end = start + self.audio_length\n            audios.append(audio[start:end])\n            \n        if len(audios[-1]) < self.audio_length:\n            audios = audios[:-1]\n            \n        images = [self.audio_to_image(audio) for audio in audios]\n        images = np.stack(images)\n        \n        return images\n    \n        \n    def __getitem__(self, idx):\n        return self.read_file(self.data.loc[idx, \"path\"])","metadata":{"papermill":{"duration":0.063671,"end_time":"2024-04-09T16:35:29.422138","exception":false,"start_time":"2024-04-09T16:35:29.358467","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:14.953800Z","iopub.execute_input":"2024-04-30T04:26:14.954232Z","iopub.status.idle":"2024-04-30T04:26:15.003874Z","shell.execute_reply.started":"2024-04-30T04:26:14.954198Z","shell.execute_reply":"2024-04-30T04:26:15.002527Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ds_test = BirdDataset(\n    df_test, \n    sr = Config.SR,\n    duration = Config.DURATION,\n)","metadata":{"papermill":{"duration":0.021969,"end_time":"2024-04-09T16:35:29.455423","exception":false,"start_time":"2024-04-09T16:35:29.433454","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:15.552463Z","iopub.execute_input":"2024-04-30T04:26:15.553550Z","iopub.status.idle":"2024-04-30T04:26:15.558567Z","shell.execute_reply.started":"2024-04-30T04:26:15.553508Z","shell.execute_reply":"2024-04-30T04:26:15.557177Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ds_test[0].shape","metadata":{"papermill":{"duration":0.025567,"end_time":"2024-04-09T16:35:29.493603","exception":false,"start_time":"2024-04-09T16:35:29.468036","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:16.121297Z","iopub.execute_input":"2024-04-30T04:26:16.121752Z","iopub.status.idle":"2024-04-30T04:26:16.127547Z","shell.execute_reply.started":"2024-04-30T04:26:16.121716Z","shell.execute_reply":"2024-04-30T04:26:16.125994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def show_batch(img_ds, num_items, num_rows, num_cols, predict_arr=None):\n    fig = plt.figure(figsize=(12, 6))    \n    img_index = np.random.randint(0, len(img_ds), num_items)\n    for index, img_index in enumerate(img_index):  # list first 9 images\n        img = img_ds[img_index][0]   \n        \n        ax = fig.add_subplot(num_rows, num_cols, index + 1, xticks=[], yticks=[])\n        if isinstance(img, torch.Tensor):\n            img = img.detach().numpy()\n        if isinstance(img, np.ndarray):\n            img = img.transpose(1, 2, 0)\n            ax.imshow(img)        \n            \n        title = f\"Spec\"\n        ax.set_title(title)  ","metadata":{"papermill":{"duration":0.022646,"end_time":"2024-04-09T16:35:29.525571","exception":false,"start_time":"2024-04-09T16:35:29.502925","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:16.681608Z","iopub.execute_input":"2024-04-30T04:26:16.682076Z","iopub.status.idle":"2024-04-30T04:26:16.691164Z","shell.execute_reply.started":"2024-04-30T04:26:16.682042Z","shell.execute_reply":"2024-04-30T04:26:16.690001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# show_batch(ds_test, 2, 2, 1)","metadata":{"papermill":{"duration":0.017555,"end_time":"2024-04-09T16:35:29.552930","exception":false,"start_time":"2024-04-09T16:35:29.535375","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:17.290692Z","iopub.execute_input":"2024-04-30T04:26:17.291143Z","iopub.status.idle":"2024-04-30T04:26:17.296219Z","shell.execute_reply.started":"2024-04-30T04:26:17.291108Z","shell.execute_reply":"2024-04-30T04:26:17.294921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from torch.optim.lr_scheduler import CosineAnnealingLR, CosineAnnealingWarmRestarts, ReduceLROnPlateau, OneCycleLR\n\ndef get_optimizer(lr, params):\n    model_optimizer = torch.optim.Adam(\n            filter(lambda p: p.requires_grad, params), \n            lr=lr,\n            weight_decay=Config.weight_decay\n        )\n    interval = \"epoch\"\n    \n    lr_scheduler = CosineAnnealingWarmRestarts(\n                            model_optimizer, \n                            T_0=Config.epochs, \n                            T_mult=1, \n                            eta_min=1e-6, \n                            last_epoch=-1\n                        )\n\n    return {\n        \"optimizer\": model_optimizer, \n        \"lr_scheduler\": {\n            \"scheduler\": lr_scheduler,\n            \"interval\": interval,\n            \"monitor\": \"val_loss\",\n            \"frequency\": 1\n        }\n    }","metadata":{"papermill":{"duration":0.020096,"end_time":"2024-04-09T16:35:29.582239","exception":false,"start_time":"2024-04-09T16:35:29.562143","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:17.831477Z","iopub.execute_input":"2024-04-30T04:26:17.831933Z","iopub.status.idle":"2024-04-30T04:26:17.840558Z","shell.execute_reply.started":"2024-04-30T04:26:17.831896Z","shell.execute_reply":"2024-04-30T04:26:17.839406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sklearn.metrics\n\ndef padded_cmap(solution, submission, padding_factor=5):\n    solution = solution#.drop(['row_id'], axis=1, errors='ignore')\n    submission = submission#.drop(['row_id'], axis=1, errors='ignore')\n    new_rows = []\n    for i in range(padding_factor):\n        new_rows.append([1 for i in range(len(solution.columns))])\n    new_rows = pd.DataFrame(new_rows)\n    new_rows.columns = solution.columns\n    padded_solution = pd.concat([solution, new_rows]).reset_index(drop=True).copy()\n    padded_submission = pd.concat([submission, new_rows]).reset_index(drop=True).copy()\n    score = sklearn.metrics.average_precision_score(\n        padded_solution.values,\n        padded_submission.values,\n        average='macro',\n    )\n    return score\n\ndef map_score(solution, submission):\n    solution = solution#.drop(['row_id'], axis=1, errors='ignore')\n    submission = submission#.drop(['row_id'], axis=1, errors='ignore')\n    score = sklearn.metrics.average_precision_score(\n        solution.values,\n        submission.values,\n        average='micro',\n    )\n    return score","metadata":{"papermill":{"duration":0.022469,"end_time":"2024-04-09T16:35:29.614311","exception":false,"start_time":"2024-04-09T16:35:29.591842","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:18.334920Z","iopub.execute_input":"2024-04-30T04:26:18.335345Z","iopub.status.idle":"2024-04-30T04:26:18.345912Z","shell.execute_reply.started":"2024-04-30T04:26:18.335312Z","shell.execute_reply":"2024-04-30T04:26:18.344524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class BirdClefModel(pl.LightningModule):\n    def __init__(self, model_name=Config.model, num_classes = Config.num_classes, pretrained = Config.pretrained):\n        super().__init__()\n        self.num_classes = num_classes\n\n        self.backbone = timm.create_model(model_name, pretrained=pretrained)\n\n        if 'res' in model_name:\n            self.in_features = self.backbone.fc.in_features\n            self.backbone.fc = nn.Linear(self.in_features, num_classes)\n        elif 'dense' in model_name:\n            self.in_features = self.backbone.classifier.in_features\n            self.backbone.classifier = nn.Linear(self.in_features, num_classes)\n        elif 'efficientnet' in model_name:\n            self.in_features = self.backbone.classifier.in_features\n            self.backbone.classifier = nn.Sequential(\n                nn.Linear(self.in_features, num_classes)\n            )\n        \n        self.loss_function = nn.BCEWithLogitsLoss() \n\n    def forward(self,images):\n        logits = self.backbone(images)\n        return logits\n        \n    def configure_optimizers(self):\n        return get_optimizer(lr=Config.LR, params=self.parameters())\n\n    def training_step(self, batch, batch_idx):\n        image, target = batch        \n\n        y_pred = self(image)\n        loss = self.loss_function(y_pred,target)\n\n        self.log(\"train_loss\", loss, on_step=True, on_epoch=True, prog_bar=True)\n        return loss        \n\n    def validation_step(self, batch, batch_idx):\n        image, target = batch     \n        y_pred = self(image)\n        val_loss = self.loss_function(y_pred, target)\n        self.log(\"val_loss\", val_loss, on_step=True, on_epoch=True, logger=True, prog_bar=True)\n        \n        return {\"val_loss\": val_loss, \"logits\": y_pred, \"targets\": target}\n    \n    def train_dataloader(self):\n        return self._train_dataloader \n    \n    def validation_dataloader(self):\n        return self._validation_dataloader\n    \n    def validation_epoch_end(self,outputs):\n        avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()\n        output_val = torch.cat([x['logits'] for x in outputs],dim=0).sigmoid().cpu().detach().numpy()\n        target_val = torch.cat([x['targets'] for x in outputs],dim=0).cpu().detach().numpy()\n        \n        # print(output_val.shape)\n        val_df = pd.DataFrame(target_val, columns = birds)\n        pred_df = pd.DataFrame(output_val, columns = birds)\n        \n        avg_score = padded_cmap(val_df, pred_df, padding_factor = 5)\n        avg_score2 = padded_cmap(val_df, pred_df, padding_factor = 3)\n        avg_score3 = sklearn.metrics.label_ranking_average_precision_score(target_val,output_val)\n        \n#         competition_metrics(output_val,target_val)\n        print(f'epoch {self.current_epoch} validation loss {avg_loss}')\n        print(f'epoch {self.current_epoch} validation C-MAP score pad 5 {avg_score}')\n        print(f'epoch {self.current_epoch} validation C-MAP score pad 3 {avg_score2}')\n        print(f'epoch {self.current_epoch} validation AP score {avg_score3}')\n        \n        \n        val_df.to_pickle('val_df.pkl')\n        pred_df.to_pickle('pred_df.pkl')\n        \n        \n        return {'val_loss': avg_loss,'val_cmap':avg_score}\n    ","metadata":{"papermill":{"duration":0.0347,"end_time":"2024-04-09T16:35:29.658104","exception":false,"start_time":"2024-04-09T16:35:29.623404","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:18.903405Z","iopub.execute_input":"2024-04-30T04:26:18.903854Z","iopub.status.idle":"2024-04-30T04:26:18.926530Z","shell.execute_reply.started":"2024-04-30T04:26:18.903820Z","shell.execute_reply":"2024-04-30T04:26:18.925268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def predict(data_loader, model):\n        \n    model.to('cpu')\n    model.eval()    \n    predictions = []\n    for en in range(len(ds_test)):\n        print(en)\n        images = torch.from_numpy(ds_test[en])\n        print(images.shape)\n        with torch.no_grad():\n            outputs = model(images).sigmoid().detach().cpu().numpy()\n            print(outputs.shape)\n#             pred_batch.extend(outputs.detach().cpu().numpy())\n#         pred_batch = np.vstack(pred_batch)\n        predictions.append(outputs)\n            \n    \n    return predictions","metadata":{"papermill":{"duration":0.021946,"end_time":"2024-04-09T16:35:29.689191","exception":false,"start_time":"2024-04-09T16:35:29.667245","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:19.471710Z","iopub.execute_input":"2024-04-30T04:26:19.472112Z","iopub.status.idle":"2024-04-30T04:26:19.479519Z","shell.execute_reply.started":"2024-04-30T04:26:19.472081Z","shell.execute_reply":"2024-04-30T04:26:19.478606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gc\n\nprint(f\"Create Dataloader...\")\n\nds_test = BirdDataset(\n    df_test, \n    sr = Config.SR,\n    duration = Config.DURATION,\n)\n\n\naudio_model = BirdClefModel()\n\nprint(\"Model Creation\")\n\nmodel = BirdClefModel.load_from_checkpoint(Config.model_ckpt, train_dataloader=None,validation_dataloader=None) \nprint(\"Running Inference..\")\n\npreds = predict(ds_test, model)   \n\ngc.collect()\ntorch.cuda.empty_cache()","metadata":{"papermill":{"duration":1.465683,"end_time":"2024-04-09T16:35:31.164560","exception":false,"start_time":"2024-04-09T16:35:29.698877","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:20.338953Z","iopub.execute_input":"2024-04-30T04:26:20.339400Z","iopub.status.idle":"2024-04-30T04:26:23.348077Z","shell.execute_reply.started":"2024-04-30T04:26:20.339363Z","shell.execute_reply":"2024-04-30T04:26:23.346744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"filenames = df_test.filename.values.tolist()\n\nbird_cols = list(pd.get_dummies(df_train['primary_label']).columns)\nsub_df = pd.DataFrame(columns=['row_id']+bird_cols)","metadata":{"papermill":{"duration":0.038042,"end_time":"2024-04-09T16:35:31.212552","exception":false,"start_time":"2024-04-09T16:35:31.174510","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:23.350686Z","iopub.execute_input":"2024-04-30T04:26:23.351070Z","iopub.status.idle":"2024-04-30T04:26:23.376626Z","shell.execute_reply.started":"2024-04-30T04:26:23.351036Z","shell.execute_reply":"2024-04-30T04:26:23.375474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df","metadata":{"papermill":{"duration":0.029087,"end_time":"2024-04-09T16:35:31.251236","exception":false,"start_time":"2024-04-09T16:35:31.222149","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:24.225688Z","iopub.execute_input":"2024-04-30T04:26:24.226569Z","iopub.status.idle":"2024-04-30T04:26:24.242406Z","shell.execute_reply.started":"2024-04-30T04:26:24.226530Z","shell.execute_reply":"2024-04-30T04:26:24.241179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i, file in enumerate(filenames):\n    pred = preds[i]\n    num_rows = len(pred)\n    row_ids = [f'{file}_{(i+1)*5}' for i in range(num_rows)]\n    df = pd.DataFrame(columns=['row_id']+bird_cols)\n    \n    df['row_id'] = row_ids\n    df[bird_cols] = pred\n    \n    sub_df = pd.concat([sub_df,df]).reset_index(drop=True)","metadata":{"papermill":{"duration":0.021221,"end_time":"2024-04-09T16:35:31.282089","exception":false,"start_time":"2024-04-09T16:35:31.260868","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:24.767956Z","iopub.execute_input":"2024-04-30T04:26:24.768362Z","iopub.status.idle":"2024-04-30T04:26:24.776046Z","shell.execute_reply.started":"2024-04-30T04:26:24.768331Z","shell.execute_reply":"2024-04-30T04:26:24.774744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df","metadata":{"papermill":{"duration":0.02926,"end_time":"2024-04-09T16:35:31.321065","exception":false,"start_time":"2024-04-09T16:35:31.291805","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:25.619651Z","iopub.execute_input":"2024-04-30T04:26:25.620054Z","iopub.status.idle":"2024-04-30T04:26:25.636453Z","shell.execute_reply.started":"2024-04-30T04:26:25.620021Z","shell.execute_reply":"2024-04-30T04:26:25.635192Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df.to_csv('submission.csv',index=False)","metadata":{"papermill":{"duration":0.021279,"end_time":"2024-04-09T16:35:31.352373","exception":false,"start_time":"2024-04-09T16:35:31.331094","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-04-30T04:26:25.965156Z","iopub.execute_input":"2024-04-30T04:26:25.965617Z","iopub.status.idle":"2024-04-30T04:26:25.973140Z","shell.execute_reply.started":"2024-04-30T04:26:25.965579Z","shell.execute_reply":"2024-04-30T04:26:25.971812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.009824,"end_time":"2024-04-09T16:35:31.372230","exception":false,"start_time":"2024-04-09T16:35:31.362406","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}