From 8dd1233bdb3c741719ab8a3013e4cf133f84624a Mon Sep 17 00:00:00 2001 From: Vikram Voleti Date: Mon, 18 Mar 2024 20:43:17 +0000 Subject: [PATCH 1/2] Fixes azimuth, adds simple instruction --- README.md | 7 ++++--- scripts/sampling/simple_video_sample.py | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2f66207a..d2f44cc94 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,10 @@ To run SV3D_u on a single image: - Download `sv3d_u.safetensors` from https://huggingface.co/stabilityai/sv3d to `checkpoints/sv3d_u.safetensors` - Run `python scripts/sampling/simple_video_sample.py --input_path --version sv3d_u` -Additionally for SV3D_p, -- Specify sequences of 21 elevations and 21 azimuths (in degrees) to `elevations_deg` ([-90, 90]), and `azimuths_deg` [0, 360] in sorted order from 0 to 360. For example: -`python scripts/sampling/simple_video_sample.py --input_path --version sv3d_p --elevations_deg [] --azimuths_deg []` +To run SV3D_u on a single image: +- Download `sv3d_p.safetensors` from https://huggingface.co/stabilityai/sv3d to `checkpoints/sv3d_p.safetensors` +1. Generate static orbit at a specified elevation eg. 10 : `python scripts/sampling/simple_video_sample.py --input_path --version sv3d_p --elevations_deg 10.0` +2. Generate dynamic orbit at a specified elevations and azimuths: specify sequences of 21 elevations (in degrees) to `elevations_deg` ([-90, 90]), and 21 azimuths (in degrees) to `azimuths_deg` [0, 360] in sorted order from 0 to 360. For example: `python scripts/sampling/simple_video_sample.py --input_path --version sv3d_p --elevations_deg [] --azimuths_deg []` To run SVD or SV3D on a streamlit server: `streamlit run scripts/demo/video_sampling.py` diff --git a/scripts/sampling/simple_video_sample.py b/scripts/sampling/simple_video_sample.py index 6d34e7cd5..0609c3d84 100644 --- a/scripts/sampling/simple_video_sample.py +++ b/scripts/sampling/simple_video_sample.py @@ -84,7 +84,8 @@ def sample( polars_rad = [np.deg2rad(90 - e) for e in elevations_deg] if azimuths_deg is None: azimuths_deg = np.linspace(0, 360, num_frames + 1)[1:] % 360 - azimuths_rad = [np.deg2rad(a) for a in azimuths_deg] + azimuths_rad = [np.deg2rad((a - azimuths_deg[-1]) % 360) for a in azimuths_deg] + azimuths_rad[:-1].sort() else: raise ValueError(f"Version {version} does not exist.") From ca5ef5f0198dbe45b7107c1d800d87960086b2fe Mon Sep 17 00:00:00 2001 From: Vikram Voleti Date: Mon, 18 Mar 2024 20:56:14 +0000 Subject: [PATCH 2/2] Adds assertts --- scripts/sampling/simple_video_sample.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/sampling/simple_video_sample.py b/scripts/sampling/simple_video_sample.py index 0609c3d84..29a8b8581 100644 --- a/scripts/sampling/simple_video_sample.py +++ b/scripts/sampling/simple_video_sample.py @@ -34,7 +34,7 @@ def sample( device: str = "cuda", output_folder: Optional[str] = None, elevations_deg: Optional[float | List[float]] = 10.0, # For SV3D - azimuths_deg: Optional[float | List[float]] = None, # For SV3D + azimuths_deg: Optional[List[float]] = None, # For SV3D image_frame_ratio: Optional[float] = None, verbose: Optional[bool] = False, ): @@ -81,9 +81,15 @@ def sample( cond_aug = 1e-5 if isinstance(elevations_deg, float) or isinstance(elevations_deg, int): elevations_deg = [elevations_deg] * num_frames + assert ( + len(elevations_deg) == num_frames + ), f"Please provide 1 value, or a list of {num_frames} values for elevations_deg! Given {len(elevations_deg)}" polars_rad = [np.deg2rad(90 - e) for e in elevations_deg] if azimuths_deg is None: azimuths_deg = np.linspace(0, 360, num_frames + 1)[1:] % 360 + assert ( + len(azimuths_deg) == num_frames + ), f"Please provide a list of {num_frames} values for azimuths_deg! Given {len(azimuths_deg)}" azimuths_rad = [np.deg2rad((a - azimuths_deg[-1]) % 360) for a in azimuths_deg] azimuths_rad[:-1].sort() else: