################# # Misc settings # ################# # Random seed for gaussian noise RANDOM_SEED = 42 ########################## # Model paths and config # ########################## MODEL_VESION = 'V2.4' PB_MODEL = 'checkpoints/V2.4/BirdNET_GLOBAL_6K_V2.4_Model' # MODEL_PATH = PB_MODEL # This will load the protobuf model MODEL_PATH = 'Model/BirdNET_GLOBAL_6K_V2.4_Model_FP32.tflite' MDATA_MODEL_PATH = 'checkpoints/V2.4/BirdNET_GLOBAL_6K_V2.4_MData_Model_FP16.tflite' LABELS_FILE = 'Model/checkpoints_V2.4_BirdNET_GLOBAL_6K_V2.4_Labels.txt' TRANSLATED_LABELS_PATH = 'labels/V2.4' # Path to custom trained classifier # If None, no custom classifier will be used # Make sure to set the LABELS_FILE above accordingly CUSTOM_CLASSIFIER = None ################## # Audio settings # ################## # We use a sample rate of 48kHz, so the model input size is # (batch size, 48000 kHz * 3 seconds) = (1, 144000) # Recordings will be resampled automatically. SAMPLE_RATE: int = 48000 # We're using 3-second chunks SIG_LENGTH: float = 3.0 # Define overlap between consecutive chunks <3.0; 0 = no overlap SIG_OVERLAP: float = 0 # Define minimum length of audio chunk for prediction, # chunks shorter than 3 seconds will be padded with zeros SIG_MINLEN: float = 1.0 # Frequency range. This is model specific and should not be changed. SIG_FMIN = 0 SIG_FMAX = 15000 ##################### # Metadata settings # ##################### LATITUDE = -1 LONGITUDE = -1 WEEK = -1 LOCATION_FILTER_THRESHOLD = 0.03 ###################### # Inference settings # ###################### # If None or empty file, no custom species list will be used # Note: Entries in this list have to match entries from the LABELS_FILE # We use the 2021 eBird taxonomy for species names (Clements list) CODES_FILE = 'eBird_taxonomy_codes_2021E.json' SPECIES_LIST_FILE = 'example/species_list.txt' # File input path and output path for selection tables INPUT_PATH: str = 'example/' OUTPUT_PATH: str = 'example/' ALLOWED_FILETYPES = ['wav', 'flac', 'mp3', 'ogg', 'm4a'] # Number of threads to use for inference. # Can be as high as number of CPUs in your system CPU_THREADS: int = 8 TFLITE_THREADS: int = 1 # False will output logits, True will convert to sigmoid activations APPLY_SIGMOID: bool = True SIGMOID_SENSITIVITY: float = 1.0 # Minimum confidence score to include in selection table # (be aware: if APPLY_SIGMOID = False, this no longer represents # probabilities and needs to be adjusted) MIN_CONFIDENCE: float = 0.1 # Number of samples to process at the same time. Higher values can increase # processing speed, but will also increase memory usage. # Might only be useful for GPU inference. BATCH_SIZE: int = 1 # Specifies the output format. 'table' denotes a Raven selection table, # 'audacity' denotes a TXT file with the same format as Audacity timeline labels # 'csv' denotes a CSV file with start, end, species and confidence. RESULT_TYPE = 'table' ##################### # Training settings # ##################### # Training data path TRAIN_DATA_PATH = 'train_data/' # Sample crop mode SAMPLE_CROP_MODE = 'center' # List of non-event classes NON_EVENT_CLASSES = ["noise", "other", "background", "silence"] # Upsampling settings UPSAMPLING_RATIO = 0.0 UPSAMPLING_MODE = 'repeat' # Number of epochs to train for TRAIN_EPOCHS: int = 100 # Batch size for training TRAIN_BATCH_SIZE: int = 32 # Validation split (percentage) TRAIN_VAL_SPLIT: float = 0.2 # Learning rate for training TRAIN_LEARNING_RATE: float = 0.01 # Number of hidden units in custom classifier # If >0, a two-layer classifier will be trained TRAIN_HIDDEN_UNITS: int = 0 # Dropout rate for training TRAIN_DROPOUT: float = 0.0 # Whether to use mixup for training TRAIN_WITH_MIXUP: bool = False # Whether to apply label smoothing for training TRAIN_WITH_LABEL_SMOOTHING: bool = False # Model output format TRAINED_MODEL_OUTPUT_FORMAT = 'tflite' # Cache settings TRAIN_CACHE_MODE = 'none' TRAIN_CACHE_FILE = 'train_cache.npz' ##################### # Misc runtime vars # ##################### CODES = {} LABELS: list[str] = [] TRANSLATED_LABELS: list[str] = [] SPECIES_LIST: list[str] = [] ERROR_LOG_FILE: str = 'error_log.txt' FILE_LIST = [] FILE_STORAGE_PATH = '' ###################### # Get and set config # ###################### def getConfig(): return { 'RANDOM_SEED': RANDOM_SEED, 'MODEL_PATH': MODEL_PATH, 'MDATA_MODEL_PATH': MDATA_MODEL_PATH, 'LABELS_FILE': LABELS_FILE, 'CUSTOM_CLASSIFIER': CUSTOM_CLASSIFIER, 'SAMPLE_RATE': SAMPLE_RATE, 'SIG_LENGTH': SIG_LENGTH, 'SIG_OVERLAP': SIG_OVERLAP, 'SIG_MINLEN': SIG_MINLEN, 'LATITUDE': LATITUDE, 'LONGITUDE': LONGITUDE, 'WEEK': WEEK, 'LOCATION_FILTER_THRESHOLD': LOCATION_FILTER_THRESHOLD, 'CODES_FILE': CODES_FILE, 'SPECIES_LIST_FILE': SPECIES_LIST_FILE, 'INPUT_PATH': INPUT_PATH, 'OUTPUT_PATH': OUTPUT_PATH, 'CPU_THREADS': CPU_THREADS, 'TFLITE_THREADS': TFLITE_THREADS, 'APPLY_SIGMOID': APPLY_SIGMOID, 'SIGMOID_SENSITIVITY': SIGMOID_SENSITIVITY, 'MIN_CONFIDENCE': MIN_CONFIDENCE, 'BATCH_SIZE': BATCH_SIZE, 'RESULT_TYPE': RESULT_TYPE, 'TRAIN_DATA_PATH': TRAIN_DATA_PATH, 'TRAIN_EPOCHS': TRAIN_EPOCHS, 'TRAIN_BATCH_SIZE': TRAIN_BATCH_SIZE, 'TRAIN_LEARNING_RATE': TRAIN_LEARNING_RATE, 'TRAIN_HIDDEN_UNITS': TRAIN_HIDDEN_UNITS, 'CODES': CODES, 'LABELS': LABELS, 'TRANSLATED_LABELS': TRANSLATED_LABELS, 'SPECIES_LIST': SPECIES_LIST, 'ERROR_LOG_FILE': ERROR_LOG_FILE } def setConfig(c): global RANDOM_SEED global MODEL_PATH global MDATA_MODEL_PATH global LABELS_FILE global CUSTOM_CLASSIFIER global SAMPLE_RATE global SIG_LENGTH global SIG_OVERLAP global SIG_MINLEN global LATITUDE global LONGITUDE global WEEK global LOCATION_FILTER_THRESHOLD global CODES_FILE global SPECIES_LIST_FILE global INPUT_PATH global OUTPUT_PATH global CPU_THREADS global TFLITE_THREADS global APPLY_SIGMOID global SIGMOID_SENSITIVITY global MIN_CONFIDENCE global BATCH_SIZE global RESULT_TYPE global TRAIN_DATA_PATH global TRAIN_EPOCHS global TRAIN_BATCH_SIZE global TRAIN_LEARNING_RATE global TRAIN_HIDDEN_UNITS global CODES global LABELS global TRANSLATED_LABELS global SPECIES_LIST global ERROR_LOG_FILE RANDOM_SEED = c['RANDOM_SEED'] MODEL_PATH = c['MODEL_PATH'] MDATA_MODEL_PATH = c['MDATA_MODEL_PATH'] LABELS_FILE = c['LABELS_FILE'] CUSTOM_CLASSIFIER = c['CUSTOM_CLASSIFIER'] SAMPLE_RATE = c['SAMPLE_RATE'] SIG_LENGTH = c['SIG_LENGTH'] SIG_OVERLAP = c['SIG_OVERLAP'] SIG_MINLEN = c['SIG_MINLEN'] LATITUDE = c['LATITUDE'] LONGITUDE = c['LONGITUDE'] WEEK = c['WEEK'] LOCATION_FILTER_THRESHOLD = c['LOCATION_FILTER_THRESHOLD'] CODES_FILE = c['CODES_FILE'] SPECIES_LIST_FILE = c['SPECIES_LIST_FILE'] INPUT_PATH = c['INPUT_PATH'] OUTPUT_PATH = c['OUTPUT_PATH'] CPU_THREADS = c['CPU_THREADS'] TFLITE_THREADS = c['TFLITE_THREADS'] APPLY_SIGMOID = c['APPLY_SIGMOID'] SIGMOID_SENSITIVITY = c['SIGMOID_SENSITIVITY'] MIN_CONFIDENCE = c['MIN_CONFIDENCE'] BATCH_SIZE = c['BATCH_SIZE'] RESULT_TYPE = c['RESULT_TYPE'] TRAIN_DATA_PATH = c['TRAIN_DATA_PATH'] TRAIN_EPOCHS = c['TRAIN_EPOCHS'] TRAIN_BATCH_SIZE = c['TRAIN_BATCH_SIZE'] TRAIN_LEARNING_RATE = c['TRAIN_LEARNING_RATE'] TRAIN_HIDDEN_UNITS = c['TRAIN_HIDDEN_UNITS'] CODES = c['CODES'] LABELS = c['LABELS'] TRANSLATED_LABELS = c['TRANSLATED_LABELS'] SPECIES_LIST = c['SPECIES_LIST'] ERROR_LOG_FILE = c['ERROR_LOG_FILE']