Releases: jhuus/HawkEars
Releases · jhuus/HawkEars
1.0.4
This release improves the calibration of output predictions, and provides tools to calibrate future HawkEars models.
What's Changed
- Predictions from the included models are generally higher, and closer to probabilities. That is, scores of .85 are now expected to be correct about 85% of the time. In previous releases, they were correct >90% of the time.
- Because scores are higher, the default min_score was increased from .75 to .80.
- The score_exponent is replaced with scaling_coefficient and scaling_intercept. These are used in main_model.py to implement Platt scaling.
- Three new scripts are included to support calibration: pickle_test.py, calibrate.py and plot_calibration_curve.py. See the comments in those scripts for more details.
- A new del_recording.py script is included to delete a recording from a database.
- We fixed an indexing bug in species_handlers.py.
1.0.3
This release adds support for Apple Metal processors (M1, M2, ...) and Intel OpenVINO during inference.
What's Changed
- When running analyze.py on a Mac with a Metal processor (M1, M2, ...), performance will be much better than in previous releases.
- When running analyze.py with an Intel or AMD CPU and no GPU, performance will be much better if you install Intel OpenVINO ("pip install openvino").
- When running analyze.py, additional settings ("device", "num_threads" and "openvino") are written to HawkEars_summary.txt.
- When running analyze.py, "special" quote characters in all class names are converted to "plain" quote characters. This ensures that classes in the ignore list will match classes in the supported list if the only difference is the type of quote character.
1.0.2
This release mainly addresses the issue of identifying which version and parameters were used for a particular inference run.
What's Changed
- The current version number is now available in a version.txt file in the root directory.
- When checkpoints are saved during training, additional metadata is added to them. The extra metadata was also added to the existing checkpoints.
- When you run inference (analyze.py), it will write a HawkEars_summary.txt file to the output folder, providing detailed information about parameters and models used. It is formatted as YAML, which can be easily read by people or software.
- The hop_length parameter is now calculated dynamically, rather than being defined in base_config.py. This allows you to change other audio parameters without having to update the hop length. For example, setting cfg.audio.segment_len=10 before calling plot_spec will now correctly plot 10-second spectrograms. Before, that only worked if you also updated hop_length.
1.0.1
This release provides a number of improvements related to species occurrence data.
What's Changed
- Replaced the eBird barchart data with better occurrence data from the ebirdst R package, except for a few species not supported by ebirdst, for which we kept the barchart data.
- Added species occurrence support for the following US states:
- Connecticut
- Delaware
- Illinois
- Indiana
- Iowa
- Maryland
- Massachusetts
- New Jersey
- Rhode Island
- South Dakota
- Virginia
- West Virginia
- Wisconsin
- Note that the above means all eBird counties in those states are now supported during inference, using the --lat, --lon, --region and --filelist arguments.
- Previously, the code referred to "species frequency data". That has been changed to "species occurrence data" throughout, with corresponding renaming of files, classes, variables, etc.
- Fixed bug when the --filelist argument was used and locations were provided for some but not all recordings in the list.
- Updated perch.py to work with the latest opensoundscape version (0.11.0).
1.0.0
This release provides updated models and several small changes.
What's Changed
- New models are available with better accuracy due to the use of the timm AdamP optimizer (see below). Training data was also improved for several frog species.
- The Adam optimizer from torch was replaced with two timm optimizers: AdamP and RAdam. A new fast_optimizer training parameter can be set to True for Radam or False (default) for AdamP. RAdam trains as fast as Adam, but gives slightly better results. AdamP trains 25-30% slower, but gives a small additional improvement. The new models in this release were trained with AdamP.
- A new model/gernet.py script was added to support custom configurations of the gernet model from timm. It's a fast model that isn't as accurate as hgnet, but can work well in an ensemble.
- Several scripts in the tools directory were updated to improve the consistency of their arguments.
- A new tools/find_dup_recordings.py script was added for finding duplicate recordings in a database.
0.2.1
0.2.0
This release provides updated models, including support for 14 new species.
What's Changed
- Support for new species:
American Dipper (AMDI)
Band-tailed Pigeon (BTPI)
Black Oystercatcher (BLOY)
Black Turnstone (BLTU)
Bullock's Oriole (BUOR)
Bushtit (BUSH)
Cassin's Finch (CAFI)
Common Murre (COMU)
Glaucous-winged Gull (GWGU)
Hammond's Flycatcher (HAFL)
Marbled Murrelet (MAMU)
Red-breasted Sapsucker (RBSA)
Short-billed Gull (SBIG)
Vaux's Swift (VASW) - Fixed issue where Western Toad was accidentally trained on Western Narrow-mouthed Toad data. Correct training data is now used for American Toad.
0.1.0
This release provides updated models, including support for new species.
What's Changed
- Support for new species:
California Gull (CAGU)
Common Poorwill (COPO)
Golden Eagle (GOEA)
Long-billed Curlew (LBCU)
Louisiana Waterthrush (LOWA)
Redhead (REDH)
Ruddy Duck (RUDU)
Thick-billed Longspur (TBLO) - Added support for low-pass, high-pass and band-pass filters during inference. Each filter type is configurable, i.e. you can specify the location of the curve and the amount of damping. By default, no filters are used, but you can request one or more filters during inference. If one or more filters are selected, by default it runs inference on the unfiltered spectrograms and the filtered spectrograms (one pass per filter), and uses the maximum prediction per class. Since each inference pass takes time, you can also choose to omit the unfiltered inference pass. For large tests, adding a filter increases runtime by about 40%, but the impact is less for small tests since fixed overhead is more significant. To see the effect of different filter parameters, we've provided a plot_filter.py script in the tools directory.
- Renamed the --locfile argument to --filelist. It points to a CSV file containing a list of recordings. Previously all recordings in the input path were processed. Now, if --filelist is specified, only those files are processed. Also, the latitude/longitude/date fields are now optional, so you can request location/date processing for some recordings but not others.
- Any labels that are excluded from the output due to location/date processing, i.e. labels for rare bird species, are now written to a "rarities" directory under the main output directory. Before, the only way to know what was excluded was to run with and without location/date processing and compare the outputs.
- If you remove a non-bird species from ignore.txt, and request location/date processing, the species will now be included in the output. Before, it was excluded since it was not in the eBird database and therefore deemed a rarity. Now the eBird check is skipped for non-bird species.
- We added a tools/rpt_labels.py script that reads labels and generates two output CSVs: summary and details. The summary CSV gives the number of seconds per class and the details CSV gives the number of seconds per recording/class.
- We added a tools/plot_labels.py script that you can use to generate spectrograms for all labels for a class.