-
Notifications
You must be signed in to change notification settings - Fork 511
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
fo.core.video.make_frames_dataset is sneakily considered a frame view #4397
Comments
Hi @evatt-harvey-salinger. Under the hood, Zooming out a bit, perhaps adding support (or a best practice) for annotating frame collections is the main goal? |
@evatt-harvey-salinger thanks for calling this out! I think it is a valid use case to directly call methods like In the meantime, it is slightly less efficient, but you can achieve the same end result via patches_dataset = sample_collection.to_patches(...).clone()
frames_dataset = sample_collection.to_frames(...).clone()
clips_dataset = sample_collection.to_clips(...).clone() |
Thanks @brimoor and @benjaminpkane! Great, looks like #4416 will address the suggestion that In general, I agree that adding support for annotating a
Currently, its seems that the workflow would be to use This is certainly doable. But if |
I'll close the issue, since #4416 addresses the original request. But I'd love to hear what you think more general idea of annotating |
Out of curiosity, is there a reason you specifically want to annotate your videos as individual frames rather than directly calling |
Hi Brian, I've tried to answer this a few different times, but then I get new ideas and try to hack together a solution. But I haven't really found one yet. Basically, I have many hours worth of 15 fps videos to label. Each video sample has wayyy to many frames to label all at once. I'd like to be able downsample and iteratively label portions of video datasets, while retaining the integrity of the video samples as videos (rather than just converting them into image datasets). That would enable me to annotate the videos at 1 fps, then come back and annotate at 4 fps. Or, use the 1 fps frames to training a model that can help me auto-label a portion of the unlabeled frames. For example, I have a workflow with images datasets that looks like this:
I would like to develop an analogous workflow for video datasets. Sending As I said, I've been trying to find a work around, but haven't been able to achieve a solution yet that isn't terribly convoluted. I know that I can just abandon the I've gotten close to a solution where I maintain a |
I know that I can use the
Because of these two things, I'm going to just live with label full fps videos (with whatever downsampling i want on the front end), and achieve "partial" annotation by just sending different clips within the video at a time. |
Anyways, I hope this description give you an idea of the workflow I was trying to achieve by annotating |
One additional wrinkle is that |
Describe the problem
fo.core.video.make_frames_dataset seems like it should create a basic
Dataset
, as opposed toDataset.to_frames
which should make aFramesView
. However, this line...(
fiftyone/fiftyone/core/video.py
Line 635 in 86125ab
...results in
Dataset._is_frames
beingTrue
.So even though the dataset is actually a type
Dataset
, functions that take itsview()
likeannotate
consider it aFramesView
.Is this expected behavior? I would assume that
make_frames_dataset
was specifically intended to create something that was distinct from a frames view, and would be treated as a normal dataset. (I'll note, evendataset.clone
returns a dataset where_is_frames=False
.)Code to reproduce issue
System information
python --version
): 3.12.2fiftyone --version
): 0.23.8Other info/logs
Willingness to contribute
from the FiftyOne community
The text was updated successfully, but these errors were encountered: