oidn-web 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,2 +1,155 @@
1
- # oidn-web
2
-
1
+ # Open Image Denoise on the Web
2
+
3
+ This library brings the state-of-the-art AI-based denoising library [Open Image Denoise](https://github.com/RenderKit/oidn) to the web.
4
+
5
+ It's used in the [Vector to 3D](https://www.figma.com/community/plugin/1264600219316901594/) Figma plugin for high quality rendering and denoising.
6
+
7
+ | 2000 Samples | 3 Samples | 3 Samples + Denoised |
8
+ | :----------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------: |
9
+ | ![](https://github.com/pissang/oidn-web/blob/main/examples/test/ground-truth.png 'Ground Truth') | ![](https://github.com/pissang/oidn-web/blob/main/examples/test/noisy.png 'Noisy') | ![](https://github.com/pissang/oidn-web/blob/main/examples/test/denoised.png 'Denoised') |
10
+
11
+ ## How it Works.
12
+
13
+ It uses [tfjs](https://github.com/tensorflow/tfjs) to build the UNet model used by the OIDN. Then use the model to do prediction with a WebGPU backend from the image data.
14
+
15
+ Currently it's only available on the browser with WebGPU enabled.
16
+
17
+ ## How to Use
18
+
19
+ ### Install
20
+
21
+ ```shell
22
+ npm i oidn-web
23
+ ```
24
+
25
+ The TZA weights files are not included in the package. You can find them in this repo or [oidn-weights](https://github.com/RenderKit/oidn-weights).
26
+
27
+ ### Denoise a noisy LDR image
28
+
29
+ ```ts
30
+ import { UNet, initUNetFromURL } from 'oidn-web';
31
+ initUNetFromURL('./weights/rt_ldr.tza').then((unet) => {
32
+ // Read the image data.
33
+ const noisyImageData = noisyCanvas
34
+ .getContext('2d')
35
+ .getImageData(0, 0, width, height);
36
+
37
+ // Tile execute the denoising.
38
+ // If the resolution is high. It will split the input into tiles and execute one tile per frame.
39
+ const abortDenoising = unet.tileExecute({
40
+ // The color input for LDR image is 4 channels.
41
+ // In the format of Uint8ClampedArray or Uint8Array.
42
+ color: { data: noisyImageData, width, height },
43
+ done(denoised) {
44
+ console.log('Finished');
45
+ },
46
+ progress(denoised, tileData, tile) {
47
+ // Put the denoised tile on the output canvas
48
+ outputCtx.putImageData(tileData, tile.x, tile.y);
49
+ }
50
+ });
51
+ });
52
+ ```
53
+
54
+ ### Denoise a noisy HDR image
55
+
56
+ ```ts
57
+ import { UNet, initUNetFromURL } from 'oidn-web';
58
+ initUNetFromURL('./weights/rt_hdr.tza', undefined, {
59
+ // It's hdr input.
60
+ hdr: true
61
+ }).then((unet) => {
62
+ const abortDenoising = unet.tileExecute({
63
+ // The color input for HDR image is 4 channels.
64
+ // In the format of Float32Array.
65
+ color: { data: noisyColor, width, height },
66
+ done(denoised) {
67
+ console.log('Finished');
68
+ },
69
+ progress(denoised, tileData, tile) {
70
+ // The denoised data and tileData has same format with the input.
71
+ }
72
+ });
73
+ });
74
+ ```
75
+
76
+ ### Using AUX Input
77
+
78
+ ```ts
79
+ import { UNet, initUNetFromURL } from 'oidn-web';
80
+ initUNetFromURL('./weights/rt_hdr_alb_nrm.tza', undefined, {
81
+ aux: true,
82
+ hdr: true
83
+ }).then((unet) => {
84
+ const abortDenoising = unet.tileExecute({
85
+ // Same as examples before. noisyColor of HDR image is Float32Array. LDR image is Uint8ClampedArray.
86
+ color: { data: noisyColor, width, height },
87
+ // Normal and albedo are both 4 channels in Uint8ClampedArray.
88
+ normal: { data: normalData, width, height },
89
+ albedo: { data: albedoData, width, height },
90
+
91
+ done(denoised) {
92
+ console.log('Finished');
93
+ },
94
+ progress(denoised, tileData, tile) {
95
+ ///...
96
+ }
97
+ });
98
+ });
99
+ ```
100
+
101
+ ### Integrate into your WebGPU Pipeline
102
+
103
+ If you already have a WebGPU path tracer. You can integrate the oidn-web into your pipeline. It supports input/output gpu buffers to avoid the cost of syncing between CPU and GPU.
104
+
105
+ `hdr` and `aux` are required in the WebGPU pipeline.
106
+
107
+ ```ts
108
+ initUNetFromURL(
109
+ './weights/rt_hdr_alb_nrm.tza',
110
+ {
111
+ // Share GPUDevice and GPUAdapterInfo to the TFJS WebGPU backend
112
+ device,
113
+ adapterInfo
114
+ },
115
+ {
116
+ aux: true,
117
+ hdr: true
118
+ }
119
+ ).then((unet) => {
120
+ const abortDenoising = unet.tileExecute({
121
+ // Inputs are all GPUBuffer
122
+ color: { data: colorBuffer, width, height },
123
+ normal: { data: normalBuffer, width, height },
124
+ albedo: { data: albedoBuffer, width, height },
125
+
126
+ done(denoised) {
127
+ console.log('Finished');
128
+ },
129
+ progress(denoised) {
130
+ // Denoised data is also a GPUBuffer.
131
+ // tileData is undefined if using GPUBuffer as input/output
132
+ }
133
+ });
134
+ });
135
+ ```
136
+
137
+ ### Use smaller and larger weights.
138
+
139
+ OIDN also provides a large weights file, which provides a better quality, and a small weights file, which provides a better performance.
140
+
141
+ ```ts
142
+ // Change the weights file to large and nothing else needs to do.
143
+ initUNetFromURL('./weights/rt_hdr_calb_cnrm_large.tza', ...);
144
+ ```
145
+
146
+ ```ts
147
+ // Change the weights file to small and nothing else needs to do.
148
+ initUNetFromURL('./weights/rt_hdr_alb_nrm_small.tza', ...);
149
+ ```
150
+
151
+ Other combinations can be found in the [oidn-weights](https://github.com/RenderKit/oidn-weights)
152
+
153
+ ## Credits
154
+
155
+ Huge thanks to Max Liani for his series: https://maxliani.wordpress.com/2023/03/17/dnnd-1-a-deep-neural-network-dive/. My work is mostly inspired by it.
@@ -16689,6 +16689,20 @@ class $x {
16689
16689
  H(this, "_maxTileSize");
16690
16690
  this._tensors = t, this._backend = e, this._aux = s.aux || !1, this._hdr = s.hdr || !1, this._maxTileSize = s.maxTileSize ?? 512, this._device = this._backend.device;
16691
16691
  }
16692
+ getDevice() {
16693
+ return this._device;
16694
+ }
16695
+ _buildModel(t) {
16696
+ const s = 3 + (this._aux ? 6 : 0), r = this._getTileSizeWithOverlap(), o = n1({
16697
+ shape: [r.height, r.width, s],
16698
+ dtype: "float32"
16699
+ });
16700
+ this._tfModel = new Jr({
16701
+ inputs: [o],
16702
+ // TODO output process transferFunc
16703
+ outputs: t ? this._addNetLarge(o) : this._addNet(o)
16704
+ });
16705
+ }
16692
16706
  _createConv(t, e, s) {
16693
16707
  const r = this._tensors.get(t + ".weight"), o = this._tensors.get(t + ".bias"), i = r.desc.dims, a = tr(
16694
16708
  xx(
@@ -16740,20 +16754,6 @@ class $x {
16740
16754
  trainable: !1
16741
16755
  }).apply(t);
16742
16756
  }
16743
- getDevice() {
16744
- return this._device;
16745
- }
16746
- _buildModel(t) {
16747
- const s = 3 + (this._aux ? 6 : 0), r = this._getTileSizeWithOverlap(), o = n1({
16748
- shape: [r.height, r.width, s],
16749
- dtype: "float32"
16750
- });
16751
- this._tfModel = new Jr({
16752
- inputs: [o],
16753
- // TODO output process transferFunc
16754
- outputs: t ? this._addNetLarge(o) : this._addNet(o)
16755
- });
16756
- }
16757
16757
  _addNet(t) {
16758
16758
  let e = this._createConv("enc_conv0", t, "relu");
16759
16759
  const s = e = this._createPooling(
@@ -16929,7 +16929,7 @@ class $x {
16929
16929
  return P.dispose(), F.dispose(), G;
16930
16930
  }
16931
16931
  }
16932
- progressiveExecute({
16932
+ tileExecute({
16933
16933
  color: t,
16934
16934
  albedo: e,
16935
16935
  normal: s,
@@ -3121,7 +3121,7 @@ out_color[outIdx] = vec4f(
3121
3121
  // Pick the alpha
3122
3122
  raw.a
3123
3123
  );
3124
- `}),this._inputPass.setOutputParams({color:{channels:3},albedo:{channels:3},normal:{channels:3}}),this._outputPass.setOutputParams({color:{channels:4}})}setImageSize(t,e){this._inputPass.setUniform("inputSize",new Float32Array([t,e])),this._outputPass.setUniform("imageSize",new Float32Array([t,e])),this._outputPass.setSize(t,e)}setInputTile(t){const e=this._inputPass,s=new Float32Array([t.width,t.height]);e.setUniform("inputOffset",new Float32Array([t.x,t.y])),e.setUniform("outputSize",s),e.setSize(s[0],s[1]),this._outputPass.setUniform("inputSize",s)}setOutputTile(t,e){const s=this._outputPass,r=new Float32Array([t.width,t.height]),o=t.x-e.x,i=t.y-e.y;s.setUniform("outputSize",r),s.setUniform("inputOffset",new Float32Array([o,i])),s.setUniform("outputOffset",new Float32Array([t.x,t.y])),s.setExecuteSize(r[0],r[1])}forward(t,e,s){const r=this._inputPass,o=this._device.createCommandEncoder();return r.createPass(o,{color:{buffer:t,channels:4},albedo:{buffer:e,channels:4},normal:{buffer:s,channels:4}}),this._device.queue.submit([o.finish()]),{color:r.getOutputBuffer("color"),albedo:r.getOutputBuffer("albedo"),normal:r.getOutputBuffer("normal")}}inverse(t,e){const r=this._device.createCommandEncoder(),o=this._outputPass;return o.createPass(r,{color:{buffer:t,channels:4},raw:{buffer:e,channels:4}}),this._device.queue.submit([r.finish()]),o.getOutputBuffer("color")}copyInputDataToOutput(t){const e=this._device.createCommandEncoder(),r=this._outputPass.getOutputBuffer("color");e.copyBufferToBuffer(t,0,r,0,r.size),this._device.queue.submit([e.finish()])}dispose(){this._outputPass.dispose(),this._inputPass.dispose()}}function Kh(n,t){const e=n.buffer;if(t==="Float32")return new Float32Array(n.buffer);const s=new ft(e),r=new Float32Array(s.length);for(let o=0;o<r.length;++o)r[o]=s[o];return r}function mx(n,t){const[e,s,r,o]=t,i=new Float32Array(n.length);for(let a=0;a<e;++a)for(let l=0;l<s;++l)for(let u=0;u<r;++u)for(let c=0;c<o;++c){const h=a*s*r*o+l*r*o+u*o+c,f=u*o*s*e+c*s*e+l*e+a;i[f]=n[h]}return i}function Qr(n,t){return Math.ceil(n/t)*t}function to(n){return n.data instanceof GPUBuffer}const gx=174,bx=202,eo=16,no=Qr(gx/2,eo),Yh=Qr(bx/2,eo);class Xh{constructor(t,e,s={}){K(this,"_tfModel");K(this,"_device");K(this,"_tileWidth",0);K(this,"_tileHeight",0);K(this,"_tileOverlapX",0);K(this,"_tileOverlapY",0);K(this,"_aux",!1);K(this,"_hdr",!1);K(this,"_dataProcessGPU");K(this,"_maxTileSize");this._tensors=t,this._backend=e,this._aux=s.aux||!1,this._hdr=s.hdr||!1,this._maxTileSize=s.maxTileSize??512,this._device=this._backend.device}_createConv(t,e,s){const r=this._tensors.get(t+".weight"),o=this._tensors.get(t+".bias"),i=r.desc.dims,a=er(mx(Kh(r.data,r.desc.dataType),i),[i[2],i[3],i[1],i[0]],"float32"),l=Rt(Kh(o.data,o.desc.dataType),"float32");return new Yn({name:t,filters:r.desc.dims[0],kernelSize:r.desc.dims.slice(2,4),useBias:!0,activation:s,padding:"same",weights:[a,l],trainable:!1}).apply(e)}_createConcatConv(t,e,s){return this._createConv(t,new Ti({trainable:!1,axis:3}).apply([e,s]),"relu")}_createPooling(t){return new Ei({name:t.name+"/pooling",poolSize:[2,2],strides:[2,2],padding:"same",trainable:!1}).apply(t)}_addUpsamplingLayer(t){return new Ai({name:t.name+"/upsampling",size:[2,2],trainable:!1}).apply(t)}getDevice(){return this._device}_buildModel(t){const s=3+(this._aux?6:0),r=this._getTileSizeWithOverlap(),o=Zw({shape:[r.height,r.width,s],dtype:"float32"});this._tfModel=new Mr({inputs:[o],outputs:t?this._addNetLarge(o):this._addNet(o)})}_addNet(t){let e=this._createConv("enc_conv0",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1",e,"relu")),r=e=this._createPooling(this._createConv("enc_conv2",e,"relu")),o=e=this._createPooling(this._createConv("enc_conv3",e,"relu")),i=e=this._createPooling(this._createConv("enc_conv4",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv0",e,"relu"),e}_addNetLarge(t){let e=this._createConv("enc_conv1a",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1b",e,"relu"));e=this._createConv("enc_conv2a",e,"relu");const r=e=this._createPooling(this._createConv("enc_conv2b",e,"relu"));e=this._createConv("enc_conv3a",e,"relu");const o=e=this._createPooling(this._createConv("enc_conv3b",e,"relu"));e=this._createConv("enc_conv4a",e,"relu");const i=e=this._createPooling(this._createConv("enc_conv4b",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv1c",e,"relu"),e}_updateModel(t,e){const s=this._tensors.has("enc_conv1b.weight"),r=this._maxTileSize;let o=r,i=r,a=s?Yh:no,l=s?Yh:no;t<r+no*2&&(o=Qr(t,eo),a=0),e<r+no*2&&(i=Qr(e,eo),l=0),(o!==this._tileWidth||i!==this._tileHeight||a!==this._tileOverlapX||l!==this._tileOverlapY||!this._tfModel)&&(this._tileWidth=o,this._tileHeight=i,this._tileOverlapX=a,this._tileOverlapY=l,this._tfModel&&this._tfModel.dispose(),this._buildModel(s))}_getTileSizeWithOverlap(){return{width:this._tileWidth+2*this._tileOverlapX,height:this._tileHeight+2*this._tileOverlapY}}_processImageData(t,e,s,r){const o=t.data,i=o.length/4,a=this._aux?9:3,l=new Float32Array(i*a);if(e&&!s||s&&!e)throw new Error("Normal map and albedo map are both required");if(e&&s&&(e.width!==s.width||e.height!==s.height||t.width!==e.width||t.height!==e.height))throw new Error("Image size mismatch");const u=e==null?void 0:e.data,c=s==null?void 0:s.data;for(let h=0;h<o.length;h+=4){const f=h/4*a;for(let d=0;d<3;d++)r?l[f+d]=o[h+d]:l[f+d]=o[h+d]/255,u&&(l[f+d+3]=u[h+d]/255),c&&(l[f+d+6]=c[h+d]/255)}return l}_readTile(t,e,s,r){const o=new Float32Array(s.width*s.height*e);for(let i=0;i<s.height;i++)for(let a=0;a<s.width;a++){const l=((i+s.y)*r+(a+s.x))*e,u=(i*s.width+a)*e;for(let c=0;c<e;c++)o[u+c]=t[l+c]}return o}_writeTile(t,e,s,r,o,i){const{data:a,width:l}=t,u=s.x-e.x,c=s.y-e.y;for(let h=0;h<s.height;h++)for(let f=0;f<s.width;f++){const d=((h+c)*o+f+u)*3,p=((h+s.y)*l+(f+s.x))*4;for(let g=0;g<3;g++)i?a[p+g]=r[d+g]:a[p+g]=Math.min(Math.max(r[d+g]*255,0),255);t.data[p+3]=i?1:255}}_executeTile(t,e,s,r,o,i,a,l){const u=this._aux?9:3,c=this._tileOverlapX,h=this._tileOverlapY;let f=this._getTileSizeWithOverlap(),d={width:this._tileWidth,height:this._tileHeight},p=r>0?r*d.width-c:0,g=Math.min(p+f.width,i);p=Math.max(g-f.width,0);let m=o>0?o*d.height-h:0,b=Math.min(m+f.height,a);m=Math.max(b-f.height,0);const y=Math.min(f.width,i),S=Math.min(f.height,a),x=i<d.width||a<d.height,v=new ca(p,m,y,S);let E,D=1;const k=this._device;let T=this._dataProcessGPU;if(t instanceof Float32Array){let F=this._readTile(t,u,v,i);l&&(D=hx({data:F,channels:9}),F=fx({data:F,channels:9,inputScale:D})),E=er(F,[1,S,y,u],"float32")}else{if(!l)throw new Error("Only hdr is supported for webgpu data.");T||(T=this._dataProcessGPU=new px(k)),T.setImageSize(i,a),T.setInputTile(v),r===0&&o===0&&T.copyInputDataToOutput(t.color);const{color:F,albedo:G,normal:q}=T.forward(t.color,t.albedo,t.normal),De=[1,S,y,4],qt=[F,G,q].map(jt=>{const Xe=er({buffer:jt,zeroCopy:!0},De),os=hs(Xe,[0,0,0,0],[1,S,y,3]);return Xe.dispose(),os});E=Hp(qt,3),qt.forEach(jt=>jt.dispose())}if(x){const F=E;E=Op(F,[[0,0],[0,f.height-a],[0,f.width-i],[0,0]],"reflect"),F.dispose()}const P=this._tfModel.predict(E);E.dispose();const B=Math.min(d.width,i),Y=Math.min(d.height,a),j=new ca(r*B,o*Y,B,Y);if(j.width=Math.min(j.width,i-j.x),j.height=Math.min(j.height,a-j.y),t instanceof Float32Array){let F=P.dataSync();l&&(F=dx({data:F,channels:3,inputScale:D})),this._writeTile(s,v,j,F,f.width,l);for(let G=0;G<Y;G++)for(let q=0;q<B;q++){const De=(G*B+q)*4,qt=((G+j.y)*i+(q+j.x))*4;for(let jt=0;jt<4;jt++)e.data[De+jt]=s.data[qt+jt]}P.dispose()}else{T.setOutputTile(j,v);const F=Up(P,[[0,0],[0,0],[0,0],[0,1]]),G=T.inverse(F.dataToGPU().buffer,t.color);return P.dispose(),F.dispose(),G}}progressiveExecute({color:t,albedo:e,normal:s,done:r,progress:o}){if(this._aux&&(!e||!s))throw new Error("Normal map and albedo map are both required");if(!this._aux&&(e||s))throw new Error("Normal map and albedo map are not required");const i=t.width,a=t.height;this._updateModel(i,a);const l=this._hdr||!1;let u;to(t)||(u=this._processImageData(t,e,s,l));const c=this._tileWidth,h=this._tileHeight,f=Math.ceil(a/h),d=Math.ceil(i/c);function p(S,x){return l?{data:new Float32Array(S*x*4),width:S,height:x}:new ImageData(S,x)}const g=to(t)?void 0:p(i,a),m=to(t)?void 0:p(Math.min(c,i),Math.min(h,a));let b=!1;const y=(S,x)=>{if(b)return;let v;v=this._executeTile(to(t)?{color:t.data,albedo:e.data,normal:s.data}:u,m,g,S,x,i,a,l);const E=g||{data:v,width:i,height:a};o==null||o(E,m,new ca(S*c,x*h,c,h),S+x*d,d*f),S+1<d||x+1<f?requestAnimationFrame(()=>{S+1<d?y(S+1,x):x+1<f&&y(0,x+1)}):r(E)};return y(0,0),()=>{b=!0}}dispose(){var t,e;(t=this._tfModel)==null||t.dispose(),(e=this._dataProcessGPU)==null||e.dispose()}}/**
3124
+ `}),this._inputPass.setOutputParams({color:{channels:3},albedo:{channels:3},normal:{channels:3}}),this._outputPass.setOutputParams({color:{channels:4}})}setImageSize(t,e){this._inputPass.setUniform("inputSize",new Float32Array([t,e])),this._outputPass.setUniform("imageSize",new Float32Array([t,e])),this._outputPass.setSize(t,e)}setInputTile(t){const e=this._inputPass,s=new Float32Array([t.width,t.height]);e.setUniform("inputOffset",new Float32Array([t.x,t.y])),e.setUniform("outputSize",s),e.setSize(s[0],s[1]),this._outputPass.setUniform("inputSize",s)}setOutputTile(t,e){const s=this._outputPass,r=new Float32Array([t.width,t.height]),o=t.x-e.x,i=t.y-e.y;s.setUniform("outputSize",r),s.setUniform("inputOffset",new Float32Array([o,i])),s.setUniform("outputOffset",new Float32Array([t.x,t.y])),s.setExecuteSize(r[0],r[1])}forward(t,e,s){const r=this._inputPass,o=this._device.createCommandEncoder();return r.createPass(o,{color:{buffer:t,channels:4},albedo:{buffer:e,channels:4},normal:{buffer:s,channels:4}}),this._device.queue.submit([o.finish()]),{color:r.getOutputBuffer("color"),albedo:r.getOutputBuffer("albedo"),normal:r.getOutputBuffer("normal")}}inverse(t,e){const r=this._device.createCommandEncoder(),o=this._outputPass;return o.createPass(r,{color:{buffer:t,channels:4},raw:{buffer:e,channels:4}}),this._device.queue.submit([r.finish()]),o.getOutputBuffer("color")}copyInputDataToOutput(t){const e=this._device.createCommandEncoder(),r=this._outputPass.getOutputBuffer("color");e.copyBufferToBuffer(t,0,r,0,r.size),this._device.queue.submit([e.finish()])}dispose(){this._outputPass.dispose(),this._inputPass.dispose()}}function Kh(n,t){const e=n.buffer;if(t==="Float32")return new Float32Array(n.buffer);const s=new ft(e),r=new Float32Array(s.length);for(let o=0;o<r.length;++o)r[o]=s[o];return r}function mx(n,t){const[e,s,r,o]=t,i=new Float32Array(n.length);for(let a=0;a<e;++a)for(let l=0;l<s;++l)for(let u=0;u<r;++u)for(let c=0;c<o;++c){const h=a*s*r*o+l*r*o+u*o+c,f=u*o*s*e+c*s*e+l*e+a;i[f]=n[h]}return i}function Qr(n,t){return Math.ceil(n/t)*t}function to(n){return n.data instanceof GPUBuffer}const gx=174,bx=202,eo=16,no=Qr(gx/2,eo),Yh=Qr(bx/2,eo);class Xh{constructor(t,e,s={}){K(this,"_tfModel");K(this,"_device");K(this,"_tileWidth",0);K(this,"_tileHeight",0);K(this,"_tileOverlapX",0);K(this,"_tileOverlapY",0);K(this,"_aux",!1);K(this,"_hdr",!1);K(this,"_dataProcessGPU");K(this,"_maxTileSize");this._tensors=t,this._backend=e,this._aux=s.aux||!1,this._hdr=s.hdr||!1,this._maxTileSize=s.maxTileSize??512,this._device=this._backend.device}getDevice(){return this._device}_buildModel(t){const s=3+(this._aux?6:0),r=this._getTileSizeWithOverlap(),o=Zw({shape:[r.height,r.width,s],dtype:"float32"});this._tfModel=new Mr({inputs:[o],outputs:t?this._addNetLarge(o):this._addNet(o)})}_createConv(t,e,s){const r=this._tensors.get(t+".weight"),o=this._tensors.get(t+".bias"),i=r.desc.dims,a=er(mx(Kh(r.data,r.desc.dataType),i),[i[2],i[3],i[1],i[0]],"float32"),l=Rt(Kh(o.data,o.desc.dataType),"float32");return new Yn({name:t,filters:r.desc.dims[0],kernelSize:r.desc.dims.slice(2,4),useBias:!0,activation:s,padding:"same",weights:[a,l],trainable:!1}).apply(e)}_createConcatConv(t,e,s){return this._createConv(t,new Ti({trainable:!1,axis:3}).apply([e,s]),"relu")}_createPooling(t){return new Ei({name:t.name+"/pooling",poolSize:[2,2],strides:[2,2],padding:"same",trainable:!1}).apply(t)}_addUpsamplingLayer(t){return new Ai({name:t.name+"/upsampling",size:[2,2],trainable:!1}).apply(t)}_addNet(t){let e=this._createConv("enc_conv0",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1",e,"relu")),r=e=this._createPooling(this._createConv("enc_conv2",e,"relu")),o=e=this._createPooling(this._createConv("enc_conv3",e,"relu")),i=e=this._createPooling(this._createConv("enc_conv4",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv0",e,"relu"),e}_addNetLarge(t){let e=this._createConv("enc_conv1a",t,"relu");const s=e=this._createPooling(this._createConv("enc_conv1b",e,"relu"));e=this._createConv("enc_conv2a",e,"relu");const r=e=this._createPooling(this._createConv("enc_conv2b",e,"relu"));e=this._createConv("enc_conv3a",e,"relu");const o=e=this._createPooling(this._createConv("enc_conv3b",e,"relu"));e=this._createConv("enc_conv4a",e,"relu");const i=e=this._createPooling(this._createConv("enc_conv4b",e,"relu"));return e=this._createConv("enc_conv5a",i,"relu"),e=this._addUpsamplingLayer(this._createConv("enc_conv5b",e,"relu")),e=this._createConcatConv("dec_conv4a",e,o),e=this._addUpsamplingLayer(this._createConv("dec_conv4b",e,"relu")),e=this._createConcatConv("dec_conv3a",e,r),e=this._addUpsamplingLayer(this._createConv("dec_conv3b",e,"relu")),e=this._createConcatConv("dec_conv2a",e,s),e=this._addUpsamplingLayer(this._createConv("dec_conv2b",e,"relu")),e=this._createConcatConv("dec_conv1a",e,t),e=this._createConv("dec_conv1b",e,"relu"),e=this._createConv("dec_conv1c",e,"relu"),e}_updateModel(t,e){const s=this._tensors.has("enc_conv1b.weight"),r=this._maxTileSize;let o=r,i=r,a=s?Yh:no,l=s?Yh:no;t<r+no*2&&(o=Qr(t,eo),a=0),e<r+no*2&&(i=Qr(e,eo),l=0),(o!==this._tileWidth||i!==this._tileHeight||a!==this._tileOverlapX||l!==this._tileOverlapY||!this._tfModel)&&(this._tileWidth=o,this._tileHeight=i,this._tileOverlapX=a,this._tileOverlapY=l,this._tfModel&&this._tfModel.dispose(),this._buildModel(s))}_getTileSizeWithOverlap(){return{width:this._tileWidth+2*this._tileOverlapX,height:this._tileHeight+2*this._tileOverlapY}}_processImageData(t,e,s,r){const o=t.data,i=o.length/4,a=this._aux?9:3,l=new Float32Array(i*a);if(e&&!s||s&&!e)throw new Error("Normal map and albedo map are both required");if(e&&s&&(e.width!==s.width||e.height!==s.height||t.width!==e.width||t.height!==e.height))throw new Error("Image size mismatch");const u=e==null?void 0:e.data,c=s==null?void 0:s.data;for(let h=0;h<o.length;h+=4){const f=h/4*a;for(let d=0;d<3;d++)r?l[f+d]=o[h+d]:l[f+d]=o[h+d]/255,u&&(l[f+d+3]=u[h+d]/255),c&&(l[f+d+6]=c[h+d]/255)}return l}_readTile(t,e,s,r){const o=new Float32Array(s.width*s.height*e);for(let i=0;i<s.height;i++)for(let a=0;a<s.width;a++){const l=((i+s.y)*r+(a+s.x))*e,u=(i*s.width+a)*e;for(let c=0;c<e;c++)o[u+c]=t[l+c]}return o}_writeTile(t,e,s,r,o,i){const{data:a,width:l}=t,u=s.x-e.x,c=s.y-e.y;for(let h=0;h<s.height;h++)for(let f=0;f<s.width;f++){const d=((h+c)*o+f+u)*3,p=((h+s.y)*l+(f+s.x))*4;for(let g=0;g<3;g++)i?a[p+g]=r[d+g]:a[p+g]=Math.min(Math.max(r[d+g]*255,0),255);t.data[p+3]=i?1:255}}_executeTile(t,e,s,r,o,i,a,l){const u=this._aux?9:3,c=this._tileOverlapX,h=this._tileOverlapY;let f=this._getTileSizeWithOverlap(),d={width:this._tileWidth,height:this._tileHeight},p=r>0?r*d.width-c:0,g=Math.min(p+f.width,i);p=Math.max(g-f.width,0);let m=o>0?o*d.height-h:0,b=Math.min(m+f.height,a);m=Math.max(b-f.height,0);const y=Math.min(f.width,i),S=Math.min(f.height,a),x=i<d.width||a<d.height,v=new ca(p,m,y,S);let E,D=1;const k=this._device;let T=this._dataProcessGPU;if(t instanceof Float32Array){let F=this._readTile(t,u,v,i);l&&(D=hx({data:F,channels:9}),F=fx({data:F,channels:9,inputScale:D})),E=er(F,[1,S,y,u],"float32")}else{if(!l)throw new Error("Only hdr is supported for webgpu data.");T||(T=this._dataProcessGPU=new px(k)),T.setImageSize(i,a),T.setInputTile(v),r===0&&o===0&&T.copyInputDataToOutput(t.color);const{color:F,albedo:G,normal:q}=T.forward(t.color,t.albedo,t.normal),De=[1,S,y,4],qt=[F,G,q].map(jt=>{const Xe=er({buffer:jt,zeroCopy:!0},De),os=hs(Xe,[0,0,0,0],[1,S,y,3]);return Xe.dispose(),os});E=Hp(qt,3),qt.forEach(jt=>jt.dispose())}if(x){const F=E;E=Op(F,[[0,0],[0,f.height-a],[0,f.width-i],[0,0]],"reflect"),F.dispose()}const P=this._tfModel.predict(E);E.dispose();const B=Math.min(d.width,i),Y=Math.min(d.height,a),j=new ca(r*B,o*Y,B,Y);if(j.width=Math.min(j.width,i-j.x),j.height=Math.min(j.height,a-j.y),t instanceof Float32Array){let F=P.dataSync();l&&(F=dx({data:F,channels:3,inputScale:D})),this._writeTile(s,v,j,F,f.width,l);for(let G=0;G<Y;G++)for(let q=0;q<B;q++){const De=(G*B+q)*4,qt=((G+j.y)*i+(q+j.x))*4;for(let jt=0;jt<4;jt++)e.data[De+jt]=s.data[qt+jt]}P.dispose()}else{T.setOutputTile(j,v);const F=Up(P,[[0,0],[0,0],[0,0],[0,1]]),G=T.inverse(F.dataToGPU().buffer,t.color);return P.dispose(),F.dispose(),G}}tileExecute({color:t,albedo:e,normal:s,done:r,progress:o}){if(this._aux&&(!e||!s))throw new Error("Normal map and albedo map are both required");if(!this._aux&&(e||s))throw new Error("Normal map and albedo map are not required");const i=t.width,a=t.height;this._updateModel(i,a);const l=this._hdr||!1;let u;to(t)||(u=this._processImageData(t,e,s,l));const c=this._tileWidth,h=this._tileHeight,f=Math.ceil(a/h),d=Math.ceil(i/c);function p(S,x){return l?{data:new Float32Array(S*x*4),width:S,height:x}:new ImageData(S,x)}const g=to(t)?void 0:p(i,a),m=to(t)?void 0:p(Math.min(c,i),Math.min(h,a));let b=!1;const y=(S,x)=>{if(b)return;let v;v=this._executeTile(to(t)?{color:t.data,albedo:e.data,normal:s.data}:u,m,g,S,x,i,a,l);const E=g||{data:v,width:i,height:a};o==null||o(E,m,new ca(S*c,x*h,c,h),S+x*d,d*f),S+1<d||x+1<f?requestAnimationFrame(()=>{S+1<d?y(S+1,x):x+1<f&&y(0,x+1)}):r(E)};return y(0,0),()=>{b=!0}}dispose(){var t,e;(t=this._tfModel)==null||t.dispose(),(e=this._dataProcessGPU)==null||e.dispose()}}/**
3125
3125
  * @license
3126
3126
  * Copyright 2019 Google LLC. All Rights Reserved.
3127
3127
  * Licensed under the Apache License, Version 2.0 (the "License");
package/lib/UNet.d.ts CHANGED
@@ -30,12 +30,12 @@ declare class UNet {
30
30
  hdr?: boolean;
31
31
  maxTileSize?: number;
32
32
  });
33
+ getDevice(): GPUDevice | undefined;
34
+ private _buildModel;
33
35
  private _createConv;
34
36
  private _createConcatConv;
35
37
  private _createPooling;
36
38
  private _addUpsamplingLayer;
37
- getDevice(): GPUDevice | undefined;
38
- private _buildModel;
39
39
  private _addNet;
40
40
  private _addNetLarge;
41
41
  private _updateModel;
@@ -44,7 +44,7 @@ declare class UNet {
44
44
  private _readTile;
45
45
  private _writeTile;
46
46
  private _executeTile;
47
- progressiveExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress }: {
47
+ tileExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress }: {
48
48
  color: T;
49
49
  albedo?: ImageData | GPUImageData;
50
50
  normal?: ImageData | GPUImageData;
package/lib/UNet.js CHANGED
@@ -81,6 +81,25 @@ class UNet {
81
81
  this._maxTileSize = opts.maxTileSize ?? 512;
82
82
  this._device = this._backend.device;
83
83
  }
84
+ getDevice() {
85
+ return this._device;
86
+ }
87
+ _buildModel(isLarge) {
88
+ const aux = this._aux;
89
+ const channels = 3 + (aux ? 6 : 0);
90
+ const tileSize = this._getTileSizeWithOverlap();
91
+ // TODO input process transferFunc
92
+ // TODO input shape
93
+ const input = TFInput({
94
+ shape: [tileSize.height, tileSize.width, channels],
95
+ dtype: 'float32'
96
+ });
97
+ this._tfModel = new LayersModel({
98
+ inputs: [input],
99
+ // TODO output process transferFunc
100
+ outputs: isLarge ? this._addNetLarge(input) : this._addNet(input)
101
+ });
102
+ }
84
103
  _createConv(name, source, activation) {
85
104
  const unetWeightTensor = this._tensors.get(name + '.weight');
86
105
  const unetBiasTensor = this._tensors.get(name + '.bias');
@@ -127,25 +146,6 @@ class UNet {
127
146
  trainable: false
128
147
  }).apply(source);
129
148
  }
130
- getDevice() {
131
- return this._device;
132
- }
133
- _buildModel(isLarge) {
134
- const aux = this._aux;
135
- const channels = 3 + (aux ? 6 : 0);
136
- const tileSize = this._getTileSizeWithOverlap();
137
- // TODO input process transferFunc
138
- // TODO input shape
139
- const input = TFInput({
140
- shape: [tileSize.height, tileSize.width, channels],
141
- dtype: 'float32'
142
- });
143
- this._tfModel = new LayersModel({
144
- inputs: [input],
145
- // TODO output process transferFunc
146
- outputs: isLarge ? this._addNetLarge(input) : this._addNet(input)
147
- });
148
- }
149
149
  _addNet(input) {
150
150
  let x = this._createConv('enc_conv0', input, 'relu');
151
151
  const pool1 = (x = this._createPooling(this._createConv('enc_conv1', x, 'relu')));
@@ -409,7 +409,7 @@ class UNet {
409
409
  return outBuffer;
410
410
  }
411
411
  }
412
- progressiveExecute({ color, albedo, normal, done, progress }) {
412
+ tileExecute({ color, albedo, normal, done, progress }) {
413
413
  if (this._aux && (!albedo || !normal)) {
414
414
  throw new Error('Normal map and albedo map are both required');
415
415
  }
package/lib/UNet.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"UNet.js","sourceRoot":"","sources":["../src/UNet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UNet.js","sourceRoot":"","sources":["../src/UNet.ts"],"names":[],"mappings":"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"}
package/lib/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAsB,EACtB,aAAkE,EAClE,IAIC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa;QAClC,CAAC,CAAC,2BAA2B,CACzB,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,WAAW,CAC1B;QACH,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,OAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,aAAkE,EAClE,IAIC;IAED,OAAO,KAAK,CAAC,SAAS,CAAC;SACpB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACX,OAAO,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAsB,EACtB,aAAkE,EAClE,IAIC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa;QAClC,CAAC,CAAC,2BAA2B,CACzB,aAAa,CAAC,MAAM,EACpB,aAAa,CAAC,WAAW,CAC1B;QACH,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,OAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,aAAkE,EAClE,IAIC;IAED,OAAO,KAAK,CAAC,SAAS,CAAC;SACpB,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;SAChC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACX,OAAO,kBAAkB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "oidn-web",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Run Open Image Denoiser on the Web",
5
5
  "main": "lib/main.js",
6
+ "types": "lib/main.d.ts",
7
+ "type": "module",
6
8
  "scripts": {
7
9
  "build": "vite build",
8
10
  "dev": "vite dev",
package/src/UNet.ts CHANGED
@@ -133,6 +133,29 @@ class UNet {
133
133
  this._device = this._backend.device;
134
134
  }
135
135
 
136
+ getDevice() {
137
+ return this._device;
138
+ }
139
+
140
+ private _buildModel(isLarge: boolean) {
141
+ const aux = this._aux;
142
+ const channels = 3 + (aux ? 6 : 0);
143
+ const tileSize = this._getTileSizeWithOverlap();
144
+
145
+ // TODO input process transferFunc
146
+ // TODO input shape
147
+ const input = TFInput({
148
+ shape: [tileSize.height, tileSize.width, channels],
149
+ dtype: 'float32'
150
+ });
151
+
152
+ this._tfModel = new LayersModel({
153
+ inputs: [input],
154
+ // TODO output process transferFunc
155
+ outputs: isLarge ? this._addNetLarge(input) : this._addNet(input)
156
+ });
157
+ }
158
+
136
159
  private _createConv(
137
160
  name: string,
138
161
  source: SymbolicTensor,
@@ -205,29 +228,6 @@ class UNet {
205
228
  }).apply(source) as SymbolicTensor;
206
229
  }
207
230
 
208
- getDevice() {
209
- return this._device;
210
- }
211
-
212
- private _buildModel(isLarge: boolean) {
213
- const aux = this._aux;
214
- const channels = 3 + (aux ? 6 : 0);
215
- const tileSize = this._getTileSizeWithOverlap();
216
-
217
- // TODO input process transferFunc
218
- // TODO input shape
219
- const input = TFInput({
220
- shape: [tileSize.height, tileSize.width, channels],
221
- dtype: 'float32'
222
- });
223
-
224
- this._tfModel = new LayersModel({
225
- inputs: [input],
226
- // TODO output process transferFunc
227
- outputs: isLarge ? this._addNetLarge(input) : this._addNet(input)
228
- });
229
- }
230
-
231
231
  private _addNet(input: SymbolicTensor) {
232
232
  let x = this._createConv('enc_conv0', input, 'relu');
233
233
  const pool1 = (x = this._createPooling(
@@ -614,7 +614,7 @@ class UNet {
614
614
  }
615
615
  }
616
616
 
617
- progressiveExecute<T extends ImageData | HDRImageData | GPUImageData>({
617
+ tileExecute<T extends ImageData | HDRImageData | GPUImageData>({
618
618
  color,
619
619
  albedo,
620
620
  normal,
package/src/main.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { WebGPUBackend } from '@tensorflow/tfjs-backend-webgpu/dist/base';
2
1
  import { parseTZA } from './tza';
3
2
  import UNet from './UNet';
4
3
  import { initWebGPUBackend, initWebGPUBackendWithDevice } from './backend';