ritianyu's picture
Publish preview-first SplatAnything demo for ZeroGPU
dc09dcc verified
Raw History Blame Contribute Delete
2.24 kB
# Modified for SplatAnything: inference-only release.
from typing import Callable, Optional
import torch
from torch import Tensor, nn
class Mlp(nn.Module):
def __init__(self, in_features: int, hidden_features: Optional[int]=None, out_features: Optional[int]=None, act_layer: Callable[..., nn.Module]=nn.GELU, drop: float=0.0, bias: bool=True) -> None:
super().__init__()
out_features = out_features or in_features
hidden_features = hidden_features or in_features
self.fc1 = nn.Linear(in_features, hidden_features, bias=bias)
self.act = act_layer()
self.fc2 = nn.Linear(hidden_features, out_features, bias=bias)
self.drop = nn.Dropout(drop)
def forward(self, x: Tensor) -> Tensor:
x = self.fc1(x)
x = self.act(x)
x = self.drop(x)
x = self.fc2(x)
x = self.drop(x)
return x
class MlpFP32(nn.Module):
def __init__(self, in_features: int, hidden_features: Optional[int]=None, out_features: Optional[int]=None, act_layer: Callable[..., nn.Module]=nn.GELU, drop: float=0.0, bias: bool=True) -> None:
super().__init__()
out_features = out_features or in_features
hidden_features = hidden_features or in_features
self.fc1 = nn.Linear(in_features, hidden_features, bias=bias)
self.act = act_layer()
self.fc2 = nn.Linear(hidden_features, out_features, bias=bias)
self.drop = nn.Dropout(drop)
@staticmethod
def map_to_args_to_float(args, kwargs):
args = tuple((torch.float32 if isinstance(arg, torch.dtype) else arg for arg in args))
kwargs = dict(kwargs)
for key in kwargs:
if key == 'dtype':
kwargs[key] = torch.float32
return (args, kwargs)
def to(self, *args, **kwargs):
self.fc1 = self.fc1.to(*args, **kwargs)
(args, kwargs) = self.map_to_args_to_float(args, kwargs)
self.fc2 = self.fc2.to(*args, **kwargs)
return self
def forward_infer(self, x):
x = self.fc1(x)
x = 0.5 * x * (1 + torch.erf(x * 2 ** (-0.5)))
x = self.fc2(x.float())
return x
def forward(self, x: Tensor) -> Tensor:
return self.forward_infer(x)