Fixes single instance model visualization during training (#620)
Node/instance visibility fixes (#619)
Retrigger build
Rebuild conda package with cuda run requirements
Added command to return to last interacted frame (#613)
Update rich to 10.16.1
Add batch set button in video importer (#613)
Ensure randomly initialized points don't go beyond frame bounds (#613)
Build attempt -> 1.2.0a1
Fix PAF grouping when edges aren't sorted
Escape regex properly
Skip broken test locally
More permissive versions - h5py 3.1.0 to 3.6.0 - scipy 1.4.1 to 1.7.1
Update deprecated numpy usage
More permissive builds - Allows numpy 1.19.5 or 1.21.2 - Allows for tensorflow 2.6.2 or 2.7.0 - Separate build files for manual vs release - Only use custom conda packages for conda build
Lazy evaluation of frame list in inference CLI (#659)
Trigger build
Fix dependencies (#656)
Bump alpha version for hotfix
Fix gui inference (#655)
Fix CD builds (#653)
Update one last dep
Pre-1.2.0a3 CD updates (#652)
Make PAF distance penalty more usable (#650)
Use rich to print inference CLI inputs and provenance (#651)
Bump minor versions and relax some constraints (#647)
Fix data loading regression in #634 (#646)
Fix regression in #639 breaking multi-size inference (#645)
Fix path resolution in training & inference (#643)
Training job generation tweaks (#642)
Fix failing grayscale conversion at inference time on GPU (#639)
Drag and drop (#632)
Add cuda-nvcc (#623)
Training profile tweaks (#622)
Numpy conversions (#621)
Fixes single instance model visualization during training (#620)
Node/instance visibility fixes (#619)
Retrigger build
Rebuild conda package with cuda run requirements
Added command to return to last interacted frame (#613)
Update rich to 10.16.1
Add batch set button in video importer (#613)
Ensure randomly initialized points don't go beyond frame bounds (#613)
Build attempt -> 1.2.0a1
Fix PAF grouping when edges aren't sorted
Escape regex properly
Skip broken test locally
More permissive versions - h5py 3.1.0 to 3.6.0 - scipy 1.4.1 to 1.7.1
Update deprecated numpy usage
More permissive builds - Allows numpy 1.19.5 or 1.21.2 - Allows for tensorflow 2.6.2 or 2.7.0 - Separate build files for manual vs release - Only use custom conda packages for conda build
CI without cuda
Try CI with numpy 1.21.2
Fix edge case when evaluating centroid models
Disable build on push
Fix build and rerun
Talmo/tf26 (#617)
Fix quick install command
Try to fix ubuntu conda build
Fix conda builds
Update to TensorFlow 2.7 (#609)
Update readme with help links
Pre-1.1.5 updates - Remove version from some places - Add open in colab button in model eval notebook - Update installation doc - Add a general Help page - Add some deep links to the CLI sections
High level load metrics (#573)
Labels.split() (#574)
Skeleton merge conflicts (#572)
Fix single instance predictor not using peak threshold param (#571)
Small GUI fixes (#570)
Empty instance fixes (#569)
Update codecov badge branch
Minor QOL update (#562)
Add CLI options for specifying the GPU when training (#547)
Workaround for Qt freezing in Mac OS Big Sur (fixes #450)
Implement offset regression (#447)
Add a couple of top level aliases from nn.system module (#446)
Inference fixes and cleanup (#445)
windows path
ignore order
ignore order
realistic tests
tests
Small fix: correctly pass arguments (#433)
Add downloads and docs badge
extract
data
format
adjust
wip
Add single instance to stride resolution in the GUI
Bump initial learning rate to 1e-3 for pretrained profiles
Fix test
Add more training profiles with pretrained encoder - Removed mobilenetv2 profile -- all profiles default to efficientnetb0 (but this can be easily changed from the dropdown in the GUI) - Adjust default bottomup profiles to have equal loss weights and larger sigma for PAFs
Add test for variable input channels
Fix model construction - Add tests for forward pass
Fix profiles
Add pretrained encoder models to GUI - Add two base profiles
Update conda build scripts
Initial implementation of pretrained encoder backbone.
Update gitignore
Reset build workflow to release-triggered
Try to fix anaconda login on ubuntu (again)
Try to fix anaconda login on ubuntu
Manually trigger build and fix anaconda login
No push triggering for builds :)
Switch to github.event.release.prerelease for build conditional
High level model loading interface - sleap.load_model (sleap.nn.inference.load_model) instantiates the appropriate predictor class and tracker based on simple args. - Standardize inference_model attribute
Remove deprecation notice from tracker cleaner
Explicit OS versions in CI workflow
Move PySide2 to dedicated conda package - Explicit OS versions in the build script
Bump minor version to 1.0.10
Switch back to build triggering on release only
Fix typo in instance cropper
Add a LambdaMap transformer for generic transformations in pipelines - Doc fixes
Add input key specification in some transformers for flexibility. - Fix some docs
Remove transformer for PAF grouping from data pipelines
(Hopefully the last) PAF grouping overhaul - Drastically improved performance for batch inference - Cleaned up API and added test coverage for main algorithm steps - Improved docs
Fix CPU thrashing
Push all 'old' confige to the end without altering order otherwise.
Fix build script - Ubuntu: PyPI and conda packages should be working, testing with wildcard filename - Windows: disable pip package upload (worked before because it was skipped) - Windows: try build and upload with powershell
Update the GUI skeleton after inference if it changed (#414)
fix flow tracker failing at flow_shift_instances()
Hotfix for backbone output stride detection - This will soon be handled differently/removed from the config entirely
Update conda build.sh
Update badges
Fix merge typo
Reset build configuration for release-based processing
Attempt to fix Windows conda build (5)
Attempt to fix Windows conda build (4)
Attempt to fix Windows conda build (3)
Attempt to fix Windows conda build (2)
Attempt to fix Windows conda build
Bump prerelease version
Fix new export commands
Menu reorganization - Instance selection moved to Go menu - Fit instances to view moved to top of View menu - Render clip moved to View menu - Instance, prediction and track manipulation moved to Labels menu - Added more options for exporting packages - Add links to documentation, code and website to Help menu - Add release checking to Help menu
Release checker - Added new version checking through the GitHub REST API
Add the ability to export image data for custom frames and suggestions - Labels.save and labels.save (instance method) can now embed the user labeled frames, all labeled frames (including empty ones), and/or suggested frames (which don't have associated LabeledFrames). This makes it easier to export frames for inference together with the ones used for training.
Add convenience methods for interacting with exported packages - HDF5Videos now have has_embedded_images, source_video_available, and embedded_frame_inds properties to check for embedded images - HDF5Video now auto-detects the exported package format, indicated by having sub-datasets named "/video" and "/frame_numbers" - Tests
Bump alpha version
Add tests for fit instance rect detection
Training config validation in the GUI - Add validation fraction to config editor - Remove output stride from backbone config UI - Infer output stride from heads - Constrain max stride from heads - Disable tensorboard logging by default - Disable OHKM by default - Correctly detect multiple built-in profiles
Add head type to the run name suffix when saving a training pipeline - Prevents multi-model training jobs from being overwritten (#415)
Keep previous state when fit to zoom is enabled with no instances - Addresses use case of when user is zoomed to instances but then seeks back/forward to frames with no predictions (#416)
Bump alpha version
Minor codestyle fixes and update deprecated attrs constructor
Set h5py required version to 2.10 to prevent breaking tf.keras in 3.0
Add maDLC labels import support
Conda package build tweaks - Explicit pip install of PyPI dependencies in Conda package build - Conda package version from sleap.version - Test after build
Re-bump version
Revert alpha version
Bump alpha version
Fix test
Attempt to fix conda build - Remove redundant packages with pip managed ones - Switch to just installing cuda rather than tensorflow using conda - Specify default numpy version
Test fix
Fix for Labels.has_frame when using cache - More tests
Clean up environment and dependency redundancy and update appveyor
Bump alpha version
Add tests
Remove conflicting predictions from labels when merging after inference. - Predicted instances in frames that are also present in the new labels will be removed before merging (fixes #413). - Formatting
Formatting and style
Add remove_user_instances and remove_predictions to Labels - These will remove user or predicted instances from the dataset, optionally conditioned on another dataset to remove conflicts.
Add has_frame method to Labels for quick checking of frame existence
Add describe method to Labels for easy inspection of dataset stats
Bump minor alpha version
Version fence numpy for TensorFlow update
Bump minor alpha version
Switch to hashing LabeledFrames by ID - Drastically improves frame removal time, and we're not using equality by attribute values anyway - Added more flexible frame removal methods
Separate versions of preferences and other config files (#488)
Bump pre-release version for mock test
master->main after rebase
Prep for master->main (#474)
Prep for master->main (#475)
Docs overhaul (#478)
Bump pre-release version
Miscellaneous QOL (#467)
Update PULL_REQUEST_TEMPLATE.md
Add CLA (#473)
Update authors list (#471)
Create PULL_REQUEST_TEMPLATE.md
Type check + Lint in CI (#470)
Multi-size videos in data pipelines (#440)
Symmetry-aware flip augmentation (#455)
Apply black to 'sleap' and 'tests' (#465)
Merging is now aware of the source video if available. (#462)
Bump prerelease version
Inference CLI fixes (#459)
Pin dev dependency
Bump prerelease version
Workaround for Qt freezing in Mac OS Big Sur (fixes #450)
Implement offset regression (#447)
Add a couple of top level aliases from nn.system module (#446)
Inference fixes and cleanup (#445)
windows path
ignore order
ignore order
realistic tests
tests
Small fix: correctly pass arguments (#433)
Add downloads and docs badge
extract
data
format
adjust
wip
Add single instance to stride resolution in the GUI
Bump initial learning rate to 1e-3 for pretrained profiles
Fix test
Add more training profiles with pretrained encoder - Removed mobilenetv2 profile -- all profiles default to efficientnetb0 (but this can be easily changed from the dropdown in the GUI) - Adjust default bottomup profiles to have equal loss weights and larger sigma for PAFs
Add test for variable input channels
Fix model construction - Add tests for forward pass
Fix profiles
Add pretrained encoder models to GUI - Add two base profiles
Update conda build scripts
Initial implementation of pretrained encoder backbone.
Update gitignore
Reset build workflow to release-triggered
Try to fix anaconda login on ubuntu (again)
Try to fix anaconda login on ubuntu
Manually trigger build and fix anaconda login
No push triggering for builds :)
Switch to github.event.release.prerelease for build conditional
Trigger building manually on push
Update setup-miniconda and website workflow
Update CI and build conditionals
Bump alpha version
High level model loading interface - sleap.load_model (sleap.nn.inference.load_model) instantiates the appropriate predictor class and tracker based on simple args. - Standardize inference_model attribute
Remove deprecation notice from tracker cleaner
Explicit OS versions in CI workflow
Move PySide2 to dedicated conda package - Explicit OS versions in the build script
Bump minor version to 1.0.10
Switch back to build triggering on release only
Fix typo in instance cropper
Add a LambdaMap transformer for generic transformations in pipelines - Doc fixes
Add input key specification in some transformers for flexibility. - Fix some docs
Remove transformer for PAF grouping from data pipelines
(Hopefully the last) PAF grouping overhaul - Drastically improved performance for batch inference - Cleaned up API and added test coverage for main algorithm steps - Improved docs
Fix CPU thrashing
Push all 'old' confige to the end without altering order otherwise.
Nits
lint
add comment
Fix config order when loading
Try to fix conda builds
Remove redundant str from LabeledFrame
Bump alpha version (for CI test)
Scope CI workflow to only trigger when library or tests are updated
Test package build with new sleap/tensorflow package - Website workflow now triggers only on change to readme or docs/* - Update environment files
Fix path again
Fix paths for website builder
Fix shell for website builder
Reset package build script to release triggered
Checkout before install
Install base package before building website
Website builder makefile
Just specify python version instead of conda
Use conda for website build
Website build action fix
Implement website build action
Fix branch conditional
Fix env var in Windows build
Fix build script - Ubuntu: PyPI and conda packages should be working, testing with wildcard filename - Windows: disable pip package upload (worked before because it was skipped) - Windows: try build and upload with powershell
Bump alpha version (for CI test)
Bump alpha version (for CI test)
Add test release filtering to release checker
Lint / nits
Fix config test
Add old training profiles back in
Update miniconda GH action version
Bump alpha version
Update badges
Fix merge typo
Reset build configuration for release-based processing
Attempt to fix Windows conda build (5)
Attempt to fix Windows conda build (4)
Attempt to fix Windows conda build (3)
Attempt to fix Windows conda build (2)
Attempt to fix Windows conda build
Fix requirements.txt
Update GH Action dependency
Initial attempt at package build workflow (2)
Initial attempt at package build workflow
Keep confmap visualization at fixed zoom.
Switch to tf.data.Dataset.cache for preloading. - Appears to avoid deadlocks with the generator method in 2.3.
Fix inference model creation for bottomup and single instance
Fix training pipeline creation with shuffling - Previously was not correctly setting the shuffle buffer size attribute
Move inference model creation to private method for flexibility
Enable visualization of raw instance point arrays - Add automatic conversion of image tensors to numpy arrays
Implement bottom-up inference layer and model - Update predictor to use inference classes - Add automatic pipeline creation for Labels in InferenceModels
PAF grouping module fixes - Fix incorrectly saving line scores to fraction correct score - Handle matching when no peak candidates available for particular edges - Add batch-level grouping method to PAFScorer - Docstrings
Add pipeline creation method to sleap.Labels - Creates a (optionally) batched pipeline for reading labels
Set default batch sizes for inference
Modify some defaults for training forms - Set marker edge color to be transparent in training monitor so overlapping markers are visible - Fix training monitor batch number field (no longer in logs in TF2.3)
Fix peak finding for visualization during topdown instance training
Fix for topdown cropping when no peaks found in batch
Add single instance inference layer and model - Tests - Update predictor - Minor docstring fixes
Fix RandomCropper and add tests
Set coverage to sleap/
Skip conda list on windows since it's still broken
Try to fix workflow again
Try to fix workflow
Try out codecov for coverage via workflow - Merge pytest job step
Fix broken unit tests - Native file dialog check on Linux (default dtype changes by platform) - explicit dtype for describe_tensors tests
Add caching and attempt to fix broken tests - conda list breaks on windows, so just removing it - Try to fix broken gui tests by running via xvfb on ubuntu
Fix workflow command and add environment file without cuda
Pilot GH Actions testing
Add channels to environment.yml
Bump minor version
Recreate model in keras model inference transformer
Add RandomCropper transformer for data augmentation - Applies random cropping to the input. Useful for training on very large FOV/resolution images. - Optimize bottom-up data generators for large number of instances.
Add range specification of example indices to LabelsReader
Add nn.data.pipelines and nn.inference to toplevel imports
Add range specification of example indices to VideoReader
Add pipeline creation method to sleap.Video - Creates a VideoReader-based pipeline from the Video instance with optional batching, prefetching and frame index specification - InferenceModel.predict() will automatically call this method if predicting on a sleap.Video
Version fence numpy due to TF 2.3 requirements
Add base InferenceLayer and InferenceModel classes - These handle all preprocessing and variable size output batching during inference. - Add docstrings and tests for new topdown classes. - Automatically infer model output stride. - Enable local offset refinement for peak finding.
Add option to convert unragged examples to numpy arrays - Uses the same utility function as tf.keras.Model.predict
Revert colorspace normalization to using static shapes
Add bounds for confmaps viz
Clean up and unify peak finding methods - find_local_peaks and find_global_peaks now work as single entrypoint and allow specification of the refinement method - Re-enabled quarter pixel local-offset refinement
Fix for global peak finding with integral regression - Fixes edge case where the first peak coordinate is NaN results in crash when cropping local patches. - Add test for edge case.
Update conda.yml
Create conda.yml
Change model construction to create flat list of output tensors. - Fixes bottom-up training. - Necessary in order to keep shapes lined up with data generator. - Head tensor specification should just refer to the output tensor names explicitly to avoid ambiguous nesting/ordering.
Clean up topdown predictor classmethod creation
Fix evaluate_model saving metrics even if save=False is specified
Separate topdown model creation from loader classmethod. - Allows for creation of the predictor from memory. - Automatically created when running predict() if not already provided.
Fix grouping dtype sometimes being incorrect when using GT instances
Remove duplicate PyPI requirements from environment.yml - These get pulled in through setup.py -> requirements.txt.
Fix broken normalizer test - Switched to using static shapes, which should be known from the provider anyway. - Unclear what the cause is, but it seems that dynamic shapes can't be evaluated properly for inferring normalization mode, at least in the test example.
Fix topdown training visualization
Docstrings and tests for FindInstancePeaks - Now supports raw tensors without being in an example. - Added tests with a dummy model.
Peak finding fixes for cases with no peaks - Added tests for main peak finding methods
Fix topdown model when max_instances IS specified
Fix topdown model when max_instances is not specified
Set image shape explicitly in providers. - Necessary in some pipeline configurations where the shape may need to be specified for certain ops like resizing.
Make sure unrag_tensor uses the right dtype for calculating the shape
Fix ground truth instance peaks layer - Now matches sample-wise and matches the correct number of centroids - Add more tests to catch this case
Implement new topdown ground truth layers - Refactoring of nn.inference and docstrings - Tests - Edge case still needs to be fixed: matching in ground truth instance peaks layer will duplicate instances to match bounding shape. This results in one broken test for tracking.
Unragging functions for converting ragged tensors to concrete - unrag_example: unrags all items in a dict to their bounding shape. - unrag_tensor: unrag a single tensor with possibly multiple ragged dimensions and with the ability to specify the max size to pad to. - Add option to leave batched examples as ragged tensors in Batcher
Add general purpose utility for describing tensors - Use in pipeline.describe()
Add pipeline peek and describe methods - QOL additions to make it easier to inspect the outputs of pipelines when composing custom ones.
Specify tensor shapes for variable length values in LabelsProvider - Needed in TF 2.3 for ragged batching
QOL: Better string representations for some of the core data structures - Labels, LabeledFrame and Skeleton now show counts instead of spamming the full default attrs repr and str.
Add slice indexing to labels
Enable saving labels packages with images from frames without instances - Makes it possible to save extra images, e.g., for inference or for use in semi-supervised learning contexts.
Single model topdown implementation. - Centroid cropping and instance prediction all in one tf.keras.Model! - Results in massive speed-up over the tf.data.Dataset-based inference with separate models. - Still missing version with ground truth for mocking sub-components.
Color by track when plotting labeled frame via lf.plot()
Extend image resizing and padding to work with rank 4 (batched) images.
Remove old implementations of peak finding functions for transformers
Re-implement general purpose peak finders. - These are a little redundant, but enable the fast implementation of local and global peak finding using integral regression with batches. - This replaces the implementations in nn.data.inference. - Fixes batched global peak finding bug.
Parametrize device for KeyMover transformer - Remove debug print statements
Remove unused conda-cpu build config
Update tests for TF2.3 - Fix layer name test: tf.keras.layers.Add sometimes gets instantiated as a direct op? - Fix Batcher to check for ragged tensor type before conversion. This is because tf.data.experimental.dense_to_ragged_batch will now leave elements as tf.Tensors if shape is fixed and known.
Update to TensorFlow 2.3 - Replace tensorflow CUDA packages with direct cudatoolkit/cudnn since we install tensorflow from pypi anyway. - Update AppVeyor build script hack to ignore conda cuda packages for lower build times.
Menu reorganization - Instance selection moved to Go menu - Fit instances to view moved to top of View menu - Render clip moved to View menu - Instance, prediction and track manipulation moved to Labels menu - Added more options for exporting packages - Add links to documentation, code and website to Help menu - Add release checking to Help menu
Release checker - Added new version checking through the GitHub REST API
Add the ability to export image data for custom frames and suggestions - Labels.save and labels.save (instance method) can now embed the user labeled frames, all labeled frames (including empty ones), and/or suggested frames (which don't have associated LabeledFrames). This makes it easier to export frames for inference together with the ones used for training.
Add convenience methods for interacting with exported packages - HDF5Videos now have has_embedded_images, source_video_available, and embedded_frame_inds properties to check for embedded images - HDF5Video now auto-detects the exported package format, indicated by having sub-datasets named "/video" and "/frame_numbers" - Tests
Training config validation in the GUI - Add validation fraction to config editor - Remove output stride from backbone config UI - Infer output stride from heads - Constrain max stride from heads - Disable tensorboard logging by default - Disable OHKM by default - Correctly detect multiple built-in profiles
Add head type to the run name suffix when saving a training pipeline - Prevents multi-model training jobs from being overwritten (#415)
Keep previous state when fit to zoom is enabled with no instances - Addresses use case of when user is zoomed to instances but then seeks back/forward to frames with no predictions (#416)
Conda package build tweaks - Explicit pip install of PyPI dependencies in Conda package build - Conda package version from sleap.version - Test after build
Attempt to fix conda build - Remove redundant packages with pip managed ones - Switch to just installing cuda rather than tensorflow using conda - Specify default numpy version
Fix for Labels.has_frame when using cache - More tests
Clean up environment and dependency redundancy and update appveyor
Bump alpha version
Add tests
Remove conflicting predictions from labels when merging after inference. - Predicted instances in frames that are also present in the new labels will be removed before merging (fixes #413). - Formatting
Formatting and style
Add remove_user_instances and remove_predictions to Labels - These will remove user or predicted instances from the dataset, optionally conditioned on another dataset to remove conflicts.
Add has_frame method to Labels for quick checking of frame existence
Add describe method to Labels for easy inspection of dataset stats
Push all 'old' confige to the end without altering order otherwise.
Nits
lint
add comment
Fix config order when loading
Add test release filtering to release checker
Lint / nits
Fix config test
Add old training profiles back in
Bump alpha version
Update the GUI skeleton after inference if it changed (#414)
fix flow tracker failing at flow_shift_instances()
Hotfix for backbone output stride detection - This will soon be handled differently/removed from the config entirely
Update conda build.sh
Bump prerelease version
Fix new export commands
Menu reorganization - Instance selection moved to Go menu - Fit instances to view moved to top of View menu - Render clip moved to View menu - Instance, prediction and track manipulation moved to Labels menu - Added more options for exporting packages - Add links to documentation, code and website to Help menu - Add release checking to Help menu
Release checker - Added new version checking through the GitHub REST API
Add the ability to export image data for custom frames and suggestions - Labels.save and labels.save (instance method) can now embed the user labeled frames, all labeled frames (including empty ones), and/or suggested frames (which don't have associated LabeledFrames). This makes it easier to export frames for inference together with the ones used for training.
Add convenience methods for interacting with exported packages - HDF5Videos now have has_embedded_images, source_video_available, and embedded_frame_inds properties to check for embedded images - HDF5Video now auto-detects the exported package format, indicated by having sub-datasets named "/video" and "/frame_numbers" - Tests
Bump alpha version
Add tests for fit instance rect detection
Training config validation in the GUI - Add validation fraction to config editor - Remove output stride from backbone config UI - Infer output stride from heads - Constrain max stride from heads - Disable tensorboard logging by default - Disable OHKM by default - Correctly detect multiple built-in profiles
Add head type to the run name suffix when saving a training pipeline - Prevents multi-model training jobs from being overwritten (#415)
Keep previous state when fit to zoom is enabled with no instances - Addresses use case of when user is zoomed to instances but then seeks back/forward to frames with no predictions (#416)
Bump alpha version
Minor codestyle fixes and update deprecated attrs constructor
Set h5py required version to 2.10 to prevent breaking tf.keras in 3.0
Add maDLC labels import support
Conda package build tweaks - Explicit pip install of PyPI dependencies in Conda package build - Conda package version from sleap.version - Test after build
Re-bump version
Revert alpha version
Bump alpha version
Fix test
Attempt to fix conda build - Remove redundant packages with pip managed ones - Switch to just installing cuda rather than tensorflow using conda - Specify default numpy version
Test fix
Fix for Labels.has_frame when using cache - More tests
Clean up environment and dependency redundancy and update appveyor
Bump alpha version
Add tests
Remove conflicting predictions from labels when merging after inference. - Predicted instances in frames that are also present in the new labels will be removed before merging (fixes #413). - Formatting
Formatting and style
Add remove_user_instances and remove_predictions to Labels - These will remove user or predicted instances from the dataset, optionally conditioned on another dataset to remove conflicts.
Add has_frame method to Labels for quick checking of frame existence
Add describe method to Labels for easy inspection of dataset stats
Bump minor alpha version
Version fence numpy for TensorFlow update
Bump minor alpha version
Switch to hashing LabeledFrames by ID - Drastically improves frame removal time, and we're not using equality by attribute values anyway - Added more flexible frame removal methods
Bump tensorflow from 2.1 to 2.1.2
Fix type warning in run_tracker
Bump to 1.0.9
Update docs with link to preprint
Fix track serialization bug when using Kalman filter - This would sometimes create tracks with spawn frames set as numpy arrays, which would fail to serialize after tracking.
Fix learning finished dialog signal attribute name
Fix part affinity field preview overlay
Add sleap.io.asyncvideo module.
Close gui windows after test.
Update correctly the configuration for validation fraction
Add set_message method.
Improve test coverage and typing.
Add clean target to Makefile.
Better docstrings, minor refactoring.
Add module docstring.
Better docstrings.
More/better docstrings for io.format
Support for pafs in model overlay.
Base class for overlays, better docstrings, pafs.
FormBuilderModalDialog can init by form name.
Add module docstring.
Better docstrings.
Add module docstring.
Better docstrings.
Better docstrings.
Better docstrings.
Use PyPI sleap account (not api token)
Bump alpha version (for testing pypi api token).
Use PyPI api token (from sleap account).
Add module docstring and typing.
Add module docstring.
Add module docstring.
Add docstring and test.
Add docstrings.
Add docstrings.
Add module docstring.
Add module docstring.
Add docstrings and test coverage.
Improve module docstring.
Improve docstrings and test coverage.
Remove print statements and add docstring to nn.tracking.run_tracker
Comment typo
Metrics evaluation improvements - Add ability to consider non-user instances as GT - Fix docstrings - Update matching to not mutate frame instance lists
Fix many docstrings and type annotations in io.dataset - Fix typo in numpy index support in contains
Add numpy index support to Labels.contains
Added more convenience accessors to Labels - labels[(Video, numpy)] - labels[Video, frame_idx]
Add Labels.has_missing_videos property - Tests
Add Video.is_missing property to check for missing file - Tests - Fix some comments/docstring formats
Add tests for sleap.load_file
Add convenience scalar skeleton and video properties to Labels - Returns the first skeleton/video for single skeleton/video labels - Tests
Add instance method for saving labels. - This wraps Labels.save_file(labels, ...) -> labels.save(...)
Remove unused labels export and data generation methods
Add support for sleap.Labels indexing with numpy arrays - Update the docstring for getitem - Tests
Fix typo in convenience LabeledFrame plotting methods and add note.
High level sleap labels loader - Simple loading via sleap.load_file() - Automatically searches for missing videos in the labels folder. - Adjust module docstring - Add docstring to find_path_using_paths
Add convenience plotting methods for labeled frames.
Fix track serialization bug when using Kalman filter - This would sometimes create tracks with spawn frames set as numpy arrays, which would fail to serialize after tracking.
Fix learning finished dialog signal attribute name
Fix part affinity field preview overlay
Add sleap.io.asyncvideo module.
Close gui windows after test.
Update correctly the configuration for validation fraction
Disable GPU memory pre-allocation by default during training. - This affects some systems with low memory GPUs.
Use empty window when opening new project.
Hotfix for batcher unragging - Checks for tensor class before attempting to unrag. - Bump to 1.0.9a2
Add method to rotate/translate instance w/ matrix.
Better docstring, rename private methods.
Better docstring.
Better docstrings.
Validate skeleton for bottom up models.
Add PAF magnitude TensorBoard/saved image visualization during training
Add set_message method.
Improve test coverage and typing.
Add clean target to Makefile.
Better docstrings, minor refactoring.
Add module docstring.
Better docstrings.
More/better docstrings for io.format
Support for pafs in model overlay.
Base class for overlays, better docstrings, pafs.
FormBuilderModalDialog can init by form name.
Add module docstring.
Better docstrings.
Add module docstring.
Better docstrings.
Better docstrings.
Better docstrings.
Use PyPI sleap account (not api token)
Bump alpha version (for testing pypi api token).
Use PyPI api token (from sleap account).
Add module docstring and typing.
Add module docstring.
Add module docstring.
Add docstring and test.
Add docstrings.
Add docstrings.
Add module docstring.
Add module docstring.
Add docstrings and test coverage.
Improve module docstring.
Improve docstrings and test coverage.
Remove print statements and add docstring to nn.tracking.run_tracker
Comment typo
Metrics evaluation improvements - Add ability to consider non-user instances as GT - Fix docstrings - Update matching to not mutate frame instance lists
Fix many docstrings and type annotations in io.dataset - Fix typo in numpy index support in contains
Add numpy index support to Labels.contains
Added more convenience accessors to Labels - labels[(Video, numpy)] - labels[Video, frame_idx]
Add Labels.has_missing_videos property - Tests
Add Video.is_missing property to check for missing file - Tests - Fix some comments/docstring formats
Add tests for sleap.load_file
Add convenience scalar skeleton and video properties to Labels - Returns the first skeleton/video for single skeleton/video labels - Tests
Add instance method for saving labels. - This wraps Labels.save_file(labels, ...) -> labels.save(...)
Remove unused labels export and data generation methods
Add support for sleap.Labels indexing with numpy arrays - Update the docstring for getitem - Tests
Fix typo in convenience LabeledFrame plotting methods and add note.
High level sleap labels loader - Simple loading via sleap.load_file() - Automatically searches for missing videos in the labels folder. - Adjust module docstring - Add docstring to find_path_using_paths
Add convenience plotting methods for labeled frames.
Typo in module docstring
Add set_message method.
Improve test coverage and typing.
Add clean target to Makefile.
Better docstrings, minor refactoring.
Add module docstring.
Better docstrings.
More/better docstrings for io.format
(Really) add coveralls badge
Add Coveralls badge
Support for pafs in model overlay.
Base class for overlays, better docstrings, pafs.
FormBuilderModalDialog can init by form name.
Add module docstring.
Better docstrings.
Add module docstring.
Better docstrings.
Better docstrings.
Better docstrings.
Use PyPI sleap account (not api token)
Bump alpha version (for testing pypi api token).
Use PyPI api token (from sleap account).
Add module docstring and typing.
Add module docstring.
Add module docstring.
Add docstring and test.
Add docstrings.
Add docstrings.
Add module docstring.
Add module docstring.
Add docstrings and test coverage.
Improve module docstring.
Improve docstrings and test coverage.
Remove print statements and add docstring to nn.tracking.run_tracker
Comment typo
Metrics evaluation improvements - Add ability to consider non-user instances as GT - Fix docstrings - Update matching to not mutate frame instance lists
Fix many docstrings and type annotations in io.dataset - Fix typo in numpy index support in contains
Add numpy index support to Labels.contains
Added more convenience accessors to Labels - labels[(Video, numpy)] - labels[Video, frame_idx]
Add Labels.has_missing_videos property - Tests
Add Video.is_missing property to check for missing file - Tests - Fix some comments/docstring formats
Add tests for sleap.load_file
Add convenience scalar skeleton and video properties to Labels - Returns the first skeleton/video for single skeleton/video labels - Tests
Add instance method for saving labels. - This wraps Labels.save_file(labels, ...) -> labels.save(...)
Remove unused labels export and data generation methods
Add support for sleap.Labels indexing with numpy arrays - Update the docstring for getitem - Tests
Fix typo in convenience LabeledFrame plotting methods and add note.
High level sleap labels loader - Simple loading via sleap.load_file() - Automatically searches for missing videos in the labels folder. - Adjust module docstring - Add docstring to find_path_using_paths
Add convenience plotting methods for labeled frames.
Fix confidence map generator tests to account for sigma stride scaling
Fix upsampling stack tests to account for input intermediate features
Fix logging string formatting in evaluate_model.
Add prediction and metric evaluation at the end of training procedure.
Fix circular imports in evals
Remove warning when video paths cannot be found by default. - This reduces sometimes large amount of spam when loading labels projects interactively that have many video files.
Fix logging -> logger scope in training.
Set default integral refinement patch size to 5. - Slightly faster and sufficient with sigma = 1 in simulation experiments.
Add docstrings to evaluation module and add convenience method. - evaluate_model can be used during training to generate predictions and metrics.
Confidence map sigmas are now scaled by their output stride. - This enables a consistent spread in crops around peaks for subpixel refinement and reduces quantization error.
Add automatic Provider instantiation for Predictor classes.
Add run() method to Pipeline as a convenience consumer function. - Returns all examples from a pipeline in a single call.
Add numpy() method to Instances analogous to EagerTensors.
Include the output of the encoder in intermediate feature list. - Now models that use UpsamplingStack can output to heads with the same output stride as the encoder's max stride, i.e., the features before any upsampling layers. - Fix error message when missing feature activation for a head.
Fix model construction with no intermediate features
Start new track after gap in tracking.
Modified the matching algorithm.
Exclude invalid matches.
Improvements to gui inference frame list support
Minor cleaning.
Major re-write of Kalman tracking code.
Add type annotations and more docstrings.
Add Track to sleap top level imports.
Split track cull/connect functs, move tests.
Add colab explanation and link to notebook repo.
Add guide for saving custom training profile.
Add more receptive field explanation.
Update dialog images for current app version.
More minor clarifications to labeling doc.
Minor change of wording
Minor improvements
Fix tracking fields to match cli.
Add SLEAP_USE_DUMMY_VIDEOS env var for debugging.
Fix test for grouping iter.
Remove debug print.
Add --verbose for inst info in sleap-inspect.
Only load HDF5 video once.
Support more optimizers in the training backend - Adds support for configuring the initial learning rate for SGD and RMSprop
Add debug option to hide shorter tracks in seekbar
Fixes + test coverage to kalman matching functs.
Fixes + test coverage to kalman matching functs.
Bump alpha version
Fix confidence map generator tests to account for sigma stride scaling
Fix upsampling stack tests to account for input intermediate features
Fix logging string formatting in evaluate_model.
Add prediction and metric evaluation at the end of training procedure.
Fix circular imports in evals
Remove warning when video paths cannot be found by default. - This reduces sometimes large amount of spam when loading labels projects interactively that have many video files.
Fix logging -> logger scope in training.
Set default integral refinement patch size to 5. - Slightly faster and sufficient with sigma = 1 in simulation experiments.
Add docstrings to evaluation module and add convenience method. - evaluate_model can be used during training to generate predictions and metrics.
Confidence map sigmas are now scaled by their output stride. - This enables a consistent spread in crops around peaks for subpixel refinement and reduces quantization error.
Add automatic Provider instantiation for Predictor classes.
Add run() method to Pipeline as a convenience consumer function. - Returns all examples from a pipeline in a single call.
Add numpy() method to Instances analogous to EagerTensors.
Include the output of the encoder in intermediate feature list. - Now models that use UpsamplingStack can output to heads with the same output stride as the encoder's max stride, i.e., the features before any upsampling layers. - Fix error message when missing feature activation for a head.
Fix model construction with no intermediate features
Start new track after gap in tracking.
Modified the matching algorithm.
Exclude invalid matches.
Improvements to gui inference frame list support
Minor cleaning.
Major re-write of Kalman tracking code.
Add type annotations and more docstrings.
Add Track to sleap top level imports.
Split track cull/connect functs, move tests.
Add colab explanation and link to notebook repo.
Add guide for saving custom training profile.
Add more receptive field explanation.
Update dialog images for current app version.
More minor clarifications to labeling doc.
Minor change of wording
Minor improvements
Fix tracking fields to match cli.
Add SLEAP_USE_DUMMY_VIDEOS env var for debugging.
Fix test for grouping iter.
Remove debug print.
Add --verbose for inst info in sleap-inspect.
Only load HDF5 video once.
Support more optimizers in the training backend - Adds support for configuring the initial learning rate for SGD and RMSprop
Use title case for table column labels.
Batch size CLI dtype hotfix
Bump alpha version
Add version number to GUI window title
Initial refactoring of Kalman filter.
Add optional batching for topdown inference - Batching -> keras model inference -> unbatching - Only for topdown confmaps for now - Exposed to CLI
Different performance logging for example vs frame inference times
Show track lines behind frame marks in seekbar.
Added basic information on function. Removed return statement as frames are modified in place
Added Kalman Filter
Add colab explanation and link to notebook repo.
Add guide for saving custom training profile.
Add more receptive field explanation.
Update dialog images for current app version.
More minor clarifications to labeling doc.
Minor change of wording
Minor improvements
Fix tracking fields to match cli.
Add SLEAP_USE_DUMMY_VIDEOS env var for debugging.
Fix test for grouping iter.
Remove debug print.
Add --verbose for inst info in sleap-inspect.
Only load HDF5 video once.
Support more optimizers in the training backend - Adds support for configuring the initial learning rate for SGD and RMSprop
Use title case for table column labels.
Batch size CLI dtype hotfix
Bump alpha version
Add version number to GUI window title
Initial refactoring of Kalman filter.
Add optional batching for topdown inference - Batching -> keras model inference -> unbatching - Only for topdown confmaps for now - Exposed to CLI
Different performance logging for example vs frame inference times
Show track lines behind frame marks in seekbar.
Added basic information on function. Removed return statement as frames are modified in place
Infer colorspace (RGB/grayscale) from model input layer if not specified - Fixes issues of mismatching shapes when the video backend does not automatically detect grayscale. - Added make_labels argument to predictor.predict methods to create a sleap.Labels instance from the predictions.
Add .slp extension to video backend detection from filename
Ensure that video matching first checks for backend type in evals
Visualize instances that have skeletons without edges
Expose integral regression refinement parameters in predictor classes
Replace global integral regression with local patch refinement. - Still uses integral regression, but first crops a patch around the integer-valued coordinates. - This massively reduces the rate of false positives due to bad values at the edge of confidence maps.
Fix topdown not accounting for different scale in centroids vs confmaps - Some optimization could probably be done to increase performance when both models have the same preprocessing settings, but currently is done independently.
Save ground truth training labels at the start of training
Account for input scaling in bounding box size calculation for topdown.
Add read/write file adaptor for analysis hdf5.
Check metadata ds to determine if readable.
For max stride, show pow of 2 options in list.
Bug fix, enable user/current vid rand frame option
Performance improvement for predicted single instance creation - Previously, calculating the instance score took nearly the entire runtime. Now, tensors are transferred to CPU first before reduction.
Fix single instance predictor - Fix a couple of keys not named correctly
Add release script for deploying "nightly" build
Fix key names in single instance trainer
Single instance training
Single instance training pipeline builder
Single instance confmap generator
nn.viz tweaks - Visualization now renders in ij rather than xy coordinates - Fixed range scaling detection
Add baseline profile for training single inst model
Add button to save training/inference configs.
Add importer for DeepLabCut yaml.
Allow search prefix in find_files_by_suffix
Remove inference only fps since not working.
Remove training profiles from v0.1
Rescale points in single inst inf as needed.
Bug fix, use np.nansum instead of ndarray.nansum
Auto pad single instance trainer to max stride.
Load test frame for SingleImageVideo
Bump version.
Show total and inference only fps/time.
Use numpy().nansum() instead of nansum on tensor.
Convert img from tensor to ndarray.
Remove debug print.
Run tracking/create instances frame by frame.
Improve test coverage for sleap.util.
Better handling of shift+movement shortcut.
Add prefs to hide app docks on open.
Bump version number to 0.2.1a10
Fix topdown not accounting for different scale in centroids vs confmaps - Some optimization could probably be done to increase performance when both models have the same preprocessing settings, but currently is done independently.
Save ground truth training labels at the start of training
Account for input scaling in bounding box size calculation for topdown.
Add read/write file adaptor for analysis hdf5.
Check metadata ds to determine if readable.
For max stride, show pow of 2 options in list.
Bug fix, enable user/current vid rand frame option
Call sleap-train/sleap-track from gui.
Typo fix in augmentation config.
Bump version number to 0.2.1a9
Performance improvement for predicted single instance creation - Previously, calculating the instance score took nearly the entire runtime. Now, tensors are transferred to CPU first before reduction.
Fix single instance predictor - Fix a couple of keys not named correctly
Add release script for deploying "nightly" build
Fix key names in single instance trainer
Single instance training
Single instance training pipeline builder
Single instance confmap generator
Fix pip install PySide2>=5.12.0,<=5.14.1
Bump version
Pin to PySide2>=5.12.0,<=5.14.1
Bump version
More details in receptive field preview.
Predict options for user labels and cur vid rand.
Bump version to 0.2.1a6
Bug fix when adding missing points to instance.
Bump version to 0.2.1a5
More conda build changes, bump to v0.2.1a5
Try conda tf 2.1 install, bump to v0.2.1a4
Add pip tf to conda package, bump to v0.2.1a3
Include seaborn in conda pkg, bump to v0.2.1a2
Remove cd in dev deploy script.
Change after_deploy to deploy_script.
Deploy "dev" builds if develop branch is tagged
Bump version to 0.2.1a1
Tooltips, cursors, semantic mark types for slider
Add file needed for .slp format test in 53b243c4
Add gui menu command to export analysis hdf5.
Rename 'tracking' format to 'analysis' for clarity
Add sleap-convert cli for file format conversions.
Allow * as format to try all adaptors.
Skip tracking if no frames.
Use .slp as default for hdf5 datasets.
Git should ignore autosummary api docs.
Add toc to guides/tutorials.
Break tutorials/howtos into separate files.
Filter video backend kwargs when deserializing.
Re-write for new inference classes.
Add VisualPredictor class for predictions in gui
Fixes for building api docs on windows.
Header template for api docs.
Automatically build api doc tree.
Re-remove files from sleap.nn.
Remove files that were moved into gui submodules.
Remove files that were moved into gui submodules.
Reorganizing api docs (in progress)
Update docs for v0.2.0
Rename Kb Ref to Kb Shortcuts
Reset prefs if yaml isn't dict.
Bug fix: hadn't updated method name to update cache.
Bump develop version to 0.2.0
Update tutorial for v0.2.0.
nn.viz tweaks - Visualization now renders in ij rather than xy coordinates - Fixed range scaling detection
Apply patch from 41431de
Apply patch from 6f4163b
Revert to 28a0031889.
Use small font size for website.
Only use Qt as matplotlib backend if available.
More distinctive slider marks.
Create RLock only when needed.
Better typing.
Fix UNet tests. - Commit 33339cd changed how UNet was built to ensure stride symmetry across encoder vs decoder branches, but this broke the tests. - Inspecting the output shapes closely reveals a discrepancy between the reference and the CARE implementations, so added an attribute to switch off between these. - Fixed pooling when using a stem such that stacked architectures can be correctly instantiated. - Fixed and added more tests.
Delete outdated test and nn modules. - Lots of these will need to be rewritten for the new format, but should be easy enough to port them from the git history later. - There's still a bit of legacy code in nn, but will refactor later.
Use SingleImageVideo instead of imgstore.
Fix paths inside SingleImageVideo.
Use RLock around ffmpeg seek/read.
Use Qt backend for matplotlib.
Add missing --gpu-last to cli args.
Normalize images for visualization - Fixes image plotting when doing weird normalization like caffe-mode.
Filtering for failed centroid detection in topdown inference. - Fixes #322: properly handles case where no centroids are detected.
Typing typo in single instance inference pipeline
Add flexible device specification to inference CLI.
Implement dataset filtering transformer. - Allows for exclusion of specific elements in a dataset given a callable that evaluates a conditional on each element. - Fixes #314: bottom-up inference now properly excludes examples that when inference fails to find any local peaks.
Added mocking for multi-model inference pipelines. - Allows for evaluation with a single model (e.g., just centroids) when ground truth data is available.
Missing kwarg in single instance predictor
Implement integral regression for subpixel peak finding.
Add VSCode to gitignore
New dialog for complex instance deleting.
Always default to most recent training config.
Make sure cfg has head_name before use.
Correctly pass full image to flow from topdown.
Minor improvements to DLC importer.
Move max frames to preview into const.
Add training_instances property, user for training
Only use user frames for datagen preview.
Redraw receptive field widget when changed.
Center receptive field box in preview.
Move recept field widget into own file.
Better layout/titles for datagen preview windows.
Refactor gui modules into submodules.
Add tests for frame merging.
Adjust receptive field preview for img scale.
Resize if needed for datagen preview.
Fix minor arg passing error.
Bug fix for updating config file list.
Autodetect crop size for datagen preview.
Remove debug print.
Add datagen preview.
Fix typing on from_numpy arg.
Bug fix for training config file list.
Update config file menus on dialog re-open.
Remove negative sample menu commands.
Expose video.test_frame and use instead of frame 0
Use DataFrame.iloc since ix deprecated.
Less frequent progress loggging.
Wrap inference with error handling.
Add tracker to inference form.
Call tracker.final_pass for track cleaning.
Integrate tracking with topdown/bottomup inference
Convert float img to uint8 for cv2 flow shift.
Accept ndarray in ensure_int.
Fix incorrect return var name.
Add nn.data.ensure_int function.
Remove debug print.
Inference mode for learning dialog.
Sanitize node names used for tf loss metrics.
Check if labels has skeleton before using.
Only squeeze grayscale images.
Range for data.instance_cropping.crop_size
Support for OptionalSpinWidget value range
Show scale/crop for each head, not shared.
Add sublime project files to .gitignore
Minimal working receptive field preview widget
Move kernel_size to (const) class property.
Accept ndarray in GraphicsView.setImage()
Convert '' skip_connection to None.
Tweaks to training forms.
Add string_list field type.
Don't raise error in ensure_grayscale.
Add track param to PredictedInstance.from_arrays
Replace NaNs with inf for linear_sum_assignment.
Allow X,-Y range in frame_list()
Add functionality for using trained models.
Accept path to json config in cli.
Add UI for "use trained model"
Add methods to enable/disable whole form.
Check for model in config file dir.
Changed 'learning' back to 'inference' where needed.
Replace legacy training profiles with.
Remove unused imports
Add Instance.from_pointsarray() method
Add has_trained_model to ConfigFileInfo
Use slotted class (not dict) for config info.
Menu for using saved configs.
Enable training dialog from app gui.
Minimal cli and SingleInstancePredictor
Add which_oneof_attrib_name method and test cov.
Fixed validation img filename pattern.
Add support for inference args.
UNet architecture fixes - Add pooling block at the end of the encoder stack. This is necessary since UNet uses the last conv in each block as the skip source, so the encoder blocks cannot end with a max pooling. Additionally, the first block cannot start with a max pooling on the input, so we add an extra pooling-only block at the end of the encoder stack to compensate. - Middle block implemented. This block adds convolutions without pooling at the end of the encoder stack. It increases the number of filters, and then decreases back to the input filter count. When set to True, the model construction is exactly identical to the legacy models. - Added comment about middle block to config. - Fixed incorrect upsampling blocks: should not have batch norm and the filters after the first refinement conv should decrease (within the block). - Implemented several of the functionalities required above in the simple encoder/decoder blocks.
Fix for handling not saving outputs with visualization callbacks.
Initial version of inference gui rewrite.
Add none_label for optional_int fields.
Even more logging in Trainer.
Fix find_instance_crop_size qualification
Add sleap.nn.training to nn/init.py imports
More logging in Trainer.
Major clean up of sleap.nn. - Remove all unused or orphaned modules or functions. - Add basic module-level docstrings. - Minor formatting - Import most submodules from top level sleap init (adds only ~400ms startup time to "import sleap")
Full inference pipelines implemented for topdown and bottomup. - Both can be initialized from just run paths. - Both have a .predict() method that creates LabeledFrames on demand. - Both have a .predict_generator() method that generates raw examples for flexibility in postprocessing.
Expand transformers for topdown postprocessing - PredictedInstanceCropper and PredictedCenterInstanceNormalizer now pass forward centroid and peak confidences.
Additional plotting/visualization utilities
Add from_arrays convenience classmethod for PredictedInstances
Add videos attribute to providers for consistent video lookup
Add PointsResizer transformer to account for scale during inference
Rewrote PAF grouping module to for data pipeline inference - PartAffinityFieldInstanceGrouper is the transformer - Pretty under-commented and incomplete typing - PAFScorer should definitely be broken up somehow
Run data pipeline inference ops on the GPU if possible
Add best_logical_device_name utility - Returns the best initialized (logical) device name for use with tf.device for explicit tensor device placement.
Adjust batch/repeat ordering based on number of samples in the data
Fix part names not being stored in the config for MultiInstance models
Training/validation split from val fraction config in training
sleap.Labels splitting utility
Convenience attribute for building the run path in config
Add more logging to Trainer and disable PAF quiver plot - Quiver plot has a huge memory leak on the matplotlib side right now
Initial inference pipeline implementation - Topdown with centroid + confmap models - Moved old inference.py until deprecated
Add single peak-set plotting with colormap cycling
Resizer with optional point scaling since GT is not always available
VideoReader provider returns video_ind
Clean up inference and add topdown-related inference transformers
Unbatcher dataset transformer
Remove remaining Union-style configs to enable structuring from file - Also fix the global structuring hook for Skeleton
Import sleap.nn.config and .system at top level
Added summary method to nn.system module
Use sleap.nn.system.use_cpu_only in nn tests
Added utility functions for querying and setting GPU availability - Check for GPUs available - Set which GPUs to use (or CPU only) - Set memory preallocation policy - Check for initialization - Explicit device initialization
Minor formatting
Delete unused or replaced modules/tests
Timing in setup logging, typing, docstrings and auto-scale visualization
Remove unnecessary matplotlib backend specification. - Will probably need to check that this still works across platforms, or provide a parameter to set this explicitly.
Add explicit key arg for global peak finder in topdown pipeline builder.
nn.training.Trainer implementation. - Handles centroids, topdown and multi-instance model types. - Output type specific trainers: CentroidConfmapsModelTrainer, TopdownConfmapsModelTrainer, BottomUpModelTrainer - CLI with behavior mostly equivalent to old format. Run path should be fully specified since it'll be harder to parse from stdout. - Basic docstrings - Several small functions for setting up the training still need to be rolled into Trainer, or maybe a TrainingJob that sits between the config and the actual trainer.
Add serialization/deserialization helper methods to TrainingJobConfig. - Need to re-implement the legacy format parser when unstructuring.
Add docstrings to nn.model and expose keras model as attribute. - Now Model.make_model(...) also sets that instance's keras_model attribute for convenience. - Class method constructor from config can optionally update the input config object with argument or inferred data.
Visualization fixes - Squeeze singleton image channel (grayscale) - Explicit control of paired peak line plotting - Formatting
Add visualization utilities
Replace configs that could be set to "auto" with None (#307)
Add range for 'double' form fields.
Add methods to set form data for stack widget.
Fix reduction in multi-PAF generation
Misc changes to FormBuilder
Add TextOrListWidget for text/list widget.
Add OptionalSpinWidget for optional int/doubles.
Add loss_weight to bottom up configuration and expand nn.head docstrings
Completed docstrings in nn.config.model for the output head types.
Implement data pipelines for the 3 major model types - Implements several versions of each pipeline: - base_pipeline: Fetches input data with no optimization. Useful for composing with other pipelines and for quick inspection. - training_pipeline: Generates examples with all data structures needed for training. Uses optimizations to minimize I/O latency across iterations like preloading/prefetching. Applies data augmentation and shuffling. - viz_pipeline: Produces minimal examples necessary for generating visualizations of predictions during training. Necessarily, this implements basic inference, but does not have some optimizations that a full inference pipeline might benefit from. - Lots of repetition but keeping it as-is for now for flexibility
Bug fixes in KeyMapper and enforcement of static shapes - Should probably look into this issue more closely since it breaks dynamic shaped inputs (could be an issue for multi-instance inference potentially?)
Add flatten_channels option to PAF generator for convenience
Fix UNet stem construction - Previously the first stem block started with a max pooling directly on the input layer
Implement transformer for local peak finding
Flip key names for confidence maps vs centroids in generator
Typo in model creation from intermediate tensor
Preprocessing config docstring typo
Initial nn.training module refactoring - Moved old training module to *_legacy.py for now - Added several generic builder functions. These will likely be replaced by the TrainingJob/Trainer classes, but writing them out now to get a sense of where we need coupling.
Add missing import for instance cropping utility
Clean up callbacks imports and add typing for plotting callbacks
Instance crop size estimation utility function - Should probably get moved somewhere else when nn is cleaned up
Created initial transformer classes for inference - KerasModelPredictor supports multi-input/output and runs extremely fast on GPU (but the device can be set at the class-level). - Refactored global peak finding to return coordinates in points format and apply thresholding before returning. - GlobalPeakFinder transformer for generic peak finding on any confmaps key with stride adjustment.
Create nn.losses module for custom losses/metrics - Created standalone OHKM loss computation function for easier testing. - Added heuristics for ratio-based dynamic hard keypoint detection. - Fix default OHKM ratio config (should be >1)
Add profile_graph to TensorBoard configuration. - Removed part_metrics since this will always be enabled.
Update ZMQ callback class syntaxes and add ModelCheckpoint event
Add global structuring hooks for sleap.Skeleton - This allows for (un)structuring instances without needing to write any extra code for instances nested in larger attrs classes.
Import architecture classes in nn.architectures
Refactor nn.heads and nn.model - classmethods for instantiation from config classes - Moved old modules to *_legacy.py until TrainingJob conversion is done - Several tweaks to configs
Add KeyMapper to nn.data.pipelines
oneof decorator injects a which_oneof method to retrieve the set attrib
ResNet from config
Upsampling stack from config and explicit control of skips
Hourglass from config
LEAP from config
Refactor Unet -> UNet and implement construction from config.
Implement oneof decorator to enforce mutual exclusivity - This achieves validation to enforce the behavior desired for the mutually-exclusive attribute classes. - Classes decorated with attr.s and oneof will raise an error if more than one attribute is set to not None when instantiated.
Add old config module docstring back in.
Split nn.config.py into submodules for legibility + initial ModelConfig - Config sections now sit in their own submodules, but the syntax is the same since all config classes are imported in nn/config/init.py. - Initial implementation of ModelConfig. Totally decoupled from previous Model/ModelConfig implementations. - High level architecture parameters are now explicitly specified for each architecture and "oneof"-style options will just be specified by having different attributes which validators can check for mutual exclusivity. This should make it easier to serialize into more readable json as opposed to the old system of specifying the class name and doing some voodoo to construct the correct one. - This decoupling comes at the cost of reduced flexibility in model customization (though this can overcome with "generic" model configs like EncoderDecoder), as well as requiring manual specification of parameters for each architecture.
Add attribute for specifying UNet stem kernel size. - Useful for increasing receptive field without adding more blocks. - Defaults still match the canonical architecture and tests.
Major nn refactor in preparation for new Model/ModelConfig classes - Cleaned up nn.architectures to remove architectures that need major updating before they can be ported, removed unused utility functions. - We'll port in the deleted architectures from other branches when we're ready, but in the meanwhile they can't be used without major rewrites. - Exception: hrnet module which is not pretrained and will require minor adjustments to fit new format. - Replace old nn.model module with nn.model_config - Removed PreprocessingConfig from nn.model since that's covered elsewhere in nn.config.DataConfig. - Removed preprocessing-related args from legacy classmethod builders in ModelConfig.
Move AugmentationConfig to nn.config module
Resizing from config
Normalizer from config
More flexible concatenation operators for Pipeline
Basic pipeline concatenation
InstanceCentroidFinder from config
Instance cropping formatting.
Instance cropping from config.
Pipeline attributes default to empty lists. - This is necessary to build partial pipelines without providers.
Initial nn.config implementation. - This contains simple attr attribute classes with all user-facing configuration options related to training. - This supersedes the previous TrainingJob class and should contain all serializable job-related parameters. - Functional modules should be able to be instantiated from these, but can be decoupled in the actual implementation.
Add LabelsReader splitting utility function
Added example_indices attribute to providers. - Replaces the ds_index argument to the make_dataset method - Allows for flexible specification of subsets of the data to be used without having to create new source data objects (e.g., sleap.Labels). This makes it easier to read subsets of videos or to split the labels for train/val/test sets. - Examples generated by LabelsReader now include an "example_ind" key to indicate the index of the example within the original data.
Initial data.training module for training-related data ops
Tests for dataset_ops
Preloader now stores elements in an attribute.
Add comment about preloading cost and add as option to pipelines.
Fix stochastic deadlocks in tf.py_functions. - These resulted random hangs during training that could not be interrupted via SIGINT or otherwise. - Solution was to remove TF ops from inside py_functions in the data pipeline. - Interesting side effect is a big performance speedup. - See: https://github.com/tensorflow/tensorflow/issues/32454
Create Preloader transformer. - Loads elements of the pipeline at creation time rather than during execution. This is a workaround to weird thread safety issues with using Labels as a provider during training.
Filter irrelevant kwargs from model backbone.
Add pipelines submodule to nn.data.
Use new pipeline in datagen test.
Formatting and commenting out unused attributes for now
Fix truncation rounding error during instance cropping. - float32 precision sometimes results in bounding box sizes that are #.9997, which can result in an incorrect crop, even though the centered bounding boxes are created with exact dimensions.
Add initial generic pipelines for generating training data. - BottomUpPipeline: for building standard multi-confmap + PAF pipelines - TopDownPipeline: for building standard instance cropped pipelines
Dataset operations transformers module - Transformers that operate over multiple elements of the data: - Shuffler - Batcher (this one is tricky with variable length elements) - Prefetcher
Initial pipeline builders implementation
Fix Resizer not applying scaling to points.
Add Resizer transformer
Add missing documentation to Normalizer
Add Normalizer transformer
Remove debugging comments
Add dev_requirements.txt to environment.yml
Add editable package install to conda environment.yml
Add PAF generator class and tests
Edge maps transformers module. - Implements edge confidence maps; equivalent of part confidence maps where scalar values are scaled by the distance of the sampling grid points to the line segment formed by edges. - Implement part affinity fields as simple unit vectors weighted by the edge confidence maps for masking.
Fix expand_to_rank when rank is higher than the target. - Add test.
Add data module level init.py
Remove indentation on blank lines
Fixes and tests for normalization
Remove indentation on blank lines
Move make_grid_vectors to nn.data.utils as it's reused across modules.
Resizing transformers module
Missing import in utils and added tests
imgaug/numpy monkey patch for some version combinations. - Track issue: https://github.com/aleju/imgaug/issues/537
Add rank expansion data utility.
Initial data normalization method implementations. - Documented the normalization modes expected when using different pretrained models from tf.keras.applications. - Still needs tests and a transformer block class.
Modified the "scale" key to a 2-tuple indicating the x- and y-scaling. - The general expectation is that points in individual examples are already on the image grid scale. - The "scale" key can be used to track scaling operations, including aspect ratio changes. This information is sufficient to map points on example images/confidence maps to the raw images. - Commented scaling behavior across pipeline modules. - Changed behavior of MultiConfidenceMaps to compute confidence maps on the current image grid under the assumption that the "instances" key is at the same scale as the "image".
Rename instance cropping image size to "full_image_*" - "Full" to indicate it refers to the input to the instance cropper, which may have been modified relative to the "raw" image, e.g., due to padding/scaling. - Rename attribute drop_full_image to keep_full_image
Store raw image size in examples generated by data providers. - Useful for downstream processing that affects shape.
Add instance cropping transformer. - Agnostic to centroid calculation method. - Propagates all frame example metadata to individual instance examples. - Tests for coordinate transformations correctness, especially for tricky bounding box and cropping calculations.
Remove unnecessary import from instance centroid tests.
Add instance centroid finder transformer. - Implements bbox midpoint and anchor part-based centroid finding. This can later be extended to include other centroid computation methods like backup anchors, median, mean, etc. - Add base data pipeline utils module.
Remove unnecessary import from augmentation test
Transformer for data augmentation via imgaug - Separate AugmentationConfig class, possibly to be exported for serialization of the configuration.
Remove old nn.data module and start new data pipeline implementation. - The new modules will generalize the data processing steps to make it easier to test, re-use code and optimally compose tf.data-based pipelines. - Individual blocks will specify their input/output requirements such that dataset examples will know what to expect and can be validated at a higher level. - Enables attrs-based classes for configuring individual blocks. - Added initial data providers from Labels and raw videos, unifying both training and inference data loading.
Incomplete condition for preprocessing config
ModelConfig completeness properties
Add missing imports for json loading
Update ModelConfig for new OutputHead format - Expanded PreprocessingConfig to account for all current preprocessing steps, with checks for required parameters for training vs inference - Additional methods for initialization of ModelConfig from legacy formats. Almost all parameters can now be retrieved from old training job files.
Type annotation for is_complete outputs
Make run/dataset-specific head attributes optional - OutputTypes now have an is_complete attribute to indicate whether sufficient information has been provided to be able to instantiate the layers. - Can now structure generic output heads without dataset specific information (e.g., skeletons) to allow for specification of "template" configurations
Initial implementation of new model configuration module. - Support for structuring from legacy file format. - Initial tests.
Add validator for OutputHead type vs config.
Add necessary properties for valid backbone architectures. - maximum_stride, output_stride and make_backbone are sufficient to specify the necessary information for preprocessing data before the backbone and to generate the tensors using a common interface.
Add centered attribute to SinglePartConfmaps for topdown mode.
Remove part_names requirement for PartAffinityFields head.
Additional test for centroid confmap configuration without args
Expanded validation of output head configuration.
Broke up architecture tests into subtests for cleaner debugging.
Initial implementation of generic model head types.
Fix point-only dataset generator from concrete arrays.
Fix available architectures.
Implement hourglass backbone. - Add skip connection from stem output to the input of each stack's decoder path. This enables recovery of features from the input. - Fix Unet tests with new skip. - Fix available architectures.
Bump requirements to TensorFlow 2.1 - Removed conda package in favor of pip which is better maintained - Switch to tensorflow instead of tensorflow-gpu as CUDA deps are now included in the main package, but works for non-GPU systems as well - Windows: Requires MSVC 2019: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
Generalize to stacked encoder-decoder architectures. - Added stem to Unet for initial downsampling.
Fix Unet symmetry without middle block
Re-implement Unet using EncoderDecoder class
Add more options to encoder blocks to control skip connection sources - Enable conv block without pooling - Enable pooling before convs within a block - Account for pooling flag when calculating encoder stride - Keep only the first intermediate features at each encoder stride for forming skip connections - Corrected decoder stride calculation when searching for source features
Implement encoder-decoder meta-architecture - Created base classes for generalized encoder-decoder architecture. These provide a common API and building blocks for architectures like LEAP CNN, UNet, stacked hourglass, FC-DenseNet and more. - Re-implemented LEAP CNN using EncoderDecoder class. - Test coverage
Move IntermediateFeature to sleap.nn.architectures.common
More ResNet refactoring - Fix some typing issues - Allow for backbone creation without upsampling stack - Remove default upsampling stack configuration - Fix stem dilation to use correct output stride attribute - Fix output stride calculation - Fix preset variant classes - Add tests
Switch to rate-based filter sizes in upsampling stack - Add upsampling stack filter rate tests - Hide visible GPUs for tests
Refactor ResNet implementation - Enable variable output stride for the features backbone with support for pretrained weights via dilated convolution compensation. - Added generic upsampling module to provide common patterns for the decoder portion of architectures. This will be used to refactor and unify the implementation of a variety of architectures. - Changed interface of the backbone to: make_backbone(x_in) -> (x_out, intermediate_outputs) for more flexibility in multi-head configurations. Head instantiation will be done separately upstream in sleap.nn.model.Model creation.
Add option to return points with instance confmaps dataset
Fix rotation augmentation sign flip
Add Keras callback to log matplotlib figures to TensorBoard
Implement visualization saver callback. - Moved visualization plotting from local to Trainer class method. - Added tf.keras callback for saving plots to disk. - Added CLI option to enable visualization saving (similar to --tensorboard).
Change default OKS sigma for evaluation function to human data minimum.
Add longer trail len options (100, 200, 500)
Improved trail code, set to use single node.
Pass skeleton for instance_crop_ctr_node_ind.
Add instance_crop_ctr_node_ind field.
Support for optional_index list.
Remove model-specific training params from form.
Comment helper function for TensorBoard plotting.
Typo in node loss output type check
Implement OHKM and node-wise losses - Allows for dynamic tuning of error weight by channel. - Node-wise loss can be computed as a metric for monitoring training progress by body part. - Add training job options to enable new features. - Loaded models now are not compiled. This enables custom losses to be saved without requiring to be available in the loaded context.
Select spawned track instance on nav to next spawn
Load video as grayscale if models have one channel
Bug fix, don't always retrain topdown.
Fix for monkey patch backward compatibility (numpy < 1.17)
Bug fix for topdown choice in editor.
Temporary monkey patch for imgaug bug with numpy >= 1.18.
Tiny typo in data augmentation generator leading to no rotation aug.
Bug fix, topdown now returns (nan, nan) points.
Hotfix for case where there are no centroids detected in inference.
Speed-up to track overlay.
Remove cuda from explicit environments.
Add test for passing search paths to Labels.load_file().
Accept list of search paths instead of callback.
Use worker thread to load images in background.
Bug fix to heights for slider w/o tracks.
Add UI to replace videos in project.
Keys to skip to first/last contiguously occupied frame.
Double-click to select contiguously occupied frames.
Show number/percent of predicted frames in status bar.
Update tick marks when zoom changes.
Line in seekbar marking new track column.
Improvements to seekbar slider UI.
Add command to select from current to frame N.
Use thousands separators in frame numbers.
TrainingJob.is_trained returns False if model is not found - Previously it would throw an exception from TrainingJob.model_path, which would break the inference GUI if there were empty folders from failed runs with existing training json files - Change TrainingJob.model_path final exception type to more appropriate FileNotFoundError
Better chaining of batchwise ops for inference classes - Slightly slower but much more memory efficient
Multi-head averaging for multi-scale output backbones
Expand DenseNet multi-head capability - Fix feature sharing across scales and heads
HRNet fixes
Add ability to pass in additional training callbacks - Added HDF5Video parameters to utils.VideoLoader
Add Tensorboard callback to Trainer
Fix cli help, use get_package_file.
Remove debug printing.
Show minimal message during suggestion generation.
Bug fix, shift click to complete points.
Update promo movie in the readme (finally)
Fix instance cropping using reference center node
Quick test fix
Add minimal training jobs for other model output types
Evaluation submodule with OKS and generalized VOC metrics
Mock inference classes that pass GT via the same interface
Add centroid point dataset for datagen (without confmaps)
Fix rounding in region proposal box grouping
Region proposal extraction without merging
Store skeleton in training job if not specified in file. - Add Skeleton constructor from simple skeleton data - SimpleSkeleton is now JSON serializable - Allow for providing external skeleton when creating InferenceModel
Add more printing during training setup. - TODO: switch to logging
More casting at the data generators.
Remove deprecated submodules. Breaking commit.
More aggressive casting during data generation
Add minimal centroid training file.
Training pipeline configuration - Support for comments in training job json files via jsmin - CSV logging of training history - Callback-based final model saving - Flexible run name generation - Model path checking using new and old pathing scheme - Instance method for TrainingJob saving - Saving jobs with 4 spaces indentation by default - Handle model specification without skeleton: null - Expose most of the useful objects in Trainer as private attributes, allowing for access to model and data even if Trainer.train() is interrupted. - More outputs with trainer verbosity - Allow specifying val/test data in CLI
Auto calculate steps per epoch
Fix PAF sampling grid yx->xy orientation
Static shape fixes to instance cropping
Basic training CLI clean up.
Add basic training CLI matching old format. - Bonus: sleap-train works now!
Expose more UDenseNet parameters and correct docstring.
Handle model and list outputting backbones more gracefully in Model. - Use Trainer.verbosity attribute for callbacks as well.
Add support for creating TrainingJobs from JSON strings.
Centroid dataset generation and working trainer - Add hints and explicitly enforce static shapes in dataset generation - Fix typos in Trainer methods
Add image attribute to LabeledFrame for convenient frame fetching - Bug fix to training data generation in Labels
Training pipeline implemented for everything but centroid confmaps.
Initial datagen and training re-implementation.
Expose attribute for number of filters in transposed conv heads.
Fix usage of HigherHRNet attributes in backbone construction.
Add HigherHRNet and UDenseNet backbones.
Create nn.data submodule for tf.data.Dataset-based data generation. - imgaug-based augmentation - Instance cropping from centroid or reference node - Confidence map generated for basic and topdown-style models - PAF generation
Small bugfix in pretrained NASNet initialization and MobileNet typo
Bug fix, include all frames for deepposekit
Bug fix to demo confmap/paf overlay windows.
Make points visible for PoseTrack dataset.
Add support for PoseTrack varient of COCO dataset.
Add support for importing DeepPoseKit and COCO.
Add support for importing DeepPoseKit and COCO.
Add scale to training dialog.
More typing, cache for iou boxes.
Refactor duplicate code out of Tracker classes.
Bug fix, get number of frames from video.
Remove FIXME's (test was right).
Make the local/refinement tests pass.
Add tests for nn.region_proposal.
Note peak-finding test which now fail.
Add tests for nn.paf_grouping.
Added threshold for minimum required points for spawning new tracks
Added generic tracker that operates on points only - Takes any similarity function and matching function - Added similarity functions: IOU and centroid distance
Initial implementation of topdown peak finder
Add tests for nn.paf_grouping.
Hotfix for TrainingJob/Model imports mess
Refactor InferenceModel to be simpler layer on top of a tf.keras.Model. - Can still be created from a TrainingJob using a factory class method. - Handles multi-inputs/outputs more generically - Less tied to TrainingJob/backbone construction, instead computes most properties implicitly. - Added a new utility method to replace .predict() without changing the input tensor to allow for arbitrary input sizes. This is handled implicitly now through the model's call() method.
Add peak-finding test for all zeros.
Revert local peak finding algorithm - New version didn't have a good way to deal with adjacent local peaks - Added iteration based method to deal with per-channel max filtering. This avoids moving a lot of memory on the GPU as with the old "channel packing" method, at the cost of more constraints on autograph since the channel dimension must be statically inferable. - Refactor ConfmapPeakFinder to batch above autographed functions calls.
Refactor which calls get autographed in centroid predictor - Now batching occurs above autographed functions to minimize retracing - Exposed more peak finding parameters at base class level
Check for training_job.json within model folder when deserializing
Typo in utils.VideoLoader.n_chunks property
Add integration test for nn.peak_finding.
Add tests for nn.peak_finding.
Bug fix for getting random prediction frames.
Command line utility for merging tracks.
Add test for velocity suggestions.
Add suggestioned frames based on high pt velocity.
Don't break when there are no tracks.
Add support for header series as numpy array.
Add hog feature suggestion, better bag of features
Disable contextual menu when clicking node.
Connect app state to instance overlay.
Add menu options for new displacement graph.
Fix input shape specification when building new backbones
Flow shift tracker refactoring - More faithful to original algorithm (no propagating shifted instances) - Matching options: Greedy or Hungarian - Generic instance similarity function - Use best shifted instance in the window by track ID - Filter shifted instances by optical flow scores and ignore instances with few points - Added tracking score field to PredictedInstances (good signal for proofreading) - Added image scaling as preprocessing for optical flow calculation
Add keras_applications-based network backbones. - Fix DenseNet implementation and add variants as well as generalized - Add MobileNetV1 and MobileNetV2 - Add NASNet Mobile, Large and generalized
PAF grouper refactoring
Add property to Skeleton to return edges as pairs of node indices
Add method for calc'ing single node displacement.
Fix merge conflicts
Divisibility check in resizing and extended batched call
Intermediate changes in inference modules overhaul - Peak finding redone - Centroid-based region proposals - Video loading via tf.data.Dataset - Initial tests stub via tf.test.TestCase unittests
Use bag of words for brisk, parallel per video.
Write tracks as tuples to save space.
Bug fix, connect state vars to color manager.
Sort groups by numeric rather than alpha order.
Moved suggestion pipeline into object.
Add test for brisk and pipeline.
Add default value for brisk thresh.
Add test to ensure hdf5 video import works.
Add test, remove debug print.
Refactor feature-based frame suggestions.
Suggestions grouped by video, interleave sortable.
Add group interleave sort option for suggestions.
Apply node/edge color to skeleton tables.
Initialize dicts in init so not shared.
Refactor gui coloring code.
conda install Pillow, block installing pyqt
Rename active learning gui test file.
Rename gui/active.py to gui/inference.py
Add support for instance placement methods.
Bug fixes for new suggestion format.
Remove code that was commented out.
Rename "active learning" to "training".
Re-enable prediction on suggested/random frames.
Mode drop-down menus in learning gui dialog.
Add black and pre-commit to dev reqs.
Store cluster/group id for suggestions.
Complete rewrite of core inference modules. - nn.peak_finding: - Global peak finding - Local peak finding via max filtering with threshold - Gaussian smoothing for suppressing spurious local peaks - Centered cropping - Local direction offset-based subpixel peak refinement - Autographed functions for fast graph mode execution of core ops - Generalized high level wrappers with lightweight eager mode control flow (e.g., different flags, defaults, variable outputs, etc.)
Enable Tensorboard through CLI and change default profile save path - Training job JSON now defaults to "{run_path}/training_job.json"
Use force-directed graph for node placement.
Don't die if ~/.sleap/ already exists.
Use config files stored in ~/.sleap/.
Get frame_range with default empty range.
Add test coverage for track-related commands.
Add commands for change point location/visibility.
Bug fix when setting track from other video.
Major refactoring to app gui code.
gui refactoring
gui refactoring
gui refactoring
Added a couple of common properties to flow shifted instances
Fix to checkpoint every epoch, not batch
Fix dynamic preprocessing for ResNet backbone for TF2/graph mode
Fix deprecated kwargs for checkpointing through Keras callback
gui refactoring
gui refactoring
gui refactoring (in progress)
Bug fix: out of range peaks crashed PAF line integral lookups
Temporarily disabled autograph on functions getting retraced often.
Refactored peak finding. - Rewrote all processing code in pure TF. - Enabled some autographing, but still need to rework some of the sub-functions to move more processing into graph mode. - Updated predictor to use new peak finding functions.
gui refactoring
Update to TF 2.0 - Removed standalone Keras dependency - Added conda package dependencies for CUDA Toolkit and cuDNN - Added TF 2.0 as pip dependency
Add options for selecting models in inference gui.
Wrappers for QFileDialog functions w/o options arg
Add init.py for sleap.gui.overlays module.
Add init.py for sleap.info module.
More test coverage for io.video
Add missing arg to docstring.
Fixes so HDF5 selected images -> imgstore works.
Add last_frame_idx property on videos.
Ignore errors when trying to plot initial frame.
Add support for en/decoding frames stored in hdf5.
Add param to add default suffix when saving.
Move LossMonitor test into gui tests dir
LossViewer releases zmq socket when closed.
sLEAP -> SLEAP in readme.
Update inference overlay to use InferenceModel
Only include negative samples from labeled frames.
Make empty frame for empty hdf5 video.
Use player.view in track overlay.
Improve rangelist test coverage.
Use subset of frames for hdf5 test.
Close hdf5 videos in test.
Release hdf5 labels object in test.
Use "." for paths of hdf5 video in labels file.
Enable hdf5 package export in gui.
Add support for saving hdf5 w/ labels and imgs.
--nonnative param to use Qt file dialogs.
Fixes to docs.
Fixed docstrings (no foos allowed).
Fixed docstrings (no foos allowed).
Better docstrings and typing, minor refactoring.
Fixed incorrect test.
Better typing and docstrings.
Better typing and docstrings.
Fixed syntax error (function name).
Fixed docstring arg name.
Fixed docstring arg name.
Better typing and docstrings.
Better typing and docstrings.
Better docstrings, typing, minor refactoring.
Docstring edits.
Add Track to module docstring.
Rename, add docstrings and tests.
Add docstring.
Refactor, add docstrings and tests.
Reformat all tests with black.
Better typing and docstrings.
Better typing and docstrings.
Wrap docstrings to 79 chars.
coveralls instead of python-coveralls
coveralls instead of python-coveralls
Revert "Remove unused, undocumented, methods."
appveyor debugging
Fixed typing on make_cattr.
Remove unused, undocumented, untested methods.
Better typing and docstrings.
Add .coveralls.yml
coveralls --service=arg
coveralls --service arg
Use coveralls command line args.
Add env variables for coveralls.
Reformat all code with black.
pytest-cov in appveyor script.
pytest-cov in appveyor script.
Coveralls in appveyor script.
Coveralls in appveyor script.
Remove unused (broken) method.
For cv2 dependency use opencv-python-headless.
Add test for sleap.io.visuals.
Use file with user data for demo code.
Combobox (menu) for merge methods.
Show table of clean merge results.
Active inference changes - Removed disk serialization of predictions (it was being overwritten after each video anyway) - Progress dialog works - Canceling works gracefully - Broken: asynchronous call so that the GUI remains responsive
Major refactoring of inference module - Created a InferenceModel class that holds all of the metadata required to run models from a TrainingJob. This includes input/output scale, skeletons, Keras model loading and caching, variable input shape, normalization and other convenience properties. - Added some generic attributes to the sleap.nn.Model class to allow for storing or inferring output scaling (depends on architecture details, so it can be overloaded in backbones). - sleap.nn.loadmodel module removed. - Predictor refactored to take advantage of InferenceModel caching and reuse multiprocessing pool (fixes: #155). - Previously, models were being reloaded from disk and copies made every time a new crop size was encountered. - Previously, a new pool was being opened on every predict() call. - Refactored DataTransform usage to account for discrepancies between input scale vs output scale vs relative output scale vs scale across models. - Fix: DataTransform-based scaling would always convert images to float64 dtype. - Refactored TensorFlow-based peak finding for GPU execution. - Account for unspecified confmaps tensor at graph creation time. - Fix subpixel refinement algorithm to enable greater resolution than original data scale. - General rework of offset adjustment. - Exposed supersampling parameters (window size, window batching) - Fix tensors being overwritten or dropping out of context - Fixes: #149 - Exposed peak finding options and other inference functionality as Predictor attributes. - Renamed: Instance.visible_points_array -> Instance.points_array - Sensible cropping defaults in profiles and function kwargs. - Indented default profiles for readability. - General unfucking of syntax errors, anti-patterns, typos, etc.
Gui for merging w/ conflict resolution.
Merge conflict only if instances are same type.
Methods for complex merging of labels.
Bug fixes to demo functions.
Formatting changes (from pylint).
Fix delete_symmetry and add test.
Better typing and docstrings.
Docstring improvements.
Add score column to suggestions, columns sortable.
Add seekbar headers to gui.
Maintain order of tracks when updating top level.
Allow for importing Lambda layers with TensorFlow functions
--all-frames arg includes initial empty frames
Explicit input_video type handling in inference
Proper handling of nested skeletons when structuring TrainingJob - Also fix HDF5Video edge case
Fix stacked hourglass implementation - Added output scale calculation to Model class - Fix cattrs structuring when deserializing models - Add SHG params to training editor - Miscellaneous typos
Add dummy frame to otherwise empty imgstore.
Only load defered imgstore once (bug fix)
Check track_range not None before comparing (bug fix)
Keep list order when merging in new videos
Include empty frames in track occupancy matrix
Use weak_filename_match() to match video paths.
Defer loading imgstore until accessing video data.
Small inference fixes in prediction
rename and move Import... menu command
remove duplicate instances when merging frames
show labeled frame and user frame counts
use track_range.start to next find spawn frame
add start property to RangeList
keep w/in array bounds (when user adding new profile)
ignore empty tracks for track occupancy h5
catch errors during save and notify user
add save_file method, detects format from name
Autodetect initial video settings in import gui.
Overlay to show track labels (when appropriate)
Overlay to show negative anchors, command to clear
Overlay to show negative anchors, command to clear
Gui and class for viewing/changing menu shortcuts.
prevent training/inference if model overlay loaded
re-ordered colors used for overlays
Change Instance.points() method to property.
Add visible_points_array property and rename p_a()
Update video for ModelData if shapes match
Make sure video matches video for ModelData object
Install sleap package in appveyor.
pip install .
tweak bounds for when ignoring outliers
gui controls for log scale/outliers/batches to show
use Instance for selection in viewer
iqr*1.5 for outliers, ensure > 0 for log scale
resize output from multiscale confmaps/centroids
test _dont_use_pafs gui option
add active learning option to not use pafs
show current video index in statusbar
ignore event to set empty tooltip
Revert "use widget in status bar"
use widget in status bar to show permanent message
cache video data shown in table
only update relevant dataviews (for speed)
minor refactoring in code to find copy instance
bug fix to previousLabeledFrameIndex()
match nodes by id (not name) when updating skel.
test modifying instance skeleton
allow saving project with just skeleton
Partial test coverage for active learning.
refactor active learning code into more functions
disable save_confmaps_pafs since not currently working
update empty gui skeleton from labels skeleton
Add unify arg to Labels.extend_from(), new tests.
Hash skeleton by id, remove eq override
don't test for strict skeleton identity
Attempt to fix bugs from active learning results
add method to find instance in frame
check labels is not None when updating gui
create output dir if doesn't exist
note change when skeleton added
support for header (graph), use mark objects
disable blur when upsampling (it's not working)
bug fix when confmaps/paf multiscale different
bug fix, use tolist() to get list of Python ints
show full video filename (don't truncate)
allow 0-1000 negative samples
show number of user labeled frames in status bar
use / for imgstore paths (bug fix)
use / for imgstore paths
args to control merge/size for centroid boxes
remove unused crop_iou_threshold
determine channels from centroid model
bug fixes to last commit
expose gaussian size and sigma from peak_tf_inference
opencv-python 3.4.2.17 => 3.4.1.15
predict on range of frames
bug fix when creating Instance w/ zero points
re-arranged methods in Labels class
don't autoconvert to grayscale
bug fix to pass new tests
more tests
more tests
include pid in tmp dir name for json.zip
bug fix, invisible pts weren't nan in points_array
accept short name for default training profiles in cli
default to only user labeled frames in imgstore
handle missing nodes in nodes()
remove .h5 from name before appending
bug fix, handle mark_type f
use load_file instead of load_json
command to export labels zip with imgstore
use relative paths to imgstore yaml
Command line interface for training
suggested frames with low scoring instances
thinner slider mark for suggestions
show instance score in dataview
Labels.load_file() determines filetype from name
raise error during test by checking channels
Defer loading MediaVideo reader until needed
bug fix to remove_video()
bug fix when checking depth/down_blocks
improve gui video callback (for missing videos)
double click instance to add missing points
fix points if needed when inst.points accessed
allow node addition
fix (and test) removing node from Instance
don't copy _nodes from Instance to PredictedInstance
allow node deletion by caching node list
check down_blocks if no depth for model
fix conda build to include rapidjson
remove gui option to save confmaps/pafs during inference
Note that prediction count for video in status bar
Bug fix: don't use set for counting labeled frames
Add support for preferences, custom keys for nav.
Add shortcuts for frame next/prev/step.
Add license info for color palettes
Bumping alpha version to test appveyor cache.
Require PySide2>=5.12 (not ==5.12.0).
Also cache pip in appveyor.
Bumping alpha version to test appveyor cache.
Clean (remove bz2's) before trying to cache.
Just cache bz2 files (using new dir).
Just cache bz2 files (using new dir).
Just cache bz2 files.
Cache conda packages for appveyor build.
Default to empty option_list for form combo box.
Remove debug print.
Access sleap/version.py in setup without import.
Add diagnostic script for install debugging.
Clean up appveyor.yml from pypi testing.
Try uploading wheel (w/o running tests).
Try uploading (w/o running tests).
Try uploading (w/o running tests).
Try uploading to test pypi from appveyor.
Better cache refresh for new/remove instance.
Refactor cache from Labels into LabelsDataCache.
Fix typo in get_track_occupany method name.
Remove code for negative sample anchors.
Remove duplicate video callback code.
Use labels obj instead of filename in test.
Remove enable_source_video attrib from HDF5Video
Bug fix when scrolling so slider handle in view.
Support mixed-video backend for training packages.
Always use non-native file dialogs on linux.
Relative path fix for grid test fixtures
Add tests for gridfix
Convert to midpixel coordinates in gui.
Pin imgaug version to 0.3.0.
Fix bug from typo in 88739c4f for reading hdf5.
Add align_instances_on_most_stable method.
Limit queue size so we don't run out of memory.
Separate method for reading hdf5 non-inst data.
Add info.align module for making "mean" instance.
Don't reset stop_training during predict callback.
Resize and move training image window.
Add save_viz option to training forms.
Show image dir window when there are images to show.
Add window for watching training viz.
Add on_epoch signal to LossViewer.
Adjust train_subprocess method for save_viz.
Tweaks to test for loaded video.
Tweaks for 0 indexing and small frame counts.
Integrate track cleaner into inference/tracking.
Use [X, Y) range consistently for slider.
Revert "Avoid throwing exception for invalid frms"
Avoid throwing exception for invalid frames.
Improved background frame loading.
Delay updating caches until all deletes.
Bug fix, gen_cm_fn threw if given 3rd arg.
Implement visualization saver callback. - Moved visualization plotting from local to Trainer class method. - Added tf.keras callback for saving plots to disk. - Added CLI option to enable visualization saving (similar to --tensorboard).
Change default OKS sigma for evaluation function to human data minimum.
Add longer trail len options (100, 200, 500)
Improved trail code, set to use single node.
Pass skeleton for instance_crop_ctr_node_ind.
Add instance_crop_ctr_node_ind field.
Support for optional_index list.
Remove model-specific training params from form.
Comment helper function for TensorBoard plotting.
Typo in node loss output type check
Implement OHKM and node-wise losses - Allows for dynamic tuning of error weight by channel. - Node-wise loss can be computed as a metric for monitoring training progress by body part. - Add training job options to enable new features. - Loaded models now are not compiled. This enables custom losses to be saved without requiring to be available in the loaded context.
Select spawned track instance on nav to next spawn
Better track trails in gui.
Bug fix, don't clear cache if doesn't exist.
Use nodes instead of edges for gui inst bbox.
Always show horiz scroll in slider.
Include tracking.window in inference form.
Add for lines in print of cli call.
Scroll to ensure slider handle is always visible.
Cache counts of user/predicted frames.
Filter irrelevant kwargs to Video.from_filename().
Bug fix for empty shortcut keys.
Bug fix for topdown sample indices.
Fix to cli description in docstring.
Use 1-based idx for tables/videos in gui.
Add command to delete current frame predictions.
Bug fixes to tests.
Update suggestions table on add/del instance.
Ensure that table sort doesn't break row idxs.
Shift-double-click to add with nodes "completed".
Enable tracking-only inference pipeline from gui.
Add highlight for predictions mixed w/ non-pred.
Add back abspath() lost in merge.
Save path prefix changes in config file.
Add function to save config yaml.
Only unsaved changes if inference returns predicts
Bug fix when merging videos from labels.
Add code for auto path prefix fixes w/ config file
Fix sort in table between numbers and strings.
Allow saving Labels with relative path.
Add predicted_instances access to Labels class.
Add tracking-only ui to sleap-track.
Add "dummy" option to VideoLoader.
Avoid duplicating paths in training profile list.
Scope logging by data split
Quick and dirty visualization in TensorBoard
Load video as grayscale if models have one channel
Bug fix, don't always retrain topdown.
Fix for monkey patch backward compatibility (numpy < 1.17)
Bug fix for topdown choice in editor.
Temporary monkey patch for imgaug bug with numpy >= 1.18.
Tiny typo in data augmentation generator leading to no rotation aug.
Bug fix, topdown now returns (nan, nan) points.
Hotfix for case where there are no centroids detected in inference.
Bug fix for changing track w/in selected range.
Slightly thicker track lines (1.5 -> 2)
Add h5 file used in adaptor tests.
Bug fix, zoom to fit wasn't running for new frames
Update frame load request delay from recent avg.
Modularize data io into format adaptors.
Use trail length menu for showing/hiding trails.
Speed-up to track overlay.
Remove cuda from explicit environments.
Add test for passing search paths to Labels.load_file().
Accept list of search paths instead of callback.
Use worker thread to load images in background.
Bug fix to heights for slider w/o tracks.
Add UI to replace videos in project.
Keys to skip to first/last contiguously occupied frame.
Double-click to select contiguously occupied frames.
Show number/percent of predicted frames in status bar.
Update tick marks when zoom changes.
Line in seekbar marking new track column.
Improvements to seekbar slider UI.
Add command to select from current to frame N.
Use thousands separators in frame numbers.
TrainingJob.is_trained returns False if model is not found - Previously it would throw an exception from TrainingJob.model_path, which would break the inference GUI if there were empty folders from failed runs with existing training json files - Change TrainingJob.model_path final exception type to more appropriate FileNotFoundError
Better chaining of batchwise ops for inference classes - Slightly slower but much more memory efficient
Add docs for edge style.
Better wedge width (for smaller nodes).
Default to line (not wedge) edge style.
Basic image aug when previewing training data.
Use default string for edge style (bug fix).
Add wedge/line styles for edge drawing.
Reorganize api docs, minor how-to fixes.
Add minimal docstring for Predictor class.
Remove old remote info superseded by howto.
Add images used in howtos.
Add howtos for merge, tracking, proofreading.
Add howtos to documentation.
Add more cli/training package ref documentation.
Add brightness/contrast training augmentation.
Add uses_image property to condidate classes.
Use N,-M range for inference on clip.
Inference cli accepts "0,-123" as frame range.
Reformat with black.
Use topdown class for confmaps w/o pafs.
Fix RegionProposalSet creation in extractor class
Add PassthroughRegionProposalExtractor.
Normalize any int dtype.
Added classmethod for RegionProposalSet creation with uncropped images - Added documentation to RegionProposalSet class
Sort cleaned tracks.
Improve get_primary_point_displacement_series.
Add get_track_count method.
Add include_trails param for getting frame tracks.
Change default trail length to 10.
Show trails for tracks not in current frame.
Add longer track trail options.
Ignore missing videos for LEAP if non-gui.
LEAP import GUI changes.
Remove debug printing.
Handle loading job with old dir structure.
Add contact and a couple of link text changes
Add weight downloading to FAQ
Add conda-build recipe for sleap-cpu.
Test set_field_options method for forms.
Set node option list for suggestions form.
Add methods to set field option list by name.
Commit img to numpy before tracking call.
Split tutorial into two parts.
Check for unsaved file before training/inference.
Update labeled suggestion count for new instances.
Move argparser into main so used by sleap-label.
Set frame on newly added instances.
Move cli into main() for sleap-track.
Update tutorial and re-organize docs.
Use full name of BSD3 license.
Tweaks to training editor.
Adjust param name for test.
Check for options in yaml before using.
Replace node_idx field with list of node names.
Add support for passing in options lists.
Save videos/tracks/suggestions in hdf5 datasets.
Re-enable training editor with support for new classes.
Multi-head averaging for multi-scale output backbones
Expand DenseNet multi-head capability - Fix feature sharing across scales and heads
HRNet fixes
Add ability to pass in additional training callbacks - Added HDF5Video parameters to utils.VideoLoader
Add Tensorboard callback to Trainer
Fix cli help, use get_package_file.
Remove debug printing.
Show minimal message during suggestion generation.
Bug fix, shift click to complete points.
Update promo movie in the readme (finally)
Fix instance cropping using reference center node
Quick test fix
Add minimal training jobs for other model output types
Evaluation submodule with OKS and generalized VOC metrics
Mock inference classes that pass GT via the same interface
Add centroid point dataset for datagen (without confmaps)
Fix rounding in region proposal box grouping
Region proposal extraction without merging
Store skeleton in training job if not specified in file. - Add Skeleton constructor from simple skeleton data - SimpleSkeleton is now JSON serializable - Allow for providing external skeleton when creating InferenceModel
Add more printing during training setup. - TODO: switch to logging
More casting at the data generators.
Remove deprecated submodules. Breaking commit.
More aggressive casting during data generation
Add minimal centroid training file.
Training pipeline configuration - Support for comments in training job json files via jsmin - CSV logging of training history - Callback-based final model saving - Flexible run name generation - Model path checking using new and old pathing scheme - Instance method for TrainingJob saving - Saving jobs with 4 spaces indentation by default - Handle model specification without skeleton: null - Expose most of the useful objects in Trainer as private attributes, allowing for access to model and data even if Trainer.train() is interrupted. - More outputs with trainer verbosity - Allow specifying val/test data in CLI
Auto calculate steps per epoch
Fix PAF sampling grid yx->xy orientation
Static shape fixes to instance cropping
Basic training CLI clean up.
Add basic training CLI matching old format. - Bonus: sleap-train works now!
Expose more UDenseNet parameters and correct docstring.
Handle model and list outputting backbones more gracefully in Model. - Use Trainer.verbosity attribute for callbacks as well.
Add support for creating TrainingJobs from JSON strings.
Centroid dataset generation and working trainer - Add hints and explicitly enforce static shapes in dataset generation - Fix typos in Trainer methods
Add image attribute to LabeledFrame for convenient frame fetching - Bug fix to training data generation in Labels
Training pipeline implemented for everything but centroid confmaps.
Initial datagen and training re-implementation.
Expose attribute for number of filters in transposed conv heads.
Fix usage of HigherHRNet attributes in backbone construction.
Add HigherHRNet and UDenseNet backbones.
Create nn.data submodule for tf.data.Dataset-based data generation. - imgaug-based augmentation - Instance cropping from centroid or reference node - Confidence map generated for basic and topdown-style models - PAF generation
Small bugfix in pretrained NASNet initialization and MobileNet typo
Bug fix, include all frames for deepposekit
Bug fix to demo confmap/paf overlay windows.
Make points visible for PoseTrack dataset.
Add support for PoseTrack varient of COCO dataset.
Add support for importing DeepPoseKit and COCO.
Add support for importing DeepPoseKit and COCO.
Add scale to training dialog.
More typing, cache for iou boxes.
Refactor duplicate code out of Tracker classes.
Bug fix, get number of frames from video.
Remove FIXME's (test was right).
Make the local/refinement tests pass.
Add tests for nn.region_proposal.
Note peak-finding test which now fail.
Add tests for nn.paf_grouping.
Added threshold for minimum required points for spawning new tracks
Added generic tracker that operates on points only - Takes any similarity function and matching function - Added similarity functions: IOU and centroid distance
Initial implementation of topdown peak finder
Add tests for nn.paf_grouping.
Hotfix for TrainingJob/Model imports mess
Refactor InferenceModel to be simpler layer on top of a tf.keras.Model. - Can still be created from a TrainingJob using a factory class method. - Handles multi-inputs/outputs more generically - Less tied to TrainingJob/backbone construction, instead computes most properties implicitly. - Added a new utility method to replace .predict() without changing the input tensor to allow for arbitrary input sizes. This is handled implicitly now through the model's call() method.
Add peak-finding test for all zeros.
Revert local peak finding algorithm - New version didn't have a good way to deal with adjacent local peaks - Added iteration based method to deal with per-channel max filtering. This avoids moving a lot of memory on the GPU as with the old "channel packing" method, at the cost of more constraints on autograph since the channel dimension must be statically inferable. - Refactor ConfmapPeakFinder to batch above autographed functions calls.
Refactor which calls get autographed in centroid predictor - Now batching occurs above autographed functions to minimize retracing - Exposed more peak finding parameters at base class level
Check for training_job.json within model folder when deserializing
Typo in utils.VideoLoader.n_chunks property
Add integration test for nn.peak_finding.
Add tests for nn.peak_finding.
Bug fix for getting random prediction frames.
Command line utility for merging tracks.
Add test for velocity suggestions.
Add suggestioned frames based on high pt velocity.
Don't break when there are no tracks.
Add support for header series as numpy array.
Add hog feature suggestion, better bag of features
Disable contextual menu when clicking node.
Connect app state to instance overlay.
Add menu options for new displacement graph.
Fix input shape specification when building new backbones
Flow shift tracker refactoring - More faithful to original algorithm (no propagating shifted instances) - Matching options: Greedy or Hungarian - Generic instance similarity function - Use best shifted instance in the window by track ID - Filter shifted instances by optical flow scores and ignore instances with few points - Added tracking score field to PredictedInstances (good signal for proofreading) - Added image scaling as preprocessing for optical flow calculation
Add keras_applications-based network backbones. - Fix DenseNet implementation and add variants as well as generalized - Add MobileNetV1 and MobileNetV2 - Add NASNet Mobile, Large and generalized
PAF grouper refactoring
Add property to Skeleton to return edges as pairs of node indices
Add method for calc'ing single node displacement.
Fix merge conflicts
Divisibility check in resizing and extended batched call
Intermediate changes in inference modules overhaul - Peak finding redone - Centroid-based region proposals - Video loading via tf.data.Dataset - Initial tests stub via tf.test.TestCase unittests
Use bag of words for brisk, parallel per video.
Write tracks as tuples to save space.
Bug fix, connect state vars to color manager.
Sort groups by numeric rather than alpha order.
Moved suggestion pipeline into object.
Add test for brisk and pipeline.
Add default value for brisk thresh.
Add test to ensure hdf5 video import works.
Add test, remove debug print.
Refactor feature-based frame suggestions.
Suggestions grouped by video, interleave sortable.
Add group interleave sort option for suggestions.
Apply node/edge color to skeleton tables.
Initialize dicts in init so not shared.
Refactor gui coloring code.
conda install Pillow, block installing pyqt
Rename active learning gui test file.
Rename gui/active.py to gui/inference.py
Add support for instance placement methods.
Bug fixes for new suggestion format.
Remove code that was commented out.
Rename "active learning" to "training".
Re-enable prediction on suggested/random frames.
Mode drop-down menus in learning gui dialog.
Add black and pre-commit to dev reqs.
Store cluster/group id for suggestions.
Complete rewrite of core inference modules. - nn.peak_finding: - Global peak finding - Local peak finding via max filtering with threshold - Gaussian smoothing for suppressing spurious local peaks - Centered cropping - Local direction offset-based subpixel peak refinement - Autographed functions for fast graph mode execution of core ops - Generalized high level wrappers with lightweight eager mode control flow (e.g., different flags, defaults, variable outputs, etc.)
Enable Tensorboard through CLI and change default profile save path - Training job JSON now defaults to "{run_path}/training_job.json"
Use force-directed graph for node placement.
Don't die if ~/.sleap/ already exists.
Use config files stored in ~/.sleap/.
Add pip install to unix conda build script.
Get frame_range with default empty range.
Add test coverage for track-related commands.
Add commands for change point location/visibility.
Bug fix when setting track from other video.
Major refactoring to app gui code.
gui refactoring
gui refactoring
gui refactoring
Added a couple of common properties to flow shifted instances
Fix to checkpoint every epoch, not batch
Fix dynamic preprocessing for ResNet backbone for TF2/graph mode
Fix deprecated kwargs for checkpointing through Keras callback
gui refactoring
gui refactoring
gui refactoring (in progress)
Ignore any error when loading saved models for gui
Add FileDialog.openMultiple() method.
Import submodules we want available at top-level.
Add button to abort loading when missing files.
Bug fix: out of range peaks crashed PAF line integral lookups
Better gui for finding multiple missing files.
Prompt for save dir if needed.
Add missing import.
Add option for saving/not saving predictions file.
Make sure that all directories in save path exist.
Add test for empty hdf5 saving.
Bug fix, don't die when saving hdf5 without nodes.
Show full filename in missing video dialog.
Require jsonpickle 1.2 instead of 1.1.
Add wrapper class for file dialogs.
Temporarily disabled autograph on functions getting retraced often.
Refactored peak finding. - Rewrote all processing code in pure TF. - Enabled some autographing, but still need to rework some of the sub-functions to move more processing into graph mode. - Updated predictor to use new peak finding functions.
Bug fix (typo in function name).
Bug fix when adding nodes to instance in gui.
gui refactoring
Update to TF 2.0 - Removed standalone Keras dependency - Added conda package dependencies for CUDA Toolkit and cuDNN - Added TF 2.0 as pip dependency
Don't import Signal from QtCore.
Draw first predicted node with thicker line.
Added back previousLabeledFrameIndex().
Use new merge method in active learning.
gui refactoring
Use conda-build=3.17
Only upsample if there are peaks.
Added support for from_predicted in saved HDF5.
Add options for selecting models in inference gui.
Wrappers for QFileDialog functions w/o options arg
Add init.py for sleap.gui.overlays module.
Add init.py for sleap.info module.
More test coverage for io.video
Add missing arg to docstring.
Fixes so HDF5 selected images -> imgstore works.
Add last_frame_idx property on videos.
Ignore errors when trying to plot initial frame.
Add support for en/decoding frames stored in hdf5.
Add param to add default suffix when saving.
Move LossMonitor test into gui tests dir
LossViewer releases zmq socket when closed.
sLEAP -> SLEAP in readme.
Update inference overlay to use InferenceModel
Update inference overlay to use InferenceModel
Only include negative samples from labeled frames.
Make empty frame for empty hdf5 video.
Use player.view in track overlay.
Improve rangelist test coverage.
Use subset of frames for hdf5 test.
Close hdf5 videos in test.
Release hdf5 labels object in test.
Use "." for paths of hdf5 video in labels file.
Enable hdf5 package export in gui.
Add support for saving hdf5 w/ labels and imgs.
--nonnative param to use Qt file dialogs.
Fixes to docs.
Fixed docstrings (no foos allowed).
Fixed docstrings (no foos allowed).
Better docstrings and typing, minor refactoring.
Fixed incorrect test.
Better typing and docstrings.
Better typing and docstrings.
Fixed syntax error (function name).
Fixed docstring arg name.
Fixed docstring arg name.
Better typing and docstrings.
Better typing and docstrings.
Better docstrings, typing, minor refactoring.
Docstring edits.
Add Track to module docstring.
Rename, add docstrings and tests.
Add docstring.
Refactor, add docstrings and tests.
Reformat all tests with black.
Better typing and docstrings.
Better typing and docstrings.
Wrap docstrings to 79 chars.
coveralls instead of python-coveralls
coveralls instead of python-coveralls
Revert "Remove unused, undocumented, methods."
appveyor debugging
Fixed typing on make_cattr.
Remove unused, undocumented, untested methods.
Better typing and docstrings.
Add .coveralls.yml
coveralls --service=arg
coveralls --service arg
Use coveralls command line args.
Add env variables for coveralls.
Reformat all code with black.
pytest-cov in appveyor script.
pytest-cov in appveyor script.
Coveralls in appveyor script.
Coveralls in appveyor script.
Remove unused (broken) method.
For cv2 dependency use opencv-python-headless.
Add test for sleap.io.visuals.
Use file with user data for demo code.
Combobox (menu) for merge methods.
Show table of clean merge results.
Active inference changes - Removed disk serialization of predictions (it was being overwritten after each video anyway) - Progress dialog works - Canceling works gracefully - Broken: asynchronous call so that the GUI remains responsive
Major refactoring of inference module - Created a InferenceModel class that holds all of the metadata required to run models from a TrainingJob. This includes input/output scale, skeletons, Keras model loading and caching, variable input shape, normalization and other convenience properties. - Added some generic attributes to the sleap.nn.Model class to allow for storing or inferring output scaling (depends on architecture details, so it can be overloaded in backbones). - sleap.nn.loadmodel module removed. - Predictor refactored to take advantage of InferenceModel caching and reuse multiprocessing pool (fixes: #155). - Previously, models were being reloaded from disk and copies made every time a new crop size was encountered. - Previously, a new pool was being opened on every predict() call. - Refactored DataTransform usage to account for discrepancies between input scale vs output scale vs relative output scale vs scale across models. - Fix: DataTransform-based scaling would always convert images to float64 dtype. - Refactored TensorFlow-based peak finding for GPU execution. - Account for unspecified confmaps tensor at graph creation time. - Fix subpixel refinement algorithm to enable greater resolution than original data scale. - General rework of offset adjustment. - Exposed supersampling parameters (window size, window batching) - Fix tensors being overwritten or dropping out of context - Fixes: #149 - Exposed peak finding options and other inference functionality as Predictor attributes. - Renamed: Instance.visible_points_array -> Instance.points_array - Sensible cropping defaults in profiles and function kwargs. - Indented default profiles for readability. - General unfucking of syntax errors, anti-patterns, typos, etc.
Gui for merging w/ conflict resolution.
Merge conflict only if instances are same type.
Methods for complex merging of labels.
Bug fixes to demo functions.
Formatting changes (from pylint).
Fix delete_symmetry and add test.
Better typing and docstrings.
Docstring improvements.
Add score column to suggestions, columns sortable.
Add seekbar headers to gui.
Maintain order of tracks when updating top level.
Allow for importing Lambda layers with TensorFlow functions
--all-frames arg includes initial empty frames
Explicit input_video type handling in inference
Proper handling of nested skeletons when structuring TrainingJob - Also fix HDF5Video edge case
Fix stacked hourglass implementation - Added output scale calculation to Model class - Fix cattrs structuring when deserializing models - Add SHG params to training editor - Miscellaneous typos
Add dummy frame to otherwise empty imgstore.
Only load defered imgstore once (bug fix)
Check track_range not None before comparing (bug fix)
Keep list order when merging in new videos
Include empty frames in track occupancy matrix
Use weak_filename_match() to match video paths.
Defer loading imgstore until accessing video data.
Small inference fixes in prediction
rename and move Import... menu command
remove duplicate instances when merging frames
show labeled frame and user frame counts
use track_range.start to next find spawn frame
add start property to RangeList
keep w/in array bounds (when user adding new profile)
ignore empty tracks for track occupancy h5
catch errors during save and notify user
add save_file method, detects format from name
Autodetect initial video settings in import gui.
Overlay to show track labels (when appropriate)
Overlay to show negative anchors, command to clear
Overlay to show negative anchors, command to clear
Gui and class for viewing/changing menu shortcuts.
prevent training/inference if model overlay loaded
re-ordered colors used for overlays
Change Instance.points() method to property.
Add visible_points_array property and rename p_a()
Update video for ModelData if shapes match
Make sure video matches video for ModelData object
Install sleap package in appveyor.
pip install .
tweak bounds for when ignoring outliers
gui controls for log scale/outliers/batches to show
use Instance for selection in viewer
iqr*1.5 for outliers, ensure > 0 for log scale
resize output from multiscale confmaps/centroids
test _dont_use_pafs gui option
add active learning option to not use pafs
show current video index in statusbar
ignore event to set empty tooltip
Revert "use widget in status bar"
use widget in status bar to show permanent message
cache video data shown in table
only update relevant dataviews (for speed)
minor refactoring in code to find copy instance
bug fix to previousLabeledFrameIndex()
match nodes by id (not name) when updating skel.
test modifying instance skeleton
allow saving project with just skeleton
Partial test coverage for active learning.
refactor active learning code into more functions
disable save_confmaps_pafs since not currently working
update empty gui skeleton from labels skeleton
Add unify arg to Labels.extend_from(), new tests.
Hash skeleton by id, remove eq override
don't test for strict skeleton identity
Attempt to fix bugs from active learning results
add method to find instance in frame
check labels is not None when updating gui
create output dir if doesn't exist
note change when skeleton added
support for header (graph), use mark objects
disable blur when upsampling (it's not working)
bug fix when confmaps/paf multiscale different
bug fix, use tolist() to get list of Python ints
show full video filename (don't truncate)
allow 0-1000 negative samples
show number of user labeled frames in status bar
use / for imgstore paths (bug fix)
use / for imgstore paths
args to control merge/size for centroid boxes
remove unused crop_iou_threshold
determine channels from centroid model
bug fixes to last commit
expose gaussian size and sigma from peak_tf_inference
opencv-python 3.4.2.17 => 3.4.1.15
predict on range of frames
bug fix when creating Instance w/ zero points
re-arranged methods in Labels class
don't autoconvert to grayscale
bug fix to pass new tests
more tests
more tests
include pid in tmp dir name for json.zip
bug fix, invisible pts weren't nan in points_array
accept short name for default training profiles in cli
default to only user labeled frames in imgstore
handle missing nodes in nodes()
remove .h5 from name before appending
bug fix, handle mark_type f
use load_file instead of load_json
command to export labels zip with imgstore
use relative paths to imgstore yaml
Command line interface for training
suggested frames with low scoring instances
thinner slider mark for suggestions
show instance score in dataview
Labels.load_file() determines filetype from name
raise error during test by checking channels
Defer loading MediaVideo reader until needed
bug fix to remove_video()
bug fix when checking depth/down_blocks
improve gui video callback (for missing videos)
double click instance to add missing points
fix points if needed when inst.points accessed
allow node addition
fix (and test) removing node from Instance
don't copy _nodes from Instance to PredictedInstance
allow node deletion by caching node list
check down_blocks if no depth for model
fix conda build to include rapidjson
only convert if type is PointArray
support for merging hdf5 labels into open labels
Convert PredictedPoint to Point if in Instance
(Hopefully) more robust default training profiles
bug fix (again) for output_path
don't double crop size for centroid cropping
bug fix to confmap overlay
remove gui option to save confmaps/pafs during inference
model overlay supports centroids
method to invert scaling on images
save gui inference results in h5
bug fix for merge, output_path now attribute
enable saving labels h5 from gui
only show one model overlay at a time
rename overlays.hdf5 module to overlays.base
Feature to load model and show predictions in gui
fixed typing annotations
update monitor in chunks, show only last 2000 batches
check if row inst still exists
ensure bounding boxes within (trimmed) image
datagen cropping improvements
Option to return confmaps from tf peakfinding
Bug fix for from_predicted inst tracks
Bug fix for dependencies.
Bug fix, make sure peaks matrix has rows for nodes
Bug fix, Predictor takes args instead of predict()
Change default training profiles.
fields for up/down blocks in training editor
Tensorflow peak-finding
--frames arg to visuals cli
Merge subchunk lfs with same frame idx
Less frequent intermediate saving during inference
Check for bounding_box_size on trained model
Bug fixes to centroid merging code.
Merge overlapping centroid crops into larger crops.
Bug fixes to centroid code clean-up
Clean-up centroid prediction code
Bug fixes for refactoring
Refactor inference code.
use cumulative scale of transformations
move unused legacy code into separate file
remove unused training server
merge labeled frames w/ same idx after extending
skeleton.matches() now ignores skeleton name
frames() wraps around once there's no subsequent match
gui support for loading h5 labels
video callback and update caches when loading h5
don't use multiscale in default training profiles
revert training monitor Y range outlier code
menu command to go to next user labeled frame
add frames() to iterate over labeled frames
Turn off append mode on HDF5 for now. Need to fix.
Remoed cbor import. This was old and just a test.
Add HDF5 output to inference. Make it default.
Support for appending to HDF5 label files.
use first skeleton in labels
Fixed HDF5 serialization bugs.
bug fix, explicit check for None
keyboard shortcuts for prev/next labeled frame
HDF5 saving and loading for Labels
update Y range in training monitor less often
Multiscale inference + training fixes.
Fixed some performance issues with JSON serialization.
Converted points dict on Instance to a PointArray.
check for bounding box before using
save_confmaps_pafs option for expert dialog
Multiscale training.
remove outliers for y range
new commands to delete instances by criteria
add track_names dataset to h5
add frame limit arg, improve speed for lf search
param for 'less overlap' mode (temp solution?)
don't save frame images with confmaps/pafs
remove test_ from output filename
save more visual output data from inference
remove unused code
fix test for confmaps view
show confmaps/pafs in gui as overlay
Refactor code to show video overlays into modules.
ask fps for exporting clip
fps property for MediaVedia
show epoch/val loss in chart header
move bounding_box_nms into datagen
get frame_idx for track from lf, not inst
Point classes are now np.record subclasses.
use SINGLE_INSTANCE_PER_CROP in inference
instances_nms in parallel peak matching
add nodeless_point_dist, ignore nodes when matching
add instances_nms for inference
add Labels.make_video_callback()
support for negative sample anchor points
re-organize app menus
add missing import
use generate_training_data for all data gen
add negative_anchors attribute on Labels
encapsulate all training datagen
more function documentation and modularity
Switched ujson out for rapidjson.
docs and tests for rangelist
labels.find() accepts range as frame_idx
bug fix, check before removing frame from track
resize seekbar to only show occupied tracks
menu shortcuts for deleting clip/area
feature to remove all instances within selected area
New 'single instance' mode, uses only confmaps model.
Use ranges to cache and modify track occupancy gui.
restrict delete to instances in selected track
change inst idx in view to idx in lf
use lookup table for lf frame idx
sort slider marks before grouping
adjusted test to look for fewer track marks
bug fix for non-track marks in seekbar
increase continuity threshhold to 99.5%
bug fix for call to _swap_tracks
faster track display in seekbar
allow weak video path matching for match_to
move gui video picker code into Labels
command to go to frame number
update gui state less often
move track swapping code into Labels
increased suggestions per video range
Swapped json for ujson.
include frame range in default output filename
show both tracks and suggestions in seekbar
menu action to delete predictions from selected clip
enable compressed json save from gui
compress track h5
change iou threshhold .8 => .9
background to make instance label text more visible
pass color manager to TrackTrailManager
show score with track for predicted instance
preserve instance selection when plotting new frame
non-cycling color palette
sort instances_to_show by track spawn frame
show number of tracks/frame instances
check for videos in labels dir
support for color palettes
skip inference for chunk if no centroids found
fix, pass save_confmaps_pafs to predictor
option to save confmaps/pafs
menu item to export labeled clip
better selection range alignment
pass frame as singleton to active learning
keys to skip by 50 or 500 frames
option to show qt progress window
queue for progress reporting plus more docs
use numpy for bb nms instead of tensorflow
log time for image crop/scaling
bug fix, syntax in last change
set logging level to INFO
bug fix to last change
bug fix if no centroids, cli arg for logfile
call cv2.setNumThreads
timing debug from threads
parallelize visualization code
remove qt imports
plot instances using cv2 (much faster) without qt
more timing debug
generate overlay video in chunks
command to delete instance track for entire video
just return instance closest to centroid (again)
include all instances from crop, iou to .8
use nms on centroid crops
tweaks to tutorial info re cluster
specify default channel in install, mac os instructions
more info about inference on cluster
try importing ForwardReference
require jsonpickle 1.1
corrected it's to its
fixed links in tutorial
tutorial draft
bug fix in swap track (from recent change)
changed default batch size from 2 to 4
signal to update ui after inference
use params from conf job for datagen (if not in form)
option to hide non-visible points
skip tracking if no instances found
default paf learning rate from 1e-4 to 1e-5
bug fix active learning predict on choices
three modes for active learning dialog
options in active learning for what to predict on
add hasSelection method
only write frames with instances
fix for next track spawn
snap to nearby mark within handle
pca suggestions bug fix
resizable seekbar
command to go to next track spawn frame
cli to output h5 with tracking info
write each frame after generation, use offscreen
debug output when writing visuals video
open compressed labels json files
don't save confmaps and pafs by default
centroids type in training editor
Fixed bug with tracking and centroid cropping.
allow importing multiple prediction files
Removed tensorflow-gpu from requiremnets.
Added tensorflow-gpu to requirements.txt.
show info for first/last labeled frame
fix track colors in plot_instances()
bug fix, copy qimage2ndarray result
Set verbosity=0 on Tracker by default.
cli to get info about labels file
tweaks to io.visuals code
plot_instances() as standalone function
Save videos with instances as overlay.
don't overwrite user params on window show
syntax error fix (= -> is)
store centroid model once loaded
Fix tracking bug with multiple calls to process.
check for candidate point before applying transform
fix test_labels_json to not assume order
reset job option menus on show
Turn off verbosity in tracking by default.
Switched logging.info messages in tracker to logging.debug.
Fixed tracking bug with non-sequential frames.
validate that trained models are compatible
fix path for final, best, and newest
Fixed up inference command line.
emit valueChanged when field values change
centroids output_type in training editor
convert final_model_filename from Windows path
base 10 log scale in training monitor
show decimation slider in pafs demo window
Add from_predicted attribute to Instance
initial_samples instead of sample_step for brisk
don't copy predicted points with nans
bug fixed better, check strides on array
decimation bug fixed, swap axes iff column-major
Added argument to Labels.save_json for image format.
don't break if fps=0 during inference
fixes to centroid code
scale images for training centroids
show seekbar selection range in status bar
don't show scrollbars in video seekbar
Fix very small bug in tracking.
Another tracking fix.
don't train centroids unless option set
bug fix to picking closest inst in crop
Added deterministic temp dir name to Labels.load_json.
Some formating changes.
return instance closest to centroid for crops
hide active learning window instead of closing
hide active learning window instead of closing
centroid bug fix: get crop size from model
remove debug print
don't crop when training centroids
inference centroid cropping using DataTransform
call merge_matching_frames after active learning
move merge_frames code into LabeledFrame
add Labels method to merge matching frames
Fixed mistake with ImgStoreVideo creation.
More bugfixes for tracking.
copy default centroid config from confmap config
add code to train centroids model
add ModelOutputType for centroids
add centroid datagen
Fix tracking bug fix when previous frame has None track.
Fixed bug with Labels.save_json and ImgStoreVideo
random suggestions by default
Fix to Tracking when optical flow fails.
fix type (again)
fix typo in extend_from
extend_from to copy data from another label object
slider fix, get marks for only specific video
fix match_to test, we can't assume same node order in labels
remove debug print in monitor
log scale in training monitor
add negative samples when training on inst crops
cleanup (mostly comments/annotations) in datagen
add min_crop_size for instance cropping
add dtype (for list) in formbuilder
use cattr to structure/unstructure video for inference
keep arrow cursor when dragging node
add menu item to import predictions
code to run prediction async in active learning
add match_to arg when loading json
no need to stop timer when closing monitor
changes to training/monitor communication
update dataviews after active learning
menu item to delete predictions
distinct conf/paf sigma in active learning
treat empty string filenane as if none
disable channel order swap after resize in inference
add random suggestion method, suggestion bug fixes
include all points from img when cropping
if clip selected in seekbar, predict for that
better integration between training_editor and active learning
convert image dtype/etc for flow tracking
undo h_w_scale since points aren't in two-dim array
remove debug print of messages for previous trainingjob
check labels is not None instead of implicit bool
bug fix to how we structure Instance/PredictedInstance from json
add what (confmaps,pafs) to msg from training to monitor
handle points from predictions better
when rescaling points in inference use h,w scale
remove --test-viz arg and corresponding function
tweaks to visualizeOutputs
hide active learning dialog to show conf/pafs windows
fix output_path for active learning inference
add Predict menu plus Viz Model Outputs menu item
bug fixes to show_*_from_h5
add show_pafs_from_h5 function
button in active learning to preview datagen
fix syntax error
hack to resize images so we can train/predict
save inference output in models dir with timestamp
changed batch size and early st. pat. in defaults
add show_confmaps_from_h5()
save confmaps/pafs from inference in h5 if output_path set
change scale to double in training_editor
disable debug print of msg in training monitor
bug fix, convert image h,w to ints
reset monitor window for each training job
bug fix to filename for trained model in active learning
bug fix, change scale to float in Trainer
reset training monitor between jobs, add "stop" button
remove debug printing
removing hog for now since it's not implemented correctly
check that brisk returned something before using
scale (again) means factor between 0 and 1
can now use already trained models in active learning
item setter for formbuilding fields
bug fix, delete button wasn't working
better filenames for active learning output
add batch_size to active learning form
bug fix, move imports outside function
get arch from backbone_name in TrainingJob
move config, training_profiles into sleap dir
move active learning gui into ActiveLearningDialog class
moved yaml into config/, removed old training gui
add files to MANIFEST.in
editor for training profiles, accessible from active learning
various tweaks to formbuilder
add default scale=1 to match_peaks_paf
track unsaved change after active learning
rescale points to original image during inference
show instead of open for progress dialog
add training_profiles/ and other active learning tweaks
run training async for active learning
distinguish suggested frames w/ predicted instances in slider
gui to select trainingjobs for active learning
add sigmal to Trainer
store widgets on object, new combobox widget class
catch and raise ValueError if unable to load json
call repaint after updating widget value
update ui after active learning
add active learning menu item
bug fixes to active learning code
Bug fix to resize code for inference.
add instance_crops to import
add back singleton channel after resizing
code to run active learning pipeline
Add from_training_jobs constructor to Predictor class.
bug fix if training without save_dir
Add scale and instance_crop to Trainer.
support img/point scaling in datagen
Documentation update.
Changed train_async to use apply_async
Added model filenames to TrainingJob.
Added scikit-learn to requirements.txt
Added JSON serialization for training parameters.
enable/disable gui buttons as appropriate
Add ResizingStackedWidget for StackBuilderWidget
Move message timer into monitor.
close zmq socket/context when done
fix test for video table filenames
show parent dir + filename in video table
downsample frames before trying to cluster for suggestions
cap instance crop size at 512x512
with_tracking param, smaller batch size
add augmentation scale params to form
mark frames in slider only if instances in frame
Add option to run prediction on specific frames
Fix (maybe) of random test_labels_json failure.
Modified Augmentor for serialization\deserialization.
pip install opencv-python==3.4.2.17 (fixed)
Use pkg_resources to find yaml files.
Fix inference test to use file with user instances
Only use user instances for training datagen.
add ./ to yaml file paths
include yaml files in package
Enable tensorboard_dir on training client
Add epoch train/val loss to monitor.
Add gui for finding missing videos in json.
add tensorboard_dir param for training (hidden)
skip paf if no distance between nodes
don't break if json doesn't include tracks
Add --test-viz param to inference cli
Add default button to training client gui.
Bug fix, make sure frame suggestions are ints
Add option to resize input layer for inference.
Add training option for instance cropping.
Check for frame data in demo_pafs()
Major cleanup to training gui client code.
Cleanup zqm when finished in LossViewer.
Check for frame confmaps in demo_confmaps()
Add internal min_length arg to quiverplot code.
Add method to set_form_data to YamlFormWidget.
Minor bug fixes for training pafs/leap_cnn
Bug fix if there's empty inst list.
Add instance_crops function to datagen.
Add valueChanged signal to YamlFormWidget.
Fixed some dependecy issues.
Add support for importing DeepLabCut csv files.
Add imgstore_from_filenames method to Video class.
Training now takes points instead of confmaps/pafs.
Added imgaug and scikit-image to requirements.
TigerGPU CI test fixes.
Lets make imgstore default video codec 'mjpeg/avi'
Replace 'h264/mkv' format support for 'avc1/mp4'
Fixed blunt find/replace of "file"/"filename"
Added support for loading Labels JSON with frame data.
Support for augmenting list of point_arrays.
Bug fix for datagen of points near image bounds.
Move demo code into demo_datagen and demo_datagen_time.
Make generate_confmaps/pafs use *_from_points
New functions for datagen from point_arrays.
Decimation param on demo_pafs
Labels.save_json supported saving frame data now.
Add invisible_as_nan param on Instance.points_array
Remove debug prints
Added support for frame number indexing on ImgStoreVideo.
Add test for datagen/matching peaks and pafs.
Another bug fix to pafs datagen.
Bug fix to paf datagen.
Fixed test_imgstore_video so it writes to tmpdir.
Rewrite generate_confidence_maps, much faster.
Bug fix, normalize if ptp <= 1 (not just < 1).
Use demo_confmaps in demo code
Add demo_confmaps() and support for (0-255) ints.
Remove testing file from repo.
Rewrite generate_pafs to make it much faster.
Add demo_pafs() for showing video with pafs.
Fixed inference and confmap gen bugs.
Setting up imgstore for saving frame data.
demo for testing datagen/inference
Add standalone param to video_demo()
Add video_demo(labels) function for testing labels
Add video_demo(labels) function for testing labels
Use yaml config file for menu keyboard shortcuts.
Color node for completion even if not "visible".
Extract labels with clip
Bug fix to ensure frame_idx is int.
Allow user to selected predicted instance...
Mark missing nodes as not visible
Add params for brisk suggestion method.
Bug fixes for brisk suggestion method.
Add brisk suggestion method.
Add params for hog suggestion method.
Refactoring and added hog suggestion method.
Support for additional suggestion methods.
For quiverplot decimation, don't swap axes.
Menu tweaks (earlier was missing code).
Menu tweaks.
Only show predicted instances if no matching inst
Added pyyaml as a dependency.
UI to set params when generating suggestions.
YamlFormWidget builds entire form widget from yaml
Support for file_open and file_dir types in FormBuilderLayout.
Add QtWidgets import to formbuilder.
Custom QFormLayout which builds form fields from list.
Improvements to display of suggestion marks.
Bug fix for loading json without suggestions.
Basic implementation of frame suggestion.
Fixes to documentation.
Bug fix to GraphicsView signal.
Copy track from prev frame to new instance.
Bug fix to slider setTracksFromLabels.
Misc bug fixes to app gui.
Select instance in view when select from table.
Add timer to trigger function to update gui.
Change README loading from README.md to README.rst
Update README.rst
Update appveyor.yml
Update index.rst
Delete README.md
Create README.rst
Create includeme.rst
Anaconda deployment fixes. Its working!
Update bld.bat
Debugging anaconda deploy still
Debugging deploy to conda
Debugging deploy [skip_ci]
Adding conda build and conda client
Fixing appveyor.yml deploy of docs
Setup conda deploy on tag build.
Installation instructions update.
Fixes to the conda build recipe.
Make edge with non-visible node semi-transparent.
Additional video viewer test.
Additional dataviews tests.
Additional VideoSlider test.
Add test for import matlab labels file.
Add support for opening matlab labels files.
Adjust video data from [0,1] to [0,255] if needed.
Bug fix: check for bounding rect before using.
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Update appveyor.yml
Fixing appveyor again.yml
Fixing appveyor again.yml
Fixing appveyor again.yml
Fixing appveyor again.yml
Change button label to show video.
Fixing appveyor.yml
Fixing appveyor.yml
Trying to setup appveyor build of docs on master.
Adjust track length test.
Allow user to set track trail length.
Allow user to change track names.
Show track name (in color) in LabeledFrameTable.
Add test for TrackColorManager.
Add TrackColorManager class to determine track color.
Add tests for VideoSlider.
Bug fixes to VideoSlider event handling.
Add docs and tests for TrackTrailManager.
Add docs and tests for TrackTrailManager.
Shift+arrow key to select region in seekbar.
rebuilt docs
Better support for adding track.
Include predicted instances when zoom to fit.
Show marks for instances both with/without tracks.
Update track menu/seekbar marks after adding track.
Prompt for save if closing with unsaved changes.
Track setting w/ seekbar selection.
Add 'new track' menu item to app.
Fix track trail colors (index using labels.tracks).
Ability to set/swap track for an instance.
Option to show predicted instances in color.
Comment out app Training dock.
Mark instance tracks on VideoSlider.
Use TrackTrailManager to show track trails in app.
Add test for datagen (forgot file in 547cd0).
Path to video in test file now relative.
Add test for data_gen.
Bug fix: avoid div by zero for slider w/ range 1.
Fixed Instance.contains.
Added some basic documentation updates for different modules
Basic code to plot path for nodes.
Enable (and fix) code to start/stop training from GUI.
Fix param name in training form config.
Bug fix: use class instances of t0 and sub.
Add required import (os).
YAML file used to build training GUI form.
Very basic version of training app.
Move LossViewer into separate file.
Support for file_open and file_dir types in FormBuilderLayout.
Add QtWidgets import to formbuilder.
Custom QFormLayout which builds form fields from list.
Remove unused matplotlib import.
Fixed issues with inference pipeline.
Show track name in video as [none] if no track.
Fix video player test so it passes.
PredictedInstance in gui app.
Bug fix: count all instances when returning idx.
Check subtype rather than type to match PredictedInstance.
Fixed bug with serializing PredicedInstance and PredictedPoint to JSON.
Add track label for instances in QtVideoPlayer.
Bug fix: use instance.nodes to check nodes in instance.
Fix path to video in test json file.
Minor bug fix: instance.nodes is now property.
Fixed tests for old LEAP JSON datasets.
Fixed some bugs in tracking and added tests.
JSON serialization of inference data structures.
Added small fly video for testing.
Combined InstanceArray into Instance.
Set theme jekyll-theme-minimal
Change port number for client/server results.
Add train command to client/server.
Code to try out zmq.
Fixed more inference bugs, should be good now.
Bug fixes for inference. Still broke though.
Fixed skeleton edge ordering bug.
Added conversion of InstanceArray to Instance.
Added a points_array method to Instance class.
Refactor and document inference/tracking stuff.
Bug fix for wheelEvent in video GUI.
Bug fix in gui (set accept/ignore for wheelEvents).
Bug fix for new instance button in GUI.
Add buttons to load/save skeleton from gui.
Unfuck previous merge mistake
Training callback features - Model saving (but no training metadata) - Training controller over ZMQ (stopping and learning rate) - Exposed Model.fit_generator multiprocessing args
When adding instance in UI, copy points from...
Add instanceDoubleClicked signal to GraphicsView.
Demo code uses signal instead of (removed) callback.
When adding instance in UI, copy points from...
Mark point as complete when visibility toggled.
Show predicted instances in viewer.
Extract clips to new video viewer window.
Revamped training interface - Added all parameters for current/intended features (there may be some more for architecture customization) - Progress reporting for training over ZMQ PUB - Renamed confmaps to generic outputs and added output_type to be able to specify confmaps/pafs/embeddings/etc - Cleaned up model building - Parametrized optimizers - Cleaned up callback creation - Created initial consumer for ZMQ progress reporter with Qt plotting
Initial densenet setup
Updated confidence map generation for new skeleton node indexing
Added scaling to augmenter
Unet fixes - Appropriate handling of stacked unet params
Updated package requirements with zmq - Also added ipython to dev requirements for convenience
Bug fix to UI. Update edges table after node deletion.
When adding instance in UI, copy points from prior instance in frame.
Add menu command to delete instance selected in video.
Add button to open (switch to) video.
Non-visible node label color now matches node color
Right-click to toggle node visibility.
Bug fix to instance rotation UI.
App UI bug fix.
Seekbar updates in app.
Bug fix in VideoSlider demo code.
Bug fix to video player event handling.
Use VideoSlider instead of QSlider.
VideoSlider supports selecting ranges of values.
Basic implementation of VideoSlider widget.
Added Nat to the authors list.
Use filter for dst node options.
Bug fixes to zoom.
Improve video zoom code.
Some fixes for inferenence HDF5 saving.
Small fixes to node_to_idx on skeleton.
Accept initial filename from command-line in app
Bug fix for wheel zooming.
Added full fly skeleton JSON file.
Changed inference output format from MAT to HDF5
PAF inference now uses Skeleton class.
Slower instance rotation from scroll-wheel
Mark node as not-visible by left-click.
Keep nodes same size (visually) when video zooms.
Pass events along so that clicking label is like clicking node.
Added support for load old LEAP skeleton MAT files.
Case-insensitive video extension detection - Added flag for reversing order of RGB/BGR channels
Clear status bar message if user cancels transpose
When handling selection sequence, don't trigger on_each when user cancels
Show instructions (as status message) during transpose
Add test for NumpyVideo. Close windows after gui tests.
Add NumpyVideo class to wrap ndarray as video object
Refactor, document, and test the video viewer
Add ability to zoom to fit instances.
Add ability to transpose instances by selection
Bug fixes to video viewer. - Update selection box position after instance dragged - Update label position after all node positions have been updated
Modify "mark all as complete" UI.
Save show/hide state for labels/edges when plotting new frame
Default to selecting first instance when cycling if none already selected
Add basic skeleton selection functionality in video viewer. - click to select, click background to clear selection - type ` to cycle selection - type [1-9] to select corresponding instance
Show open dialog when app starts
Tweaks to visual formatting of node labels
Add basic support for complete attribute on points.
Add command to show/hide edges
Add basic support for node labels
Add command to transpose (first pair of) instances Add call to replot video at various points (e.g. node name changes)
Add menu commands for going to marked or prev/next labelled frame
Tweaks to app menus
Remove duplicate videos and skeletons from Labels
Tracking integration - Added tracking data classes - Removed paf_inference and integrated into inference module - Updated flow shift tracker - Updated pipeline code to use new data classes and tracker
License and CLI - Updated license in package spec to BSD3 - Changed tracking CLI entrypoint to sleap-track
Fix: zoom in video when no mouse button, shift skeleton if during drag
Add keyboard shortcuts for menu actions
Show filename as window title in app
Move and rotate skeleton using Alt key and middle mouse button
Major changes to data structures and UI to support Node objects.
Add changedPlot signal to QtVideoPlayer
Rotate entire skeleton in video using control + mousewheel
Move entire skeleton in video when control key pressed
Fixed up some bugs with tracking.
Refactor inference into Predictor class
Added psutil as a dependency.
Added basic inference code.
Add support in gui app for importing videos
Show short filename (no path) in VideosTable
UI: select dataview tables by row rather than cell
Add filename property to HDF5Video (for uniformity with MediaVideo)
Minor bug fix: use np.divide to divide by 0 without warning
Minor bug fixes to gui.video.
Vectorize decimation code for quiverplot
Only show video import options when video selected in open dialog
Modify quiverplot test to count points rather than child elements
Vectorize arrow-head calculation for quiverplot (decimation broken)
Replace QPoint with QPointF in quiverplot
Use Qt painter to draw quiverplot arrows
Bug fix: Quiver arrows were in wrong direction when decimation > 1.
Run QuiverPlot test on small slice of image so it's faster
More documentation for ImportVideos module.
Add tests for import UI
Minor bug fix in ImportParamDialog.
Modify import UI so that all selected files shown in single dialog
Remove unused matplotlib imports from gui modules
Add example code that uses results from import UI.
Adjust import param data structure to match Video.from_X() param names.
Basic interface for importing videos
Minor changes in quiverplot.py to better conform to PEP8.
Minor changes in confmapsplot.py to better conform to PEP8.
Minor changes in multicheck.py to better conform to PEP8.
Move data reads from gui test files into videos fixture.
Changes to MultiQuiverPlot and QuiverPlot objects.
Change name of unit test function for ConfMapsPlot.
Changes to QtAffinityFields.
Changes to ConfMapsPlot object for visualizing confidence maps.
Add MultiCheck QtWidget for showing multiple numbered checkboxes.
Add slider and checkboxes to affinity field demo window.
Add blur param to QtAffinityFields().
Add new param to docstring in QGraphicsObject.init()
Changes to QtAffinityFields object used to visualize affinity fields.
Minimal working version of affinity field visualization.
Added license
Very minimal test for QtConfMaps visualization.
import qimage2ndarray and fix indent on docstrings
Add docstrings for QtConfMaps and QtConfMap
New QtConfMaps object which can be added to view for showing confmaps.
Implemented PAF generation from Labels
Implemented simple GUI interactions with data structures - Added Video add/remove - Added Skeleton manipulation (but needs to be reworked) - Added video player resetting
Added instance iteration in labels and tests - Fixed contains overload for Instance
Added labeled frame removal - Added tests for removing items from labels - Added find_last method analogous to find_first for lazy searches - Implemented skeleton contains since the getitem fallback was failing - Added skeleton test for contains - Fix Video initialization from filename class method
Extended Labels functionality - Renamed list of LabeledFrames to labeled_frames - Added labels property as an alias - Added skeletons class-level attribute with appropriate serialization/deserialization - Added helper function that maintains the list of videos and skeletons when mutating the list of labeled frames from class-level methods (e.g., append) - Expanded getitem to support indexing by video or (video, frame_idx) - Added common searching functions find and find_first to find labeled frames associated with a particular video or (video, frame_idx) - Added standard sequence methods to LabeledFrame to iterate over instances - Added contains to query for presence of labeled frames with video, (video, frame_idx) or skeleton - Added tests for new Labels functionality
Restructured nn submodule to separate architectures
Updated data generation for new data classes
Clean up and fix setuptools CLI - Deleted old data format-related modules (io.generated and io.labels) - Changed setuptools requirement to plain tensorflow and exclude it from package search - Added CLI entrypoint to main GUI
Added base gui functions
Fix grayscale detection and tests
Implement views for new data classes and update GUI
Update Skeleton property usage
Fix video dimension ordering and add convenience Video class method for filename-based construction
Rename setuptools package from leapy to sleap
Added loader for old json format.
Added transposed conv as architecture option
Added dataviews submodule - Implemented skeleton tables as proper QAbstractTableModel - Removed the old app_generated GUI
Skeleton revamp - Corrected a few methods for properly dealing with edge types when filtering the MultiDiGraph - Added methods for adding and removing symmetries - Added convenience properties for accessing (body) edges and symmetries - Breaking change: renamed node_names property to nodes - Still broken: graph and graph_symmetry properties, though these may get deprecated
Appveyor fixes
Added pandas to requirements.txt
Skeleton improvments for relabel.
Made graph attribute on skeleton private (_graph).
Started to merge new Labels and other data classes - Added dependency qimage2ndarray to correctly render ndarrays - Removed force bool converter in Video.grayscale since it was preventing correct auto-detection of grayscale as default (bool(None) == False)
Appveyor depends updated for: cattrs====1.0.0rc0
Got rid of dataset output to local directory.
Addes JSON output serialization.
Turn off conda update in appveyor.
Force conda update on appveyor.
Appveyor changes to dependencies.
Add cattrs to appveyor environment.
Cleaned up some of the video serialization. Appveyor fixes.
Added Labels and LabeledFrame classes to replace Dataset
Some changes to the Video classes.
Major changes to dataset.
Added intermediate input concatenation for hourglass
Fix non-initialized main app
Training params
Data generation and training
Suggested installation instructions
Initial data generation routines for training
Core functionality in main labeling app - JSON importing with path and indexing fixing - Pandas DataFrame TableView model - Clearer visibility visual indicator - Fix MediaVideo frame count
My hands are typing words
Video player and initial apps
Disable cache on appveyor.
More CI fixes.
Appveyor RDP setup
Added a basic gui test.
Added pandas to spec.
More appveyor fixes.
Appveyor fixes.
Support for writing instances to HDF5. Appveyor fixes.
Added initial network blocks
Disable broken to_hdf5 test for Instance.
Added some more dependencies.
Initial GUI framework
Added more Video methods and tests
Added pandas as dependency.
Added writing Instances to pandas DataFrame.
Add dict access methods to Instance.
Update README.md
Trying to make the build cache smaller.
More fixes.
More fixes to test_script
Fix test_script section.
Fixes
path fix
More appveyor fixes
Switch to x64 Miniconda again.
Switch appveyor to x64 python.
Appveyor fixes.
More appveyor fixes.
Renamed appveyor.yaml to appveyor.yml.
Added build section back to appveyor.yml
Removed build section from appveyor.yml
Added a basic API for instances.
Initial GUI and video modules
Fixed some tigergpu test issues.
Added script for running tests on tigergpu.
Added install of dev_requirements.txt to appveyor.
Added appveyor building
Renamed leap to sleap
Update README.md
Started work on instance level data.
Combined DatasetBackend and Dataset classes.
Added some features to Dataset
Added some features to Skeleton. Setup conda recipe.