oidn-web 0.1.2 → 0.2.1

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/lib/UNet.d.ts CHANGED
@@ -30,19 +30,21 @@ 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
- buildModel(): void;
39
+ private _addNet;
40
+ private _addNetLarge;
39
41
  private _updateModel;
40
42
  private _getTileSizeWithOverlap;
41
43
  private _processImageData;
42
44
  private _readTile;
43
45
  private _writeTile;
44
46
  private _executeTile;
45
- progressiveExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress }: {
47
+ tileExecute<T extends ImageData | HDRImageData | GPUImageData>({ color, albedo, normal, done, progress }: {
46
48
  color: T;
47
49
  albedo?: ImageData | GPUImageData;
48
50
  normal?: ImageData | GPUImageData;
package/lib/UNet.js CHANGED
@@ -52,10 +52,12 @@ function isGPUImageData(data) {
52
52
  return data.data instanceof GPUBuffer;
53
53
  }
54
54
  const receptiveField = 174; // receptive field in pixels
55
+ const receptiveFieldLarge = 202;
55
56
  // TODO metal is 32?
56
57
  const minTileAlignment = 1;
57
58
  const tileAlignment = 16; // required spatial alignment in pixels (padding may be necessary)
58
59
  const defaultTileOverlap = roundUp(receptiveField / 2, tileAlignment);
60
+ const defaultTileOverlapLarge = roundUp(receptiveFieldLarge / 2, tileAlignment);
59
61
  class UNet {
60
62
  _tensors;
61
63
  _backend;
@@ -79,6 +81,25 @@ class UNet {
79
81
  this._maxTileSize = opts.maxTileSize ?? 512;
80
82
  this._device = this._backend.device;
81
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
+ }
82
103
  _createConv(name, source, activation) {
83
104
  const unetWeightTensor = this._tensors.get(name + '.weight');
84
105
  const unetBiasTensor = this._tensors.get(name + '.bias');
@@ -125,47 +146,54 @@ class UNet {
125
146
  trainable: false
126
147
  }).apply(source);
127
148
  }
128
- getDevice() {
129
- return this._device;
149
+ _addNet(input) {
150
+ let x = this._createConv('enc_conv0', input, 'relu');
151
+ const pool1 = (x = this._createPooling(this._createConv('enc_conv1', x, 'relu')));
152
+ const pool2 = (x = this._createPooling(this._createConv('enc_conv2', x, 'relu')));
153
+ const pool3 = (x = this._createPooling(this._createConv('enc_conv3', x, 'relu')));
154
+ const pool4 = (x = this._createPooling(this._createConv('enc_conv4', x, 'relu')));
155
+ x = this._createConv('enc_conv5a', pool4, 'relu');
156
+ x = this._addUpsamplingLayer(this._createConv('enc_conv5b', x, 'relu'));
157
+ x = this._createConcatConv('dec_conv4a', x, pool3);
158
+ x = this._addUpsamplingLayer(this._createConv('dec_conv4b', x, 'relu'));
159
+ x = this._createConcatConv('dec_conv3a', x, pool2);
160
+ x = this._addUpsamplingLayer(this._createConv('dec_conv3b', x, 'relu'));
161
+ x = this._createConcatConv('dec_conv2a', x, pool1);
162
+ x = this._addUpsamplingLayer(this._createConv('dec_conv2b', x, 'relu'));
163
+ x = this._createConcatConv('dec_conv1a', x, input);
164
+ x = this._createConv('dec_conv1b', x, 'relu');
165
+ x = this._createConv('dec_conv0', x, 'relu');
166
+ return x;
130
167
  }
131
- buildModel() {
132
- const aux = this._aux;
133
- const channels = 3 + (aux ? 6 : 0);
134
- const tileSize = this._getTileSizeWithOverlap();
135
- // TODO input process transferFunc
136
- // TODO input shape
137
- const input = TFInput({
138
- shape: [tileSize.height, tileSize.width, channels],
139
- dtype: 'float32'
140
- });
141
- const encConv0 = this._createConv('enc_conv0', input, 'relu');
142
- const pool1 = this._createPooling(this._createConv('enc_conv1', encConv0, 'relu'));
143
- const pool2 = this._createPooling(this._createConv('enc_conv2', pool1, 'relu'));
144
- const pool3 = this._createPooling(this._createConv('enc_conv3', pool2, 'relu'));
145
- const pool4 = this._createPooling(this._createConv('enc_conv4', pool3, 'relu'));
146
- const encConv5a = this._createConv('enc_conv5a', pool4, 'relu');
147
- const upsample4 = this._addUpsamplingLayer(this._createConv('enc_conv5b', encConv5a, 'relu'));
148
- const decConv4a = this._createConcatConv('dec_conv4a', upsample4, pool3);
149
- const upsample3 = this._addUpsamplingLayer(this._createConv('dec_conv4b', decConv4a, 'relu'));
150
- const decConv3a = this._createConcatConv('dec_conv3a', upsample3, pool2);
151
- const upsample2 = this._addUpsamplingLayer(this._createConv('dec_conv3b', decConv3a, 'relu'));
152
- const decConv2a = this._createConcatConv('dec_conv2a', upsample2, pool1);
153
- const upsample1 = this._addUpsamplingLayer(this._createConv('dec_conv2b', decConv2a, 'relu'));
154
- const decConv1a = this._createConcatConv('dec_conv1a', upsample1, input);
155
- const decConv1b = this._createConv('dec_conv1b', decConv1a, 'relu');
156
- const decConv0 = this._createConv('dec_conv0', decConv1b, 'relu');
157
- this._tfModel = new LayersModel({
158
- inputs: [input],
159
- // TODO output process transferFunc
160
- outputs: decConv0
161
- });
168
+ _addNetLarge(input) {
169
+ let x = this._createConv('enc_conv1a', input, 'relu');
170
+ const pool1 = (x = this._createPooling(this._createConv('enc_conv1b', x, 'relu')));
171
+ x = this._createConv('enc_conv2a', x, 'relu');
172
+ const pool2 = (x = this._createPooling(this._createConv('enc_conv2b', x, 'relu')));
173
+ x = this._createConv('enc_conv3a', x, 'relu');
174
+ const pool3 = (x = this._createPooling(this._createConv('enc_conv3b', x, 'relu')));
175
+ x = this._createConv('enc_conv4a', x, 'relu');
176
+ const pool4 = (x = this._createPooling(this._createConv('enc_conv4b', x, 'relu')));
177
+ x = this._createConv('enc_conv5a', pool4, 'relu');
178
+ x = this._addUpsamplingLayer(this._createConv('enc_conv5b', x, 'relu'));
179
+ x = this._createConcatConv('dec_conv4a', x, pool3);
180
+ x = this._addUpsamplingLayer(this._createConv('dec_conv4b', x, 'relu'));
181
+ x = this._createConcatConv('dec_conv3a', x, pool2);
182
+ x = this._addUpsamplingLayer(this._createConv('dec_conv3b', x, 'relu'));
183
+ x = this._createConcatConv('dec_conv2a', x, pool1);
184
+ x = this._addUpsamplingLayer(this._createConv('dec_conv2b', x, 'relu'));
185
+ x = this._createConcatConv('dec_conv1a', x, input);
186
+ x = this._createConv('dec_conv1b', x, 'relu');
187
+ x = this._createConv('dec_conv1c', x, 'relu');
188
+ return x;
162
189
  }
163
190
  _updateModel(width, height) {
191
+ const isLarge = this._tensors.has('enc_conv1b.weight');
164
192
  const maxTileSize = this._maxTileSize;
165
193
  let tileWidth = maxTileSize;
166
194
  let tileHeight = maxTileSize;
167
- let tileOverlapX = defaultTileOverlap;
168
- let tileOverlapY = defaultTileOverlap;
195
+ let tileOverlapX = isLarge ? defaultTileOverlapLarge : defaultTileOverlap;
196
+ let tileOverlapY = isLarge ? defaultTileOverlapLarge : defaultTileOverlap;
169
197
  if (width < maxTileSize + defaultTileOverlap * 2) {
170
198
  tileWidth = roundUp(width, tileAlignment);
171
199
  tileOverlapX = 0;
@@ -186,7 +214,7 @@ class UNet {
186
214
  if (this._tfModel) {
187
215
  this._tfModel.dispose();
188
216
  }
189
- this.buildModel();
217
+ this._buildModel(isLarge);
190
218
  }
191
219
  }
192
220
  _getTileSizeWithOverlap() {
@@ -381,7 +409,7 @@ class UNet {
381
409
  return outBuffer;
382
410
  }
383
411
  }
384
- progressiveExecute({ color, albedo, normal, done, progress }) {
412
+ tileExecute({ color, albedo, normal, done, progress }) {
385
413
  if (this._aux && (!albedo || !normal)) {
386
414
  throw new Error('Normal map and albedo map are both required');
387
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,6 +1,6 @@
1
1
  {
2
2
  "name": "oidn-web",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "Run Open Image Denoiser on the Web",
5
5
  "main": "lib/main.js",
6
6
  "scripts": {
package/src/UNet.ts CHANGED
@@ -88,12 +88,15 @@ function isGPUImageData(
88
88
  }
89
89
 
90
90
  const receptiveField = 174; // receptive field in pixels
91
+ const receptiveFieldLarge = 202;
91
92
  // TODO metal is 32?
92
93
  const minTileAlignment = 1;
93
94
 
94
95
  const tileAlignment = 16; // required spatial alignment in pixels (padding may be necessary)
95
96
 
96
97
  const defaultTileOverlap = roundUp(receptiveField / 2, tileAlignment);
98
+ const defaultTileOverlapLarge = roundUp(receptiveFieldLarge / 2, tileAlignment);
99
+
97
100
  class UNet {
98
101
  private _tfModel: LayersModel | undefined;
99
102
  private _device: GPUDevice | undefined;
@@ -130,6 +133,29 @@ class UNet {
130
133
  this._device = this._backend.device;
131
134
  }
132
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
+
133
159
  private _createConv(
134
160
  name: string,
135
161
  source: SymbolicTensor,
@@ -202,68 +228,84 @@ class UNet {
202
228
  }).apply(source) as SymbolicTensor;
203
229
  }
204
230
 
205
- getDevice() {
206
- return this._device;
231
+ private _addNet(input: SymbolicTensor) {
232
+ let x = this._createConv('enc_conv0', input, 'relu');
233
+ const pool1 = (x = this._createPooling(
234
+ this._createConv('enc_conv1', x, 'relu')
235
+ ));
236
+ const pool2 = (x = this._createPooling(
237
+ this._createConv('enc_conv2', x, 'relu')
238
+ ));
239
+ const pool3 = (x = this._createPooling(
240
+ this._createConv('enc_conv3', x, 'relu')
241
+ ));
242
+ const pool4 = (x = this._createPooling(
243
+ this._createConv('enc_conv4', x, 'relu')
244
+ ));
245
+ x = this._createConv('enc_conv5a', pool4, 'relu');
246
+ x = this._addUpsamplingLayer(this._createConv('enc_conv5b', x, 'relu'));
247
+
248
+ x = this._createConcatConv('dec_conv4a', x, pool3);
249
+ x = this._addUpsamplingLayer(this._createConv('dec_conv4b', x, 'relu'));
250
+
251
+ x = this._createConcatConv('dec_conv3a', x, pool2);
252
+ x = this._addUpsamplingLayer(this._createConv('dec_conv3b', x, 'relu'));
253
+
254
+ x = this._createConcatConv('dec_conv2a', x, pool1);
255
+ x = this._addUpsamplingLayer(this._createConv('dec_conv2b', x, 'relu'));
256
+
257
+ x = this._createConcatConv('dec_conv1a', x, input);
258
+ x = this._createConv('dec_conv1b', x, 'relu');
259
+ x = this._createConv('dec_conv0', x, 'relu');
260
+
261
+ return x;
207
262
  }
208
263
 
209
- buildModel() {
210
- const aux = this._aux;
211
- const channels = 3 + (aux ? 6 : 0);
212
- const tileSize = this._getTileSizeWithOverlap();
213
-
214
- // TODO input process transferFunc
215
- // TODO input shape
216
- const input = TFInput({
217
- shape: [tileSize.height, tileSize.width, channels],
218
- dtype: 'float32'
219
- });
220
-
221
- const encConv0 = this._createConv('enc_conv0', input, 'relu');
222
- const pool1 = this._createPooling(
223
- this._createConv('enc_conv1', encConv0, 'relu')
224
- );
225
- const pool2 = this._createPooling(
226
- this._createConv('enc_conv2', pool1, 'relu')
227
- );
228
- const pool3 = this._createPooling(
229
- this._createConv('enc_conv3', pool2, 'relu')
230
- );
231
- const pool4 = this._createPooling(
232
- this._createConv('enc_conv4', pool3, 'relu')
233
- );
234
- const encConv5a = this._createConv('enc_conv5a', pool4, 'relu');
235
- const upsample4 = this._addUpsamplingLayer(
236
- this._createConv('enc_conv5b', encConv5a, 'relu')
237
- );
238
- const decConv4a = this._createConcatConv('dec_conv4a', upsample4, pool3);
239
- const upsample3 = this._addUpsamplingLayer(
240
- this._createConv('dec_conv4b', decConv4a, 'relu')
241
- );
242
- const decConv3a = this._createConcatConv('dec_conv3a', upsample3, pool2);
243
- const upsample2 = this._addUpsamplingLayer(
244
- this._createConv('dec_conv3b', decConv3a, 'relu')
245
- );
246
- const decConv2a = this._createConcatConv('dec_conv2a', upsample2, pool1);
247
- const upsample1 = this._addUpsamplingLayer(
248
- this._createConv('dec_conv2b', decConv2a, 'relu')
249
- );
250
- const decConv1a = this._createConcatConv('dec_conv1a', upsample1, input);
251
- const decConv1b = this._createConv('dec_conv1b', decConv1a, 'relu');
252
- const decConv0 = this._createConv('dec_conv0', decConv1b, 'relu');
253
-
254
- this._tfModel = new LayersModel({
255
- inputs: [input],
256
- // TODO output process transferFunc
257
- outputs: decConv0
258
- });
264
+ private _addNetLarge(input: SymbolicTensor) {
265
+ let x = this._createConv('enc_conv1a', input, 'relu');
266
+ const pool1 = (x = this._createPooling(
267
+ this._createConv('enc_conv1b', x, 'relu')
268
+ ));
269
+ x = this._createConv('enc_conv2a', x, 'relu');
270
+ const pool2 = (x = this._createPooling(
271
+ this._createConv('enc_conv2b', x, 'relu')
272
+ ));
273
+ x = this._createConv('enc_conv3a', x, 'relu');
274
+ const pool3 = (x = this._createPooling(
275
+ this._createConv('enc_conv3b', x, 'relu')
276
+ ));
277
+ x = this._createConv('enc_conv4a', x, 'relu');
278
+ const pool4 = (x = this._createPooling(
279
+ this._createConv('enc_conv4b', x, 'relu')
280
+ ));
281
+
282
+ x = this._createConv('enc_conv5a', pool4, 'relu');
283
+ x = this._addUpsamplingLayer(this._createConv('enc_conv5b', x, 'relu'));
284
+
285
+ x = this._createConcatConv('dec_conv4a', x, pool3);
286
+ x = this._addUpsamplingLayer(this._createConv('dec_conv4b', x, 'relu'));
287
+
288
+ x = this._createConcatConv('dec_conv3a', x, pool2);
289
+ x = this._addUpsamplingLayer(this._createConv('dec_conv3b', x, 'relu'));
290
+
291
+ x = this._createConcatConv('dec_conv2a', x, pool1);
292
+ x = this._addUpsamplingLayer(this._createConv('dec_conv2b', x, 'relu'));
293
+
294
+ x = this._createConcatConv('dec_conv1a', x, input);
295
+ x = this._createConv('dec_conv1b', x, 'relu');
296
+ x = this._createConv('dec_conv1c', x, 'relu');
297
+
298
+ return x;
259
299
  }
260
300
 
261
301
  private _updateModel(width: number, height: number) {
302
+ const isLarge = this._tensors.has('enc_conv1b.weight');
262
303
  const maxTileSize = this._maxTileSize;
304
+
263
305
  let tileWidth = maxTileSize;
264
306
  let tileHeight = maxTileSize;
265
- let tileOverlapX = defaultTileOverlap;
266
- let tileOverlapY = defaultTileOverlap;
307
+ let tileOverlapX = isLarge ? defaultTileOverlapLarge : defaultTileOverlap;
308
+ let tileOverlapY = isLarge ? defaultTileOverlapLarge : defaultTileOverlap;
267
309
 
268
310
  if (width < maxTileSize + defaultTileOverlap * 2) {
269
311
  tileWidth = roundUp(width, tileAlignment);
@@ -290,7 +332,7 @@ class UNet {
290
332
  this._tfModel.dispose();
291
333
  }
292
334
 
293
- this.buildModel();
335
+ this._buildModel(isLarge);
294
336
  }
295
337
  }
296
338
 
@@ -572,7 +614,7 @@ class UNet {
572
614
  }
573
615
  }
574
616
 
575
- progressiveExecute<T extends ImageData | HDRImageData | GPUImageData>({
617
+ tileExecute<T extends ImageData | HDRImageData | GPUImageData>({
576
618
  color,
577
619
  albedo,
578
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';
@@ -1 +0,0 @@
1
- *.tza filter=lfs diff=lfs merge=lfs -text