holywu / vs-scunet Goto Github PK
View Code? Open in Web Editor NEWSCUNet function for VapourSynth
License: Apache License 2.0
SCUNet function for VapourSynth
License: Apache License 2.0
when using SCUNet after FeMaSR like this:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
core = vs.core
import site
import os
import sys
# Import scripts folder
scriptPath = 'i:/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
import ctypes
# Adding torch dependencies to PATH
path = site.getsitepackages()[0]+'/torch_dependencies/bin/'
ctypes.windll.kernel32.SetDllDirectoryW(path)
path = path.replace('\\', '/')
os.environ["PATH"] = path + os.pathsep + os.environ["PATH"]
os.environ["CUDA_MODULE_LOADING"] = "LAZY"
# Loading Plugins
core.std.LoadPlugin(path="i:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="i:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# source: 'G:\TestClips&Co\files\lossless\suzie_lossless..mp4'
# current color space: YUV444P8, bit depth: 8, resolution: 176x144, fps: 29.97, color matrix: 470bg, yuv luminance scale: limited, scanorder: progressive
# Loading G:\TestClips&Co\files\lossless\suzie_lossless..mp4 using LibavSMASHSource
clip = core.lsmas.LibavSMASHSource(source="G:/TestClips&Co/files/lossless/suzie_lossless..mp4")
# Setting detected color matrix (470bg).
clip = core.std.SetFrameProps(clip, _Matrix=5)
# Setting color transfer info (470bg), when it is not set
clip = clip if not core.text.FrameProps(clip,'_Transfer') else core.std.SetFrameProps(clip, _Transfer=5)
# Setting color primaries info (), when it is not set
clip = clip if not core.text.FrameProps(clip,'_Primaries') else core.std.SetFrameProps(clip, _Primaries=5)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# making sure frame rate is set to 29.97
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=0) # progressive
from vsfemasr import femasr as FeMaSR
# adjusting color space from YUV444P8 to RGBH for VsFeMaSR
clip = core.resize.Bicubic(clip=clip, format=vs.RGBH, matrix_in_s="470bg", range_s="limited")
# resizing using FeMaSR
clip = FeMaSR(clip=clip, model=1, device_index=0, trt=True, trt_cache_path=r"J:\tmp") # 704x576
# resizing 704x576 to 1280x1048
# adjusting resizing
clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, range_s="limited")
clip = core.fmtc.resample(clip=clip, w=1280, h=1048, kernel="cubic", interlaced=False, interlacedd=False)
from vsscunet import scunet as SCUNet
# denoising using SCUNet
clip = SCUNet(clip=clip, model=4, cuda_graphs=True, nvfuser=True)
# adjusting output color from: RGBS to YUV420P10 for x265Model
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
# adjusted resizing to achieve PAR 1:1 for preview
# resizing for preview to square pixel to 1400x1048
clip = core.resize.Bicubic(clip=clip, width=1400, height=1048)
# set output frame rate to 29.97fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
# Output
clip.set_output()
fails with:
Failed to evaluate the script:
Python exception: expected scalar type Half but found Float
Traceback (most recent call last):
File "src\cython\vapoursynth.pyx", line 2866, in vapoursynth._vpy_evaluate
File "src\cython\vapoursynth.pyx", line 2867, in vapoursynth._vpy_evaluate
File "J:\tmp\tempPreviewVapoursynthFile10_46_44_212.vpy", line 47, in
clip = SCUNet(clip=clip, model=4)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\autograd\grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vsscunet\__init__.py", line 141, in scunet
module(static_input[i])
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 705, in forward
return compiled_f(
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 656, in returned_function
compiled_fn = create_aot_dispatcher_function(
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 512, in create_aot_dispatcher_function
return aot_dispatch_base(flat_fn, fake_flat_tensor_args, aot_config)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 277, in aot_dispatch_base
fw_module = make_fx(flat_fn, aot_config.decompositions)(*flat_args)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 652, in wrapped
t = dispatch_trace(wrap_key(func, args, fx_tracer), tracer=fx_tracer, concrete_args=tuple(phs))
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 400, in dispatch_trace
graph = tracer.trace(root, concrete_args)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 739, in trace
(self.create_arg(fn(*args)),),
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 414, in wrapped
out = f(*tensors)
File "", line 1, in
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 636, in flat_fn
tree_out = fn(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\functorch\_src\aot_autograd.py", line 695, in functional_call
return stateless.functional_call(mod, params_and_buffers, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\utils\stateless.py", line 156, in functional_call
out = module(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 717, in module_call_wrapper
return self.call_module(mod, forward, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 366, in call_module
return forward(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 710, in forward
return _orig_module_call(mod, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vsscunet\network_scunet.py", line 226, in forward
x2 = self.m_down1(x1)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 717, in module_call_wrapper
return self.call_module(mod, forward, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 366, in call_module
return forward(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 710, in forward
return _orig_module_call(mod, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\container.py", line 204, in forward
input = module(input)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 717, in module_call_wrapper
return self.call_module(mod, forward, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 366, in call_module
return forward(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 710, in forward
return _orig_module_call(mod, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vsscunet\network_scunet.py", line 156, in forward
trans_x = self.trans_block(trans_x)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 717, in module_call_wrapper
return self.call_module(mod, forward, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 366, in call_module
return forward(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 710, in forward
return _orig_module_call(mod, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vsscunet\network_scunet.py", line 120, in forward
x = x + self.drop_path(self.msa(self.ln1(x)))
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 717, in module_call_wrapper
return self.call_module(mod, forward, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 366, in call_module
return forward(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\_symbolic_trace.py", line 710, in forward
return _orig_module_call(mod, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\vsscunet\network_scunet.py", line 83, in forward
output = torch.einsum('hbwij,hbwjc->hbwic', probs, v)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\functional.py", line 378, in einsum
return _VF.einsum(equation, operands) # type: ignore[attr-defined]
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\utils\_python_dispatch.py", line 101, in __torch_dispatch__
return old.__torch_dispatch__(func, types, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 440, in __torch_dispatch__
return self.inner_torch_dispatch(func, types, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 465, in inner_torch_dispatch
out = proxy_call(self, func, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 218, in proxy_call
r = func.decompose(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\_ops.py", line 279, in decompose
return self._op_dk(dk, *args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\utils\_python_dispatch.py", line 101, in __torch_dispatch__
return old.__torch_dispatch__(func, types, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 440, in __torch_dispatch__
return self.inner_torch_dispatch(func, types, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 465, in inner_torch_dispatch
out = proxy_call(self, func, args, kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\fx\experimental\proxy_tensor.py", line 304, in proxy_call
out = func(*args, **kwargs)
File "I:\Hybrid\64bit\Vapoursynth\Lib\site-packages\torch\_ops.py", line 257, in __call__
return self._op(*args, **kwargs or {})
RuntimeError: expected scalar type Half but found Float
Using FeMaSR (32bit) and SCUNet:
# Imports
import vapoursynth as vs
# getting Vapoursynth core
core = vs.core
import site
import os
import sys
# Import scripts folder
scriptPath = 'i:/Hybrid/64bit/vsscripts'
sys.path.insert(0, os.path.abspath(scriptPath))
import ctypes
# Adding torch dependencies to PATH
path = site.getsitepackages()[0]+'/torch_dependencies/bin/'
ctypes.windll.kernel32.SetDllDirectoryW(path)
path = path.replace('\\', '/')
os.environ["PATH"] = path + os.pathsep + os.environ["PATH"]
os.environ["CUDA_MODULE_LOADING"] = "LAZY"
# Loading Plugins
core.std.LoadPlugin(path="i:/Hybrid/64bit/vsfilters/Support/fmtconv.dll")
core.std.LoadPlugin(path="i:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/vslsmashsource.dll")
# source: 'G:\TestClips&Co\files\lossless\suzie_lossless..mp4'
# current color space: YUV444P8, bit depth: 8, resolution: 176x144, fps: 29.97, color matrix: 470bg, yuv luminance scale: limited, scanorder: progressive
# Loading G:\TestClips&Co\files\lossless\suzie_lossless..mp4 using LibavSMASHSource
clip = core.lsmas.LibavSMASHSource(source="G:/TestClips&Co/files/lossless/suzie_lossless..mp4")
# Setting detected color matrix (470bg).
clip = core.std.SetFrameProps(clip, _Matrix=5)
# Setting color transfer info (470bg), when it is not set
clip = clip if not core.text.FrameProps(clip,'_Transfer') else core.std.SetFrameProps(clip, _Transfer=5)
# Setting color primaries info (), when it is not set
clip = clip if not core.text.FrameProps(clip,'_Primaries') else core.std.SetFrameProps(clip, _Primaries=5)
# Setting color range to TV (limited) range.
clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1)
# making sure frame rate is set to 29.97
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
clip = core.std.SetFrameProp(clip=clip, prop="_FieldBased", intval=0) # progressive
from vsfemasr import femasr as FeMaSR
# adjusting color space from YUV444P8 to RGBS for VsFeMaSR
clip = core.resize.Bicubic(clip=clip, format=vs.RGBS, matrix_in_s="470bg", range_s="limited")
# resizing using FeMaSR
clip = FeMaSR(clip=clip, model=1, device_index=0, trt=True, trt_cache_path=r"J:\tmp") # 704x576
# resizing 704x576 to 1280x1048
# adjusting resizing
clip = core.fmtc.resample(clip=clip, w=1280, h=1048, kernel="cubic", interlaced=False, interlacedd=False)
from vsscunet import scunet as SCUNet
# denoising using SCUNet
clip = SCUNet(clip=clip, model=4, cuda_graphs=True, nvfuser=True)
# adjusting output color from: RGBS to YUV420P10 for x265Model
clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, matrix_s="470bg", range_s="limited", dither_type="error_diffusion")
# set output frame rate to 29.97fps (progressive)
clip = core.std.AssumeFPS(clip=clip, fpsnum=30000, fpsden=1001)
# Output
clip.set_output()
works.
Is it a bug or am I doing something wrong when using 16bit FeMaSR followed by SCUNet?
Hi.
Thank you for great work.
Could you please implement TensorRT option for these two repos if it is technically possible?
Thanks
After installing latest vs-dpir I installed vs-scunet which didn't show any errors on installation, but when trying to use it crashes.
vapoursynth_editor_log_2023-05-21_20-23-44-278.zip
Would be nice if you could fix this. Thanks!
Python 3.10.9
R61
GTX 1080
Driver Version: 525.60.11
CUDA Version: 12.0
Arch Linux
Might be PEBCAK.
from vstools import vapoursynth, core, vs, depth
from vsscunet import scunet
def scunet_int(clip: vs.VideoNode, model=None) -> vs.VideoNode:
_scunet = scunet(clip, model=model)
return depth(_scunet, _scunet.format.bits_per_sample, sample_type=vs.SampleType.INTEGER)
rgb = core.imwri.Read(
'/images data/Lenna.png'
).std.Crop(right=15)
ref = rgb.text.Text('ref')
rgb = depth(rgb, 16, sample_type=vs.SampleType.FLOAT)
format = 'RGBH' if rgb.format.bits_per_sample == 16 else 'RGBS'
ref.set_output()
images = [scunet_int(rgb, model=i).text.Text(f"model={i}, format={format}").set_output(i + 1) for i in range(5)]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.