kitzeslab / opensoundscape

Open source, scalable software for the analysis of bioacoustic recordings
http://opensoundscape.org
MIT License
134 stars 14 forks source link

embed fails if passed df with just one row #1047

Open sammlapp opened 2 weeks ago

sammlapp commented 2 weeks ago

dimension error around pred_scores[dataloader.dataset._invalid_indices, :]

so seems like something is becoming one-dimensional instead of two when only one sample is output from __call__

File ~/opensoundscape/opensoundscape/ml/cnn.py:2121, in embed(self, samples, target_layer, progress_bar, return_preds, avgpool, **kwargs)
   [2118](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2118)     samples = [samples]
   [2120](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2120) # create dataloader to generate batches of AudioSamples
-> [2121](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2121) dataloader = self.predict_dataloader(samples, **kwargs)
   [2123](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2123) # run inference, returns (scores, intermediate_outputs)
   [2124](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2124) preds, embeddings = self(
   [2125](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2125)     dataloader=dataloader,
   [2126](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2126)     progress_bar=progress_bar,
   [2127](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2127)     intermediate_layers=[target_layer],
   [2128](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2128)     avgpool_intermediates=avgpool,
   [2129](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:2129) )

File ~/opensoundscape/opensoundscape/ml/cnn.py:1832, in __call__(self, dataloader, wandb_session, progress_bar, intermediate_layers, avgpool_intermediates)
   [1822](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1822) # aggregate across batches
   [1823](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1823) # note that shapes of elements in intermediate_outputs may vary
   [1824](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1824) # (so we don't make one combined np.array)
   [1825](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1825) intermediate_outputs = [
   [1826](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1826)     torch.vstack(x).squeeze().detach().cpu().numpy()
   [1827](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1827)     for x in intermediate_outputs
   [1828](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1828) ]
   [1830](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1830) # replace scores with nan for samples that failed in preprocessing
   [1831](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1831) # (we predicted on substitute-samples rather than
-> [1832](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1832) # skipping the samples that failed preprocessing)
   [1833](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1833) pred_scores[dataloader.dataset._invalid_indices, :] = np.nan
   [1834](https://file+.vscode-resource.vscode-cdn.net/Users/SML161/nb_opso/ml/train/~/opensoundscape/opensoundscape/ml/cnn.py:1834) for i in range(len(intermediate_outputs)):

IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
sammlapp commented 1 week ago

resolved by https://github.com/kitzeslab/opensoundscape/commit/d39833e48eece14c74457e594f57cce06637c760