in shap_e/diffusion/gaussian_diffusion.py [0:0]
def diffusion_from_config(config: Union[str, Dict[str, Any]]) -> "GaussianDiffusion":
if isinstance(config, str):
with bf.BlobFile(config, "rb") as f:
obj = yaml.load(f, Loader=yaml.SafeLoader)
return diffusion_from_config(obj)
schedule = config["schedule"]
steps = config["timesteps"]
respace = config.get("respacing", None)
mean_type = config.get("mean_type", "epsilon")
betas = get_named_beta_schedule(schedule, steps, **config.get("schedule_args", {}))
channel_scales = config.get("channel_scales", None)
channel_biases = config.get("channel_biases", None)
if channel_scales is not None:
channel_scales = np.array(channel_scales)
if channel_biases is not None:
channel_biases = np.array(channel_biases)
kwargs = dict(
betas=betas,
model_mean_type=mean_type,
model_var_type="learned_range",
loss_type="mse",
channel_scales=channel_scales,
channel_biases=channel_biases,
)
if respace is None:
return GaussianDiffusion(**kwargs)
else:
return SpacedDiffusion(use_timesteps=space_timesteps(steps, respace), **kwargs)