├── configs ├── __init__.py ├── datamodule │ ├── transforms │ │ ├── waveform_augmentations │ │ │ ├── none.yaml │ │ │ ├── default_multiclass.yaml │ │ │ ├── gain.yaml │ │ │ ├── default_multilabel.yaml │ │ │ ├── colored_noise.yaml │ │ │ ├── multilabel_mix.yaml │ │ │ └── background_noise.yaml │ │ ├── spectrogram_augmentations │ │ │ ├── none.yaml │ │ │ ├── default.yaml │ │ │ ├── time_masking.yaml │ │ │ └── frequency_masking.yaml │ │ ├── preprocessing │ │ │ ├── dbscale_conversion.yaml │ │ │ ├── spectrogram_conversion.yaml │ │ │ ├── resizer.yaml │ │ │ ├── melscale_conversion.yaml │ │ │ └── default.yaml │ │ ├── feature_extractor │ │ │ ├── default_hug.yaml │ │ │ └── default_aug.yaml │ │ ├── decoding │ │ │ └── bird_event_decoder.yaml │ │ ├── nocall_sampler │ │ │ └── default.yaml │ │ ├── base_transform.yaml │ │ ├── esc_default.yaml │ │ ├── bird_default.yaml │ │ ├── bird_default_annotation.yaml │ │ ├── inference_default.yaml │ │ ├── bird_default_multiclass.yaml │ │ └── bird_default_multilabel.yaml │ ├── mapper │ │ └── xc_bambird_mapper.yaml │ ├── esc50.yaml │ ├── NBP.yaml │ ├── PER.yaml │ ├── POW.yaml │ ├── SNE.yaml │ ├── SSW.yaml │ ├── UHH.yaml │ ├── NES.yaml │ ├── loaders │ │ └── default.yaml │ ├── inference │ │ ├── NBP_inf.yaml │ │ ├── PER_inf.yaml │ │ ├── SNE_inf.yaml │ │ ├── NES_inf.yaml │ │ ├── POW_inf.yaml │ │ ├── SSW_inf.yaml │ │ ├── UHH_inf.yaml │ │ └── HSN_inf.yaml │ ├── XCL.yaml │ ├── HSN.yaml │ └── XCM.yaml ├── datamodule_push │ ├── transforms │ │ ├── waveform_augmentations │ │ │ ├── none.yaml │ │ │ └── default.yaml │ │ ├── spectrogram_augmentations │ │ │ ├── none.yaml │ │ │ └── default.yaml │ │ ├── preprocessing │ │ │ ├── dbscale_conversion.yaml │ │ │ ├── spectrogram_conversion.yaml │ │ │ ├── resizer.yaml │ │ │ ├── melscale_conversion.yaml │ │ │ └── default.yaml │ │ ├── feature_extractor │ │ │ ├── default_hug.yaml │ │ │ └── default_aug.yaml │ │ ├── decoding │ │ │ └── bird_event_decoder.yaml │ │ ├── nocall_sampler │ │ │ └── default.yaml │ │ ├── esc_default.yaml │ │ └── bird_default.yaml │ ├── mapper │ │ └── xc_bambird_mapper.yaml │ ├── esc50.yaml │ ├── NBP.yaml │ ├── PER.yaml │ ├── SNE.yaml │ ├── SSW.yaml │ ├── UHH.yaml │ ├── NES.yaml │ ├── POW.yaml │ ├── loaders │ │ └── default.yaml │ ├── XCL.yaml │ ├── HSN.yaml │ └── XCM.yaml ├── logger │ ├── wandb_flow.yaml │ ├── mlflow.yaml │ └── wandb.yaml ├── callbacks │ ├── time_tracking.yaml │ ├── rich_progress_bar.yaml │ ├── model_summary.yaml │ ├── progress_bar.yaml │ ├── learning_rate_monitor.yaml │ ├── cluster.yaml │ ├── early_stopping.yaml │ ├── default.yaml │ └── model_checkpoint.yaml ├── trainer │ ├── multi_gpu.yaml │ ├── single_gpu.yaml │ └── default.yaml ├── extras │ └── default.yaml ├── hydra │ └── default.yaml ├── main_benchmarks.yaml ├── experiment │ ├── HSN │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ ├── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ │ │ └── global_analysis │ │ │ ├── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_HSN_test.yaml │ │ │ └── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_HSN_train.yaml │ ├── NBP │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ └── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ ├── NES │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ └── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ ├── PER │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ └── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ ├── POW │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ └── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ ├── SNE │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ ├── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ │ │ ├── local_analysis │ │ │ └── local_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_test.yaml │ │ │ └── global_analysis │ │ │ ├── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_test.yaml │ │ │ └── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_train.yaml │ ├── SSW │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ ├── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ │ │ ├── local_analysis │ │ │ └── local_analysis_audioprotopnet_convnext_XCL_pretrained_seed47.yaml │ │ │ └── global_analysis │ │ │ ├── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SSW_test.yaml │ │ │ └── global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SSW_train.yaml │ ├── UHH │ │ ├── perch │ │ │ └── inference │ │ │ │ └── perch_inference.yaml │ │ ├── convnext │ │ │ └── inference │ │ │ │ └── convnext_inference_XCL_pretrained.yaml │ │ └── audioprotopnet │ │ │ └── inference │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml │ │ │ ├── audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml │ │ │ └── audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml │ └── XCL │ │ ├── convnext │ │ └── training │ │ │ └── convnext.yaml │ │ └── audioprotopnet │ │ └── training │ │ ├── audioprotopnet_convnext_1_prototype.yaml │ │ ├── audioprotopnet_convnext_10_prototypes.yaml │ │ ├── audioprotopnet_convnext_5_prototypes.yaml │ │ └── audioprotopnet_convnext_20_prototypes.yaml ├── paths │ └── default.yaml ├── module │ ├── network │ │ ├── perch_inference.yaml │ │ ├── convnext.yaml │ │ └── ppnet_convnext.yaml │ ├── multilabel.yaml │ └── audioprotopnet_multilabel.yaml └── main_audioprotopnet.yaml ├── audioprotopnet ├── saving │ └── __init__.py ├── analysis │ ├── __init__.py │ ├── global_analysis │ │ └── __init__.py │ └── local_analysis │ │ └── __init__.py ├── evaluation │ ├── __init__.py │ └── eval_benchmarks.py ├── modules │ ├── __init__.py │ ├── losses │ │ ├── __init__.py │ │ └── asymmetric_loss.py │ ├── ppnet │ │ └── __init__.py │ ├── baselines │ │ └── __init__.py │ └── checkpoint_loading.py ├── training │ └── __init__.py ├── preprocessing │ ├── __init__.py │ ├── conversion │ │ ├── __init__.py │ │ └── spectrogram_conversion.py │ ├── datasets │ │ ├── __init__.py │ │ ├── mapping.py │ │ └── esc50_dataset.py │ ├── augmentations │ │ └── __init__.py │ └── normalization │ │ ├── __init__.py │ │ └── calculate_normalization_parameters.py ├── __init__.py └── __about__.py ├── scripts ├── test.bat ├── initialize_versioneer.bat ├── upload.bat ├── test_with_coverage.bat ├── make_doc.bat ├── convnext │ └── XCL │ │ └── training │ │ ├── convnext_XCL_training_seed42.sh │ │ ├── convnext_XCL_training_seed43.sh │ │ ├── convnext_XCL_training_seed44.sh │ │ ├── convnext_XCL_training_seed45.sh │ │ └── convnext_XCL_training_seed47.sh ├── make_apidoc.bat └── audioprotopnet │ └── XCL │ └── training │ ├── audioprotopnet_XCL_training_seed42.sh │ ├── audioprotopnet_XCL_training_seed44.sh │ ├── audioprotopnet_XCL_training_seed45.sh │ ├── audioprotopnet_XCL_training_seed47.sh │ └── audioprotopnet_XCL_training_seed43.sh ├── setup.cfg ├── .gitignore ├── docs ├── changelog.rst ├── index.rst └── Makefile ├── tox.ini ├── requirements.txt ├── LICENSE.txt ├── hf_repo ├── configuration_protonet.py ├── upload.ipynb └── processing_protonet.py └── setup.py /configs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/saving/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/analysis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/evaluation/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/modules/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/training/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/modules/losses/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/modules/ppnet/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/modules/baselines/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/analysis/global_analysis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/analysis/local_analysis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/conversion/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/augmentations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /audioprotopnet/__init__.py: -------------------------------------------------------------------------------- 1 | """audioprotopnet modules.""" 2 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/none.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/spectrogram_augmentations/none.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/waveform_augmentations/none.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/spectrogram_augmentations/none.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /configs/logger/wandb_flow.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - wandb.yaml 3 | - mlflow.yaml 4 | -------------------------------------------------------------------------------- /scripts/test.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | :: Run the tests. 3 | 4 | python -m pytest %* 5 | -------------------------------------------------------------------------------- /configs/callbacks/time_tracking.yaml: -------------------------------------------------------------------------------- 1 | time_tracking: 2 | _target_: birdset.callbacks.TimeCallback -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/spectrogram_augmentations/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - none.yaml -------------------------------------------------------------------------------- /configs/trainer/multi_gpu.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default.yaml 3 | 4 | accelerator: gpu 5 | devices: 4 -------------------------------------------------------------------------------- /configs/trainer/single_gpu.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - default.yaml 3 | 4 | accelerator: gpu 5 | devices: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/waveform_augmentations/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - none.yaml 3 | 4 | -------------------------------------------------------------------------------- /configs/callbacks/rich_progress_bar.yaml: -------------------------------------------------------------------------------- 1 | rich_progress_bar: 2 | _target_: lightning.pytorch.callbacks.RichProgressBar -------------------------------------------------------------------------------- /configs/callbacks/model_summary.yaml: -------------------------------------------------------------------------------- 1 | model_summary: 2 | _target_: lightning.pytorch.callbacks.RichModelSummary 3 | max_depth: 1 -------------------------------------------------------------------------------- /configs/callbacks/progress_bar.yaml: -------------------------------------------------------------------------------- 1 | progress_bar: 2 | _target_: lightning.pytorch.callbacks.TQDMProgressBar 3 | refresh_rate: 10 -------------------------------------------------------------------------------- /configs/datamodule/transforms/spectrogram_augmentations/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - frequency_masking.yaml 3 | - time_masking.yaml -------------------------------------------------------------------------------- /configs/callbacks/learning_rate_monitor.yaml: -------------------------------------------------------------------------------- 1 | lr_monitor: 2 | _target_: lightning.pytorch.callbacks.LearningRateMonitor 3 | logging_interval: step -------------------------------------------------------------------------------- /configs/datamodule/mapper/xc_bambird_mapper.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.XCEventMapping 2 | biggest_cluster: True 3 | no_call: False -------------------------------------------------------------------------------- /configs/datamodule_push/mapper/xc_bambird_mapper.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.XCEventMapping 2 | biggest_cluster: True 3 | no_call: False -------------------------------------------------------------------------------- /scripts/initialize_versioneer.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | :: Intitialize git and versioneer for this folder structure 3 | 4 | git init 5 | versioneer install 6 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/preprocessing/dbscale_conversion.yaml: -------------------------------------------------------------------------------- 1 | dbscale_conversion: 2 | _target_: birdset.datamodule.components.augmentations.PowerToDB 3 | 4 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/default_multiclass.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - background_noise.yaml 3 | - colored_noise.yaml 4 | - gain.yaml 5 | 6 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/gain.yaml: -------------------------------------------------------------------------------- 1 | gain: 2 | _target_: torch_audiomentations.Gain 3 | p: 0.2 4 | min_gain_in_db: -18 5 | max_gain_in_db: 6 -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/preprocessing/dbscale_conversion.yaml: -------------------------------------------------------------------------------- 1 | dbscale_conversion: 2 | _target_: birdset.datamodule.components.augmentations.PowerToDB 3 | 4 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/feature_extractor/default_hug.yaml: -------------------------------------------------------------------------------- 1 | _target_: transformers.AutoFeatureExtractor.from_pretrained 2 | pretrained_model_name_or_path: ${module.network.model.checkpoint} -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/feature_extractor/default_hug.yaml: -------------------------------------------------------------------------------- 1 | _target_: transformers.AutoFeatureExtractor.from_pretrained 2 | pretrained_model_name_or_path: ${module.network.model.checkpoint} -------------------------------------------------------------------------------- /scripts/upload.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | :: Upload to nexus. 3 | 4 | twine upload --repository-url http://fbimvnrepo-01.iee.fraunhofer.de:8081/repository/python-hosted/ dist/* -u jenkins -p jenkins 5 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [versioneer] 2 | VCS = git 3 | style = default 4 | versionfile_source = audioprotopnet/_version.py 5 | versionfile_build = 6 | tag_prefix = v 7 | parentdir_prefix = ['audioprotopnet'] 8 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/preprocessing/spectrogram_conversion.yaml: -------------------------------------------------------------------------------- 1 | spectrogram_conversion: 2 | _target_: torchaudio.transforms.Spectrogram 3 | n_fft: 2048 4 | hop_length: 256 5 | power: 2.0 -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/default_multilabel.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - multilabel_mix.yaml 3 | - background_noise.yaml 4 | - colored_noise.yaml 5 | - gain.yaml 6 | 7 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/preprocessing/spectrogram_conversion.yaml: -------------------------------------------------------------------------------- 1 | spectrogram_conversion: 2 | _target_: torchaudio.transforms.Spectrogram 3 | n_fft: 2048 4 | hop_length: 256 5 | power: 2.0 -------------------------------------------------------------------------------- /configs/callbacks/cluster.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - _self_ 3 | - learning_rate_monitor.yaml 4 | - time_tracking.yaml 5 | - model_summary.yaml 6 | - model_checkpoint.yaml #topk=0 if not wanted! 7 | - progress_bar.yaml -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/normalization/__init__.py: -------------------------------------------------------------------------------- 1 | from audioprotopnet.preprocessing.normalization.standardization import standardize_tensor 2 | from audioprotopnet.preprocessing.normalization.standardization import undo_standardize_tensor -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/colored_noise.yaml: -------------------------------------------------------------------------------- 1 | colored_noise: 2 | _target_: torch_audiomentations.AddColoredNoise 3 | p: 0.2 4 | max_f_decay: 2 5 | min_f_decay: -2 6 | max_snr_in_db: 30 7 | min_snr_in_db: 3 -------------------------------------------------------------------------------- /configs/callbacks/early_stopping.yaml: -------------------------------------------------------------------------------- 1 | early_stopping: 2 | _target_: lightning.pytorch.callbacks.EarlyStopping 3 | monitor: ${replace:"val/__loss__"} 4 | patience: 10 5 | min_delta: 5e-5 6 | verbose: False 7 | check_finite: True 8 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/decoding/bird_event_decoder.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.EventDecoding 2 | min_len: 1.0 3 | max_len: 5.0 4 | sampling_rate: ${module.network.sampling_rate} 5 | extension_time: 8 6 | extracted_interval: 5 -------------------------------------------------------------------------------- /configs/datamodule/transforms/preprocessing/resizer.yaml: -------------------------------------------------------------------------------- 1 | resizer: 2 | _target_: birdset.datamodule.components.resize.Resizer 3 | db_scale: True # manually adjusted!! False when not using it 4 | target_height: null 5 | target_width: null 6 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/decoding/bird_event_decoder.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.EventDecoding 2 | min_len: 1.0 3 | max_len: 5.0 4 | sampling_rate: ${module.network.sampling_rate} 5 | extension_time: 8 6 | extracted_interval: 5 -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/preprocessing/resizer.yaml: -------------------------------------------------------------------------------- 1 | resizer: 2 | _target_: birdset.datamodule.components.resize.Resizer 3 | db_scale: True # manually adjusted!! False when not using it 4 | target_height: null 5 | target_width: null 6 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/feature_extractor/default_aug.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.DefaultFeatureExtractor 2 | feature_size: 1 3 | sampling_rate: ${module.network.sampling_rate} 4 | padding_value: 0.0 5 | return_attention_mask: False 6 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/preprocessing/melscale_conversion.yaml: -------------------------------------------------------------------------------- 1 | melscale_conversion: 2 | _target_: torchaudio.transforms.MelScale 3 | n_mels: 256 4 | sample_rate: ${module.network.sampling_rate} 5 | n_stft: 1025 # n_fft//2+1!!! how to include in code -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/feature_extractor/default_aug.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.DefaultFeatureExtractor 2 | feature_size: 1 3 | sampling_rate: ${module.network.sampling_rate} 4 | padding_value: 0.0 5 | return_attention_mask: False 6 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/preprocessing/melscale_conversion.yaml: -------------------------------------------------------------------------------- 1 | melscale_conversion: 2 | _target_: torchaudio.transforms.MelScale 3 | n_mels: 256 4 | sample_rate: ${module.network.sampling_rate} 5 | n_stft: 1025 # n_fft//2+1!!! how to include in code -------------------------------------------------------------------------------- /configs/extras/default.yaml: -------------------------------------------------------------------------------- 1 | ignore_warnings: True 2 | 3 | enforce_tags: False 4 | 5 | print_config: True 6 | 7 | plugins: null 8 | 9 | state_dict_saving_params: 10 | symbols: 6 11 | exceptions: ["loss"] 12 | 13 | dump_metrics: True 14 | 15 | 16 | -------------------------------------------------------------------------------- /configs/callbacks/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - _self_ 3 | #- early_stopping.yaml 4 | - learning_rate_monitor.yaml 5 | - time_tracking.yaml 6 | - model_summary.yaml 7 | - rich_progress_bar.yaml 8 | - model_checkpoint.yaml #topk=0 if not wanted! 9 | #- metric_collector.yaml 10 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/nocall_sampler/default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.augmentations.NoCallMixer 2 | directory: ${paths.background_path} 3 | p: 0.075 4 | sampling_rate: ${module.network.sampling_rate} 5 | length: 5 6 | n_classes: ${datamodule.dataset.n_classes} 7 | 8 | 9 | -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/preprocessing/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - spectrogram_conversion.yaml 3 | - melscale_conversion.yaml 4 | - dbscale_conversion.yaml 5 | - resizer.yaml 6 | 7 | normalize_waveform: null 8 | normalize_spectrogram: False 9 | mean: null 10 | std: null -------------------------------------------------------------------------------- /configs/datamodule/transforms/spectrogram_augmentations/time_masking.yaml: -------------------------------------------------------------------------------- 1 | time_masking: 2 | _target_: torchvision.transforms.RandomApply 3 | p: 0.3 4 | transforms: # - _ --> list! 5 | - _target_: torchaudio.transforms.TimeMasking 6 | time_mask_param: 100 7 | iid_masks: True -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/nocall_sampler/default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.augmentations.NoCallMixer 2 | directory: ${paths.background_path} 3 | p: 0.075 4 | sampling_rate: ${module.network.sampling_rate} 5 | length: 5 6 | n_classes: ${datamodule.dataset.n_classes} 7 | 8 | 9 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/spectrogram_augmentations/frequency_masking.yaml: -------------------------------------------------------------------------------- 1 | frequency_masking: 2 | _target_: torchvision.transforms.RandomApply 3 | p: 0.5 4 | transforms: # - _ --> list! 5 | - _target_: torchaudio.transforms.FrequencyMasking 6 | freq_mask_param: 100 7 | iid_masks: True -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/multilabel_mix.yaml: -------------------------------------------------------------------------------- 1 | multilabel_mix: 2 | _target_: audioprotopnet.preprocessing.augmentations.multilabelmix.MultilabelMix #birdset.datamodule.components.augmentations.MultilabelMix 3 | p: 0.8 4 | min_snr_in_db: 3.0 5 | max_snr_in_db: 30.0 6 | mix_target: union 7 | max_samples: 2 8 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/base_transform.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BaseTransforms 2 | sampling_rate: ${module.network.sampling_rate} 3 | task: ${datamodule.dataset.task} 4 | max_length: 5 # Attention: this might not work with any model!! -> You must specify it or set to 5s as its done in code 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | .idea/ 4 | *.py[cod] 5 | *$py.class 6 | # Exclude later, if you do not want a pipeline 7 | #*.gitlab-ci.yml 8 | 9 | # Coverage etc. 10 | .coverage 11 | 12 | # Generated Documentation 13 | /docs/_build/ 14 | /docs/modules.rst 15 | /docs/audioprotopnet.rst 16 | /docs/audioprotopnet.*.rst 17 | -------------------------------------------------------------------------------- /configs/trainer/default.yaml: -------------------------------------------------------------------------------- 1 | _target_: lightning.Trainer 2 | default_root_dir: paths.output_dir 3 | 4 | min_epochs: 1 5 | max_epochs: null 6 | 7 | accelerator: "cpu" 8 | devices: 1 9 | 10 | enable_checkpointing: True 11 | fast_dev_run: false 12 | 13 | strategy: "auto" 14 | deterministic: false 15 | 16 | gradient_clip_val: 0.5 17 | accumulate_grad_batches: 1 18 | precision: 16 -------------------------------------------------------------------------------- /docs/changelog.rst: -------------------------------------------------------------------------------- 1 | ========================================== 2 | AudioProtoPNet Change Log 3 | ========================================== 4 | :Info: This is the change log for the AudioProtoPNet Project 5 | :Author: Rene Heinrich 6 | :Date: - 7 | 8 | .. index:: changelog 9 | 10 | Version History 11 | =============== 12 | 13 | **TODO:** Insert changelog here 14 | 15 | 0.1.0 16 | * Example of a release 17 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | # tox (https://tox.readthedocs.io/) is a tool for running tests 2 | # in multiple virtualenvs. This configuration file will run the 3 | # test suite on all supported python versions. To use it, "pip install tox" 4 | # and then run "tox" from this directory. 5 | 6 | [tox] 7 | envlist = py36 8 | skipsdist = true 9 | 10 | [testenv] 11 | deps = -rrequirements-dev.txt 12 | commands = 13 | pytest -v {posargs:tests} 14 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | Welcome to AudioProtoPNet's documentation! 2 | ============================================================ 3 | 4 | This project provides the 5 | `audioprotopnet package `_. 6 | 7 | 8 | .. toctree:: 9 | :maxdepth: 2 10 | 11 | audioprotopnet 12 | changelog 13 | 14 | 15 | Indices and tables 16 | ================== 17 | 18 | * :ref:`genindex` 19 | * :ref:`modindex` 20 | * :ref:`search` 21 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/waveform_augmentations/background_noise.yaml: -------------------------------------------------------------------------------- 1 | background_noise: 2 | #_target_: torch_audiomentations.AddBackgroundNoise 3 | _target_: birdset.datamodule.components.augmentations.AddBackgroundNoise 4 | p: 0.5 5 | min_snr_in_db: 3 6 | max_snr_in_db: 30 7 | sample_rate: ${module.network.sampling_rate} 8 | target_rate: ${module.network.sampling_rate} 9 | background_paths: ${paths.background_path} 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /scripts/test_with_coverage.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | :: Run the tests including coverage and opens the report-html in the Browser. 3 | 4 | :: save the folder in the temp dictionary 5 | set HtmlPath=%TEMP%\html_cov_commons 6 | 7 | python -m nose ^ 8 | --with-coverage ^ 9 | --cover-package=audioprotopnet ^ 10 | --cover-html ^ 11 | --cover-html-dir=%HtmlPath% ^ 12 | %* 13 | 14 | :: open in default browser 15 | explorer %HtmlPath%\index.html 16 | -------------------------------------------------------------------------------- /configs/hydra/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - override hydra_logging: colorlog 3 | - override job_logging: colorlog 4 | 5 | job: 6 | chdir: True 7 | run: 8 | dir: ${paths.log_dir}/${task_name}/runs/${datamodule.dataset.dataset_name}/${module.network.model_name}/${now:%Y-%m-%d_%H%M%S} 9 | sweep: 10 | dir: ./output/${task_name}/multiruns/${datamodule.dataset.dataset_name}/${module.network.model_name}/${now:%Y-%m-%d_%H%M%S} 11 | subdir: ${hydra.job.num} -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/esc_default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | 6 | defaults: 7 | - _self_ 8 | - preprocessing: default.yaml 9 | - waveform_augmentations: none.yaml 10 | - spectrogram_augmentations: none.yaml 11 | - decoding: null 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /configs/logger/mlflow.yaml: -------------------------------------------------------------------------------- 1 | mlflow: 2 | _target_: pytorch_lightning.loggers.MLFlowLogger 3 | #experiment_name: gadme 4 | run_name: ${module.network.model_name}_${datamodule.dataset.dataset_name}_${module.task}#${seed}_${start_time} 5 | tracking_uri: ${paths.log_dir}/mlflow/mlruns # run `mlflow ui` command inside the `logs/mlflow/` dir to open the UI 6 | tags: null 7 | # save_dir: "./mlruns" 8 | prefix: "" 9 | artifact_location: null 10 | # run_id: "" -------------------------------------------------------------------------------- /configs/datamodule/transforms/preprocessing/default.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - spectrogram_conversion.yaml 3 | - melscale_conversion.yaml 4 | - dbscale_conversion.yaml 5 | - resizer.yaml 6 | 7 | normalize_waveform: ${module.network.normalize_waveform} 8 | normalize_spectrogram: ${module.network.normalize_spectrogram} 9 | mean: -13.369 # Mean of XCM: -13.355 ; Mean of XCL: -13.369 10 | std: 13.162 # Standard deviation of XCM: 13.254 ; Standard deviation of XCL: 13.162 -------------------------------------------------------------------------------- /configs/logger/wandb.yaml: -------------------------------------------------------------------------------- 1 | wandb: 2 | _target_: pytorch_lightning.loggers.WandbLogger 3 | name: ${module.network.model_name}_${datamodule.dataset.dataset_name}#${seed}_${start_time} 4 | save_dir: "${paths.log_dir}" 5 | mode: offline 6 | id: null # pass correct id to resume experiment! 7 | project: "audioprotopnet" 8 | log_model: False # upload lightning ckpts 9 | entity: "deepbirddetect" 10 | group: "" 11 | tags: [] 12 | job_type: "" 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/esc_default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | 6 | defaults: 7 | - _self_ 8 | - preprocessing: default.yaml 9 | - waveform_augmentations: default_multiclass.yaml 10 | - spectrogram_augmentations: default.yaml 11 | - decoding: null 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /audioprotopnet/__about__.py: -------------------------------------------------------------------------------- 1 | # Provide version-number etc. 2 | # This file is automatically edited by git! 3 | # This file must not have any side effects or do anything but define meta variables! 4 | from ._version import get_versions 5 | 6 | __version__ = get_versions()['version'] 7 | __copyright__ = '2023, Fraunhofer IEE' 8 | __title__ = 'AudioProtoPNet' 9 | __description__ = '' # TODO: insert description 10 | __author__ = 'DeepBirdDetect' 11 | __authors__ = [] # TODO: insert authors 12 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/bird_default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: default.yaml 11 | - spectrogram_augmentations: default.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | -------------------------------------------------------------------------------- /configs/main_benchmarks.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - _self_ 4 | - datamodule: HSN 5 | - module: multilabel 6 | - callbacks: default 7 | - paths: default 8 | - trainer: single_gpu 9 | - logger: wandb 10 | - hydra: default 11 | - extras: default 12 | - experiment: null 13 | - hparams_search: null 14 | - debug: null 15 | 16 | task_name: "train" 17 | ckpt_path: null 18 | seed: 42 19 | 20 | train: True 21 | test: True 22 | save_state_dict: True 23 | start_time: ${now:%Y-%m-%d_%H%M%S} 24 | dump_metrics: True -------------------------------------------------------------------------------- /configs/datamodule_push/transforms/bird_default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: none.yaml 11 | - spectrogram_augmentations: none.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | - nocall_sampler: null 15 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/bird_default_annotation.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: none.yaml 11 | - spectrogram_augmentations: none.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | - nocall_sampler: null 15 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/inference_default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: none.yaml 11 | - spectrogram_augmentations: none.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | - nocall_sampler: default.yaml 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /configs/callbacks/model_checkpoint.yaml: -------------------------------------------------------------------------------- 1 | model_checkpoint: 2 | _target_: lightning.pytorch.callbacks.ModelCheckpoint 3 | dirpath: ${paths.output_dir}/callback_checkpoints 4 | filename: ${module.network.model_name}_${datamodule.dataset.dataset_name}_{epoch:02d} 5 | monitor: "val/AsymmetricLossMultiLabel" 6 | verbose: False 7 | save_last: True #file: last.ckpt 8 | save_top_k: 1 9 | mode: "min" 10 | auto_insert_metric_name: False 11 | save_weights_only: False 12 | every_n_train_steps: null 13 | train_time_interval: null 14 | every_n_epochs: null 15 | save_on_train_epoch_end: null -------------------------------------------------------------------------------- /configs/datamodule/transforms/bird_default_multiclass.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: default_multiclass.yaml 11 | - spectrogram_augmentations: default.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | - nocall_sampler: null 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /configs/datamodule/transforms/bird_default_multilabel.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.components.transforms.BirdSetTransformsWrapper 2 | sampling_rate: ${module.network.sampling_rate} 3 | model_type: ${module.network.model_type} 4 | task: ${datamodule.dataset.task} 5 | max_length: 5 6 | 7 | defaults: 8 | - _self_ 9 | - preprocessing: default.yaml 10 | - waveform_augmentations: default_multilabel.yaml 11 | - spectrogram_augmentations: default.yaml 12 | - decoding: bird_event_decoder.yaml 13 | - feature_extractor: default_aug.yaml 14 | - nocall_sampler: default.yaml 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /configs/datamodule_push/esc50.yaml: -------------------------------------------------------------------------------- 1 | #ESC50 2 | _target_: birdset.datamodule.esc50_datamodule.ESC50DataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: esc_default.yaml 7 | - loaders: default.yaml 8 | - mapper: null 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: esc50 13 | hf_path: ashraq/esc50 14 | hf_name: default 15 | seed: ${seed} 16 | n_classes: 50 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: False 23 | class_weights_sampler: null -------------------------------------------------------------------------------- /configs/datamodule/esc50.yaml: -------------------------------------------------------------------------------- 1 | #ESC50 2 | _target_: audioprotopnet.preprocess.ESC50DataModule #birdset.datamodule.esc50_datamodule.ESC50DataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: esc_default.yaml 7 | - loaders: default.yaml 8 | - mapper: null 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: esc50 13 | hf_path: ashraq/esc50 14 | hf_name: default 15 | seed: ${seed} 16 | n_classes: 50 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: False 23 | class_weights_sampler: null -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | opencv-python-headless 2 | cuda-python 3 | datasets==2.16.1 4 | hydra-core==1.3.2 5 | #librosa==0.10.0 6 | lightning==2.1.3 7 | matplotlib==3.7.2 8 | numpy==1.24.4 9 | omegaconf==2.3.0 10 | Pillow==10.0.0 11 | pytest==7.4.0 12 | scikit-image==0.21.0 13 | scipy==1.11.1 14 | torch~=2.2.0 15 | torchmetrics~=1.3.1 16 | torchvision~=0.17.0 17 | torchaudio~=2.2.0 18 | torch-audiomentations==0.11.0 19 | 20 | rich~=13.7.0 21 | transformers~=4.38.0 22 | wandb~=0.16.0 23 | librosa~=0.10.1 24 | audiomentations~=0.32.0 25 | soundfile~=0.12.1 26 | pandas~=2.2.0 27 | tqdm~=4.66.2 28 | setuptools~=69.1.0 29 | torchlibrosa~=0.1.0 30 | safetensors~=0.4.2 -------------------------------------------------------------------------------- /configs/experiment/HSN/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["HSN", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "HSN_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/NBP/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["NBP", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "NBP_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/NES/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["NES", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "NES_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/PER/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["PER", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "PER_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/POW/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["POW", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "POW_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/SNE/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["SNE", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "SNE_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/SSW/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["SSW", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "SSW_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/experiment/UHH/perch/inference/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: perch_inference.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["UHH", "perch", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "UHH_perch_inference" 21 | mode: online -------------------------------------------------------------------------------- /configs/datamodule/NBP.yaml: -------------------------------------------------------------------------------- 1 | #HSN nips4bplus 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NBP 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NBP 15 | seed: ${seed} 16 | n_classes: 51 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/PER.yaml: -------------------------------------------------------------------------------- 1 | #PER amazon basin 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: PER 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: PER 15 | seed: ${seed} 16 | n_classes: 132 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/POW.yaml: -------------------------------------------------------------------------------- 1 | #POW powdermill nature 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: POW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: POW 15 | seed: ${seed} 16 | n_classes: 48 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/SNE.yaml: -------------------------------------------------------------------------------- 1 | #SNE sierras nevada 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SNE 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SNE 15 | seed: ${seed} 16 | n_classes: 56 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/SSW.yaml: -------------------------------------------------------------------------------- 1 | #SSW sapsucker woods 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SSW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SSW 15 | seed: ${seed} 16 | n_classes: 81 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/UHH.yaml: -------------------------------------------------------------------------------- 1 | #UHH hawaiian islands 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: UHH 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: UHH 15 | seed: ${seed} 16 | n_classes: 27 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/NBP.yaml: -------------------------------------------------------------------------------- 1 | #HSN nips4bplus 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NBP 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NBP 15 | seed: ${seed} 16 | n_classes: 51 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/paths/default.yaml: -------------------------------------------------------------------------------- 1 | root_dir: ${oc.env:PROJECT_ROOT} 2 | work_dir: ${hydra:runtime.cwd} 3 | 4 | # dynamic output directory 5 | # store ckpts etc. 6 | output_dir: ${hydra:runtime.output_dir} 7 | prototype_files_dir: null # Only required for local analysis 8 | local_analysis_dir: null # Only required for local analysis 9 | 10 | # data directory 11 | dataset_path: ${paths.root_dir}/data_birdset/${datamodule.dataset.dataset_name} 12 | model_path: ${paths.root_dir}/data_birdset/models/ 13 | background_path: ${paths.root_dir}/data_birdset/background_noise/dcase18_unpacked_wav 14 | 15 | # logging directory, has to be static to work properly 16 | log_dir: ${paths.root_dir}/logs/ 17 | 18 | -------------------------------------------------------------------------------- /configs/datamodule/NES.yaml: -------------------------------------------------------------------------------- 1 | #NES colombia costa rica 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NES 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NES 15 | seed: ${seed} 16 | n_classes: 89 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/PER.yaml: -------------------------------------------------------------------------------- 1 | #PER amazon basin 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: PER 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: PER 15 | seed: ${seed} 16 | n_classes: 132 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/SNE.yaml: -------------------------------------------------------------------------------- 1 | #SNE sierras nevada 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SNE 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SNE 15 | seed: ${seed} 16 | n_classes: 56 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/SSW.yaml: -------------------------------------------------------------------------------- 1 | #SSW sapsucker woods 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SSW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SSW 15 | seed: ${seed} 16 | n_classes: 81 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/UHH.yaml: -------------------------------------------------------------------------------- 1 | #UHH hawaiian islands 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: UHH 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: UHH 15 | seed: ${seed} 16 | n_classes: 27 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule/loaders/default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.LoadersConfig 2 | train: 3 | _target_: birdset.datamodule.LoaderConfig 4 | batch_size: 64 5 | shuffle: True 6 | num_workers: 32 7 | drop_last: False 8 | persistent_workers: True 9 | pin_memory: True 10 | 11 | valid: 12 | _target_: birdset.datamodule.LoaderConfig 13 | batch_size: 64 14 | shuffle: False 15 | num_workers: 32 16 | drop_last: False 17 | persistent_workers: True 18 | pin_memory: False 19 | 20 | test: 21 | _target_: birdset.datamodule.LoaderConfig 22 | batch_size: 64 23 | shuffle: False 24 | num_workers: 32 25 | drop_last: False 26 | persistent_workers: False 27 | pin_memory: False -------------------------------------------------------------------------------- /configs/datamodule_push/NES.yaml: -------------------------------------------------------------------------------- 1 | #NES colombia costa rica 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NES 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NES 15 | seed: ${seed} 16 | n_classes: 89 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/datamodule_push/POW.yaml: -------------------------------------------------------------------------------- 1 | #POW powdermill nature 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: POW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: POW 15 | seed: ${seed} 16 | n_classes: 48 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 -------------------------------------------------------------------------------- /configs/module/network/perch_inference.yaml: -------------------------------------------------------------------------------- 1 | model: 2 | _target_: birdset.modules.models.perch.PerchModel 3 | num_classes: ${datamodule.dataset.n_classes} 4 | tfhub_version: 4 5 | train_classifier: False 6 | restrict_logits: True 7 | label_path: ${paths.root_dir}/resources/perch/label_updated.csv 8 | task: ${module.task} 9 | pretrain_info: 10 | hf_path: ${datamodule.dataset.hf_path} 11 | hf_name: ${datamodule.dataset.hf_name} 12 | hf_pretrain_name: null 13 | valid_test_only: False 14 | 15 | model_name: perch 16 | model_type: waveform 17 | torch_compile: False 18 | sampling_rate: 32_000 19 | normalize_spectrogram: False 20 | normalize_waveform: "instance_peak_normalization" -------------------------------------------------------------------------------- /configs/datamodule/inference/NBP_inf.yaml: -------------------------------------------------------------------------------- 1 | #HSN nips4bplus 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NBP 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NBP 15 | seed: ${seed} 16 | n_classes: 51 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule/inference/PER_inf.yaml: -------------------------------------------------------------------------------- 1 | #PER amazon basin 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: PER 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: PER 15 | seed: ${seed} 16 | n_classes: 132 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule/inference/SNE_inf.yaml: -------------------------------------------------------------------------------- 1 | #SNE sierras nevada 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SNE 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SNE 15 | seed: ${seed} 16 | n_classes: 56 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule_push/loaders/default.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.datamodule.LoadersConfig 2 | train: 3 | _target_: birdset.datamodule.LoaderConfig 4 | batch_size: 128 5 | shuffle: True 6 | num_workers: 32 7 | drop_last: False 8 | persistent_workers: True 9 | pin_memory: True 10 | 11 | valid: 12 | _target_: birdset.datamodule.LoaderConfig 13 | batch_size: 128 14 | shuffle: False 15 | num_workers: 32 16 | drop_last: False 17 | persistent_workers: True 18 | pin_memory: False 19 | 20 | test: 21 | _target_: birdset.datamodule.LoaderConfig 22 | batch_size: 128 23 | shuffle: False 24 | num_workers: 32 25 | drop_last: False 26 | persistent_workers: False 27 | pin_memory: False -------------------------------------------------------------------------------- /configs/datamodule/inference/NES_inf.yaml: -------------------------------------------------------------------------------- 1 | #NES colombia costa rica 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: NES 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: NES 15 | seed: ${seed} 16 | n_classes: 89 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule/inference/POW_inf.yaml: -------------------------------------------------------------------------------- 1 | #POW powdermill nature 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: POW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: POW 15 | seed: ${seed} 16 | n_classes: 48 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule/inference/SSW_inf.yaml: -------------------------------------------------------------------------------- 1 | #SSW sapsucker woods 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: SSW 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: SSW 15 | seed: ${seed} 16 | n_classes: 81 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /configs/datamodule/inference/UHH_inf.yaml: -------------------------------------------------------------------------------- 1 | #UHH hawaiian islands 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: UHH 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: UHH 15 | seed: ${seed} 16 | n_classes: 27 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = python -msphinx 7 | SPHINXPROJ = AudioProtoPNet 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /configs/datamodule/XCL.yaml: -------------------------------------------------------------------------------- 1 | #xcm 2 | _target_: birdset.datamodule.pretrain_datamodule.PretrainDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: XCL 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: XCL 15 | seed: ${seed} 16 | n_classes: 9736 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | direct_fingerprint: null 27 | 28 | -------------------------------------------------------------------------------- /configs/datamodule/HSN.yaml: -------------------------------------------------------------------------------- 1 | #HSN high_sierras 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: HSN 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: HSN 15 | seed: ${seed} 16 | n_classes: 21 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /configs/datamodule_push/XCL.yaml: -------------------------------------------------------------------------------- 1 | #xcm 2 | _target_: birdset.datamodule.pretrain_datamodule.PretrainDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: XCL 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: XCL 15 | seed: ${seed} 16 | n_classes: 9736 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | direct_fingerprint: null 27 | 28 | -------------------------------------------------------------------------------- /configs/datamodule_push/HSN.yaml: -------------------------------------------------------------------------------- 1 | #HSN high_sierras 2 | _target_: birdset.datamodule.birdset_datamodule.BirdSetDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: HSN 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: HSN 15 | seed: ${seed} 16 | n_classes: 21 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /configs/datamodule/inference/HSN_inf.yaml: -------------------------------------------------------------------------------- 1 | #HSN high_sierras 2 | _target_: birdset.datamodule.inference_datamodule.InferenceDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: HSN 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: HSN 15 | seed: ${seed} 16 | n_classes: 21 17 | n_workers: 1 18 | val_split: 0.2 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 3 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /configs/datamodule/XCM.yaml: -------------------------------------------------------------------------------- 1 | #xcm 2 | _target_: birdset.datamodule.pretrain_datamodule.PretrainDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: XCM 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: XCM 15 | seed: ${seed} 16 | n_classes: 411 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | direct_fingerprint: null 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /configs/datamodule_push/XCM.yaml: -------------------------------------------------------------------------------- 1 | #xcm 2 | _target_: birdset.datamodule.pretrain_datamodule.PretrainDataModule 3 | 4 | defaults: 5 | - _self_ 6 | - transforms: bird_default.yaml 7 | - loaders: default.yaml 8 | - mapper: xc_bambird_mapper.yaml 9 | 10 | dataset: 11 | data_dir: ${paths.dataset_path} 12 | dataset_name: XCM 13 | hf_path: DBD-research-group/BirdSet 14 | hf_name: XCM 15 | seed: ${seed} 16 | n_classes: 411 17 | n_workers: 1 18 | val_split: null 19 | task: ${module.task} 20 | subset: null 21 | sampling_rate: ${module.network.sampling_rate} 22 | class_weights_loss: null 23 | class_weights_sampler: null 24 | classlimit: 500 25 | eventlimit: 1 26 | direct_fingerprint: null 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /configs/module/network/convnext.yaml: -------------------------------------------------------------------------------- 1 | model: 2 | _target_: audioprotopnet.modules.baselines.convnext.ConvNextClassifier 3 | num_classes: ${datamodule.dataset.n_classes} 4 | num_channels: 1 5 | backbone_mode: False 6 | checkpoint: facebook/convnext-base-224-22k 7 | local_checkpoint: null 8 | cache_dir: ${paths.dataset_path}/models/ 9 | pretrain_info: 10 | hf_path: ${datamodule.dataset.hf_path} 11 | hf_name: ${datamodule.dataset.hf_name} 12 | hf_pretrain_name: null 13 | valid_test_only: False 14 | 15 | model_name: convnext 16 | model_type: vision 17 | torch_compile: True 18 | sampling_rate: 32_000 19 | normalize_waveform: null 20 | normalize_spectrogram: True 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /configs/module/multilabel.yaml: -------------------------------------------------------------------------------- 1 | _target_: birdset.modules.multilabel_module.MultilabelModule 2 | 3 | defaults: 4 | - _self_ 5 | - network: convnext.yaml 6 | 7 | task: multilabel 8 | class_weights_loss: ${datamodule.dataset.class_weights_loss} 9 | prediction_table: False 10 | num_gpus: ${trainer.devices} 11 | 12 | optimizer: 13 | _target_: torch.optim.AdamW 14 | _partial_: true 15 | lr: 5e-4 16 | weight_decay: 1e-4 17 | 18 | metrics: 19 | _target_: birdset.modules.base_module.MetricsConfig 20 | num_labels: ${datamodule.dataset.n_classes} 21 | 22 | loss: 23 | _target_: audioprotopnet.modules.losses.asymmetric_loss.AsymmetricLossMultiLabel 24 | 25 | output_activation: 26 | _target_: "torch.sigmoid" 27 | _partial_: true 28 | 29 | logging_params: 30 | _target_: birdset.modules.base_module.LoggingParamsConfig 31 | on_step: False 32 | on_epoch: True 33 | sync_dist: False 34 | prog_bar: True -------------------------------------------------------------------------------- /scripts/make_doc.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | :: Create the Sphinx documentation 4 | 5 | :: remember CWD 6 | pushd %~dp0 7 | 8 | :: use the value of the command line variable if available 9 | if "%SPHINXBUILD%" == "" ( 10 | set SPHINXBUILD=python -msphinx 11 | ) 12 | set SOURCEDIR=..\docs 13 | set BUILDDIR=..\docs\_build 14 | set SPHINXPROJ=AudioProtoPNet 15 | 16 | :: builder argument is required 17 | if "%1" == "" goto help 18 | 19 | %SPHINXBUILD% >NUL 2>NUL 20 | if errorlevel 9009 ( 21 | echo. 22 | echo.The Sphinx python module was not found. Make sure you have Sphinx installed! 23 | echo. 24 | echo.You probably only need to install it via 25 | echo. pip install sphinx 26 | echo.or set your path correctly. 27 | exit /b 1 28 | ) 29 | 30 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 31 | goto end 32 | 33 | :help 34 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 35 | 36 | :end 37 | :: return to previous CWD 38 | popd 39 | -------------------------------------------------------------------------------- /configs/main_audioprotopnet.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - _self_ 4 | - datamodule: XCL 5 | - datamodule_push: XCL 6 | - module: audioprotopnet_multilabel 7 | - callbacks: default 8 | - paths: default 9 | - trainer: single_gpu 10 | - logger: wandb 11 | - hydra: default 12 | - extras: default 13 | - experiment: null 14 | - hparams_search: null 15 | - debug: null 16 | 17 | task_name: "train" 18 | start_phase: null 19 | ckpt_path: null 20 | seed: 42 21 | 22 | train: True 23 | test: True 24 | save_state_dict: True 25 | start_time: ${now:%Y-%m-%d_%H%M%S} 26 | dump_metrics: True 27 | 28 | save_prototype_waveform_files: False 29 | save_prototype_spectrogram_files: False 30 | 31 | local_analysis: 32 | dataset_type: "test" 33 | max_samples: 100 34 | number_most_activated_prototypes: 20 35 | number_top_classes: 10 36 | classification_threshold: 0.5 37 | 38 | global_analysis: 39 | dataset_type: "train" 40 | top_k: 10 41 | class_specific: True 42 | 43 | -------------------------------------------------------------------------------- /scripts/convnext/XCL/training/convnext_XCL_training_seed42.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=convnext_XCL_seed42 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/convnext_XCL_seed42_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=150:00:00 9 | #SBATCH --nodelist=node0.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: convnext_XCL_seed42 at $(date)" 33 | srun --exclusive python train_benchmarks.py experiment="XCL/convnext/training/convnext" seed=42 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment convnext_XCL_seed42 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | echo "All experiments completed successfully at $(date)" 40 | -------------------------------------------------------------------------------- /scripts/convnext/XCL/training/convnext_XCL_training_seed43.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=convnext_XCL_seed43 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/convnext_XCL_seed43_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=150:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: convnext_XCL_seed43 at $(date)" 33 | srun --exclusive python train_benchmarks.py experiment="XCL/convnext/training/convnext" seed=43 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment convnext_XCL_seed43 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | echo "All experiments completed successfully at $(date)" 40 | -------------------------------------------------------------------------------- /scripts/convnext/XCL/training/convnext_XCL_training_seed44.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=convnext_XCL_seed44 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/convnext_XCL_seed44_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=150:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: convnext_XCL_seed44 at $(date)" 33 | srun --exclusive python train_benchmarks.py experiment="XCL/convnext/training/convnext" seed=44 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment convnext_XCL_seed44 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | echo "All experiments completed successfully at $(date)" 40 | -------------------------------------------------------------------------------- /scripts/convnext/XCL/training/convnext_XCL_training_seed45.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=convnext_XCL_seed45 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/convnext_XCL_seed45_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=150:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: convnext_XCL_seed45 at $(date)" 33 | srun --exclusive python train_benchmarks.py experiment="XCL/convnext/training/convnext" seed=45 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment convnext_XCL_seed45 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | echo "All experiments completed successfully at $(date)" 40 | -------------------------------------------------------------------------------- /scripts/convnext/XCL/training/convnext_XCL_training_seed47.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=convnext_XCL_seed47 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/convnext_XCL_seed47_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=150:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: convnext_XCL_seed47 at $(date)" 33 | srun --exclusive python train_benchmarks.py experiment="XCL/convnext/training/convnext" seed=47 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment convnext_XCL_seed47 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | echo "All experiments completed successfully at $(date)" 40 | -------------------------------------------------------------------------------- /configs/experiment/HSN/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["HSN", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "HSN_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NBP/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["NBP", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "NBP_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NES/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["NES", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "NES_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/PER/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["PER", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "PER_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/POW/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["POW", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "POW_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SNE/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["SNE", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "SNE_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SSW/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["SSW", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "SSW_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/UHH/convnext/inference/convnext_inference_XCL_pretrained.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["UHH", "convnext", "inference", "multilabel"] 13 | seed: 42 14 | train: False 15 | test: True 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "UHH_convnext_XCL_pretrained_inference" 21 | mode: online 22 | 23 | module: 24 | network: 25 | model: 26 | pretrain_info: 27 | hf_path: ${datamodule.dataset.hf_path} 28 | hf_name: ${datamodule.dataset.hf_name} 29 | hf_pretrain_name: XCL 30 | valid_test_only: False 31 | 32 | datamodule: 33 | transforms: 34 | preprocessing: 35 | mean: -13.369 # Mean of XCL 36 | std: 13.162 # Standard deviation of XCL 37 | 38 | paths: 39 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 40 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 41 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /scripts/make_apidoc.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | :: Create the Sphinx documentation as HTML and show in web browser 3 | 4 | :: remember CWD 5 | pushd %~dp0 6 | 7 | :: use the value of the command line variable if available 8 | if "%SPHINXBUILD%" == "" ( 9 | set SPHINXBUILD=python -m sphinx 10 | ) 11 | :: always use the same apidoc-call (see `python -m sphinx.apidoc --help` for supported arguments) 12 | set SPHINX_APIDOC=python -m sphinx.apidoc --separate --module-first --force 13 | 14 | :: optionally use a different builder than HTML if provided 15 | if "%1" == "" ( 16 | set BUILDER=html 17 | ) else ( 18 | set BUILDER="%1" 19 | ) 20 | 21 | set MODULEPATH=..\audioprotopnet 22 | set SOURCEDIR=..\docs 23 | set BUILDDIR=..\docs\_build 24 | set SPHINXPROJ=AudioProtoPNet 25 | 26 | %SPHINXBUILD% >NUL 2>NUL 27 | if errorlevel 9009 ( 28 | echo. 29 | echo.The Sphinx python module was not found. Make sure you have Sphinx installed! 30 | echo. 31 | echo.You probably only need to install it via 32 | echo. pip install sphinx 33 | echo.or set your path correctly. 34 | exit /b 1 35 | ) 36 | 37 | :: build the rst-files 38 | %SPHINX_APIDOC% -o %SOURCEDIR% %MODULEPATH% 39 | 40 | :: build the html-files 41 | %SPHINXBUILD% -M %BUILDER% %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 42 | 43 | :: show the html-files in default browser 44 | explorer.exe %BUILDDIR%\html\index.html 45 | 46 | :: return to previous CWD 47 | popd 48 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/datasets/mapping.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, List 2 | 3 | 4 | def get_label_to_category_mapping_from_hf_dataset( 5 | dataset: List[Dict[str, str]] 6 | ) -> Dict[int, str]: 7 | """ 8 | Get the mapping between labels in integer format and corresponding labels in string format. 9 | 10 | This function takes a Hugging Face dataset as input, where each sample is a dictionary containing 'target' 11 | (integer label) and 'category' (string category label). It extracts unique integer 12 | labels and their corresponding string category labels from the dataset and returns 13 | them as a dictionary. 14 | 15 | Args: 16 | dataset (List[Dict[str, str]]): The Hugging Face dataset containing samples with 'target' and 'category'. 17 | 18 | Returns: 19 | Dict[int, str]: A dictionary mapping integer labels to their corresponding string 20 | category labels. 21 | """ 22 | label_to_category_mapping = {} 23 | 24 | # Iterate through each sample in the dataset 25 | for sample in dataset: 26 | # Convert the label to an integer 27 | label = int(sample["target"]) 28 | category = sample["category"] 29 | 30 | # Check if the label is unique, and add it to the mapping 31 | if label not in label_to_category_mapping: 32 | label_to_category_mapping[label] = category 33 | 34 | return label_to_category_mapping 35 | -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NBP/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /datamodule_push: NBP.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NBP", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NBP_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NBP/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /datamodule_push: NBP.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NBP", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NBP_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NES/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /datamodule_push: NES.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NES", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NES_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NES/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /datamodule_push: NES.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NES", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NES_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/PER/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /datamodule_push: PER.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["PER", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "PER_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/PER/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /datamodule_push: PER.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["PER", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "PER_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/POW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /datamodule_push: POW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["POW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "POW_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/POW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /datamodule_push: POW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["POW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "POW_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/UHH/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /datamodule_push: UHH.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["UHH", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "UHH_audioprotopnet_convnext_XCL_pretrained_inference_1_prototype" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 9736 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/UHH/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /datamodule_push: UHH.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["UHH", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "UHH_audioprotopnet_convnext_XCL_pretrained_inference_5_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 48680 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: HSN.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NBP/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /datamodule_push: NBP.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NBP", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NBP_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NBP/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NBP.yaml 4 | - override /datamodule_push: NBP.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NBP", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NBP_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NES/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /datamodule_push: NES.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NES", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NES_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/NES/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: NES.yaml 4 | - override /datamodule_push: NES.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["NES", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "NES_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/PER/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /datamodule_push: PER.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["PER", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "PER_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/PER/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: PER.yaml 4 | - override /datamodule_push: PER.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["PER", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "PER_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/POW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /datamodule_push: POW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["POW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "POW_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/POW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: POW.yaml 4 | - override /datamodule_push: POW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["POW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "POW_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/UHH/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /datamodule_push: UHH.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["UHH", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "UHH_audioprotopnet_convnext_XCL_pretrained_inference_10_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 97360 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/UHH/audioprotopnet/inference/audioprotopnet_convnext_inference_XCL_pretrained_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: UHH.yaml 4 | - override /datamodule_push: UHH.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["UHH", "audioprotopnet", "convnext", "inference", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | logger: 19 | wandb: 20 | tags: ${tags} 21 | group: "UHH_audioprotopnet_convnext_XCL_pretrained_inference_20_prototypes" 22 | mode: online 23 | 24 | module: 25 | num_prototypes: 194720 26 | network: 27 | model: 28 | pretrain_info: 29 | hf_path: ${datamodule.dataset.hf_path} 30 | hf_name: ${datamodule.dataset.hf_name} 31 | hf_pretrain_name: XCL 32 | valid_test_only: False 33 | 34 | datamodule: 35 | transforms: 36 | preprocessing: 37 | mean: -13.369 # Mean of XCL 38 | std: 13.162 # Standard deviation of XCL 39 | 40 | paths: 41 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 42 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 43 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2024, DBD-research-group 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /configs/module/network/ppnet_convnext.yaml: -------------------------------------------------------------------------------- 1 | model: 2 | _target_: audioprotopnet.modules.ppnet.ppnet.PPNet 3 | backbone_model: 4 | _target_: audioprotopnet.modules.baselines.convnext.ConvNextClassifier 5 | num_classes: ${datamodule.dataset.n_classes} 6 | num_channels: 1 7 | embedding_size: ${module.network.model.prototype_shape.channels} 8 | backbone_mode: True 9 | checkpoint: facebook/convnext-base-224-22k 10 | local_checkpoint: null 11 | cache_dir: ${paths.dataset_path}/models/ 12 | pretrain_info: 13 | hf_path: ${datamodule.dataset.hf_path} 14 | hf_name: ${datamodule.dataset.hf_name} 15 | hf_pretrain_name: null 16 | valid_test_only: False 17 | prototype_shape: 18 | num_prototypes: ${module.num_prototypes} 19 | channels: 1024 20 | height: 1 21 | width: 1 22 | num_classes: ${datamodule.dataset.n_classes} 23 | topk_k: 1 24 | margin: null #0.1 25 | init_weights: null 26 | add_on_layers_type: "upsample" 27 | incorrect_class_connection: null #-0.5 28 | correct_class_connection: 1. 29 | bias_last_layer: -2. 30 | non_negative_last_layer: True 31 | embedded_spectrogram_height: null #16 # Set to null if frequency weights are not to be used and learned during training. 32 | pretrain_info: 33 | hf_path: ${datamodule.dataset.hf_path} 34 | hf_name: ${datamodule.dataset.hf_name} 35 | hf_pretrain_name: null 36 | valid_test_only: False 37 | 38 | model_name: ppnet_convnext 39 | model_type: vision 40 | torch_compile: True 41 | sampling_rate: 32_000 42 | normalize_waveform: null 43 | normalize_spectrogram: True 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/datasets/esc50_dataset.py: -------------------------------------------------------------------------------- 1 | from datasets import Audio 2 | 3 | from birdset.datamodule.components.transforms import BirdSetTransformsWrapper 4 | from birdset.datamodule.base_datamodule import ( 5 | BaseDataModuleHF, 6 | DatasetConfig, 7 | LoadersConfig, 8 | ) 9 | 10 | from audioprotopnet.helpers import get_label_to_category_mapping_from_hf_dataset 11 | 12 | 13 | class ESC50DataModule(BaseDataModuleHF): 14 | def __init__( 15 | self, 16 | dataset: DatasetConfig = DatasetConfig(), 17 | loaders: LoadersConfig = LoadersConfig(), 18 | transforms: BirdSetTransformsWrapper = BirdSetTransformsWrapper(), 19 | mapper: None = None, 20 | ): 21 | super().__init__( 22 | dataset=dataset, loaders=loaders, transforms=transforms, mapper=mapper 23 | ) 24 | 25 | self.label_to_category_mapping = None 26 | 27 | def _preprocess_data(self, dataset): 28 | dataset = dataset.cast_column( 29 | column="audio", 30 | feature=Audio( 31 | sampling_rate=self.dataset_config.sampling_rate, 32 | mono=True, 33 | decode=True, 34 | ), 35 | ) 36 | 37 | self.label_to_category_mapping = get_label_to_category_mapping_from_hf_dataset( 38 | dataset=dataset["train"] 39 | ) 40 | 41 | if self.event_mapper is not None: 42 | dataset = dataset["train"].map( 43 | self.event_mapper, 44 | batched=True, 45 | batch_size=300, 46 | load_from_cache_file=True, 47 | num_proc=self.dataset_config.n_workers, 48 | ) 49 | dataset = dataset.rename_column("target", "labels") 50 | dataset = dataset.select_columns(["audio", "labels"]) 51 | return dataset 52 | -------------------------------------------------------------------------------- /configs/experiment/XCL/convnext/training/convnext.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /module: multilabel.yaml 5 | - override /module/network: convnext.yaml 6 | - override /callbacks: default.yaml 7 | - override /trainer: single_gpu.yaml 8 | - override /datamodule/transforms: bird_default_multilabel.yaml 9 | - override /paths: default.yaml 10 | - override /hydra: default.yaml 11 | 12 | tags: ["XCL", "convnext", "multilabel", "pretraining"] 13 | seed: 42 14 | train: True 15 | test: False 16 | 17 | logger: 18 | wandb: 19 | tags: ${tags} 20 | group: "pretrain_convnext_XCL" 21 | mode: online 22 | 23 | trainer: 24 | min_epochs: 1 25 | max_epochs: 10 26 | 27 | module: 28 | network: 29 | model: 30 | pretrain_info: 31 | hf_path: ${datamodule.dataset.hf_path} 32 | hf_name: ${datamodule.dataset.hf_name} 33 | hf_pretrain_name: XCL 34 | valid_test_only: True 35 | 36 | datamodule: 37 | dataset: 38 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 39 | transforms: 40 | preprocessing: 41 | mean: -13.369 # Mean of XCL 42 | std: 13.162 # Standard deviation of XCL 43 | # loaders: 44 | # train: 45 | # batch_size: 64 46 | # num_workers: 16 47 | # pin_memory: False 48 | # persistent_workers: False 49 | # valid: 50 | # batch_size: 64 51 | # num_workers: 16 52 | # pin_memory: False 53 | # persistent_workers: False 54 | # test: 55 | # batch_size: 64 56 | # num_workers: 16 57 | # pin_memory: False 58 | # persistent_workers: False 59 | 60 | paths: 61 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 62 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 63 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /hf_repo/configuration_protonet.py: -------------------------------------------------------------------------------- 1 | from transformers import PretrainedConfig 2 | 3 | 4 | class AudioProtoNetConfig(PretrainedConfig): 5 | _auto_class = "AutoConfig" 6 | model_type = "AudioProtoNet" 7 | 8 | def __init__( 9 | self, 10 | prototypes_per_class: int = 1, 11 | channels: int = 1024, 12 | height: int = 1, 13 | width: int = 1, 14 | num_classes: int = 9736, 15 | topk_k: int = 1, 16 | margin: float = None, 17 | add_on_layers_type: str = "upsample", 18 | incorrect_class_connection: float = None, 19 | correct_class_connection: float = 1.0, 20 | bias_last_layer: float = -2.0, 21 | non_negative_last_layer: bool = True, 22 | embedded_spectrogram_height: int = None, 23 | **kwargs, 24 | ): 25 | super().__init__(**kwargs) 26 | self.prototypes_per_class = prototypes_per_class 27 | #self.num_prototypes_after_pruning = None weg 28 | self.channels = channels 29 | self.height = height 30 | self.width = width 31 | self.num_classes = num_classes 32 | self.topk_k = topk_k 33 | self.margin = margin 34 | # self.relu_on_cos = True 35 | self.add_on_layers_type = add_on_layers_type 36 | self.incorrect_class_connection = incorrect_class_connection 37 | self.correct_class_connection = correct_class_connection 38 | #self.input_vector_length = 64 39 | # self.n_eps_channels = 2 40 | # self.epsilon_val = 1e-4 41 | self.bias_last_layer = bias_last_layer 42 | self.non_negative_last_layer = non_negative_last_layer 43 | self.embedded_spectrogram_height = embedded_spectrogram_height 44 | 45 | if self.bias_last_layer: 46 | self.use_bias_last_layer = True 47 | else: 48 | self.use_bias_last_layer = False 49 | 50 | self.prototype_class_identity = None -------------------------------------------------------------------------------- /hf_repo/upload.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "metadata": {}, 5 | "cell_type": "code", 6 | "outputs": [], 7 | "execution_count": null, 8 | "source": [ 9 | "from huggingface_hub import HfApi, create_repo, upload_folder, notebook_login\n", 10 | "import os" 11 | ], 12 | "id": "3371703869d0ca0c" 13 | }, 14 | { 15 | "metadata": {}, 16 | "cell_type": "code", 17 | "outputs": [], 18 | "execution_count": null, 19 | "source": [ 20 | "repo_id = \"DBD-research-group/AudioProtoPNet-20-BirdSet-XCL\"\n", 21 | "local_dir = \"hf_models/upload_20\"\n", 22 | "assert os.path.exists(local_dir), f\"{local_dir} does not exist\"" 23 | ], 24 | "id": "4377a4ec627f0621" 25 | }, 26 | { 27 | "metadata": {}, 28 | "cell_type": "code", 29 | "outputs": [], 30 | "execution_count": null, 31 | "source": "hf_api = HfApi()", 32 | "id": "975f25bf9917dc8a" 33 | }, 34 | { 35 | "metadata": {}, 36 | "cell_type": "code", 37 | "outputs": [], 38 | "execution_count": null, 39 | "source": "create_repo(repo_id=repo_id, exist_ok=True, private=False)", 40 | "id": "a6ea50668f95af52" 41 | }, 42 | { 43 | "metadata": {}, 44 | "cell_type": "code", 45 | "outputs": [], 46 | "execution_count": null, 47 | "source": [ 48 | "upload_folder(\n", 49 | " repo_id=repo_id,\n", 50 | " folder_path=local_dir,\n", 51 | " commit_message=\"upload\"\n", 52 | " )" 53 | ], 54 | "id": "1c24ff24c3b0b20a" 55 | } 56 | ], 57 | "metadata": { 58 | "kernelspec": { 59 | "display_name": "Python 3", 60 | "language": "python", 61 | "name": "python3" 62 | }, 63 | "language_info": { 64 | "codemirror_mode": { 65 | "name": "ipython", 66 | "version": 2 67 | }, 68 | "file_extension": ".py", 69 | "mimetype": "text/x-python", 70 | "name": "python", 71 | "nbconvert_exporter": "python", 72 | "pygments_lexer": "ipython2", 73 | "version": "2.7.6" 74 | } 75 | }, 76 | "nbformat": 4, 77 | "nbformat_minor": 5 78 | } 79 | -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/local_analysis/local_analysis_audioprotopnet_convnext_XCL_pretrained_seed47.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SSW.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "local_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 19 | 20 | local_analysis: 21 | dataset_type: "test" 22 | max_samples: 100 23 | number_most_activated_prototypes: 10 24 | number_top_classes: 3 25 | classification_threshold: 0.1 26 | 27 | logger: 28 | wandb: 29 | tags: ${tags} 30 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_local_analysis" 31 | mode: online 32 | 33 | module: 34 | num_prototypes: 48680 35 | network: 36 | model: 37 | pretrain_info: 38 | hf_path: ${datamodule.dataset.hf_path} 39 | hf_name: ${datamodule.dataset.hf_name} 40 | hf_pretrain_name: XCL 41 | valid_test_only: False 42 | 43 | datamodule: 44 | transforms: 45 | preprocessing: 46 | mean: -13.369 # Mean of XCL 47 | std: 13.162 # Standard deviation of XCL 48 | 49 | paths: 50 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 51 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 52 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 53 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule.dataset.dataset_name}/prototype_files 54 | local_analysis_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/local_analysis/${datamodule.dataset.dataset_name} -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/local_analysis/local_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_test.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: SNE.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "local_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: True 17 | 18 | save_prototype_waveform_files: True 19 | save_prototype_spectrogram_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | local_analysis: 24 | dataset_type: "test" 25 | max_samples: 2000 26 | number_most_activated_prototypes: 5 27 | number_top_classes: 2 28 | classification_threshold: 0.5 29 | 30 | logger: 31 | wandb: 32 | tags: ${tags} 33 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_local_analysis" 34 | mode: online 35 | 36 | module: 37 | num_prototypes: 48680 38 | network: 39 | model: 40 | pretrain_info: 41 | hf_path: ${datamodule.dataset.hf_path} 42 | hf_name: ${datamodule.dataset.hf_name} 43 | hf_pretrain_name: XCL 44 | valid_test_only: False 45 | 46 | datamodule: 47 | transforms: 48 | preprocessing: 49 | mean: -13.369 # Mean of XCL 50 | std: 13.162 # Standard deviation of XCL 51 | 52 | paths: 53 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 54 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 55 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 56 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule.dataset.dataset_name}/prototype_files/train 57 | local_analysis_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/local_analysis/${datamodule.dataset.dataset_name} -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_HSN_test.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "test" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_test.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "test" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SSW_test.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "test" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /configs/experiment/HSN/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_HSN_train.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: HSN.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["HSN", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "train" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "HSN_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /configs/experiment/SNE/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SNE_train.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: SNE.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SNE", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "train" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "SNE_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /configs/experiment/SSW/audioprotopnet/global_analysis/global_analysis_audioprotopnet_convnext_XCL_pretrained_seed42_SSW_train.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: SSW.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["SSW", "audioprotopnet", "convnext", "global_analysis", "multilabel"] 14 | seed: 42 15 | train: False 16 | test: False 17 | 18 | save_prototype_spectrogram_files: True 19 | save_prototype_waveform_files: True 20 | 21 | ckpt_path: "/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/ppnet_convnext/2024-09-17_154309/callback_checkpoints/ppnet_convnext_warm.ckpt" 22 | 23 | global_analysis: 24 | dataset_type: "train" 25 | top_k: 5 26 | class_specific: False 27 | 28 | logger: 29 | wandb: 30 | tags: ${tags} 31 | group: "SSW_audioprotopnet_convnext_XCL_pretrained_global_analysis" 32 | mode: online 33 | 34 | module: 35 | num_prototypes: 48680 36 | network: 37 | model: 38 | pretrain_info: 39 | hf_path: ${datamodule.dataset.hf_path} 40 | hf_name: ${datamodule.dataset.hf_name} 41 | hf_pretrain_name: XCL 42 | valid_test_only: False 43 | 44 | datamodule: 45 | dataset: 46 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_32d126c327feaf29 47 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 48 | transforms: 49 | preprocessing: 50 | mean: -13.369 # Mean of XCL 51 | std: 13.162 # Standard deviation of XCL 52 | 53 | paths: 54 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 55 | #dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 56 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 57 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 58 | prototype_files_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/global_analysis/${datamodule_push.dataset.dataset_name}/prototype_files -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/conversion/spectrogram_conversion.py: -------------------------------------------------------------------------------- 1 | from typing import Optional 2 | 3 | import torch 4 | import torchaudio 5 | 6 | 7 | def convert_spectrogram_to_waveform( 8 | spectrogram: torch.Tensor, 9 | sample_rate: int, 10 | n_fft: int, 11 | hop_length: int, 12 | n_mels: Optional[int] = None, 13 | ) -> torch.Tensor: 14 | """ 15 | Convert a (mel) spectrogram back to an audio waveform. 16 | 17 | Args: 18 | spectrogram (torch.Tensor): The input spectrogram as a torch tensor. 19 | sample_rate (int): The sample rate of the audio. 20 | n_fft (int): The number of FFT points. 21 | hop_length (int): The hop length for the STFT calculation. 22 | n_mels (Optional[int]): The number of Mel filterbanks for the Mel spectrogram. Defaults to None. 23 | 24 | Returns: 25 | torch.Tensor: The audio waveform. 26 | """ 27 | device = spectrogram.device # Get the device of the input spectrogram 28 | 29 | if n_mels: 30 | # Convert the mel spectrogram to a power spectrogram using torchaudio's inverse mel spectrogram transform 31 | n_stft = n_fft // 2 + 1 32 | transform_mel_to_power = torchaudio.transforms.InverseMelScale( 33 | n_stft=n_stft, n_mels=n_mels, sample_rate=sample_rate, driver="gelsd" 34 | ).to( 35 | device 36 | ) # Move the transform to the same device as the input tensor 37 | 38 | # Convert the power spectrogram back to audio using torchaudio's Griffin-Lim transform 39 | transform_power_to_waveform = torchaudio.transforms.GriffinLim( 40 | n_fft=n_fft, hop_length=hop_length 41 | ).to( 42 | device 43 | ) # Move the transform to the same device as the input tensor 44 | 45 | # Apply transformations 46 | spectrogram = transform_mel_to_power(spectrogram) 47 | waveform = transform_power_to_waveform(spectrogram) 48 | else: 49 | # Convert the power spectrogram back to audio using torchaudio's Griffin-Lim transform 50 | transform_power_to_waveform = torchaudio.transforms.GriffinLim( 51 | n_fft=n_fft, hop_length=hop_length 52 | ).to( 53 | device 54 | ) # Move the transform to the same device as the input tensor 55 | waveform = transform_power_to_waveform(spectrogram) 56 | 57 | return waveform 58 | -------------------------------------------------------------------------------- /configs/experiment/XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: XCL.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["XCL", "audioprotopnet", "convnext", "multilabel"] 14 | seed: 42 15 | train: True 16 | test: False 17 | save_prototype_waveform_files: False 18 | save_prototype_spectrogram_files: False 19 | 20 | logger: 21 | wandb: 22 | tags: ${tags} 23 | group: "pretrain_audioprotopnet_convnext_XCL_1_prototype" 24 | mode: online 25 | 26 | module: 27 | num_prototypes: 9736 28 | network: 29 | model: 30 | backbone_model: 31 | local_checkpoint: null 32 | pretrain_info: 33 | hf_path: ${datamodule.dataset.hf_path} 34 | hf_name: ${datamodule.dataset.hf_name} 35 | hf_pretrain_name: XCL 36 | valid_test_only: True 37 | 38 | callbacks: 39 | model_checkpoint: 40 | filename: ${module.network.model_name}_${module.training_phase} 41 | 42 | datamodule: 43 | dataset: 44 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 45 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 46 | transforms: 47 | preprocessing: 48 | mean: -13.369 # Mean of XCL 49 | std: 13.162 # Standard deviation of XCL 50 | 51 | datamodule_push: 52 | dataset: 53 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 54 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 55 | 56 | paths: 57 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 58 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 59 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 60 | 61 | #paths: 62 | # dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 63 | # background_path: /mnt/nvme3/data/DBD/background_noise/dcase18_unpacked_wav 64 | # log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: XCL.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["XCL", "audioprotopnet", "convnext", "multilabel"] 14 | seed: 42 15 | train: True 16 | test: False 17 | save_prototype_waveform_files: False 18 | save_prototype_spectrogram_files: False 19 | 20 | logger: 21 | wandb: 22 | tags: ${tags} 23 | group: "pretrain_audioprotopnet_convnext_XCL_10_prototypes" 24 | mode: online 25 | 26 | module: 27 | num_prototypes: 97360 28 | network: 29 | model: 30 | backbone_model: 31 | local_checkpoint: null 32 | pretrain_info: 33 | hf_path: ${datamodule.dataset.hf_path} 34 | hf_name: ${datamodule.dataset.hf_name} 35 | hf_pretrain_name: XCL 36 | valid_test_only: True 37 | 38 | callbacks: 39 | model_checkpoint: 40 | filename: ${module.network.model_name}_${module.training_phase} 41 | 42 | datamodule: 43 | dataset: 44 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 45 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 46 | transforms: 47 | preprocessing: 48 | mean: -13.369 # Mean of XCL 49 | std: 13.162 # Standard deviation of XCL 50 | 51 | datamodule_push: 52 | dataset: 53 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 54 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 55 | 56 | paths: 57 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 58 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 59 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 60 | 61 | #paths: 62 | # dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 63 | # background_path: /mnt/nvme3/data/DBD/background_noise/dcase18_unpacked_wav 64 | # log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /configs/experiment/XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: XCL.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["XCL", "audioprotopnet", "convnext", "multilabel"] 14 | seed: 42 15 | train: True 16 | test: False 17 | save_prototype_waveform_files: False 18 | save_prototype_spectrogram_files: False 19 | 20 | logger: 21 | wandb: 22 | tags: ${tags} 23 | group: "pretrain_audioprotopnet_convnext_XCL_5_prototypes" 24 | mode: online 25 | 26 | module: 27 | num_prototypes: 48680 28 | network: 29 | model: 30 | backbone_model: 31 | local_checkpoint: null 32 | pretrain_info: 33 | hf_path: ${datamodule.dataset.hf_path} 34 | hf_name: ${datamodule.dataset.hf_name} 35 | hf_pretrain_name: XCL 36 | valid_test_only: True 37 | 38 | callbacks: 39 | model_checkpoint: 40 | filename: ${module.network.model_name}_${module.training_phase} 41 | 42 | datamodule: 43 | dataset: 44 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 45 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 46 | transforms: 47 | preprocessing: 48 | mean: -13.369 # Mean of XCL 49 | std: 13.162 # Standard deviation of XCL 50 | 51 | datamodule_push: 52 | dataset: 53 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 54 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 55 | 56 | paths: 57 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 58 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 59 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 60 | 61 | #paths: 62 | # dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 63 | # background_path: /mnt/nvme3/data/DBD/background_noise/dcase18_unpacked_wav 64 | # log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /audioprotopnet/modules/losses/asymmetric_loss.py: -------------------------------------------------------------------------------- 1 | # https://openaccess.thecvf.com/content/ICCV2021/papers/Ridnik_Asymmetric_Loss_for_Multi-Label_Classification_ICCV_2021_paper.pdf 2 | import torch 3 | from torch import nn 4 | 5 | 6 | # https://github.com/huggingface/pytorch-image-models/blob/bbe798317fb26f063c18279827c038058e376479/timm/loss/asymmetric_loss.py#L6 7 | class AsymmetricLossMultiLabel(nn.Module): 8 | def __init__( 9 | self, 10 | gamma_neg=4, 11 | gamma_pos=1, 12 | clip=0.05, 13 | eps=1e-8, 14 | disable_torch_grad_focal_loss=False, 15 | reduction="mean", 16 | ): 17 | super().__init__() 18 | 19 | self.gamma_neg = gamma_neg 20 | self.gamma_pos = gamma_pos 21 | self.clip = clip 22 | self.disable_torch_grad_focal_loss = disable_torch_grad_focal_loss 23 | self.eps = eps 24 | self.reduction = reduction 25 | 26 | def forward(self, x, y): 27 | """ " 28 | Parameters 29 | ---------- 30 | x: input logits 31 | y: targets (multi-label binarized vector) 32 | """ 33 | 34 | # Calculating Probabilities 35 | x_sigmoid = torch.sigmoid(x) 36 | xs_pos = x_sigmoid 37 | xs_neg = 1 - x_sigmoid 38 | 39 | # Asymmetric Clipping 40 | if self.clip is not None and self.clip > 0: 41 | xs_neg = (xs_neg + self.clip).clamp(max=1) 42 | 43 | # Basic CE calculation 44 | los_pos = y * torch.log(xs_pos.clamp(min=self.eps)) 45 | los_neg = (1 - y) * torch.log(xs_neg.clamp(min=self.eps)) 46 | loss = los_pos + los_neg 47 | 48 | # Asymmetric Focusing 49 | if self.gamma_neg > 0 or self.gamma_pos > 0: 50 | if self.disable_torch_grad_focal_loss: 51 | torch._C.set_grad_enabled(False) 52 | pt0 = xs_pos * y 53 | pt1 = xs_neg * (1 - y) # pt = p if t > 0 else 1-p 54 | pt = pt0 + pt1 55 | one_sided_gamma = self.gamma_pos * y + self.gamma_neg * (1 - y) 56 | one_sided_w = torch.pow(1 - pt, one_sided_gamma) 57 | if self.disable_torch_grad_focal_loss: 58 | torch._C.set_grad_enabled(True) 59 | loss *= one_sided_w 60 | 61 | if self.reduction == "mean": 62 | return -loss.mean() 63 | if self.reduction == "sum": 64 | return -loss.sum() 65 | 66 | return -loss 67 | -------------------------------------------------------------------------------- /configs/experiment/XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes.yaml: -------------------------------------------------------------------------------- 1 | # @package _global_ 2 | defaults: 3 | - override /datamodule: XCL.yaml 4 | - override /datamodule_push: XCL.yaml 5 | - override /module: audioprotopnet_multilabel.yaml 6 | - override /module/network: ppnet_convnext.yaml 7 | - override /callbacks: default.yaml 8 | - override /trainer: single_gpu.yaml 9 | - override /datamodule/transforms: bird_default_multilabel.yaml 10 | - override /paths: default.yaml 11 | - override /hydra: default.yaml 12 | 13 | tags: ["XCL", "audioprotopnet", "convnext", "multilabel"] 14 | seed: 42 15 | train: True 16 | test: False 17 | save_prototype_waveform_files: False 18 | save_prototype_spectrogram_files: False 19 | 20 | logger: 21 | wandb: 22 | tags: ${tags} 23 | group: "pretrain_audioprotopnet_convnext_XCL_20_prototypes" 24 | mode: online 25 | 26 | module: 27 | num_prototypes: 194720 28 | network: 29 | model: 30 | backbone_model: 31 | local_checkpoint: null 32 | pretrain_info: 33 | hf_path: ${datamodule.dataset.hf_path} 34 | hf_name: ${datamodule.dataset.hf_name} 35 | hf_pretrain_name: XCL 36 | valid_test_only: True 37 | 38 | callbacks: 39 | model_checkpoint: 40 | filename: ${module.network.model_name}_${module.training_phase} 41 | 42 | datamodule: 43 | loaders: 44 | train: 45 | batch_size: 32 46 | valid: 47 | batch_size: 32 48 | dataset: 49 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 50 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 51 | transforms: 52 | preprocessing: 53 | mean: -13.369 # Mean of XCL 54 | std: 13.162 # Standard deviation of XCL 55 | 56 | datamodule_push: 57 | dataset: 58 | direct_fingerprint: /mnt/data/DBD/data_birdset/XCL/XCL_processed_42_0f80df346b834e3e 59 | #direct_fingerprint: /mnt/nvme3/data/DBD/data_birdset/XCL/XCL_processed_42_8f0c4e4d2afc0cef 60 | 61 | paths: 62 | dataset_path: /mnt/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 63 | background_path: /mnt/data/DBD/background_noise/dcase18_unpacked_wav 64 | log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ 65 | 66 | #paths: 67 | # dataset_path: /mnt/nvme3/data/DBD/data_birdset/${datamodule.dataset.dataset_name} 68 | # background_path: /mnt/nvme3/data/DBD/background_noise/dcase18_unpacked_wav 69 | # log_dir: /mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/ -------------------------------------------------------------------------------- /audioprotopnet/preprocessing/normalization/calculate_normalization_parameters.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from birdset import utils 4 | import hydra 5 | import lightning as L 6 | from omegaconf import OmegaConf 7 | import pyrootutils 8 | 9 | from audioprotopnet.preprocessing.normalization.standardization import ( 10 | calculate_mean_std_from_dataloader, 11 | ) 12 | 13 | 14 | log = utils.get_pylogger(__name__) 15 | root = pyrootutils.setup_root( 16 | search_from=__file__, 17 | indicator=[".git"], 18 | pythonpath=True, 19 | dotenv=True, 20 | ) 21 | 22 | _HYDRA_PARAMS = { 23 | "version_base": None, 24 | "config_path": str(root / "configs"), 25 | "config_name": "main_benchmarks.yaml", 26 | } 27 | 28 | 29 | # @utils.register_custom_resolvers(**_HYDRA_PARAMS) 30 | @hydra.main(**_HYDRA_PARAMS) 31 | def calculate_normalization_parameters(cfg): 32 | log.info("Using config: \n%s", OmegaConf.to_yaml(cfg)) 33 | 34 | log.info(f"Dataset path: <{os.path.abspath(cfg.paths.dataset_path)}>") 35 | os.makedirs(cfg.paths.dataset_path, exist_ok=True) 36 | 37 | log.info(f"Log path: <{os.path.abspath(cfg.paths.log_dir)}>") 38 | os.makedirs(cfg.paths.log_dir, exist_ok=True) 39 | 40 | log.info(f"Root Dir:<{os.path.abspath(cfg.paths.log_dir)}>") 41 | log.info(f"Work Dir:<{os.path.abspath(cfg.paths.work_dir)}>") 42 | log.info(f"Output Dir:<{os.path.abspath(cfg.paths.output_dir)}>") 43 | 44 | log.info(f"Seed everything with <{cfg.seed}>") 45 | L.seed_everything(cfg.seed) 46 | 47 | # Setup data 48 | log.info(f"Instantiate datamodule <{cfg.datamodule._target_}>") 49 | datamodule = hydra.utils.instantiate(cfg.datamodule) 50 | 51 | # Set the normalization in the config file to False, since we do not want normalized data for the mean and 52 | # standard deviation calculations. 53 | datamodule.transforms.preprocessing.normalize_waveform = False 54 | datamodule.transforms.preprocessing.normalize_spectrogram = False 55 | 56 | # Set the augmentations in the config file to None, since we do not want augmentations for the mean and 57 | # standard deviation calculations. 58 | datamodule.transforms.waveform_augmentations = [] 59 | datamodule.transforms.spectrogram_augmentations = [] 60 | 61 | datamodule.prepare_data() 62 | 63 | datamodule.setup(stage="fit") 64 | 65 | mean, std = calculate_mean_std_from_dataloader( 66 | dataloader=datamodule.train_dataloader() 67 | ) 68 | 69 | log.info(f"Mean: {mean} | Standard deviation: {std}") 70 | 71 | 72 | if __name__ == "__main__": 73 | calculate_normalization_parameters() 74 | -------------------------------------------------------------------------------- /configs/module/audioprotopnet_multilabel.yaml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - network: ppnet_convnext.yaml 3 | 4 | task: multilabel 5 | class_weights_loss: ${datamodule.dataset.class_weights_loss} 6 | prediction_table: False 7 | num_gpus: ${trainer.devices} 8 | 9 | training_phase: null 10 | 11 | num_prototypes: 2055 12 | prototype_layer_stride: 1 13 | 14 | train_classifier_only: True 15 | last_layer_fixed: False 16 | freeze_incorrect_class_connections: False 17 | pruning_threshold: null 18 | 19 | subtractive_margin: False 20 | 21 | max_epochs_warm: 10 22 | max_epochs_joint: null 23 | max_epochs_joint_with_last_layer: null 24 | max_epochs_last_layer: null 25 | 26 | optimizer: 27 | _target_: torch.optim.AdamW 28 | 29 | weight_decay: 1e-4 30 | 31 | warm_optimizer_lrs: 32 | add_on_layers: 3e-2 33 | prototype_vectors: 0.05 34 | frequency_weights: null #5e-4 #1e-3 35 | warm_last_layer_lr: 5e-4 36 | 37 | joint_optimizer_lrs: 38 | backbone_model: null #5e-4 39 | add_on_layers: null #3e-2 40 | prototype_vectors: null #1e-2 41 | frequency_weights: null #5e-4 #1e-3 42 | joint_last_layer_lr: null #1e-3 #5e-2 43 | 44 | last_layer_optimizer_lr: null #1e-4 #1e-3 45 | 46 | coefs: 47 | cross_entropy_loss: 1.0 48 | cluster_cost: null #-0.25 49 | separation_cost: null #0.05 50 | l1_loss_last_layer: null #0.4 51 | zero_weights_loss_last_layer: null #3.0 52 | l1_loss_frequency_weights: null #0.4 53 | orthogonality_loss: 1.0 54 | 55 | loss: 56 | _target_: audioprotopnet.modules.losses.asymmetric_loss.AsymmetricLossMultiLabel 57 | 58 | lr_scheduler: 59 | scheduler: 60 | _target_: transformers.get_cosine_schedule_with_warmup 61 | extras: 62 | interval: step 63 | warmup_ratio: 0.05 64 | 65 | metrics: 66 | main: 67 | _target_: birdset.modules.metrics.cmAP 68 | num_labels: ${datamodule.dataset.n_classes} 69 | thresholds: null 70 | val_best: 71 | _target_: "torchmetrics.MaxMetric" 72 | additional: 73 | MultilabelAUROC: 74 | _target_: "torchmetrics.classification.AUROC" 75 | task: "multilabel" 76 | num_labels: ${datamodule.dataset.n_classes} 77 | average: "macro" 78 | thresholds: null 79 | T1Accuracy: 80 | _target_: birdset.modules.metrics.TopKAccuracy 81 | topk: 1 82 | T3Accuracy: 83 | _target_: birdset.modules.metrics.TopKAccuracy 84 | topk: 5 85 | mAP: 86 | _target_: birdset.modules.metrics.mAP 87 | num_labels: ${datamodule.dataset.n_classes} 88 | thresholds: null 89 | eval_complete: 90 | pcmAP: 91 | _target_: birdset.modules.metrics.pcmAP 92 | num_labels: ${datamodule.dataset.n_classes} 93 | padding_factor: 5 94 | average: macro 95 | thresholds: null 96 | cmAP5: 97 | _target_: birdset.modules.metrics.cmAP5 98 | num_labels: ${datamodule.dataset.n_classes} 99 | sample_threshold: 5 100 | thresholds: null 101 | 102 | output_activation: 103 | _target_: "torch.sigmoid" 104 | 105 | logging_params: 106 | on_step: False 107 | on_epoch: True 108 | sync_dist: False 109 | prog_bar: True 110 | 111 | -------------------------------------------------------------------------------- /scripts/audioprotopnet/XCL/training/audioprotopnet_XCL_training_seed42.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=audioprotopnet_XCL_seed42 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/audioprotopnet_XCL_seed42_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=300:00:00 9 | #SBATCH --nodelist=node3.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: audioprotopnet_convnext_XCL_seed42 at $(date)" 33 | srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype" seed=42 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202405/callback_checkpoints/convnext_XCL_05.ckpt" 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment audioprotopnet_convnext_XCL_seed42 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed42 at $(date)" 40 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes" seed=42 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202405/callback_checkpoints/convnext_XCL_05.ckpt" 41 | #if [[ $? -ne 0 ]]; then 42 | # echo "Experiment audioprotopnet_convnext_XCL_seed42 failed at $(date)" 43 | # exit 1 44 | #fi 45 | # 46 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed42 at $(date)" 47 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes" seed=42 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202405/callback_checkpoints/convnext_XCL_05.ckpt" 48 | #if [[ $? -ne 0 ]]; then 49 | # echo "Experiment audioprotopnet_convnext_XCL_seed42 failed at $(date)" 50 | # exit 1 51 | #fi 52 | # 53 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed42 at $(date)" 54 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes" seed=42 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202405/callback_checkpoints/convnext_XCL_05.ckpt" 55 | #if [[ $? -ne 0 ]]; then 56 | # echo "Experiment audioprotopnet_convnext_XCL_seed42 failed at $(date)" 57 | # exit 1 58 | #fi 59 | 60 | echo "All experiments completed successfully at $(date)" 61 | -------------------------------------------------------------------------------- /scripts/audioprotopnet/XCL/training/audioprotopnet_XCL_training_seed44.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=audioprotopnet_XCL_seed44 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/audioprotopnet_XCL_seed44_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=300:00:00 9 | #SBATCH --nodelist=node3.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: audioprotopnet_convnext_XCL_seed44 at $(date)" 33 | srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype" seed=44 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202453/callback_checkpoints/convnext_XCL_04.ckpt" 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment audioprotopnet_convnext_XCL_seed44 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed44 at $(date)" 40 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes" seed=44 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202453/callback_checkpoints/convnext_XCL_04.ckpt" 41 | #if [[ $? -ne 0 ]]; then 42 | # echo "Experiment audioprotopnet_convnext_XCL_seed44 failed at $(date)" 43 | # exit 1 44 | #fi 45 | # 46 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed44 at $(date)" 47 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes" seed=44 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202453/callback_checkpoints/convnext_XCL_04.ckpt" 48 | #if [[ $? -ne 0 ]]; then 49 | # echo "Experiment audioprotopnet_convnext_XCL_seed44 failed at $(date)" 50 | # exit 1 51 | #fi 52 | # 53 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed44 at $(date)" 54 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes" seed=44 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202453/callback_checkpoints/convnext_XCL_04.ckpt" 55 | #if [[ $? -ne 0 ]]; then 56 | # echo "Experiment audioprotopnet_convnext_XCL_seed44 failed at $(date)" 57 | # exit 1 58 | #fi 59 | 60 | echo "All experiments completed successfully at $(date)" 61 | -------------------------------------------------------------------------------- /scripts/audioprotopnet/XCL/training/audioprotopnet_XCL_training_seed45.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=audioprotopnet_XCL_seed45 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/audioprotopnet_XCL_seed45_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=300:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: audioprotopnet_convnext_XCL_seed45 at $(date)" 33 | srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype" seed=45 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202146/callback_checkpoints/convnext_XCL_04.ckpt" 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment audioprotopnet_convnext_XCL_seed45 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed45 at $(date)" 40 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes" seed=45 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202146/callback_checkpoints/convnext_XCL_04.ckpt" 41 | #if [[ $? -ne 0 ]]; then 42 | # echo "Experiment audioprotopnet_convnext_XCL_seed45 failed at $(date)" 43 | # exit 1 44 | #fi 45 | # 46 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed45 at $(date)" 47 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes" seed=45 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202146/callback_checkpoints/convnext_XCL_04.ckpt" 48 | #if [[ $? -ne 0 ]]; then 49 | # echo "Experiment audioprotopnet_convnext_XCL_seed45 failed at $(date)" 50 | # exit 1 51 | #fi 52 | # 53 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed45 at $(date)" 54 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes" seed=45 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202146/callback_checkpoints/convnext_XCL_04.ckpt" 55 | #if [[ $? -ne 0 ]]; then 56 | # echo "Experiment audioprotopnet_convnext_XCL_seed45 failed at $(date)" 57 | # exit 1 58 | #fi 59 | 60 | echo "All experiments completed successfully at $(date)" 61 | -------------------------------------------------------------------------------- /scripts/audioprotopnet/XCL/training/audioprotopnet_XCL_training_seed47.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=audioprotopnet_XCL_seed47 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/audioprotopnet_XCL_seed47_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=300:00:00 9 | #SBATCH --nodelist=node3.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: audioprotopnet_convnext_XCL_seed47 at $(date)" 33 | srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype" seed=47 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202256/callback_checkpoints/convnext_XCL_01.ckpt" 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment audioprotopnet_convnext_XCL_seed47 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed47 at $(date)" 40 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes" seed=47 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202256/callback_checkpoints/convnext_XCL_01.ckpt" 41 | #if [[ $? -ne 0 ]]; then 42 | # echo "Experiment audioprotopnet_convnext_XCL_seed47 failed at $(date)" 43 | # exit 1 44 | #fi 45 | # 46 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed47 at $(date)" 47 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes" seed=47 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202256/callback_checkpoints/convnext_XCL_01.ckpt" 48 | #if [[ $? -ne 0 ]]; then 49 | # echo "Experiment audioprotopnet_convnext_XCL_seed47 failed at $(date)" 50 | # exit 1 51 | #fi 52 | # 53 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed47 at $(date)" 54 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes" seed=47 module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-22_202256/callback_checkpoints/convnext_XCL_01.ckpt" 55 | #if [[ $? -ne 0 ]]; then 56 | # echo "Experiment audioprotopnet_convnext_XCL_seed47 failed at $(date)" 57 | # exit 1 58 | #fi 59 | 60 | echo "All experiments completed successfully at $(date)" 61 | -------------------------------------------------------------------------------- /audioprotopnet/evaluation/eval_benchmarks.py: -------------------------------------------------------------------------------- 1 | import os 2 | import hydra 3 | import json 4 | import pyrootutils 5 | import lightning as L 6 | 7 | from birdset import utils 8 | 9 | root = pyrootutils.setup_root( 10 | search_from=__file__, 11 | indicator=[".git"], 12 | pythonpath=True, 13 | dotenv=True, 14 | ) 15 | 16 | _HYDRA_PARAMS = { 17 | "version_base":None, 18 | "config_path": str(root / "configs"), 19 | "config_name": "main_benchmarks.yaml" 20 | } 21 | 22 | log = utils.get_pylogger(__name__) 23 | 24 | @hydra.main(**_HYDRA_PARAMS) 25 | def eval(cfg): 26 | log.info("Starting Evaluation") 27 | log.info(f"Dataset path: <{os.path.abspath(cfg.paths.dataset_path)}>") 28 | os.makedirs(cfg.paths.dataset_path, exist_ok=True) 29 | 30 | log.info(f"Log path: <{os.path.abspath(cfg.paths.log_dir)}>") 31 | os.makedirs(cfg.paths.log_dir, exist_ok=True) 32 | 33 | log.info(f"Root Dir:<{os.path.abspath(cfg.paths.log_dir)}>") 34 | log.info(f"Work Dir:<{os.path.abspath(cfg.paths.work_dir)}>") 35 | log.info(f"Output Dir:<{os.path.abspath(cfg.paths.output_dir)}>") 36 | 37 | if cfg.get("seed"): 38 | log.info(f"Seed everything with <{cfg.seed}>") 39 | L.seed_everything(cfg.seed) 40 | 41 | log.info(f"Instantiate datamodule <{cfg.datamodule._target_}>") 42 | datamodule = hydra.utils.instantiate(cfg.datamodule) 43 | datamodule.prepare_data() 44 | 45 | log.info(f"Instantiate model <{cfg.module.network.model._target_}>") 46 | model = hydra.utils.instantiate( 47 | cfg.module, 48 | num_epochs=cfg.trainer.max_epochs, #? 49 | len_trainset=datamodule.len_trainset, 50 | batch_size=datamodule.loaders_config.train.batch_size, 51 | label_counts=datamodule.num_train_labels, 52 | pretrain_info=cfg.module.network.model.pretrain_info 53 | ) 54 | 55 | log.info(f"Instantiate logger") 56 | logger = utils.instantiate_loggers(cfg.get("logger")) 57 | 58 | trainer = hydra.utils.instantiate( 59 | cfg.trainer, logger=logger 60 | ) 61 | 62 | object_dict = { 63 | "cfg": cfg, 64 | "datamodule": datamodule, 65 | "model": model, 66 | "logger": logger, 67 | "trainer": trainer 68 | } 69 | 70 | log.info("Logging Hyperparams") 71 | utils.log_hyperparameters(object_dict) 72 | 73 | if cfg.get("test"): 74 | log.info("Starting Testing") 75 | trainer.test( 76 | model=model, 77 | datamodule=datamodule, 78 | ckpt_path=None 79 | ) 80 | test_metrics = trainer.callback_metrics 81 | else: 82 | log.info("Predict not yet implemented") 83 | 84 | metric_dict = {**test_metrics} 85 | metric_dict = [{'name': k, 'value': v.item() if hasattr(v, 'item') else v} for k, v in metric_dict.items()] 86 | 87 | file_path = os.path.join(cfg.paths.output_dir, "finalmetrics.json") 88 | with open(file_path, 'w') as json_file: 89 | json.dump(metric_dict, json_file) 90 | 91 | utils.close_loggers() 92 | 93 | if __name__ == "__main__": 94 | eval() 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /scripts/audioprotopnet/XCL/training/audioprotopnet_XCL_training_seed43.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #SBATCH --job-name=audioprotopnet_XCL_seed43 3 | #SBATCH --output=/mnt/data/rheinrich/DBD/audioprotopnet/job_logs/audioprotopnet_XCL_seed43_%j.log 4 | #SBATCH --ntasks=1 5 | #SBATCH --cpus-per-task=32 6 | #SBATCH --gres=gpu:1 7 | #SBATCH --mem=256G 8 | #SBATCH --time=300:00:00 9 | #SBATCH --nodelist=node4.omnia.test 10 | 11 | # Print date, hostname, and working directory 12 | date;hostname;pwd 13 | 14 | # Load Conda environment 15 | echo "Initializing Conda..." 16 | source /etc/profile.d/conda.sh 17 | conda activate audioprotopnet-env 18 | 19 | # Check if Conda environment was activated successfully 20 | if [[ $? -ne 0 ]]; then 21 | echo "Failed to activate Conda environment" 22 | exit 1 23 | fi 24 | 25 | # Select working directory 26 | cd /mnt/home/rheinrich/deep_bird_detect/audioprotopnet/audioprotopnet/training 27 | 28 | # Check available CPUs and GPUs 29 | echo "Available resources:" 30 | sinfo -o "%N %C %G" 31 | 32 | echo "Starting experiment: audioprotopnet_convnext_XCL_seed43 at $(date)" 33 | srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_1_prototype" seed=43 save_prototype_spectrogram_files=False module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202428/callback_checkpoints/convnext_XCL_03.ckpt" 34 | if [[ $? -ne 0 ]]; then 35 | echo "Experiment audioprotopnet_convnext_XCL_seed43 failed at $(date)" 36 | exit 1 37 | fi 38 | 39 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed43 at $(date)" 40 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_5_prototypes" seed=43 save_prototype_spectrogram_files=False module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202428/callback_checkpoints/convnext_XCL_03.ckpt" 41 | #if [[ $? -ne 0 ]]; then 42 | # echo "Experiment audioprotopnet_convnext_XCL_seed43 failed at $(date)" 43 | # exit 1 44 | #fi 45 | # 46 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed43 at $(date)" 47 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_10_prototypes" seed=43 save_prototype_spectrogram_files=False module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202428/callback_checkpoints/convnext_XCL_03.ckpt" 48 | #if [[ $? -ne 0 ]]; then 49 | # echo "Experiment audioprotopnet_convnext_XCL_seed43 failed at $(date)" 50 | # exit 1 51 | #fi 52 | # 53 | #echo "Starting experiment: audioprotopnet_convnext_XCL_seed43 at $(date)" 54 | #srun --exclusive python train_audioprotopnet.py experiment="XCL/audioprotopnet/training/audioprotopnet_convnext_20_prototypes" seed=43 save_prototype_spectrogram_files=False module.network.model.backbone_model.local_checkpoint="/mnt/oekofor/data/rheinrich/DBD/audioprotopnet/logs/train/runs/XCL/convnext/2024-08-13_202428/callback_checkpoints/convnext_XCL_03.ckpt" 55 | #if [[ $? -ne 0 ]]; then 56 | # echo "Experiment audioprotopnet_convnext_XCL_seed43 failed at $(date)" 57 | # exit 1 58 | #fi 59 | 60 | echo "All experiments completed successfully at $(date)" 61 | -------------------------------------------------------------------------------- /audioprotopnet/modules/checkpoint_loading.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, Optional, Union 2 | 3 | import torch 4 | 5 | 6 | def load_state_dict( 7 | checkpoint_path: str, map_location: Optional[Union[str, torch.device]] = None 8 | ) -> Dict[str, torch.Tensor]: 9 | """ 10 | Load a model checkpoint and return the state dictionary. The function is compatible with 11 | checkpoints from both plain PyTorch and PyTorch Lightning. 12 | 13 | Args: 14 | checkpoint_path (str): Path to the checkpoint file. 15 | map_location (Optional[Union[str, torch.device]]): Specifies how to remap storage locations 16 | (for CPU/GPU compatibility). It can be a string ('cpu', 'cuda'), or a torch.device object. 17 | 18 | Returns: 19 | Dict[str, torch.Tensor]: The state dictionary extracted from the checkpoint. The keys are layer names, 20 | and values are parameter tensors of the model. 21 | 22 | Raises: 23 | FileNotFoundError: If the checkpoint file does not exist at the given path. 24 | IOError: If the checkpoint file cannot be loaded for reasons other than non-existence. 25 | """ 26 | # Load the checkpoint file. torch.load() automatically loads the tensor to the specified device 27 | # if map_location is provided. 28 | print(">> Found a checkpoint. Loading..") 29 | checkpoint = torch.load(checkpoint_path, map_location=map_location) 30 | 31 | # Extract the state dictionary from the checkpoint. The structure of the checkpoint can vary 32 | # depending on whether it's from plain PyTorch or PyTorch Lightning. 33 | if "state_dict" in checkpoint: 34 | # PyTorch Lightning checkpoints usually nest the model state dictionary under the 'state_dict' key. 35 | state_dict = checkpoint["state_dict"] 36 | else: 37 | # For plain PyTorch checkpoints, the file directly contains the state dictionary. 38 | state_dict = checkpoint 39 | 40 | # Update this part to handle the necessary key replacements 41 | adjusted_state_dict = {} 42 | for key, value in state_dict.items(): 43 | # Handle 'model.model.' prefix 44 | new_key = key.replace("model.model.", "") 45 | 46 | # Handle 'model._orig_mod.model.' prefix 47 | new_key = new_key.replace("model._orig_mod.model.", "") 48 | 49 | # Handle 'model._orig_mod.' prefix 50 | new_key = new_key.replace("model._orig_mod.", "") 51 | 52 | new_key = new_key.replace( 53 | "backbone_embeddings", "backbone_model.model.embeddings" 54 | ) 55 | new_key = new_key.replace("backbone_encoder", "backbone_model.model.encoder") 56 | new_key = new_key.replace( 57 | "backbone_layernorm", "backbone_model.model.layernorm" 58 | ) 59 | 60 | # Map 'backbone_features' to 'backbone_model.model.features' 61 | new_key = new_key.replace("backbone_features", "backbone_model.model.features") 62 | 63 | # Handle 'model._orig_mod.' prefix 64 | new_key = new_key.replace( 65 | "model.backbone_model.model.", "backbone_model.model." 66 | ) 67 | new_key = new_key.replace("model.prototype_vectors", "prototype_vectors") 68 | new_key = new_key.replace("model.last_layer.weight", "last_layer.weight") 69 | new_key = new_key.replace("model.last_layer.bias", "last_layer.bias") 70 | new_key = new_key.replace("model.frequency_weights", "frequency_weights") 71 | 72 | # Assign the adjusted key 73 | adjusted_state_dict[new_key] = value 74 | 75 | return adjusted_state_dict 76 | -------------------------------------------------------------------------------- /hf_repo/processing_protonet.py: -------------------------------------------------------------------------------- 1 | from transformers import SequenceFeatureExtractor 2 | from transformers.utils import PaddingStrategy 3 | from transformers.feature_extraction_utils import BatchFeature 4 | from torchaudio import transforms 5 | from typing import Union 6 | import numpy as np 7 | import torch 8 | 9 | 10 | class AudioProtoNetFeatureExtractor(SequenceFeatureExtractor): 11 | _auto_class = "AutoFeatureExtractor" 12 | model_input_names = ["input_values"] 13 | 14 | def __init__(self, 15 | # spectrogram 16 | n_fft: int = 2048, 17 | feature_size: int = 1, 18 | hop_length: int = 256, 19 | power: float = 2.0, 20 | 21 | # mel scale 22 | n_mels: int = 256, 23 | sampling_rate: int = 32_000, 24 | n_stft: int = 1025, 25 | 26 | # power to db 27 | stype: str = "power", 28 | top_db: int = 80, 29 | 30 | # normalization 31 | mean: float = -13.369, 32 | std: float = 13.162, 33 | padding_value: float = 0.0, 34 | 35 | return_attention_mask: bool = True, 36 | **kwargs, 37 | ): 38 | super().__init__(feature_size=feature_size, sampling_rate=sampling_rate, padding_value=padding_value, **kwargs) 39 | 40 | # Store parameters for serialization 41 | self.n_fft = n_fft 42 | self.hop_length = hop_length 43 | self.power = power 44 | self.n_mels = n_mels 45 | self.sampling_rate = sampling_rate 46 | self.n_stft = n_stft 47 | self.stype = stype 48 | self.top_db = top_db 49 | self.mean = mean 50 | self.std = std 51 | self.padding_value = padding_value 52 | self.return_attention_mask = return_attention_mask 53 | self.spec_transform = None 54 | self.mel_scale = None 55 | self.db_scale = None 56 | 57 | def _init_transforms(self): # TODO post init method? 58 | self.spec_transform = transforms.Spectrogram(n_fft=self.n_fft, hop_length=self.hop_length, power=self.power) 59 | self.mel_scale = transforms.MelScale(n_mels=self.n_mels, sample_rate=self.sampling_rate, n_stft=self.n_stft) 60 | self.db_scale = transforms.AmplitudeToDB(stype=self.stype, top_db=self.top_db) 61 | 62 | def __call__(self, 63 | waveform_batch: Union[np.ndarray, list[float], list[np.ndarray], list[list[float]]], 64 | padding: Union[bool, str, PaddingStrategy] = "longest", 65 | max_length: int | None = None, 66 | truncation: bool = True, 67 | return_tensors: str = "pt" 68 | ): 69 | if self.spec_transform is None: 70 | self._init_transforms() 71 | clip_duration = 5 # TODO this is the clip duration used in training 72 | max_length = max_length or int(int(self.sampling_rate) * clip_duration) 73 | 74 | if isinstance(waveform_batch, (list, np.ndarray)) and not isinstance(waveform_batch[0], (list, np.ndarray)): 75 | waveform_batch = [waveform_batch] 76 | 77 | waveform_batch = BatchFeature({"input_values": waveform_batch}) 78 | 79 | waveform_batch = self.pad( 80 | waveform_batch, 81 | padding=padding, 82 | max_length=max_length, 83 | truncation=truncation, 84 | return_attention_mask=self.return_attention_mask 85 | ) 86 | waveform_batch = waveform_batch["input_values"] 87 | audio_tensor = torch.as_tensor(waveform_batch) 88 | spec_gram = self.spec_transform(audio_tensor) 89 | mel_spec = self.mel_scale(spec_gram) 90 | mel_spec = self.db_scale(mel_spec) 91 | mel_spec_norm = (mel_spec - self.mean) / self.std 92 | 93 | return mel_spec_norm.unsqueeze(1) 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | """Setup-script for audioprotopnet package.""" 2 | import os 3 | import sys 4 | import importlib 5 | from setuptools import setup, find_packages 6 | import versioneer 7 | 8 | PACKAGE_NAME = 'audioprotopnet' # name used by PIP 9 | IMPORT_NAME = 'audioprotopnet' # name used for imports 10 | NAMESPACE = "" 11 | 12 | with open('requirements.txt', 'r') as f: 13 | requirements_install = f.readlines() 14 | 15 | # Add all the packages in requirements.txt to an extra named '[dev]' 16 | with open('requirements-dev.txt', 'r') as f: 17 | requirements_dev = f.readlines() 18 | 19 | # All the requirements 20 | requirements = { 21 | 'install': [ 22 | r for r in requirements_install if not r.startswith('-r ') 23 | ], 24 | 'test': [ # testing 25 | 'pytest', 26 | 'coverage', 27 | ], 28 | 'docs': [ # documentation generation and tools 29 | 'Sphinx', 30 | 'sphinx-rtd-theme', # nicer theme for the html docs 31 | 'sphinx-autodoc-typehints', # use typehints to provide types 32 | ], 33 | 'dev': [ 34 | r for r in requirements_dev if not r.startswith('-r ') 35 | ], 36 | } 37 | 38 | URLS = { 39 | 'JIRA': 'http://applik-84.iwes.fraunhofer.de/', # TODO: add link to project 40 | 'GITLAB': 'https://gitlab.cc-asp.fraunhofer.de/iee_oe224/AudioProtoPNet', # TODO add link for this to coookiecutter props? 41 | # 'Documentation': '???', # should link to the docs 42 | } 43 | SCRIPTS = [] # no scripts necessary 44 | CLASSIFIERS = [ 45 | 'Development Status :: 3 - Alpha', # TODO: change classifiers 46 | 'Programming Language :: Python :: 3.10', 47 | ] 48 | 49 | # ====================================================================================== 50 | # No configurable options below this line 51 | 52 | # Get current version etc. from the `__about__.py` file -------------------------------- 53 | # Very evil way to retrieve the variables contained in about. 54 | # Those will be added to the current scope 55 | PROJECT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) 56 | sys.path.append(PROJECT_PATH) 57 | about = importlib.import_module(IMPORT_NAME + '.__about__') 58 | 59 | # def find_version(*file_paths): 60 | # """Function used to find the version of the package.""" 61 | # version_file = read(*file_paths) 62 | # version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", 63 | # version_file, re.MULTILINE) 64 | # if version_match: 65 | # return version_match.group(1) 66 | # raise RuntimeError("Unable to find version string for the package.") 67 | 68 | 69 | if __name__ == '__main__': 70 | setup( 71 | # General --- 72 | name=PACKAGE_NAME, 73 | version=versioneer.get_version(), 74 | cmdclass=versioneer.get_cmdclass(), 75 | 76 | packages=find_packages(exclude=['docs', 'tests', 'tests.*']), 77 | namespace_packages=([NAMESPACE] if NAMESPACE else []), 78 | scripts=SCRIPTS, 79 | 80 | install_requires=requirements['install'], 81 | extras_require={k: r for k, r in requirements.items() if k != 'install'}, 82 | 83 | # Testing --- 84 | test_suite='pytest.collector', 85 | tests_require=requirements['test'], 86 | 87 | package_data={ 88 | # If any package contains *.rst files, include them: 89 | '': ['*.rst'], 90 | }, 91 | 92 | # Metadata --- (needed if we ever have a private Package Index) 93 | author=about.__author__, 94 | description=about.__description__, 95 | classifiers=CLASSIFIERS, 96 | # long_description='???', 97 | # license='???', 98 | # url='???' # should link somewhere, perhaps to the docs 99 | project_urls=URLS, 100 | 101 | # could also include long_description, download_url, classifiers, etc. 102 | ) 103 | --------------------------------------------------------------------------------