talmolab / dreem

DREEM Relates Every Entities' Motion (DREEM). Global Tracking Transformers for biological multi-object tracking.
https://dreem.sleap.ai
BSD 3-Clause "New" or "Revised" License
7 stars 1 forks source link

Use instances as model input #46

Closed aaprasad closed 4 months ago

aaprasad commented 4 months ago

Currently, at all levels we use biogtr.Frame as the base unit of data given to the models as an input. However, one of the core advantages of the Global Tracking Transformer is that it really associates detections. Thus, if we are able to just use detections as input into the model then at a higher level we can come up with more useful ways to group the instances when passing it into the model. Thus, here we refactor the biogtr.models.GlobalTrackingTransformer and biogtr.models.Transformer to take as input a set of ref_instances and a set of query instances. The query_instances are used as an input into the decoder to associate against the ref_instances. One level up, in biogtr.inference.Tracker, we basically show an example of how we can group instances by frame against window.

Summary by CodeRabbit

coderabbitai[bot] commented 4 months ago

Walkthrough

This update introduces significant enhancements to the biogtr module, focusing on refining the handling of instances within frames. Key changes include the addition of a _frame attribute to the Instance class, updates to the Frame class to manage instance attributes, and modifications to various methods to operate on instances instead of frames. Additionally, new utility functions were added to handle bounding box and time extraction, and several methods were refactored for improved clarity and performance.

Changes

File(s) Change Summary
biogtr/data_structures.py Added _frame attribute and frame property to Instance; modified Frame class to set frame attribute for each Instance; updated Frame.__repr__ and Frame.instances setter.
biogtr/inference/tracker.py Updated sliding_inference and _run_global_tracker methods to operate on instances instead of frames.
biogtr/models/global_tracking_transformer.py Refactored to use torch.nn.Module; updated forward method to accept ref_instances and query_instances; added extract_features method.
biogtr/models/gtr_runner.py Modified forward, training_step, validation_step, test_step, predict_step, and _shared_eval_step methods to operate on instances; updated method signatures and processing logic.
biogtr/models/model_utils.py Renamed get_boxes_times to get_boxes; added get_times function; updated bounding box extraction to operate on instances.
biogtr/models/transformer.py Replaced Frame with Instance and updated related functions; modified forward method to operate on instances.
biogtr/training/losses.py Updated imports and logic to use get_boxes and get_times; adjusted bounding box and time index extraction to work with instances.
tests/test_models.py Modified test cases to reflect changes in argument passing and processing of instances within frames; updated iteration and return values accordingly.

Sequence Diagram(s) (Beta)

sequenceDiagram
    participant User
    participant Tracker
    participant GlobalTrackingTransformer
    participant GTRRunner

    User->>Tracker: Call sliding_inference(device)
    Tracker->>GlobalTrackingTransformer: Call forward(ref_instances, query_instances)
    GlobalTrackingTransformer->>GTRRunner: Call extract_features(instances)
    GTRRunner->>GlobalTrackingTransformer: Return extracted features
    GlobalTrackingTransformer->>Tracker: Return tracking results
    Tracker->>User: Return inference results

Poem

In the realm of code, where data flows, A rabbit hops, where logic grows. Instances now with frames align, Bounding boxes, times define. Transformations smooth and clear, Bringing enhancements, far and near. With every change, precision's cheer! 🐰✨


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?

Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai generate interesting stats about this repository and render them as a table.` - `@coderabbitai show all the console.log statements in this repository.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` 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 as PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. Additionally, you can add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. ### CodeRabbit Configration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.