File size: 1,343 Bytes
c20fc88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys, torch
sys.path.insert(0, ".")
from rife_net import IFNet
W, H = 768, 640
net = IFNet().eval()
state = torch.load("train_log/flownet.pkl", map_location="cpu", weights_only=True)
state = {k.replace("module.", ""): v for k, v in state.items()}
missing, unexpected = net.load_state_dict(state, strict=False)
print("missing", missing[:6], "unexpected", [k for k in unexpected if not k.startswith(("teacher", "caltime"))][:6])
torch.manual_seed(0)
a = torch.rand(1, 3, H, W); b = torch.roll(a, shifts=(3, 5), dims=(2, 3))
with torch.no_grad():
    ref = net(a, b)
prev = torch.load("probe.pt", weights_only=True)["ref"] if __import__("os").path.exists("probe.pt") else None
if prev is not None: print("same as scale-factor version:", float((prev - ref).abs().max()))
torch.save({"a": a, "b": b, "ref": ref}, "probe.pt")
print("torch out", tuple(ref.shape), round(float(ref.min()), 3), round(float(ref.max()), 3))
class Middle(torch.nn.Module):
    """The in-between at t = 0.5 from two frames: all the export takes."""
    def __init__(self, net):
        super().__init__()
        self.net = net

    def forward(self, img0, img1):
        return self.net(img0, img1)

torch.onnx.export(Middle(net).eval(), (a, b), "rife425lite_576p.onnx", input_names=["img0", "img1"], output_names=["middle"], opset_version=17)
print("onnx written")