oidn-web 0.1.0
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/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/oidn.mjs +22909 -0
- package/dist/oidn.umd.js +5905 -0
- package/lib/UNet.d.ts +54 -0
- package/lib/UNet.js +467 -0
- package/lib/UNet.js.map +1 -0
- package/lib/WGPUComputePass.d.ts +53 -0
- package/lib/WGPUComputePass.js +220 -0
- package/lib/WGPUComputePass.js.map +1 -0
- package/lib/WGPUFullQuadPass.d.ts +51 -0
- package/lib/WGPUFullQuadPass.js +261 -0
- package/lib/WGPUFullQuadPass.js.map +1 -0
- package/lib/backend.d.ts +5 -0
- package/lib/backend.js +41 -0
- package/lib/backend.js.map +1 -0
- package/lib/hdr.d.ts +31 -0
- package/lib/hdr.js +340 -0
- package/lib/hdr.js.map +1 -0
- package/lib/helper.d.ts +1 -0
- package/lib/helper.js +27 -0
- package/lib/helper.js.map +1 -0
- package/lib/kernels.d.ts +1 -0
- package/lib/kernels.js +26 -0
- package/lib/kernels.js.map +1 -0
- package/lib/main.d.ts +20 -0
- package/lib/main.js +20 -0
- package/lib/main.js.map +1 -0
- package/lib/process.d.ts +39 -0
- package/lib/process.js +309 -0
- package/lib/process.js.map +1 -0
- package/lib/tza.d.ts +15 -0
- package/lib/tza.js +114 -0
- package/lib/tza.js.map +1 -0
- package/package.json +26 -0
- package/src/UNet.ts +708 -0
- package/src/WGPUComputePass.ts +318 -0
- package/src/WGPUFullQuadPass.ts +348 -0
- package/src/backend.ts +53 -0
- package/src/hdr.ts +398 -0
- package/src/helper.ts +35 -0
- package/src/kernels.ts +31 -0
- package/src/main.ts +42 -0
- package/src/process.ts +362 -0
- package/src/tza.ts +136 -0
- package/weights/.gitattributes +1 -0
- package/weights/LICENSE.txt +202 -0
- package/weights/README.md +7 -0
- package/weights/rt_hdr.tza +0 -0
- package/weights/rt_hdr_alb_nrm.tza +0 -0
- package/weights/rt_ldr.tza +0 -0
- package/weights/rt_ldr_alb_nrm.tza +0 -0
package/lib/process.js
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { WGPUComputePass } from './WGPUComputePass';
|
|
2
|
+
const a = 1.41283765e3;
|
|
3
|
+
const b = 1.64593172;
|
|
4
|
+
const c = 4.31384981e-1;
|
|
5
|
+
const d = -2.94139609e-3;
|
|
6
|
+
const e = 1.92653254e-1;
|
|
7
|
+
const f = 6.26026094e-3;
|
|
8
|
+
const g = 9.98620152e-1;
|
|
9
|
+
const y0 = 1.5794576e-6;
|
|
10
|
+
const y1 = 3.22087631e-2;
|
|
11
|
+
const x0 = 2.23151711e-3;
|
|
12
|
+
const x1 = 3.70974749e-1;
|
|
13
|
+
function PUForward(y) {
|
|
14
|
+
if (y <= y0) {
|
|
15
|
+
y = a * y;
|
|
16
|
+
}
|
|
17
|
+
else if (y <= y1) {
|
|
18
|
+
y = b * Math.pow(y, c) + d;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
y = e * Math.log(y + f) + g;
|
|
22
|
+
}
|
|
23
|
+
return y;
|
|
24
|
+
}
|
|
25
|
+
function PUInverse(x) {
|
|
26
|
+
if (x <= x0) {
|
|
27
|
+
x = x / a;
|
|
28
|
+
}
|
|
29
|
+
else if (x <= x1) {
|
|
30
|
+
x = Math.pow((x - d) / b, 1 / c);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
x = Math.exp((x - g) / e) - f;
|
|
34
|
+
}
|
|
35
|
+
return x;
|
|
36
|
+
}
|
|
37
|
+
const yMax = 65504;
|
|
38
|
+
const xMax = PUForward(yMax);
|
|
39
|
+
const normScale = 1 / xMax;
|
|
40
|
+
const rcpNormScale = xMax;
|
|
41
|
+
export class Tile {
|
|
42
|
+
x;
|
|
43
|
+
y;
|
|
44
|
+
width;
|
|
45
|
+
height;
|
|
46
|
+
constructor(x, y, width, height) {
|
|
47
|
+
this.x = x;
|
|
48
|
+
this.y = y;
|
|
49
|
+
this.width = width;
|
|
50
|
+
this.height = height;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// TODO put in gpu
|
|
54
|
+
export function avgLogLum({ data, channels }) {
|
|
55
|
+
let totalLuminance = 0;
|
|
56
|
+
for (let i = 0; i < data.length; i += channels) {
|
|
57
|
+
const r = data[i];
|
|
58
|
+
const g = data[i + 1];
|
|
59
|
+
const b = data[i + 2];
|
|
60
|
+
const lum = 0.212671 * r + 0.71516 * g + 0.072169 * b;
|
|
61
|
+
// TODO performance
|
|
62
|
+
// https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/devices/cpu/cpu_autoexposure.cpp#L43
|
|
63
|
+
totalLuminance += Math.log2(lum + 0.0001);
|
|
64
|
+
}
|
|
65
|
+
const numPixels = data.length / channels;
|
|
66
|
+
const averageLuminance = totalLuminance / numPixels;
|
|
67
|
+
const key = 0.18;
|
|
68
|
+
// https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/training/color.py#L173
|
|
69
|
+
return key / Math.pow(2, averageLuminance);
|
|
70
|
+
}
|
|
71
|
+
export function hdrTransferFuncCPU({ data, channels, inputScale }) {
|
|
72
|
+
const newData = new Float32Array(data.length);
|
|
73
|
+
newData.set(data);
|
|
74
|
+
// https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/core/color.h#L71
|
|
75
|
+
for (let i = 0; i < newData.length; i += channels) {
|
|
76
|
+
// First three are color
|
|
77
|
+
for (let c = 0; c < 3; c++) {
|
|
78
|
+
let y = newData[i + c] * inputScale;
|
|
79
|
+
// https://github.com/RenderKit/oidn/blob/713ec7838ba650f99e0a896549c0dca5eeb3652d/devices/cpu/color.ispc#L135
|
|
80
|
+
newData[i + c] = PUForward(y) * normScale;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return newData;
|
|
84
|
+
}
|
|
85
|
+
export function hdrTransferFuncInverseCPU({ data, channels, inputScale }) {
|
|
86
|
+
const newData = new Float32Array(data.length);
|
|
87
|
+
newData.set(data);
|
|
88
|
+
const outputScale = 1 / inputScale;
|
|
89
|
+
for (let i = 0; i < newData.length; i += channels) {
|
|
90
|
+
for (let c = 0; c < 3; c++) {
|
|
91
|
+
let x = newData[i + c] * rcpNormScale;
|
|
92
|
+
newData[i + c] = PUInverse(x) * outputScale;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return newData;
|
|
96
|
+
}
|
|
97
|
+
const constsCode = `
|
|
98
|
+
const a = ${a};
|
|
99
|
+
const b = ${b};
|
|
100
|
+
const c = ${c};
|
|
101
|
+
const d = ${d};
|
|
102
|
+
const e = ${e};
|
|
103
|
+
const f = ${f};
|
|
104
|
+
const g = ${g};
|
|
105
|
+
const y0 =${y0};
|
|
106
|
+
const y1 =${y1};
|
|
107
|
+
const x0 =${x0};
|
|
108
|
+
const x1 =${x1};
|
|
109
|
+
|
|
110
|
+
const normScale = ${normScale};
|
|
111
|
+
const rcpNormScale = ${rcpNormScale};
|
|
112
|
+
`;
|
|
113
|
+
export class GPUDataProcess {
|
|
114
|
+
_device;
|
|
115
|
+
_inputPass;
|
|
116
|
+
_outputPass;
|
|
117
|
+
constructor(_device) {
|
|
118
|
+
this._device = _device;
|
|
119
|
+
this._inputPass = new WGPUComputePass('inputPass', this._device, {
|
|
120
|
+
inputs: ['color', 'albedo', 'normal'],
|
|
121
|
+
outputs: ['color', 'albedo', 'normal'],
|
|
122
|
+
uniforms: [
|
|
123
|
+
{
|
|
124
|
+
label: 'inputScale',
|
|
125
|
+
type: 'f32',
|
|
126
|
+
data: new Float32Array([1])
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
label: 'inputSize',
|
|
130
|
+
type: 'vec2<f32>',
|
|
131
|
+
data: new Float32Array(2)
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
label: 'outputSize',
|
|
135
|
+
type: 'vec2<f32>',
|
|
136
|
+
data: new Float32Array(2)
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
label: 'inputOffset',
|
|
140
|
+
type: 'vec2<f32>',
|
|
141
|
+
data: new Float32Array(2)
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
csDefine: /* wgsl */ `
|
|
145
|
+
${constsCode}
|
|
146
|
+
fn PUForward(y: f32) -> f32 {
|
|
147
|
+
if (y <= y0) {
|
|
148
|
+
return a * y;
|
|
149
|
+
} else if (y <= y1) {
|
|
150
|
+
return b * pow(y, c) + d;
|
|
151
|
+
} else {
|
|
152
|
+
return e * log(y + f) + g;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
`,
|
|
156
|
+
csMain: /* wgsl */ `
|
|
157
|
+
let x = f32(globalId.x);
|
|
158
|
+
let y = f32(globalId.y);
|
|
159
|
+
let inIdx = i32((y + inputOffset.y) * inputSize.x + (x + inputOffset.x));
|
|
160
|
+
let col = in_color[inIdx] * inputScale;
|
|
161
|
+
let alb = in_albedo[inIdx];
|
|
162
|
+
let nor = in_normal[inIdx];
|
|
163
|
+
|
|
164
|
+
let outIdx = i32(y * outputSize.x + x);
|
|
165
|
+
out_color[outIdx] = vec3f(PUForward(col.r), PUForward(col.g), PUForward(col.b)) * normScale;
|
|
166
|
+
out_normal[outIdx] = nor.rgb;
|
|
167
|
+
out_albedo[outIdx] = alb.rgb;
|
|
168
|
+
`
|
|
169
|
+
});
|
|
170
|
+
this._outputPass = new WGPUComputePass('outputPass', this._device, {
|
|
171
|
+
inputs: ['color', 'raw'],
|
|
172
|
+
outputs: ['color'],
|
|
173
|
+
uniforms: [
|
|
174
|
+
{
|
|
175
|
+
// TODO inputScale from avg log lum
|
|
176
|
+
label: 'inputScale',
|
|
177
|
+
type: 'f32',
|
|
178
|
+
data: new Float32Array([1])
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
label: 'inputSize',
|
|
182
|
+
type: 'vec2<f32>',
|
|
183
|
+
data: new Float32Array(2)
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
label: 'outputSize',
|
|
187
|
+
type: 'vec2<f32>',
|
|
188
|
+
data: new Float32Array(2)
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
label: 'imageSize',
|
|
192
|
+
type: 'vec2<f32>',
|
|
193
|
+
data: new Float32Array(2)
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
label: 'inputOffset',
|
|
197
|
+
type: 'vec2<f32>',
|
|
198
|
+
data: new Float32Array(2)
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
label: 'outputOffset',
|
|
202
|
+
type: 'vec2<f32>',
|
|
203
|
+
data: new Float32Array(2)
|
|
204
|
+
}
|
|
205
|
+
],
|
|
206
|
+
csDefine: /* wgsl */ `
|
|
207
|
+
${constsCode}
|
|
208
|
+
fn PUInverse(y: f32) -> f32 {
|
|
209
|
+
if (y <= x0) {
|
|
210
|
+
return y / a;
|
|
211
|
+
} else if (y <= x1) {
|
|
212
|
+
return pow((y - d) / b, 1 / c);
|
|
213
|
+
} else {
|
|
214
|
+
return exp((y - g) / e) - f;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
`,
|
|
218
|
+
csMain: /* wgsl */ `
|
|
219
|
+
let x = f32(globalId.x);
|
|
220
|
+
let y = f32(globalId.y);
|
|
221
|
+
if (x >= outputSize.x || y >= outputSize.y) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
let inIdx = i32((y + inputOffset.y) * inputSize.x + x + inputOffset.x);
|
|
225
|
+
let outIdx = i32((y + outputOffset.y) * imageSize.x + x + outputOffset.x);
|
|
226
|
+
let col = in_color[inIdx] * rcpNormScale;
|
|
227
|
+
let raw = in_raw[outIdx];
|
|
228
|
+
out_color[outIdx] = vec4f(
|
|
229
|
+
vec3f(PUInverse(col.r), PUInverse(col.g), PUInverse(col.b)) / inputScale,
|
|
230
|
+
// Pick the alpha
|
|
231
|
+
raw.a
|
|
232
|
+
);
|
|
233
|
+
`
|
|
234
|
+
});
|
|
235
|
+
// TODO input scale
|
|
236
|
+
this._inputPass.setOutputParams({
|
|
237
|
+
color: { channels: 3 },
|
|
238
|
+
albedo: { channels: 3 },
|
|
239
|
+
normal: { channels: 3 }
|
|
240
|
+
});
|
|
241
|
+
// TODO input scale
|
|
242
|
+
this._outputPass.setOutputParams({
|
|
243
|
+
color: { channels: 4 }
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
setImageSize(w, h) {
|
|
247
|
+
this._inputPass.setUniform('inputSize', new Float32Array([w, h]));
|
|
248
|
+
this._outputPass.setUniform('imageSize', new Float32Array([w, h]));
|
|
249
|
+
this._outputPass.setSize(w, h);
|
|
250
|
+
}
|
|
251
|
+
setInputTile(tile) {
|
|
252
|
+
const inputPass = this._inputPass;
|
|
253
|
+
const size = new Float32Array([tile.width, tile.height]);
|
|
254
|
+
inputPass.setUniform('inputOffset', new Float32Array([tile.x, tile.y]));
|
|
255
|
+
inputPass.setUniform('outputSize', size);
|
|
256
|
+
inputPass.setSize(size[0], size[1]);
|
|
257
|
+
this._outputPass.setUniform('inputSize', size);
|
|
258
|
+
}
|
|
259
|
+
setOutputTile(dstTile, srcTile) {
|
|
260
|
+
const outputPass = this._outputPass;
|
|
261
|
+
const size = new Float32Array([dstTile.width, dstTile.height]);
|
|
262
|
+
const dx = dstTile.x - srcTile.x;
|
|
263
|
+
const dy = dstTile.y - srcTile.y;
|
|
264
|
+
outputPass.setUniform('outputSize', size);
|
|
265
|
+
outputPass.setUniform('inputOffset', new Float32Array([dx, dy]));
|
|
266
|
+
outputPass.setUniform('outputOffset', new Float32Array([dstTile.x, dstTile.y]));
|
|
267
|
+
outputPass.setExecuteSize(size[0], size[1]);
|
|
268
|
+
}
|
|
269
|
+
forward(colorBuffer,
|
|
270
|
+
// TODO optional albedo and normal.
|
|
271
|
+
albedoBuffer, normalBuffer) {
|
|
272
|
+
const inputGPUPass = this._inputPass;
|
|
273
|
+
const commandEncoder = this._device.createCommandEncoder();
|
|
274
|
+
inputGPUPass.createPass(commandEncoder, {
|
|
275
|
+
color: { buffer: colorBuffer, channels: 4 },
|
|
276
|
+
albedo: { buffer: albedoBuffer, channels: 4 },
|
|
277
|
+
normal: { buffer: normalBuffer, channels: 4 }
|
|
278
|
+
});
|
|
279
|
+
this._device.queue.submit([commandEncoder.finish()]);
|
|
280
|
+
return {
|
|
281
|
+
color: inputGPUPass.getOutputBuffer('color'),
|
|
282
|
+
albedo: inputGPUPass.getOutputBuffer('albedo'),
|
|
283
|
+
normal: inputGPUPass.getOutputBuffer('normal')
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
inverse(buffer, raw) {
|
|
287
|
+
const device = this._device;
|
|
288
|
+
const commandEncoder = device.createCommandEncoder();
|
|
289
|
+
const outputGPUPass = this._outputPass;
|
|
290
|
+
outputGPUPass.createPass(commandEncoder, {
|
|
291
|
+
color: { buffer: buffer, channels: 4 },
|
|
292
|
+
raw: { buffer: raw, channels: 4 }
|
|
293
|
+
});
|
|
294
|
+
this._device.queue.submit([commandEncoder.finish()]);
|
|
295
|
+
return outputGPUPass.getOutputBuffer('color');
|
|
296
|
+
}
|
|
297
|
+
copyInputDataToOutput(inputColorBuffer) {
|
|
298
|
+
const encoder = this._device.createCommandEncoder();
|
|
299
|
+
const outputGPUPass = this._outputPass;
|
|
300
|
+
const colorBuffer = outputGPUPass.getOutputBuffer('color');
|
|
301
|
+
encoder.copyBufferToBuffer(inputColorBuffer, 0, colorBuffer, 0, colorBuffer.size);
|
|
302
|
+
this._device.queue.submit([encoder.finish()]);
|
|
303
|
+
}
|
|
304
|
+
dispose() {
|
|
305
|
+
this._outputPass.dispose();
|
|
306
|
+
this._inputPass.dispose();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
package/lib/tza.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type TensorLayout = 'x' | 'oihw';
|
|
2
|
+
export type DataType = 'Float32' | 'Float16';
|
|
3
|
+
export declare class TensorDesc {
|
|
4
|
+
dims: number[];
|
|
5
|
+
paddedDims: number[];
|
|
6
|
+
layout: TensorLayout;
|
|
7
|
+
dataType: DataType;
|
|
8
|
+
getByteSize(): number;
|
|
9
|
+
}
|
|
10
|
+
export declare class HostTensor {
|
|
11
|
+
desc: TensorDesc;
|
|
12
|
+
data: Uint8Array;
|
|
13
|
+
constructor(desc: TensorDesc, data: Uint8Array);
|
|
14
|
+
}
|
|
15
|
+
export declare function parseTZA(buffer: ArrayBuffer): Map<string, HostTensor>;
|
package/lib/tza.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Copyright 2018 Intel Corporation
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
export class TensorDesc {
|
|
4
|
+
dims = [];
|
|
5
|
+
paddedDims = [];
|
|
6
|
+
layout = 'x';
|
|
7
|
+
dataType = 'Float32';
|
|
8
|
+
getByteSize() {
|
|
9
|
+
let size = 1;
|
|
10
|
+
for (const dim of this.paddedDims) {
|
|
11
|
+
size *= dim;
|
|
12
|
+
}
|
|
13
|
+
if (this.dataType === 'Float32') {
|
|
14
|
+
size *= 4;
|
|
15
|
+
}
|
|
16
|
+
else if (this.dataType === 'Float16') {
|
|
17
|
+
size *= 2;
|
|
18
|
+
}
|
|
19
|
+
return size;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class HostTensor {
|
|
23
|
+
desc;
|
|
24
|
+
data;
|
|
25
|
+
constructor(desc, data) {
|
|
26
|
+
this.desc = desc;
|
|
27
|
+
this.data = data;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class DataViewReader {
|
|
31
|
+
_view;
|
|
32
|
+
offset = 0;
|
|
33
|
+
constructor(_view) {
|
|
34
|
+
this._view = _view;
|
|
35
|
+
}
|
|
36
|
+
read(size) {
|
|
37
|
+
const view = this._view;
|
|
38
|
+
const offset = this.offset;
|
|
39
|
+
this.offset += size;
|
|
40
|
+
switch (size) {
|
|
41
|
+
case 1:
|
|
42
|
+
return view.getUint8(offset);
|
|
43
|
+
case 2:
|
|
44
|
+
return view.getUint16(offset, true);
|
|
45
|
+
case 4:
|
|
46
|
+
return view.getUint32(offset, true);
|
|
47
|
+
case 8:
|
|
48
|
+
// TODO
|
|
49
|
+
return Number(view.getBigUint64(offset, true));
|
|
50
|
+
default:
|
|
51
|
+
throw new Error('unsupported read size');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function parseTZA(buffer) {
|
|
56
|
+
const input = new Uint8Array(buffer);
|
|
57
|
+
const viewReader = new DataViewReader(new DataView(buffer));
|
|
58
|
+
// Parse the magic value
|
|
59
|
+
const magic = viewReader.read(2);
|
|
60
|
+
if (magic !== 0x41d7) {
|
|
61
|
+
throw new Error('invalid or corrupted weights blob');
|
|
62
|
+
}
|
|
63
|
+
// Parse the version
|
|
64
|
+
const majorVersion = viewReader.read(1);
|
|
65
|
+
const minorVersion = viewReader.read(1);
|
|
66
|
+
if (majorVersion !== 2) {
|
|
67
|
+
throw new Error('unsupported weights blob version');
|
|
68
|
+
}
|
|
69
|
+
// Parse the table offset and jump to the table
|
|
70
|
+
const tableOffset = viewReader.read(8);
|
|
71
|
+
viewReader.offset = tableOffset;
|
|
72
|
+
// Parse the number of tensors
|
|
73
|
+
const numTensors = viewReader.read(4);
|
|
74
|
+
// Parse the tensors
|
|
75
|
+
const tensorMap = new Map();
|
|
76
|
+
for (let i = 0; i < numTensors; ++i) {
|
|
77
|
+
const tensorDesc = new TensorDesc();
|
|
78
|
+
// Parse the name
|
|
79
|
+
const nameLen = viewReader.read(2);
|
|
80
|
+
const name = new TextDecoder().decode(input.subarray(viewReader.offset, viewReader.offset + nameLen));
|
|
81
|
+
viewReader.offset += nameLen;
|
|
82
|
+
// Parse the number of dimensions
|
|
83
|
+
const ndims = viewReader.read(1);
|
|
84
|
+
// Parse the shape of the tensor
|
|
85
|
+
for (let j = 0; j < ndims; ++j) {
|
|
86
|
+
tensorDesc.dims.push(viewReader.read(4));
|
|
87
|
+
}
|
|
88
|
+
tensorDesc.paddedDims = [...tensorDesc.dims];
|
|
89
|
+
// Parse the layout of the tensor
|
|
90
|
+
const layoutStr = new TextDecoder().decode(input.subarray(viewReader.offset, viewReader.offset + ndims));
|
|
91
|
+
if (layoutStr === 'oihw') {
|
|
92
|
+
tensorDesc.layout = 'oihw';
|
|
93
|
+
}
|
|
94
|
+
viewReader.offset += ndims;
|
|
95
|
+
// Parse the data type of the tensor
|
|
96
|
+
const dataType = String.fromCharCode(viewReader.read(1));
|
|
97
|
+
if (dataType === 'f') {
|
|
98
|
+
tensorDesc.dataType = 'Float32';
|
|
99
|
+
}
|
|
100
|
+
else if (dataType === 'h') {
|
|
101
|
+
tensorDesc.dataType = 'Float16';
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
throw new Error('invalid tensor data type');
|
|
105
|
+
}
|
|
106
|
+
// Parse the offset to the tensor data
|
|
107
|
+
const tensorOffset = viewReader.read(8);
|
|
108
|
+
const tensorData = input.slice(tensorOffset, tensorOffset + tensorDesc.getByteSize());
|
|
109
|
+
// Add the tensor to the map
|
|
110
|
+
tensorMap.set(name, new HostTensor(tensorDesc, tensorData));
|
|
111
|
+
}
|
|
112
|
+
return tensorMap;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=tza.js.map
|
package/lib/tza.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tza.js","sourceRoot":"","sources":["../src/tza.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oidn-web",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Run Open Image Denoiser on the Web",
|
|
5
|
+
"main": "lib/main.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"dev": "vite dev",
|
|
9
|
+
"watch": "vite build -w",
|
|
10
|
+
"prepublishOnly": "npm run build && npm run build:lib",
|
|
11
|
+
"build:lib": "tsc",
|
|
12
|
+
"watch:lib": "tsc --watch"
|
|
13
|
+
},
|
|
14
|
+
"author": "pissang",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@petamoriken/float16": "^3.8.7",
|
|
18
|
+
"@tensorflow/tfjs": "^4.20.0",
|
|
19
|
+
"@tensorflow/tfjs-backend-webgpu": "^4.20.0"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.4.5",
|
|
23
|
+
"vite": "^5.2.13",
|
|
24
|
+
"vite-plugin-mkcert": "^1.17.5"
|
|
25
|
+
}
|
|
26
|
+
}
|