South Peak
Recipes
New corpora
- VoxCeleb and RIR recipes by @desh2608 in #475
- Add WenetSpeech recipe by @pkufool in #487
- ICSI meeting corpus by @desh2608 in #526
- ASpIRE data preparation recipe by @desh2608 in #528
- The People's Speech recipe by @pzelasko in #529
- bvcc/VoiceMOS challange data recipe by @oplatek in #578
- Add recipe for aidatatang_200zh. by @csukuangfj in #593
- SPGISpeech recipe by @desh2608 in #600
- [recipe] AliMeeting by @desh2608 in #608
Existing recipes improvements
- A change for tedlium.py by @luomingshuang in #479
- improve adept preparation: adds text interpretation by @oplatek in #474
- Reduce memory usage when writing GigaSpeech manifests by @pzelasko in #494
- adding previous utterance for libritts supervisions by @oplatek in #510
- bugfix for prepare_librispeech command by @rosrad in #516
- Improving Fisher recipe by @pzelasko in #539
- Some Fisher fixes and manifest validation fixes by @pzelasko in #541
- ICSI Recipe - Minor Doc correction by @LasseWolter in #544
- Minor updates for AMI and ICSI by @desh2608 in #545
- [AMI] Added missing IHM channels by @LasseWolter in #555
- Minor changes to LibriCSS and AISHELL-4 recipes by @desh2608 in #580
- Updated ICSI download structure/args for clarity by @LasseWolter in #583
- Fix(icsi-recipe): Use new directory structure in prepare_icsi by @LasseWolter in #592
- Babel recipe fix by @m-wiesner in #647
New features
Support for custom attributes in Cuts
This feature allows attaching arbitrary type of data to cuts: alignments, multiple feature sets, etc.
- Array and TemporalArray manifests (generalization of Features for arbitrary data) by @pzelasko in #458
- Support custom MonoCut attrs (with special support for loading Arrays) by @pzelasko in #459
- Collation of custom cut fields into PyTorch tensors by @pzelasko in #476
custom_collate_fieldpads to the longest read array instead of usingCutSet.pad()by @pzelasko in #482- Add
with_path_prefixtoArrayandTemporalArrayby @pzelasko in #499 - Collation promotes custom field int sequences to int64 by @pzelasko in #507
- More flexibility in mixing cuts with custom attributes by @pzelasko in #642
Data augmentation
- Reverberation using room impulse response by @desh2608 in #477
- Add early reverb option for RIR-based augmentation by @desh2608 in #524
- Options for handling multi-channel RIR by @desh2608 in #621
"Lazy cuts" (less memory / faster execution)
- Option to create a CutSet lazily when everything is sorted on recording IDs by @pzelasko in #493
- Enable adding/combining of lazy manifests by @pzelasko in #495
- Resumable batch feature extraction with reduced memory usage by @pzelasko in #508
DynamicBucketingSampler: on-the-fly bucketing with restricted memory usage by @pzelasko in #517DynamicCutSampler(likeDynamicBucketingSamplerbut without bucketing) by @pzelasko in #579- Custom binary feature storage format by @pzelasko in #522
lhotse split-lazyandCutSet.split_lazy()for memory-efficient splits by @pzelasko in #558- Optional dependency
orjsonfor up to 50% JSONL reading by @pzelasko in #563 - CutSet multiplexing by @pzelasko in #565
stop_earlyarg forCutSet.muxby @pzelasko in #585- Option to set shuffle buffer size in dynamic samplers by @pzelasko in #587
- WebDataset integration for optimized sequential I/O by @pzelasko in #582
- Add WebDataset export CLI and a
fault_tolerantoption by @pzelasko in #599 - Add
WebdatasetWriterfor iterative cut writing by @pzelasko in #602 - More lazily evaluated methods:
map,filter,repeat,shuffleby @pzelasko in #626
New and refreshed APIs
- Deprecate compute_and_store_recording, add save_audio by @desh2608 in #486
- CutSet.decompose() with CLI and streaming read/write enhancements by @pzelasko in #496
- Opensmile wrapper by @marcinwitkowski in #504
fill_supervisionmethod for cuts and cut sets by @pzelasko in #505merge_supervisionsmethod for cuts and cut sets by @pzelasko in #503- Add CLI for
lhotse cut trim-to-supervision <in> <out>by @pzelasko in #514 - CLI for validating recordings+supervisions and extra supervision check by @pzelasko in #515
rngarg forCutSet.truncate()by @pzelasko in #557- Add cut extend method by @desh2608 in #571
- Output more information from CutSet.describe. by @csukuangfj in #606
- Cut into windows with hop by @marcinwitkowski in #651
Improved Kaldi import/export
- KaldiWriter for exporting features to feats.scp by @pzelasko in #473
- Support multi-channel wavs in Kaldi export by @pzelasko in #480
- Make speaker_id prefix of utt_id for Kaldi by @desh2608 in #530
- Fix bug in export to kaldi function by @HuangZiliAndy in #531
- Add method to create SupervisionSet from RTTM files by @desh2608 in #566
- Replace kaldiio with kaldi_native_io. by @csukuangfj in #584
PyTorch API
- Add SpecAugment state dict by @janvainer in #472
- Enable threaded batch IO by @pzelasko in #520
- GlobalMVN and Wav2LogFilterBank torchscriptable by @janvainer in #521
- Streaming Kaldi feature extractors by @pzelasko in #523
- Skipping problematic audios during dataloading - continued by @pzelasko in #533
- Make samplers picklable by @pzelasko in #542
- Rename
SingleCutSampler->SimpleCutSamplerby @pzelasko in #546 - Sampler reports for how much padding is typically used by @pzelasko in #560
- Modified SpecAugment by @luomingshuang in #598
- optimization for specaugment by @luomingshuang in #604
- Return
audio_lensin multi channel audio collater by @desh2608 in #616 - Add sampling statistics report to dynamic samplers by @pzelasko in #628
- New parameter:
OnTheFlyFeatures(..., return_audio=True)by @pzelasko in #629 - RoundRobinSampler: samples mini-batches in turn from each sub-sampler by @pzelasko in #649
- Sampler diagnostics updates: preserved across epochs, fixes for various samplers, extended unit tests by @pzelasko in #639
- Stricter batch constraint exceeding checks by @pzelasko in #653
Documentation
- Refresh tutorials in examples + quality of life improvements in code by @pzelasko in #617
- Tutorial for Lhotse's WebDataset integration by @pzelasko in #619
- Add links in tutorials, fix some issues with lazy manifests by @pzelasko in #620
- Diagrams illustrating the architectures of dataloading solutions by @pzelasko in #622
- Tutorial about combining multiple datasets by @pzelasko in #624
Random/Other
- lhotse split produces digit aligned names by @oplatek in #483
- More user-friendly default settings by @pzelasko in #519
- Change the default Fbank and Mfcc feature extractors implementation by @pzelasko in #525
- citation file for the project by @pzelasko in #581
- Improve
__repr__of manifests with binary data by @pzelasko in #596 - CI cache for pip dependencies by @pzelasko in #633
- Update black, pytest, speed up some tests by @pzelasko in #650
- Use faster resampling transform by @pzelasko in #652
- Further resampling speedup by @pzelasko in #657
Bug fixes
- Force single-threaded execution for ffmpeg by @pzelasko in #481
- Minor change in Reverb serialization by @desh2608 in #484
- Fixes and tests for OnTheFlyFeatures with some non-default feature extractors by @pzelasko in #492
- Audio duration mismatch tolerance API by @pzelasko in #491
- Let kaldifeat handle the device of input waves. by @csukuangfj in #498
- Minor fix for RIR augmentation by @desh2608 in #501
- Fix reading resampled OPUS files by @pzelasko in #509
- Fix missing
lhotse.testingpackage when installing lhotse by @pzelasko in #511 - Add assertion for non-negative offset for truncate by @desh2608 in #512
- Possible workaround for HDF5 growing memory issue by @pzelasko in #527
- addressing etree error under py3.9, resolves #535 by @jtrmal in #536
- [kaldi] Fixed wav source for command type by @desh2608 in #537
- Fix
collate_audioafter adding fault_tolerant arg by @pzelasko in #540 - Fix the official example by @pzelasko in #550
- Fix mixing with SNR with PaddingCut as the first track in MixedCut by @pzelasko in #547
- Fix
trim_to_supervisions(keep_overlapping=False)for completely overlapping cuts by @pzelasko in #553 - Fix randomness in DynamicBucketingSampler by @pzelasko in #562
- Add warning if num_jobs >1 and torch.num_threads >1 by @LasseWolter in #561
- Workaround for Python's gzip not handling "trailing garbage" unlike the CLI program by @pzelasko in #564
- Account for duration param in extract_from_recording_and_store in lhotse/features/base.py by @armusc in #572
- Quick fix for an edge case in CutSet.mix by @pzelasko in #570
- Update
.is_lazyproperty to account for new types of lazy iterators by @pzelasko in #576 - Fix array lengths in custom collation by @pzelasko in #577
- Fix CutSet sample, and add mix padding by @desh2608 in #589
- Fix for MonoCut from_dict by @desh2608 in #591
- Fix start/offset when moving cut/features/array data to memory by @pzelasko in #597
- fix resample to work with webdataset i.e. binary audio source by @oplatek in #609
- Fix an assertion in torchaudio_load by @pzelasko in #613
- Fixes for PyTorch 1.11 by @pzelasko in #614
- Fix fault_tolerant audio loading option for mixed cuts with zero energy by @pzelasko in #615
- WIP: fix fault tolerant load audio by @oplatek in #595
- Add a check for detecting wrong TemporalArray start attribute in long recordings by @pzelasko in #623
- Fix
.subset(first=...)for lazy manifests withoutlenby @pzelasko in #625 - Fix typos and update doc. by @csukuangfj in #630
- Simplify
LazyJsonlIteratorand fixTimeConstraintequality by @pzelasko in #632 - Avoid re-encoding in move_to_memory by @pzelasko in #636
- Fix for deserializing arrays with
storage_path=Noneby @pzelasko in #637 - Fix tests by @pzelasko in #638
- Fix probabilistic decision condition error of cutset input transform. by @drawfish in #635
- Suppress any type of exception in fault tolerant audio reading by @pzelasko in #641
- Fix padding cuts with custom attrs by @pzelasko in #643
- Fix rank/world_size settings for ZipSampler and RoundRobinSampler by @pzelasko in #654
New Contributors
- @marcinwitkowski made their first contribution in #504
- @rosrad made their first contribution in #516
- @HuangZiliAndy made their first contribution in #531
- @LasseWolter made their first contribution in #544
- @armusc made their first contribution in #572
- @drawfish made their first contribution in #635
Full Changelog: v0.12...v1.0