Skip to content

Commit f77723d

Browse files
committed
v jepa 2 temporar tracking
1 parent 182f04e commit f77723d

9 files changed

Lines changed: 1093 additions & 24 deletions

docs/temporal_video_tracking.md

Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
# Temporal Video Tracking with V-JEPA 2
2+
3+
## Overview
4+
5+
This document describes the temporal video tracking system in SOWLv2 that addresses the limitation of detecting objects only in the first frame. The system uses V-JEPA 2 for intelligent frame selection, OWLv2 for multi-frame detection, and SAM2 for consistent object tracking throughout the video.
6+
7+
## Problem Solved
8+
9+
Traditional video processing pipelines often:
10+
- Only detect objects in the first frame
11+
- Miss objects that appear later in the video
12+
- Process every frame (computationally expensive)
13+
- Lack temporal understanding of object motion
14+
15+
Our temporal tracking solution:
16+
- Detects objects across multiple key frames
17+
- Uses V-JEPA 2 to identify the most informative frames
18+
- Merges detections to track unique objects
19+
- Maintains consistent object IDs throughout the video
20+
21+
## Architecture
22+
23+
### Key Components
24+
25+
1. **V-JEPA 2 Frame Selection**
26+
- Analyzes entire video for temporal importance
27+
- Combines feature variance and motion analysis
28+
- Selects N most informative frames with temporal diversity
29+
30+
2. **Multi-Frame Detection**
31+
- Runs OWLv2 on selected key frames
32+
- Detects objects that may appear at different times
33+
- Maintains detection confidence scores
34+
35+
3. **Temporal Detection Merging**
36+
- Associates same objects across frames using IoU
37+
- Creates unified tracked objects
38+
- Selects best detection for SAM2 initialization
39+
40+
4. **Intelligent Resource Management**
41+
- Dynamic batch size optimization
42+
- Model caching with memory management
43+
- Adaptive processing based on GPU resources
44+
45+
## Implementation Details
46+
47+
### New Modules
48+
49+
#### 1. Temporal Detection (`temporal_detection.py`)
50+
Handles multi-frame object tracking logic:
51+
```python
52+
@dataclass
53+
class TemporalDetection:
54+
frame_idx: int
55+
box: List[float]
56+
score: float
57+
core_prompt: str
58+
sam_id: Optional[int] = None
59+
60+
@dataclass
61+
class TrackedObject:
62+
object_id: int
63+
core_prompt: str
64+
detections: List[TemporalDetection]
65+
color: Tuple[int, int, int]
66+
best_detection_idx: int
67+
```
68+
69+
#### 2. Model Cache (`model_cache.py`)
70+
Intelligent model memory management:
71+
```python
72+
class IntelligentModelCache:
73+
def load_model_lazy(self, model_name, loader_func)
74+
def optimize_for_video_batch(self, num_frames, models_needed)
75+
```
76+
77+
#### 3. Batch Optimizer (`batch_optimizer.py`)
78+
Dynamic batch size optimization:
79+
```python
80+
class IntelligentBatchOptimizer:
81+
def profile_and_optimize(self, image_size, num_prompts) -> BatchConfig
82+
def adaptive_batch_processing(self, items, process_func)
83+
```
84+
85+
### Enhanced V-JEPA 2 Integration
86+
87+
The V-JEPA 2 optimizer now includes motion-aware scoring:
88+
```python
89+
def get_motion_aware_importance_scores(
90+
self,
91+
frames: List[Image.Image],
92+
motion_weight: float = 0.5
93+
) -> Optional[List[float]]
94+
```
95+
96+
This combines:
97+
- Feature variance (what V-JEPA 2 sees as important)
98+
- Motion detection (frame differences)
99+
- Weighted combination for optimal frame selection
100+
101+
## Usage
102+
103+
### Command Line Interface
104+
105+
Basic temporal detection:
106+
```bash
107+
python -m sowlv2.cli \
108+
--input video.mp4 \
109+
--prompt "person" "car" \
110+
--output output_dir \
111+
--enable-vjepa2 \
112+
--use-temporal-detection \
113+
--temporal-detection-frames 10
114+
```
115+
116+
Advanced configuration:
117+
```bash
118+
python -m sowlv2.cli \
119+
--input video.mp4 \
120+
--prompt "cat" \
121+
--output output_dir \
122+
--enable-vjepa2 \
123+
--use-temporal-detection \
124+
--temporal-detection-frames 15 \
125+
--temporal-merge-threshold 0.6 \
126+
--batch-size 8 \
127+
--max-workers 4
128+
```
129+
130+
### Configuration Parameters
131+
132+
- `--temporal-detection-frames`: Number of key frames to analyze (default: 5)
133+
- `--temporal-merge-threshold`: IoU threshold for object merging (default: 0.7)
134+
- `--use-temporal-detection`: Enable the temporal detection system
135+
136+
### Programmatic Usage
137+
138+
```python
139+
from sowlv2.optimizations import OptimizedSOWLv2Pipeline, create_vjepa2_optimizer
140+
from sowlv2.data.config import PipelineBaseData
141+
142+
# Configure pipeline
143+
config = PipelineBaseData(
144+
owl_model="google/owlv2-base-patch16-ensemble",
145+
sam_model="facebook/sam2.1-hiera-small",
146+
threshold=0.1,
147+
device="cuda"
148+
)
149+
150+
# Create and configure pipeline
151+
pipeline = OptimizedSOWLv2Pipeline(config)
152+
pipeline.vjepa2_optimizer = create_vjepa2_optimizer(config)
153+
pipeline.use_temporal_detection = True
154+
pipeline.temporal_detection_frames = 10
155+
pipeline.temporal_merge_threshold = 0.7
156+
157+
# Process video
158+
pipeline.process_video("input.mp4", ["person", "bicycle"], "output/")
159+
```
160+
161+
## Processing Flow
162+
163+
1. **Frame Extraction**: Extract all frames from video at specified FPS
164+
2. **Temporal Analysis**: V-JEPA 2 analyzes frames for importance scores
165+
3. **Frame Selection**: Select N most informative frames with temporal spacing
166+
4. **Multi-Frame Detection**: Run OWLv2 on each selected frame
167+
5. **Detection Merging**: Associate and merge detections across frames
168+
6. **SAM2 Initialization**: Initialize tracking with best detection per object
169+
7. **Video Processing**: Propagate masks throughout entire video
170+
171+
## Performance Optimization
172+
173+
### Memory Management
174+
- Lazy model loading
175+
- Automatic memory cleanup when threshold exceeded
176+
- Pre-allocation for video batches
177+
178+
### Batch Processing
179+
- Dynamic batch sizing based on GPU memory
180+
- Adaptive adjustment during processing
181+
- Mixed precision support for compatible GPUs
182+
183+
### Example Performance
184+
```
185+
Traditional approach (1000 frames):
186+
- Detects in frame 1 only
187+
- Misses objects appearing later
188+
- Time: ~300s
189+
190+
Temporal detection (1000 frames):
191+
- Analyzes 10 key frames
192+
- Detects all objects throughout video
193+
- Time: ~120s
194+
- Better coverage with less computation
195+
```
196+
197+
## Best Practices
198+
199+
### Parameter Tuning
200+
201+
1. **Number of Detection Frames**
202+
- Short videos (< 30s): 5-10 frames
203+
- Medium videos (30s-2min): 10-20 frames
204+
- Long videos (> 2min): 20-30 frames
205+
206+
2. **Merge Threshold**
207+
- Static scenes: 0.7-0.8 (strict matching)
208+
- Dynamic scenes: 0.5-0.6 (looser matching)
209+
- Fast motion: 0.4-0.5 (very loose)
210+
211+
3. **Frame Spacing**
212+
- Calculated as: `len(frames) // (num_detection_frames * 2)`
213+
- Ensures temporal diversity
214+
- Prevents clustering of selected frames
215+
216+
### Troubleshooting
217+
218+
**Issue**: Out of memory errors
219+
- Solution: Reduce `temporal-detection-frames`
220+
- Solution: Lower batch size
221+
- Solution: Use CPU processing
222+
223+
**Issue**: Missed objects
224+
- Solution: Increase `temporal-detection-frames`
225+
- Solution: Lower detection `threshold`
226+
- Solution: Check V-JEPA 2 frame selection
227+
228+
**Issue**: Duplicate detections
229+
- Solution: Increase `temporal-merge-threshold`
230+
- Solution: Check IoU calculation
231+
- Solution: Verify prompt matching
232+
233+
## Technical Advantages
234+
235+
1. **Comprehensive Detection**: Objects detected throughout video, not just first frame
236+
2. **Intelligent Processing**: Only processes most informative frames
237+
3. **Robust Tracking**: Maintains object consistency across frames
238+
4. **Resource Efficient**: Adaptive resource management
239+
5. **Scalable**: Works on videos of any length
240+
241+
## Future Enhancements
242+
243+
1. **Adaptive Frame Selection**: Automatically determine optimal number of frames
244+
2. **Motion Prediction**: Use V-JEPA 2 to predict object trajectories
245+
3. **Real-time Processing**: Streaming video support
246+
4. **Multi-GPU Support**: Distribute processing across GPUs
247+
5. **Confidence Weighting**: Use detection confidence in merging decisions
248+
249+
## References
250+
251+
- [V-JEPA 2 Paper](https://arxiv.org/abs/2404.08471)
252+
- [OWLv2 Model](https://huggingface.co/google/owlv2-base-patch16-ensemble)
253+
- [SAM2 Documentation](https://github.com/facebookresearch/sam2)

0 commit comments

Comments
 (0)