-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add attribute for triangulated 3d pose #2066
base: liezl/add-gui-elements-for-sessions
Are you sure you want to change the base?
Add attribute for triangulated 3d pose #2066
Conversation
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Make sure your branch is updated with the remote
liezl/add-gui-elements-to-sessions
- Rename the
InstanceGroup.triangulated_3d_pose
attribute toInstanceGroup._triangulation
- Move the following lines from commands.py to
InstanceGroup.update_points
Lines 3776 to 3784 in 9775fc2
# Reproject onto all views pts_reprojected = reproject( points_3d, calib=session.camera_cluster, excluded_views=frame_group.excluded_views, ) # M=include x F=1 x T x N x 2 # Sqeeze back to the original shape points_reprojected = np.squeeze(pts_reprojected, axis=1) # M=include x TxNx2 - Pass
points3d
intoFrameGroup.upsert_points
Lines 3786 to 3788 in 9775fc2
# Update or create/insert ("upsert") instance points frame_group.upsert_points( points=points_reprojected, - Move the boundary finding code into
InstanceGroup.update_points
Lines 2302 to 2316 in 9775fc2
# Ensure we are working with a float array points = points.astype(float) # Get projection bounds (based on video height/width) bounds = self.session.projection_bounds bounds_expanded_x = bounds[:, None, None, 0] bounds_expanded_y = bounds[:, None, None, 1] # Create masks for out-of-bounds x and y coordinates out_of_bounds_x = (points[..., 0] < 0) | (points[..., 0] > bounds_expanded_x) out_of_bounds_y = (points[..., 1] < 0) | (points[..., 1] > bounds_expanded_y) # Replace out-of-bounds x and y coordinates with nan points[out_of_bounds_x, 0] = np.nan points[out_of_bounds_y, 1] = np.nan
# # Check that the correct shape was passed in | ||
# n_views, n_instances, n_nodes, n_coords = points.shape | ||
# assert n_views == len( | ||
# self.cams_to_include | ||
# ), f"Expected {len(self.cams_to_include)} views, got {n_views}." | ||
# assert n_instances == len( | ||
# instance_groups | ||
# ), f"Expected {len(instance_groups)} instances, got {n_instances}." | ||
# assert n_coords == 2, f"Expected 2 coordinates, got {n_coords}." | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's move this check to InstanceGroup.update_points
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do a git pull origin liezl/add-gui-elements-from-sessions
, handle merge conflicts, make sure that there are no changes in dataset.py
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do a git pull origin liezl/add-gui-elements-from-sessions
, handle merge conflicts, make sure that there are no changes in test_dataset.py
@@ -449,6 +450,7 @@ class InstanceGroup: | |||
_dummy_instance: Optional[Instance] = field(default=None) | |||
camera_cluster: Optional[CameraCluster] = field(default=None) | |||
_score: Optional[float] = field(default=None) | |||
triangulated_3d_pose: Optional[np.ndarray] = field(default=None) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
triangulated_3d_pose: Optional[np.ndarray] = field(default=None) | |
_triangulation: Optional[np.ndarray] = field(default=None) |
Let's make this a psuedo-private method by prefixing with "_". This prefixed underscore tells developers that this method either is only intended to be used (or only used) internally within the containing class. This also allows us to name this underlying attribute as _<name-of-referencing-property-method>
.
# Check if points are 3D | ||
is_3d = points.shape[-1] == 3 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
THis would always evaluate to False at the moment since the points
passed into InstanceGroup.update_points
are:
points: Numpy array of shape (M, N, 2) where M is the number of views, N is
the number of Nodes, and 2 is for x, y.
. We want the 3D points passed in here. That means we also want the 3D points passed into FrameGroup.upsert_points
... which means we need to basically move code from both the following:
Lines 3769 to 3791 in 9775fc2
# Triangulate to one 3D pose per instance | |
points_3d = triangulate( | |
p2d=frame_group_tensor, | |
calib=session.camera_cluster, | |
excluded_views=frame_group.excluded_views, | |
) # F x T x N x 3 | |
# Reproject onto all views | |
pts_reprojected = reproject( | |
points_3d, | |
calib=session.camera_cluster, | |
excluded_views=frame_group.excluded_views, | |
) # M=include x F=1 x T x N x 2 | |
# Sqeeze back to the original shape | |
points_reprojected = np.squeeze(pts_reprojected, axis=1) # M=include x TxNx2 | |
# Update or create/insert ("upsert") instance points | |
frame_group.upsert_points( | |
points=points_reprojected, | |
instance_groups=instance_groups, | |
exclude_complete=True, | |
) |
and from
FrameGroup.upsert_points
to InstanceGroup.update_points
Description
Added attribute for triangulated 3d pose
Types of changes
Does this address any currently open issues?
[list open issues here]
Outside contributors checklist
Thank you for contributing to SLEAP!
❤️