MCPcopy
hub / github.com/Vchitect/Latte / random_frame_sampling

Function random_frame_sampling

tools/utils/layers.py:387–411  ·  view source on GitHub ↗
(cfg: Dict, total_video_len: int, use_fractional_t: bool=False)

Source from the content-addressed store, hash-verified

385#----------------------------------------------------------------------------
386
387def random_frame_sampling(cfg: Dict, total_video_len: int, use_fractional_t: bool=False) -> np.ndarray:
388 min_time_diff = cfg["num_frames_per_video"] - 1
389 max_time_diff = min(total_video_len - 1, cfg.get('max_dist', float('inf')))
390
391 if type(cfg.get('total_dists')) in (list, tuple):
392 time_diff_range = [d for d in cfg['total_dists'] if min_time_diff <= d <= max_time_diff]
393 else:
394 time_diff_range = range(min_time_diff, max_time_diff)
395
396 time_diff: int = random.choice(time_diff_range)
397 if use_fractional_t:
398 offset = random.random() * (total_video_len - time_diff - 1)
399 else:
400 offset = random.randint(0, total_video_len - time_diff - 1)
401 frames_idx = [offset]
402
403 if cfg["num_frames_per_video"] > 1:
404 frames_idx.append(offset + time_diff)
405
406 if cfg["num_frames_per_video"] > 2:
407 frames_idx.extend([(offset + t) for t in random.sample(range(1, time_diff), k=cfg["num_frames_per_video"] - 2)])
408
409 frames_idx = sorted(frames_idx)
410
411 return np.array(frames_idx)
412
413#----------------------------------------------------------------------------
414

Callers 1

sample_framesFunction · 0.85

Calls 2

appendMethod · 0.80
sampleMethod · 0.80

Tested by

no test coverage detected