(cfg: Dict, total_video_len: int, use_fractional_t: bool=False)
| 385 | #---------------------------------------------------------------------------- |
| 386 | |
| 387 | def 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 |
no test coverage detected