{"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":"# note","metadata":{}},{"cell_type":"markdown","source":"The main libraries that can handle audio data are librosa and torchaudio, and it appears that many people use these two in bird2022. The library I usually work with is librosa, but torchaudio has the advantage of being able to use the GPU, and I wanted to compare processing speeds. I wanted to compare the processing speeds of the two libraries, and I found a pretty big difference. <br>\n\nSpecifically, I compared the speed of 1000 iterations of the process from file loading to melspectrogram. <br>\n- local CPU : Core i7-9700K<br>\n- local GPU : GTX 1080 Ti<br>\n- Comparison: librosa, torchaudio CPU, torchaudio GPU <br>\n- Results : **torchaudio GPU** > torchaudio CPU > librosa <br>\n    - elapsed_time (librosa; CPU): 30.550999[sec]<br>\n    - elapsed_time (torchaudio; CPU): 20.580002[sec]<br>\n    - elapsed_time (torchaudio; GPU): 10.488999[sec]<br>\n","metadata":{}},{"cell_type":"markdown","source":"# import","metadata":{}},{"cell_type":"code","source":"import torch\nimport librosa\nimport torchaudio\nimport numpy as np\nimport time","metadata":{"execution":{"iopub.status.busy":"2022-04-29T14:58:37.549502Z","iopub.execute_input":"2022-04-29T14:58:37.550413Z","iopub.status.idle":"2022-04-29T14:58:41.250965Z","shell.execute_reply.started":"2022-04-29T14:58:37.550283Z","shell.execute_reply":"2022-04-29T14:58:41.250081Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epoch = 1000","metadata":{"execution":{"iopub.status.busy":"2022-04-29T14:58:41.252643Z","iopub.execute_input":"2022-04-29T14:58:41.253238Z","iopub.status.idle":"2022-04-29T14:58:41.257415Z","shell.execute_reply.started":"2022-04-29T14:58:41.253192Z","shell.execute_reply":"2022-04-29T14:58:41.256696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# librosa melspec","metadata":{}},{"cell_type":"code","source":"start = time.time()\nfor i in range(epoch):\n    waveform, sample_rate = librosa.load(\"../input/birdclef-2022/train_audio/afrsil1/XC125458.ogg\", sr=32000)\n    mel_data_ = librosa.feature.melspectrogram(y=waveform,sr=32000,n_fft=2048,hop_length=512,n_mels = 224,fmin=20,fmax=16000)\n    mel_data = librosa.power_to_db(mel_data_, ref=np.max)\nelapsed_time = time.time() - start\nprint(\"elapsed_time (librosa; CPU): {0:.6f}\".format(elapsed_time) + \"[sec]\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"elapsed_time (librosa; CPU): 30.550999[sec]","metadata":{}},{"cell_type":"markdown","source":"# torchaudio melcpec CPU","metadata":{}},{"cell_type":"code","source":"torch_mel_trans = torchaudio.transforms.MelSpectrogram(\n    sample_rate=32000,\n    n_fft=2048,\n    hop_length=512,\n    f_min=20,\n    f_max=16000,\n    n_mels=224\n)\n\ntorch_power_to_db = torchaudio.transforms.AmplitudeToDB(top_db=70)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"start = time.time()\n\nfor i in range(epoch):\n    waveform, sample_rate = torchaudio.load(\"../input/birdclef-2022/train_audio/afrsil1/XC125458.ogg\", normalize=True)\n    mel_specgram = torch_mel_trans(waveform)\n    mel_specgram = torch_power_to_db(mel_specgram)\n\nelapsed_time = time.time() - start\nprint(\"elapsed_time (torchaudio; CPU): {0:.6f}\".format(elapsed_time) + \"[sec]\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"elapsed_time (torchaudio; CPU): 20.580002[sec]","metadata":{}},{"cell_type":"markdown","source":"# torchaudio melcpec GPU","metadata":{}},{"cell_type":"code","source":"torch_mel_trans = torchaudio.transforms.MelSpectrogram(\n    sample_rate=32000,\n    n_fft=2048,\n    hop_length=512,\n    f_min=20,\n    f_max=16000,\n    n_mels=224\n)\n\ntorch_power_to_db = torchaudio.transforms.AmplitudeToDB(top_db=70)\n\ntorch_mel_trans = torch_mel_trans.cuda()\ntorch_power_to_db = torch_power_to_db.cuda()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.cuda.synchronize()\nstart = time.time()\n\nfor i in range(epoch):\n    waveform, sample_rate = torchaudio.load(\"../input/birdclef-2022/train_audio/afrsil1/XC125458.ogg\", normalize=True)\n    mel_specgram = torch_mel_trans(waveform.cuda())\n    mel_specgram = torch_power_to_db(mel_specgram)\n\ntorch.cuda.synchronize()\nelapsed_time = time.time() - start\nprint(\"elapsed_time (torchaudio; GPU): {0:.6f}\".format(elapsed_time) + \"[sec]\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"elapsed_time (torchaudio; GPU): 10.488999[sec]","metadata":{}},{"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":[]}]}