Video analysis on cropped videos: bug fixes for extract_outlier_frames and create_video_with_all_detections#2538
Merged
MMathisLab merged 2 commits intomainfrom Mar 19, 2024
Merged
Conversation
deruyter92
added a commit
to deruyter92/DeepLabCut
that referenced
this pull request
Jan 8, 2026
…re cropped in `extract_outlier_frames`. This commit fixes a bug that introduces a mismatch between label-coordinates and video, when extracting cropped outlier frames. When the `analyze_videos` step was performed using a cropping window. The predicted keypoints are stored in the crop-window space. In the previous implementation, the keypoints are ALWAYS converted back to reflect full-video coordinates by adding the left and top crop margins (introduced in PR DeepLabCut#2538). However the keypoints should only be converted back if the output frames are full-video, not when they are cropped. This commit fixes that by using the difference between the output margin and the margin stored in metadata.
MMathisLab
added a commit
that referenced
this pull request
Jan 22, 2026
* Fix unintended keypoint conversion to full-frame when output frames are cropped in `extract_outlier_frames`. This commit fixes a bug that introduces a mismatch between label-coordinates and video, when extracting cropped outlier frames. When the `analyze_videos` step was performed using a cropping window. The predicted keypoints are stored in the crop-window space. In the previous implementation, the keypoints are ALWAYS converted back to reflect full-video coordinates by adding the left and top crop margins (introduced in PR #2538). However the keypoints should only be converted back if the output frames are full-video, not when they are cropped. This commit fixes that by using the difference between the output margin and the margin stored in metadata. * Update deeplabcut/refine_training_dataset/outlier_frames.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update deeplabcut/refine_training_dataset/outlier_frames.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update deeplabcut/refine_training_dataset/outlier_frames.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Mackenzie Mathis <mathis@rowland.harvard.edu>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When running video analysis with cropping, the predicted poses are stored in the cropped image space. To get the coordinates of the pose in the space of the full video, the data stored in the
_metadata.picklecan be used.The
extract_outlier_framesandcreate_video_with_all_detectionsdid not take these offsets into account, meaning the video with all detections had its keypoints shifted, as did the machine labels.This PR fixes both of these issues.
As
create_video_with_all_detectionshas acroppingargument, the behavior is set such that:croppingis given as an argument, that value is used (overriding the value stored in the metadata)croppingis not given then metadata["data"]["cropping"] and metadata["data"]["cropping_parameters"] are used